[gnome-initial-setup] Revert "Tajik translation updated"
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-initial-setup] Revert "Tajik translation updated"
- Date: Tue, 4 Feb 2014 17:16:18 +0000 (UTC)
commit 28d8f1ae136d6bf4fd7201707c6b1a33d529d25a
Author: Colin Walters <walters verbum org>
Date: Tue Feb 4 12:14:30 2014 -0500
Revert "Tajik translation updated"
This reverts commit a5ef600e38c67bf230ead4518bdb782ca143e5bd.
This commit clearly calls for some sort of sanity check on translation
commits...
gnome-initial-setup/gis-assistant.gresource.xml | 6 +
gnome-initial-setup/gis-assistant.ui | 93 +
.../gnome-initial-setup-copy-worker.c | 106 +
gnome-initial-setup/pages/Makefile.am | 12 +
gnome-initial-setup/pages/account/Makefile.am | 42 +
.../pages/account/account.gresource.xml | 8 +
.../pages/account/gis-account-page-enterprise.ui | 476 ++
.../pages/account/gis-account-page-local.ui | 160 +
.../pages/account/gis-account-page.ui | 48 +
.../pages/account/org.freedesktop.realmd.xml | 666 ++
gnome-initial-setup/pages/account/um-utils.c | 385 +
gnome-initial-setup/pages/account/um-utils.h | 43 +
gnome-initial-setup/pages/eulas/Makefile.am | 28 +
.../pages/eulas/eulas.gresource.xml | 6 +
gnome-initial-setup/pages/eulas/gis-eula-page.ui | 57 +
gnome-initial-setup/pages/eulas/utils.c | 180 +
gnome-initial-setup/pages/eulas/utils.h | 20 +
gnome-initial-setup/pages/goa/Makefile.am | 21 +
gnome-initial-setup/pages/goa/gis-goa-page.ui | 107 +
gnome-initial-setup/pages/goa/goa.gresource.xml | 7 +
gnome-initial-setup/pages/keyboard/Makefile.am | 30 +
.../pages/keyboard/cc-common-language.h | 36 +
gnome-initial-setup/pages/keyboard/cc-util.c | 105 +
gnome-initial-setup/pages/keyboard/cc-util.h | 28 +
.../pages/keyboard/gis-keyboard-page.ui | 60 +
.../pages/keyboard/input-chooser.ui | 37 +
.../pages/keyboard/keyboard.gresource.xml | 7 +
gnome-initial-setup/pages/language/Makefile.am | 31 +
.../pages/language/cc-common-language.h | 36 +
.../pages/language/gis-language-page.ui | 42 +
.../pages/language/gis-welcome-widget.ui | 15 +
.../pages/language/language-chooser.ui | 37 +
.../pages/language/language.gresource.xml | 10 +
gnome-initial-setup/pages/network/Makefile.am | 22 +
.../pages/network/gis-network-page.ui | 116 +
.../pages/network/network-dialogs.c | 518 ++
.../pages/network/network-dialogs.h | 48 +
.../pages/network/network.gresource.xml | 6 +
gnome-initial-setup/pages/password/Makefile.am | 42 +
.../pages/password/account-resources.c | 3381 ++++++++
.../pages/password/account-resources.h | 7 +
.../pages/password/gis-account-page-enterprise.ui | 476 ++
.../pages/password/gis-account-page-local.ui | 299 +
.../pages/password/gis-password-page.ui | 165 +
.../pages/password/org.freedesktop.realmd.xml | 666 ++
.../pages/password/password-resources.c | 3869 +++++++++
.../pages/password/password-resources.h | 7 +
.../pages/password/password.gresource.xml | 8 +
.../pages/password/um-realm-generated.c | 8713 ++++++++++++++++++++
.../pages/password/um-realm-generated.h | 1147 +++
gnome-initial-setup/pages/password/um-utils.c | 385 +
gnome-initial-setup/pages/password/um-utils.h | 43 +
gnome-initial-setup/pages/region/Makefile.am | 30 +
.../pages/region/cc-common-language.h | 36 +
.../pages/region/gis-region-page.ui | 62 +
gnome-initial-setup/pages/region/region-chooser.ui | 37 +
.../pages/region/region.gresource.xml | 9 +
gnome-initial-setup/pages/summary/Makefile.am | 26 +
gnome-initial-setup/pages/summary/cat.svg | 62 +
gnome-initial-setup/pages/summary/girl.svg | 195 +
.../pages/summary/gis-summary-page.css | 9 +
.../pages/summary/gis-summary-page.ui | 67 +
gnome-initial-setup/pages/summary/grass.svg | 152 +
.../pages/summary/large-balloon.svg | 109 +
.../pages/summary/small-balloons.svg | 154 +
.../pages/summary/summary.gresource.xml | 13 +
gnome-initial-setup/pages/timezone/Makefile.am | 46 +
gnome-initial-setup/pages/timezone/data/bg.png | Bin 0 -> 213448 bytes
gnome-initial-setup/pages/timezone/data/bg_dim.png | Bin 0 -> 95862 bytes
gnome-initial-setup/pages/timezone/data/pin.png | Bin 0 -> 666 bytes
.../pages/timezone/data/timezone_-1.png | Bin 0 -> 8012 bytes
.../pages/timezone/data/timezone_-10.png | Bin 0 -> 7783 bytes
.../pages/timezone/data/timezone_-10_dim.png | Bin 0 -> 5139 bytes
.../pages/timezone/data/timezone_-11.png | Bin 0 -> 8347 bytes
.../pages/timezone/data/timezone_-11_dim.png | Bin 0 -> 4815 bytes
.../pages/timezone/data/timezone_-1_dim.png | Bin 0 -> 4953 bytes
.../pages/timezone/data/timezone_-2.png | Bin 0 -> 4333 bytes
.../pages/timezone/data/timezone_-2_dim.png | Bin 0 -> 2670 bytes
.../pages/timezone/data/timezone_-3.5.png | Bin 0 -> 740 bytes
.../pages/timezone/data/timezone_-3.5_dim.png | Bin 0 -> 995 bytes
.../pages/timezone/data/timezone_-3.png | Bin 0 -> 13615 bytes
.../pages/timezone/data/timezone_-3_dim.png | Bin 0 -> 8773 bytes
.../pages/timezone/data/timezone_-4.5.png | Bin 0 -> 1900 bytes
.../pages/timezone/data/timezone_-4.5_dim.png | Bin 0 -> 1527 bytes
.../pages/timezone/data/timezone_-4.png | Bin 0 -> 15084 bytes
.../pages/timezone/data/timezone_-4_dim.png | Bin 0 -> 9836 bytes
.../pages/timezone/data/timezone_-5.5.png | Bin 0 -> 437 bytes
.../pages/timezone/data/timezone_-5.5_dim.png | Bin 0 -> 859 bytes
.../pages/timezone/data/timezone_-5.png | Bin 0 -> 19166 bytes
.../pages/timezone/data/timezone_-5_dim.png | Bin 0 -> 12224 bytes
.../pages/timezone/data/timezone_-6.png | Bin 0 -> 13764 bytes
.../pages/timezone/data/timezone_-6_dim.png | Bin 0 -> 8833 bytes
.../pages/timezone/data/timezone_-7.png | Bin 0 -> 11977 bytes
.../pages/timezone/data/timezone_-7_dim.png | Bin 0 -> 7868 bytes
.../pages/timezone/data/timezone_-8.png | Bin 0 -> 6801 bytes
.../pages/timezone/data/timezone_-8_dim.png | Bin 0 -> 4261 bytes
.../pages/timezone/data/timezone_-9.5.png | Bin 0 -> 437 bytes
.../pages/timezone/data/timezone_-9.5_dim.png | Bin 0 -> 859 bytes
.../pages/timezone/data/timezone_-9.png | Bin 0 -> 7908 bytes
.../pages/timezone/data/timezone_-9_dim.png | Bin 0 -> 4972 bytes
.../pages/timezone/data/timezone_0.png | Bin 0 -> 11074 bytes
.../pages/timezone/data/timezone_0_dim.png | Bin 0 -> 7074 bytes
.../pages/timezone/data/timezone_1.png | Bin 0 -> 15458 bytes
.../pages/timezone/data/timezone_10.5.png | Bin 0 -> 421 bytes
.../pages/timezone/data/timezone_10.5_dim.png | Bin 0 -> 844 bytes
.../pages/timezone/data/timezone_10.png | Bin 0 -> 12829 bytes
.../pages/timezone/data/timezone_10_dim.png | Bin 0 -> 8395 bytes
.../pages/timezone/data/timezone_11.5.png | Bin 0 -> 446 bytes
.../pages/timezone/data/timezone_11.5_dim.png | Bin 0 -> 868 bytes
.../pages/timezone/data/timezone_11.png | Bin 0 -> 12113 bytes
.../pages/timezone/data/timezone_11_dim.png | Bin 0 -> 6744 bytes
.../pages/timezone/data/timezone_12.75.png | Bin 0 -> 409 bytes
.../pages/timezone/data/timezone_12.75_dim.png | Bin 0 -> 846 bytes
.../pages/timezone/data/timezone_12.png | Bin 0 -> 7130 bytes
.../pages/timezone/data/timezone_12_dim.png | Bin 0 -> 3935 bytes
.../pages/timezone/data/timezone_13.png | Bin 0 -> 621 bytes
.../pages/timezone/data/timezone_13_dim.png | Bin 0 -> 876 bytes
.../pages/timezone/data/timezone_14.png | Bin 0 -> 7722 bytes
.../pages/timezone/data/timezone_14_dim.png | Bin 0 -> 4150 bytes
.../pages/timezone/data/timezone_1_dim.png | Bin 0 -> 10187 bytes
.../pages/timezone/data/timezone_2.png | Bin 0 -> 12854 bytes
.../pages/timezone/data/timezone_2_dim.png | Bin 0 -> 8709 bytes
.../pages/timezone/data/timezone_3.5.png | Bin 0 -> 2142 bytes
.../pages/timezone/data/timezone_3.5_dim.png | Bin 0 -> 1781 bytes
.../pages/timezone/data/timezone_3.png | Bin 0 -> 17475 bytes
.../pages/timezone/data/timezone_3_dim.png | Bin 0 -> 9877 bytes
.../pages/timezone/data/timezone_4.5.png | Bin 0 -> 1773 bytes
.../pages/timezone/data/timezone_4.5_dim.png | Bin 0 -> 1385 bytes
.../pages/timezone/data/timezone_4.png | Bin 0 -> 4954 bytes
.../pages/timezone/data/timezone_4_dim.png | Bin 0 -> 2754 bytes
.../pages/timezone/data/timezone_5.5.png | Bin 0 -> 6099 bytes
.../pages/timezone/data/timezone_5.5_dim.png | Bin 0 -> 3405 bytes
.../pages/timezone/data/timezone_5.75.png | Bin 0 -> 2885 bytes
.../pages/timezone/data/timezone_5.75_dim.png | Bin 0 -> 1596 bytes
.../pages/timezone/data/timezone_5.png | Bin 0 -> 14539 bytes
.../pages/timezone/data/timezone_5_dim.png | Bin 0 -> 8117 bytes
.../pages/timezone/data/timezone_6.5.png | Bin 0 -> 1609 bytes
.../pages/timezone/data/timezone_6.5_dim.png | Bin 0 -> 1675 bytes
.../pages/timezone/data/timezone_6.png | Bin 0 -> 8441 bytes
.../pages/timezone/data/timezone_6_dim.png | Bin 0 -> 4678 bytes
.../pages/timezone/data/timezone_7.png | Bin 0 -> 14412 bytes
.../pages/timezone/data/timezone_7_dim.png | Bin 0 -> 7972 bytes
.../pages/timezone/data/timezone_8.75.png | Bin 0 -> 13993 bytes
.../pages/timezone/data/timezone_8.75_dim.png | Bin 0 -> 7064 bytes
.../pages/timezone/data/timezone_8.png | Bin 0 -> 16050 bytes
.../pages/timezone/data/timezone_8_dim.png | Bin 0 -> 9378 bytes
.../pages/timezone/data/timezone_9.5.png | Bin 0 -> 1959 bytes
.../pages/timezone/data/timezone_9.5_dim.png | Bin 0 -> 1611 bytes
.../pages/timezone/data/timezone_9.png | Bin 0 -> 12608 bytes
.../pages/timezone/data/timezone_9_dim.png | Bin 0 -> 8383 bytes
.../pages/timezone/datetime.gresource.xml | 88 +
.../pages/timezone/gis-bubble-widget.css | 8 +
.../pages/timezone/gis-bubble-widget.ui | 39 +
.../pages/timezone/gis-timezone-page.ui | 76 +
.../pages/timezone/timedated1-interface.xml | 27 +
.../pages/timezone/timezone.gresource.xml | 8 +
156 files changed, 24116 insertions(+), 0 deletions(-)
---
diff --git a/gnome-initial-setup/gis-assistant.gresource.xml b/gnome-initial-setup/gis-assistant.gresource.xml
new file mode 100644
index 0000000..0640c24
--- /dev/null
+++ b/gnome-initial-setup/gis-assistant.gresource.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/initial-setup">
+ <file preprocess="xml-stripblanks">gis-assistant.ui</file>
+ </gresource>
+</gresources>
diff --git a/gnome-initial-setup/gis-assistant.ui b/gnome-initial-setup/gis-assistant.ui
new file mode 100644
index 0000000..c064f3e
--- /dev/null
+++ b/gnome-initial-setup/gis-assistant.ui
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface domain="gtk30">
+ <!-- interface-requires gtk+ 3.10 -->
+ <object class="GtkHeaderBar" id="titlebar">
+ <property name="visible">True</property>
+ <child type="title">
+ <object class="GtkLabel" id="title">
+ <property name="visible">True</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="cancel">
+ <property name="visible">True</property>
+ <property name="use-underline">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="back">
+ <property name="visible">True</property>
+ <property name="use-underline">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinner" id="spinner">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="skip">
+ <property name="use-underline">True</property>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="forward">
+ <property name="use-underline">True</property>
+ <property name="can-default">True</property>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="accept">
+ <property name="use-underline">True</property>
+ <property name="can-default">True</property>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ </object>
+
+ <object class="GtkSizeGroup" id="headerbuttons">
+ <property name="mode">both</property>
+ <property name="ignore-hidden">False</property>
+ <widgets>
+ <widget name="cancel"/>
+ <widget name="back"/>
+ <widget name="skip"/>
+ <widget name="forward"/>
+ <widget name="accept"/>
+ <widget name="title"/>
+ </widgets>
+ </object>
+
+ <template class="GisAssistant" parent="GtkBox">
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkBox" id="main_layout">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">20</property>
+ <child>
+ <object class="GtkStack" id="stack">
+ <property name="visible">True</property>
+ <property name="transition-type">slide-left-right</property>
+ <property name="vexpand">True</property>
+ <property name="hexpand">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/gnome-initial-setup-copy-worker.c
b/gnome-initial-setup/gnome-initial-setup-copy-worker.c
new file mode 100644
index 0000000..500d274
--- /dev/null
+++ b/gnome-initial-setup/gnome-initial-setup-copy-worker.c
@@ -0,0 +1,106 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/* Copies settings installed from gnome-initial-setup and
+ * sticks them in the user's profile */
+
+#include <pwd.h>
+#include <string.h>
+#include <gio/gio.h>
+#include <stdlib.h>
+
+static char *
+get_gnome_initial_setup_home_dir (void)
+{
+ struct passwd pw, *pwp;
+ char buf[4096];
+
+ getpwnam_r ("gnome-initial-setup", &pw, buf, sizeof (buf), &pwp);
+ if (pwp != NULL)
+ return g_strdup (pwp->pw_dir);
+ else
+ return NULL;
+}
+
+static gboolean
+file_is_ours (GFile *file)
+{
+ GFileInfo *info;
+ uid_t uid;
+
+ info = g_file_query_info (file,
+ G_FILE_ATTRIBUTE_UNIX_UID,
+ G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+ NULL,
+ NULL);
+ if (!info)
+ return FALSE;
+
+ uid = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_UID);
+ g_object_unref (info);
+
+ return uid == geteuid ();
+}
+
+static void
+move_file_from_homedir (GFile *src_base,
+ GFile *dest_base,
+ const gchar *path)
+{
+ GFile *dest = g_file_get_child (dest_base, path);
+ GFile *dest_parent = g_file_get_parent (dest);
+ GFile *src = g_file_get_child (src_base, path);
+
+ GError *error = NULL;
+
+ g_file_make_directory_with_parents (dest_parent, NULL, NULL);
+
+ if (!g_file_move (src, dest, G_FILE_COPY_NONE,
+ NULL, NULL, NULL, &error)) {
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) {
+ g_warning ("Unable to move %s to %s: %s",
+ g_file_get_path (src),
+ g_file_get_path (dest),
+ error->message);
+ }
+ }
+}
+
+int
+main (int argc,
+ char **argv)
+{
+ GFile *src;
+ GFile *dest;
+ GError *error = NULL;
+ char *initial_setup_homedir;
+ gchar *gis_done_file_path;
+
+ initial_setup_homedir = get_gnome_initial_setup_home_dir ();
+ if (initial_setup_homedir == NULL)
+ exit (EXIT_SUCCESS);
+
+ src = g_file_new_for_path (initial_setup_homedir);
+
+ if (!g_file_query_exists (src, NULL) ||
+ !file_is_ours (src))
+ exit (EXIT_SUCCESS);
+
+ dest = g_file_new_for_path (g_get_home_dir ());
+
+#define FILE(path) \
+ move_file_from_homedir (src, dest, path);
+
+ FILE (".config/run-welcome-tour");
+ FILE (".config/dconf/user");
+ FILE (".config/goa-1.0/accounts.conf");
+ FILE (".local/share/keyrings/login.keyring");
+
+ gis_done_file_path = g_build_filename (g_get_user_config_dir (),
+ "gnome-initial-setup-done",
+ NULL);
+
+ if (!g_file_set_contents (gis_done_file_path, "yes", -1, &error))
+ g_warning ("Unable to create %s: %s", gis_done_file_path, error->message);
+
+ return EXIT_SUCCESS;
+}
diff --git a/gnome-initial-setup/pages/Makefile.am b/gnome-initial-setup/pages/Makefile.am
new file mode 100644
index 0000000..4f2d5a0
--- /dev/null
+++ b/gnome-initial-setup/pages/Makefile.am
@@ -0,0 +1,12 @@
+
+SUBDIRS = \
+ language \
+ region \
+ keyboard \
+ eulas \
+ network \
+ timezone \
+ goa \
+ account \
+ password \
+ summary
diff --git a/gnome-initial-setup/pages/account/Makefile.am b/gnome-initial-setup/pages/account/Makefile.am
new file mode 100644
index 0000000..051d7ba
--- /dev/null
+++ b/gnome-initial-setup/pages/account/Makefile.am
@@ -0,0 +1,42 @@
+
+NULL =
+
+noinst_LTLIBRARIES = libgisaccount.la
+
+BUILT_SOURCES =
+
+um-realm-generated.c: um-realm-generated.h
+um-realm-generated.h: $(srcdir)/org.freedesktop.realmd.xml
+ $(AM_V_GEN) gdbus-codegen \
+ --interface-prefix org.freedesktop.realmd \
+ --generate-c-code um-realm-generated \
+ --c-namespace UmRealm $< \
+ --c-generate-object-manager \
+ --annotate "org.freedesktop.realmd.Realm" org.gtk.GDBus.C.Name Common
+BUILT_SOURCES += um-realm-generated.c um-realm-generated.h
+
+resource_files = $(shell glib-compile-resources --sourcedir=$(srcdir) --generate-dependencies
$(srcdir)/account.gresource.xml)
+account-resources.c: account.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
+account-resources.h: account.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
+BUILT_SOURCES += account-resources.c account-resources.h
+
+libgisaccount_la_SOURCES = \
+ $(BUILT_SOURCES) \
+ gis-account-page.c gis-account-page.h \
+ gis-account-pages.c gis-account-pages.h \
+ gis-account-page-local.c gis-account-page-local.h \
+ gis-account-page-enterprise.c gis-account-page-enterprise.h \
+ um-realm-manager.c um-realm-manager.h \
+ um-utils.c um-utils.h \
+ $(NULL)
+
+libgisaccount_la_CFLAGS = $(INITIAL_SETUP_CFLAGS) -I "$(srcdir)/../.."
+libgisaccount_la_LIBADD = $(INITIAL_SETUP_LIBS) -lcrypt
+libgisaccount_la_LDFLAGS = -export_dynamic -avoid-version -module -no-undefined
+
+EXTRA_DIST = \
+ org.freedesktop.realmd.xml \
+ account.gresource.xml \
+ $(resource_files)
diff --git a/gnome-initial-setup/pages/account/account.gresource.xml
b/gnome-initial-setup/pages/account/account.gresource.xml
new file mode 100644
index 0000000..2b3c470
--- /dev/null
+++ b/gnome-initial-setup/pages/account/account.gresource.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/initial-setup">
+ <file preprocess="xml-stripblanks" alias="gis-account-page.ui">gis-account-page.ui</file>
+ <file preprocess="xml-stripblanks" alias="gis-account-page-local.ui">gis-account-page-local.ui</file>
+ <file preprocess="xml-stripblanks"
alias="gis-account-page-enterprise.ui">gis-account-page-enterprise.ui</file>
+ </gresource>
+</gresources>
diff --git a/gnome-initial-setup/pages/account/gis-account-page-enterprise.ui
b/gnome-initial-setup/pages/account/gis-account-page-enterprise.ui
new file mode 100644
index 0000000..efdb77b
--- /dev/null
+++ b/gnome-initial-setup/pages/account/gis-account-page-enterprise.ui
@@ -0,0 +1,476 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <template class="GisAccountPageEnterprise" parent="GtkBin">
+ <child>
+ <object class="GtkBox" id="area">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="halign">center</property>
+ <property name="valign">fill</property>
+ <child>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixel_size">96</property>
+ <property name="icon_name">dialog-password-symbolic</property>
+ <property name="icon_size">1</property>
+ <property name="margin_top">54</property>
+ <property name="margin_bottom">26</property>
+ <style>
+ <class name="dim-label" />
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="label" translatable="yes">Enterprise Login</property>
+ <property name="margin_bottom">14</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.8"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="subtitle">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">start</property>
+ <property name="margin_bottom">26</property>
+ <property name="label" translatable="yes">Enterprise login allows an existing centrally managed
user account to be used on this device.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">45</property>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkGrid" id="form">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="row_spacing">12</property>
+ <property name="column_spacing">12</property>
+ <property name="margin_bottom">32</property>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Domain</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">domain</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Username</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">login</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label9">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Password</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">password</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="login">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="invisible_char">●</property>
+ <property name="invisible_char_set">True</property>
+ <property name="max-length">255</property>
+ <property name="width-chars">25</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="password">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="visibility">False</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ <property name="invisible_char_set">True</property>
+ <property name="max-length">255</property>
+ <property name="width-chars">25</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="domain">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="model">realms_model</property>
+ <property name="has_entry">True</property>
+ <property name="entry_text_column">0</property>
+ <child internal-child="entry">
+ <object class="GtkEntry" id="domain_entry">
+ <property name="can_focus">True</property>
+ <property name="max-length">255</property>
+ <property name="width-chars">25</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_bottom">12</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Enterprise domain or realm name</property>
+ <attributes>
+ <attribute name="scale" value="0.8"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="filler">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+ <object class="GtkDialog" id="join_dialog">
+ <property name="can_focus">False</property>
+ <property name="border_width">10</property>
+ <property name="resizable">False</property>
+ <property name="modal">True</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="type_hint">dialog</property>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="dialog-action_area1">
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="button1">
+ <property name="label">gtk-cancel</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button2">
+ <property name="label" translatable="yes">C_ontinue</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">10</property>
+ <child>
+ <object class="GtkLabel" id="label71">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Domain Administrator Login</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.2"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label12">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">In order to use enterprise logins, this computer
needs to be
+ enrolled in the domain. Please have your network administrator
+ type their domain password here, and choose a unique computer
+ name for your computer.</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">12</property>
+ <property name="hexpand">True</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="label13">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Domain</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">join_domain</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="join_domain">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">5</property>
+ <property name="margin_bottom">5</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label18">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Computer</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">join_computer</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="join_computer">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label14">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Administrator _Name</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">join_name</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="join_name">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="invisible_char">●</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label15">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Administrator Password</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">join_password</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="join_password">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="visibility">False</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-6">button1</action-widget>
+ <action-widget response="-5">button2</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkListStore" id="realms_model">
+ <columns>
+ <!-- column-name gchararray -->
+ <column type="gchararray"/>
+ <!-- column-name gobject -->
+ <column type="GObject"/>
+ </columns>
+ </object>
+</interface>
diff --git a/gnome-initial-setup/pages/account/gis-account-page-local.ui
b/gnome-initial-setup/pages/account/gis-account-page-local.ui
new file mode 100644
index 0000000..4eeaa46
--- /dev/null
+++ b/gnome-initial-setup/pages/account/gis-account-page-local.ui
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <template class="GisAccountPageLocal" parent="GtkBin">
+ <child>
+ <object class="GtkBox" id="area">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">fill</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkButton" id="avatar_button">
+ <property name="visible">True</property>
+ <property name="margin_top">54</property>
+ <property name="halign">center</property>
+ <child>
+ <object class="GtkImage" id="avatar_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixel_size">96</property>
+ <property name="icon_name">avatar-default-symbolic</property>
+ <property name="icon_size">1</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ <property name="margin_top">26</property>
+ <property name="hexpand">True</property>
+ <property name="label" translatable="yes">About You</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.8"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="subtitle">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">start</property>
+ <property name="margin_top">14</property>
+ <property name="label" translatable="yes">We need a few details to complete setup.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">50</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="form">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">12</property>
+ <property name="margin_top">54</property>
+ <child>
+ <object class="GtkLabel" id="fullname_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Full Name</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">fullname_entry</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="fullname_entry">
+ <property name="max_length">255</property>
+ <property name="width-chars">25</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="username_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Username</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">username_combo</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="username_combo">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_entry">True</property>
+ <property name="entry_text_column">0</property>
+ <property name="id_column">1</property>
+ <child internal-child="entry">
+ <object class="GtkEntry" id="comboboxtext-entry">
+ <property name="can_focus">True</property>
+ <property name="width-chars">25</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="username_explanation">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="margin_bottom">12</property>
+ <property name="label" translatable="yes">Your username cannot be changed after
setup.</property>
+ <property name="wrap">True</property>
+ <attributes>
+ <attribute name="scale" value="0.8"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">5</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/account/gis-account-page.ui
b/gnome-initial-setup/pages/account/gis-account-page.ui
new file mode 100644
index 0000000..3332fc5
--- /dev/null
+++ b/gnome-initial-setup/pages/account/gis-account-page.ui
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <template class="GisAccountPage" parent="GisPage">
+ <child>
+ <object class="GtkBox" id="page">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">fill</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkStack" id="stack">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="valign">start</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GisAccountPageLocal" id="page_local">
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GisAccountPageEnterprise" id="page_enterprise">
+ <property name="visible">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToggleButton" id="page_toggle">
+ <property name="visible">True</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="true">Setup _Enterprise Login</property>
+ <property name="halign">center</property>
+ <property name="valign">end</property>
+ <property name="margin_bottom">32</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/account/org.freedesktop.realmd.xml
b/gnome-initial-setup/pages/account/org.freedesktop.realmd.xml
new file mode 100644
index 0000000..316213a
--- /dev/null
+++ b/gnome-initial-setup/pages/account/org.freedesktop.realmd.xml
@@ -0,0 +1,666 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node name="/">
+
+ <!--
+ org.freedesktop.realmd.Provider:
+ @short_description: a realm provider
+
+ Various realm providers represent different software implementations
+ that provide access to realms or domains.
+
+ This interface is implemented by individual providers, but is
+ aggregated globally at the system bus name
+ <literal>org.freedesktop.realmd</literal>
+ with the object path <literal>/org/freedesktop/realmd</literal>
+ -->
+ <interface name="org.freedesktop.realmd.Provider">
+
+ <!--
+ Name: the name of the provider
+
+ The name of the provider. This is not normally displayed
+ to the user, but may be useful for diagnostics or debugging.
+ -->
+ <property name="Name" type="s" access="read"/>
+
+ <!--
+ Version: the version of the provider
+
+ The version of the provider. This is not normally used in
+ logic, but may be useful for diagnostics or debugging.
+ -->
+ <property name="Version" type="s" access="read"/>
+
+ <!--
+ Realms: a list of realms
+
+ A list of known, enrolled or discovered realms. All realms
+ that this provider knows about are listed here. As realms
+ are discovered they are added to this list.
+
+ Each realm is represented by the DBus object path of the
+ realm object.
+ -->
+ <property name="Realms" type="ao" access="read"/>
+
+ <!--
+ Discover:
+ @string: an input string to discover realms for
+ @options: options for the discovery operation
+ @relevance: the relevance of the returned results
+ @realm: a list of realms discovered
+
+ Discover realms for the given string. The input @string is
+ usually a domain or realm name, perhaps typed by a user. If
+ an empty string is provided the realm provider should try to
+ discover a default realm if possible (eg: from DHCP).
+
+ @options can contain, but is not limited to, the following values:
+ <itemizedlist>
+ <listitem><para><literal>operation</literal>: a string
+ identifier chosen by the client, which can then later be
+ passed to org.freedesktop.realmd.Service.Cancel() in order
+ to cancel the operation</para></listitem>
+ </itemizedlist>
+
+ The @relevance returned can be used to rank results from
+ different discover calls to different providers. Implementors
+ should return a positive number if the provider highly
+ recommends that the realms be handled by this provider,
+ or a zero if it can possibly handle the realms. Negative
+ should be returned if no realms are found.
+
+ This method does not return an error when no realms are
+ discovered. It simply returns an @realm list.
+
+ To see diagnostic information about the discovery process
+ connect to the org.freedesktop.realmd.Service::Diagnostics
+ signal.
+
+ This method requires authorization for the PolicyKit action
+ called <literal>org.freedesktop.realmd.discover-realm</literal>.
+
+ In addition to common DBus error results, this method may
+ return:
+ <itemizedlist>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Failed</literal>:
+ may be returned if the discovery could not be run for some reason.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Cancelled</literal>:
+ returned if the operation was cancelled.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.NotAuthorized</literal>:
+ returned if the calling client is not permitted to perform a discovery
+ operation.</para></listitem>
+ </itemizedlist>
+ -->
+ <method name="Discover">
+ <arg name="string" type="s" direction="in"/>
+ <arg name="options" type="a{sv}" direction="in"/>
+ <arg name="relevance" type="i" direction="out"/>
+ <arg name="realm" type="ao" direction="out"/>
+ </method>
+
+ </interface>
+
+ <!--
+ org.freedesktop.realmd.Service:
+ @short_description: the realmd service
+
+ Global calls for managing the realmd service. Usually you'll want
+ to use #org.freedesktop.realmd.Provider instead.
+
+ This interface is implemented by the realmd service, and is always
+ available at the object path <literal>/org/freedesktop/realmd</literal>
+
+ The service also implements the
+ <literal>org.freedesktop.DBus.ObjectManager</literal> interface which
+ makes it easy to retrieve all realmd objects and properties in one go.
+ -->
+ <interface name="org.freedesktop.realmd.Service">
+
+ <!--
+ Cancel:
+ @operation: the operation to cancel
+
+ Cancel a realmd operation. To be able to cancel an operation
+ pass a uniquely chosen <literal>operation</literal> string
+ identifier as an option in the methods <literal>options</literal>
+ argument.
+
+ These operation string identifiers should be unique per client
+ calling the realmd service.
+
+ It is not guaranteed that the service can or will cancel the
+ operation. For example the operation may have already completed
+ by the time this method is handled. The caller of the operation
+ method will receive a
+ <literal>org.freedesktop.realmd.Error.Cancelled</literal>
+ if the operation was cancelled.
+ -->
+ <method name="Cancel">
+ <arg name="operation" type="s" direction="in"/>
+ </method>
+
+ <!--
+ SetLocale:
+ @locale: the locale for the client
+
+ Set the language @locale for the client. This locale is used
+ for error messages. The locale is used until the next time
+ this method is called, the client disconnects, or the client
+ calls #org.freedesktop.realmd.Service.Release().
+ -->
+ <method name="SetLocale">
+ <arg name="locale" type="s" direction="in"/>
+ </method>
+
+ <!--
+ Diagnostics:
+ @data: diagnostic data
+ @operation: the operation this data resulted from
+
+ This signal is fired when diagnostics result from an operation
+ in the provider or one of its realms.
+
+ It is not guaranteed that this signal is emitted once per line.
+ More than one line may be contained in @data, or a partial
+ line. New line characters are embedded in @data.
+
+ This signal is sent explicitly to the client which invoked
+ operation method. In order to tell which operation this
+ diagnostic data results from, pass a unique
+ <literal>operation</literal> string identifier in the
+ <literal>options</literal> argument of the operation method.
+ That same identifier will be passed back via the @operation
+ argument of this signal.
+ -->
+ <signal name="Diagnostics">
+ <arg name="data" type="s"/>
+ <arg name="operation" type="s"/>
+ </signal>
+
+ <!--
+ Release:
+
+ Normally realmd waits until all clients have disconnected
+ before exiting itself, sometime later. For long lived clients
+ they can call this method to allow the realmd service to quit.
+ This is an optimization. The daemon will not exit immediately.
+ It is safe to call this multiple times.
+ -->
+ <method name="Release">
+ <!-- no arguments -->
+ </method>
+
+ </interface>
+
+ <!--
+ org.freedesktop.realmd.Realm:
+ @short_description: a realm
+
+ Represents one realm.
+
+ Contains generic information about a realm, and useful properties for
+ introspecting what kind of realm this is and how to work with
+ the realm.
+
+ Use #org.freedesktop.realmd.Provider:Realms or
+ #org.freedesktop.realmd.Provider.Discover() to get access to some
+ kerberos realm objects.
+
+ Realms will always implement additional interfaces, such as
+ #org.freedesktop.realmd.Kerberos. Do not assume that all realms
+ implement that kerberos interface. Use the
+ #org.freedesktop.realmd.Realm:SupportedInterfaces property to see
+ which interfaces are set.
+
+ Different realms support various ways to configure them on the
+ system. Use the #org.freedesktop.realmd.Realm:Configured property
+ to determine if a realm is configured. If it is configured the
+ property will be set to the interface of the mechanism that was
+ used to configure it.
+
+ To configure a realm, look in the
+ #org.freedesktop.realmd.Realm:SupportedInterfaces property for a
+ recognized purpose specific interface that can be used for
+ configuration, such as the
+ #org.freedesktop.realmd.KerberosMembership interface and its
+ #org.freedesktop.realmd.KerberosMembership.Join() method.
+
+ To deconfigure a realm from the current system, you can use the
+ #org.freedesktop.realmd.Realm.Deconfigure() method. In additon some
+ of the configuration specific interfaces provide methods to
+ deconfigure a realm in a specific way, such as
+ #org.freedesktop.realmd.KerberosMembership.Leave() method.
+
+ The various properties are guaranteed to have been updated before
+ the operation methods return, if they change state.
+ -->
+ <interface name="org.freedesktop.realmd.Realm">
+
+ <!--
+ Name: the realm name
+
+ This is the name of the realm, appropriate for display to
+ end users where necessary.
+ -->
+ <property name="Name" type="s" access="read"/>
+
+ <!--
+ Configured: whether this domain is configured and how
+
+ If this property is an empty string, then the realm is not
+ configured. Otherwise the realm is configured, and contains
+ a string which is the interface that represents how it was
+ configured, for example #org.freedesktop.realmd.KerberosMembership.
+ -->
+ <property name="Configured" type="s" access="read"/>
+
+ <!--
+ Deconfigure: deconfigure this realm
+
+ Deconfigure this realm from the local machine with standard
+ default behavior.
+
+ The behavior of this method depends on the which configuration
+ interface is present in the
+ #org.freedesktop.realmd.Realm.Configured property. It does not
+ always delete membership accounts in the realm, but just
+ reconfigures the local machine so it no longer is configured
+ for the given realm. In some cases the implementation may try
+ to update membership accounts, but this is not guaranteed.
+
+ Various configuration interfaces may support more specific ways
+ to deconfigure a realm in a specific way, such as the
+ #org.freedesktop.realmd.KerberosMembership.Leave() method.
+
+ @options can contain, but is not limited to, the following values:
+ <itemizedlist>
+ <listitem><para><literal>operation</literal>: a string
+ identifier chosen by the client, which can then later be
+ passed to org.freedesktop.realmd.Service.Cancel() in order
+ to cancel the operation</para></listitem>
+ </itemizedlist>
+
+ This method requires authorization for the PolicyKit action
+ called <literal>org.freedesktop.realmd.deconfigure-realm</literal>.
+
+ In addition to common DBus error results, this method may return:
+ <itemizedlist>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Failed</literal>:
+ may be returned if the deconfigure failed for a generic reason.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Cancelled</literal>:
+ returned if the operation was cancelled.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.NotAuthorized</literal>:
+ returned if the calling client is not permitted to deconfigure a
+ realm.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.NotConfigured</literal>:
+ returned if this realm is not configured on the machine.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Busy</literal>:
+ returned if the service is currently performing another operation like
+ join or leave.</para></listitem>
+ </itemizedlist>
+ -->
+ <method name="Deconfigure">
+ <arg name="options" type="a{sv}" direction="in"/>
+ </method>
+
+ <!--
+ SupportedInterfaces:
+
+ Additional supported interfaces of this realm. This includes
+ interfaces that contain more information about the realm,
+ such as #org.freedesktop.realmd.Kerberos and interfaces
+ which contain methods for configuring a realm, such as
+ #org.freedesktop.realmd.KerberosMembership.
+ -->
+ <property name="SupportedInterfaces" type="as" access="read"/>
+
+ <!--
+ Details: informational details about the realm
+
+ Informational details about the realm. The following values
+ should be present:
+ <itemizedlist>
+ <listitem><para><literal>server-software</literal>:
+ identifier of the software running on the server (eg:
+ <literal>active-directory</literal>).</para></listitem>
+ <listitem><para><literal>client-software</literal>:
+ identifier of the software running on the client (eg:
+ <literal>sssd</literal>).</para></listitem>
+ </itemizedlist>
+ -->
+ <property name="Details" type="a(ss)" access="read"/>
+
+ <!--
+ LoginFormats: supported formats for login names
+
+ Supported formats for login to this realm. This is only
+ relevant once the realm has been enrolled. The formats
+ will contain a <literal>%U</literal> in the string, which
+ indicate where the user name should be placed. The formats
+ may contain a <literal>%D</literal> in the string which
+ indicate where a domain name should be placed.
+
+ The first format in the list is the preferred format for
+ login names.
+ -->
+ <property name="LoginFormats" type="as" access="read"/>
+
+ <!--
+ LoginPolicy: the policy for logins using this realm
+
+ The policy for logging into this computer using this realm.
+
+ The policy can be changed using the
+ #org.freedesktop.realmd.Realm.ChangeLoginPolicy() method.
+
+ The following policies are predefined. Not all providers
+ support all these policies and there may be provider specific
+ policies or multiple policies represented in the string:
+ <itemizedlist>
+ <listitem><para><literal>allow-any-login</literal>: allow
+ login by any authenticated user present in this
+ realm.</para></listitem>
+ <listitem><para><literal>allow-permitted-logins</literal>:
+ only allow the logins permitted in the
+ #org.freedesktop.realmd.Realm:PermittedLogins
+ property.</para></listitem>
+ <listitem><para><literal>deny-any-login</literal>:
+ don't allow any logins via authenticated users of this
+ realm.</para></listitem>
+ </itemizedlist>
+ -->
+ <property name="LoginPolicy" type="s" access="read"/>
+
+ <!--
+ PermittedLogins: the permitted login names
+
+ The list of permitted authenticated users allowed to login
+ into this computer. This is only relevant if the
+ #org.freedesktop.realmd.Realm:LoginPolicy property
+ contains the <literal>allow-permitted-logins</literal>
+ string.
+ -->
+ <property name="PermittedLogins" type="as" access="read"/>
+
+ <!--
+ ChangeLoginPolicy:
+ @login_policy: the new login policy, or an empty string
+ @permitted_add: a list of logins to permit
+ @permitted_remove: a list of logins to not permit
+ @options: options for this operation
+
+ Change the login policy and/or permitted logins for this realm.
+
+ Not all realms support the all the various login policies. An
+ error will be returned if the new login policy is not supported.
+ You may specify an empty string for the @login_policy argument
+ which will cause no change in the policy itself. If the policy
+ is changed, it will be reflected in the
+ #org.freedesktop.realmd.Realm:LoginPolicy property.
+
+ The @permitted_add and @permitted_remove arguments represent
+ lists of login names that should be added and removed from
+ the #org.freedesktop.realmd.Kerberos:PermittedLogins property.
+
+ @options can contain, but is not limited to, the following values:
+ <itemizedlist>
+ <listitem><para><literal>operation</literal>: a string
+ identifier chosen by the client, which can then later be
+ passed to org.freedesktop.realmd.Service.Cancel() in order
+ to cancel the operation</para></listitem>
+ </itemizedlist>
+
+ This method requires authorization for the PolicyKit action
+ called <literal>org.freedesktop.realmd.login-policy</literal>.
+
+ In addition to common DBus error results, this method may return:
+ <itemizedlist>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Failed</literal>:
+ may be returned if the policy change failed for a generic reason.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Cancelled</literal>:
+ returned if the operation was cancelled.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.NotAuthorized</literal>:
+ returned if the calling client is not permitted to change login policy
+ operation.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.NotConfigured</literal>:
+ returned if the realm is not configured.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Busy</literal>:
+ returned if the service is currently performing another operation like
+ join or leave.</para></listitem>
+ </itemizedlist>
+ -->
+ <method name="ChangeLoginPolicy">
+ <arg name="login_policy" type="s" direction="in"/>
+ <arg name="permitted_add" type="as" direction="in"/>
+ <arg name="permitted_remove" type="as" direction="in"/>
+ <arg name="options" type="a{sv}" direction="in"/>
+ </method>
+
+ </interface>
+
+ <!--
+ org.freedesktop.realmd.Kerberos:
+ @short_description: a kerberos realm
+
+ An interface that describes a kerberos realm in more detail. This
+ is always implemented on an DBus object path that also implements
+ the #org.freedesktop.realmd.Realm interface.
+ -->
+ <interface name="org.freedesktop.realmd.Kerberos">
+
+ <!--
+ RealmName: the kerberos realm name
+
+ The kerberos name for this realm. This is usually in upper
+ case.
+ -->
+ <property name="RealmName" type="s" access="read"/>
+
+ <!--
+ DomainName: the DNS domain name
+
+ The DNS domain name for this realm.
+ -->
+ <property name="DomainName" type="s" access="read"/>
+
+ </interface>
+
+ <!--
+ org.freedesktop.realmd.KerberosMembership:
+
+ An interface used to configure this machine by joining a realm.
+
+ It sets up a computer/host account in the realm for this machine
+ and a keytab to track the credentials for that account.
+
+ The various properties are guaranteed to have been updated before
+ the operation methods return, if they change state.
+ -->
+ <interface name="org.freedesktop.realmd.KerberosMembership">
+
+ <!--
+ SuggestedAdministrator: common administrator name
+
+ The common administrator name for this type of realm. This
+ can be used by clients as a hint when prompting the user for
+ administrative authentication.
+ -->
+ <property name="SuggestedAdministrator" type="s" access="read"/>
+
+ <!--
+ SupportedJoinCredentials: credentials supported for joining
+
+ Various kinds of credentials that are supported when calling the
+ #org.freedesktop.realmd.Kerberos.Join() method.
+
+ Each credential is represented by a type, and an owner. The type
+ denotes which kind of credential is passed to the method. The
+ owner indicates to the client how to prompt the user or obtain
+ the credential, and to the service how to use the credential.
+
+ The various types are:
+ <itemizedlist>
+ <listitem><para><literal>ccache</literal>:
+ the credentials should contain an array of bytes as a
+ <literal>ay</literal> containing the data from a kerberos
+ credential cache file.</para></listitem>
+ <listitem><para><literal>password</literal>:
+ the credentials should contain a pair of strings as a
+ <literal>(ss)</literal> representing a name and
+ password. The name may contain a realm in the standard
+ kerberos format. If missing, it will default to this
+ realm. The name may be empty for a computer or one time
+ password.</para></listitem>
+ <listitem><para><literal>automatic</literal>:
+ the credentials should contain an empty string as a
+ <literal>s</literal>. Using <literal>automatic</literal>
+ indicates that default or system credentials are to be
+ used.</para></listitem>
+ </itemizedlist>
+
+ The various owners are:
+ <itemizedlist>
+ <listitem><para><literal>administrator</literal>:
+ the credentials belong to a kerberos user principal.
+ The caller may use this as a hint to prompt the user
+ for administrative credentials.</para></listitem>
+ <listitem><para><literal>user</literal>:
+ the credentials belong to a kerberos user principal.
+ The caller may use this as a hint to prompt the user
+ for his (possibly non-administrative)
+ credentials.</para></listitem>
+ <listitem><para><literal>computer</literal>:
+ the credentials belong to the computer realmd is
+ being run on.</para></listitem>
+ <listitem><para><literal>secret</literal>:
+ the credentials are a one time password or other secret
+ used to join or leave the computer.</para></listitem>
+ </itemizedlist>
+ -->
+ <property name="SupportedJoinCredentials" type="a(ss)" access="read"/>
+
+ <!--
+ SupportedLeaveCredentials: credentials supported for leaving
+
+ Various kinds of credentials that are supported when calling the
+ #org.freedesktop.realmd.Kerberos.Leave() method.
+
+ See #org.freedesktop.realmd.Kerberos:SupportedJoinCredentials for
+ a discussion of what the values represent.
+ -->
+ <property name="SupportedLeaveCredentials" type="a(ss)" access="read"/>
+
+ <!--
+ Join:
+
+ Join this machine to the realm and enroll the machine.
+
+ If this method returns successfully then the machine will be
+ joined to the realm. It is not necessary to restart services or the
+ machine afterward. Relevant properties on the realm will be updated
+ before the method returns.
+
+ The @credentials should be set according to one of the
+ supported credentials returned by
+ #org.freedesktop.realmd.Kerberos:SupportedJoinCredentials.
+ The first string in the tuple is the type, the second string
+ is the owner, and the variant contains the credential contents
+ See the discussion at
+ #org.freedesktop.realmd.Kerberos:SupportedJoinCredentials
+ for more information.
+
+ @options can contain, but is not limited to, the following values:
+ <itemizedlist>
+ <listitem><para><literal>operation</literal>: a string
+ identifier chosen by the client, which can then later be
+ passed to org.freedesktop.realmd.Service.Cancel() in order
+ to cancel the operation</para></listitem>
+ </itemizedlist>
+
+ This method requires authorization for the PolicyKit action
+ called <literal>org.freedesktop.realmd.configure-realm</literal>.
+
+ In addition to common DBus error results, this method may return:
+ <itemizedlist>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Failed</literal>:
+ may be returned if the join failed for a generic reason.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Cancelled</literal>:
+ returned if the operation was cancelled.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.NotAuthorized</literal>:
+ returned if the calling client is not permitted to perform an join
+ operation.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.AuthenicationFailed</literal>:
+ returned if the credentials passed did not authenticate against the realm
+ correctly. It is appropriate to prompt the user again.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.AlreadyEnrolled</literal>:
+ returned if already enrolled in this realm, or another realm and enrolling
+ in multiple realms is not supported.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Busy</literal>:
+ returned if the service is currently performing another operation like
+ join or leave.</para></listitem>
+ </itemizedlist>
+ -->
+ <method name="Join">
+ <arg name="credentials" type="(ssv)" direction="in"/>
+ <arg name="options" type="a{sv}" direction="in"/>
+ </method>
+
+ <!--
+ Leave:
+
+ Leave the realm and unenroll the machine.
+
+ If this method returns successfully then the machine will have
+ left the domain and been unenrolled. It is not necessary to restart
+ services or the machine afterward. Relevant properties on the realm
+ will be updated before the method returns.
+
+ The @credentials should be set according to one of the
+ supported credentials returned by
+ #org.freedesktop.realmd.Kerberos:SupportedUnenrollCredentials.
+ The first string in the tuple is the type, the second string
+ is the owner, and the variant contains the credential contents
+ See the discussion at
+ #org.freedesktop.realmd.Kerberos:SupportedEnrollCredentials
+ for more information.
+
+ @options can contain, but is not limited to, the following values:
+ <itemizedlist>
+ <listitem><para><literal>operation</literal>: a string
+ identifier chosen by the client, which can then later be
+ passed to org.freedesktop.realmd.Service.Cancel() in order
+ to cancel the operation</para></listitem>
+ </itemizedlist>
+
+ This method requires authorization for the PolicyKit action
+ called <literal>org.freedesktop.realmd.deconfigure-realm</literal>.
+
+ In addition to common DBus error results, this method may return:
+ <itemizedlist>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Failed</literal>:
+ may be returned if the unenroll failed for a generic reason.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Cancelled</literal>:
+ returned if the operation was cancelled.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.NotAuthorized</literal>:
+ returned if the calling client is not permitted to perform an unenroll
+ operation.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.AuthenicationFailed</literal>:
+ returned if the credentials passed did not authenticate against the realm
+ correctly. It is appropriate to prompt the user again.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.NotEnrolled</literal>:
+ returned if not enrolled in this realm.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Busy</literal>:
+ returned if the service is currently performing another operation like
+ enroll or unenroll.</para></listitem>
+ </itemizedlist>
+ -->
+ <method name="Leave">
+ <arg name="credentials" type="(ssv)" direction="in"/>
+ <arg name="options" type="a{sv}" direction="in"/>
+ </method>
+
+ </interface>
+
+</node>
diff --git a/gnome-initial-setup/pages/account/um-utils.c b/gnome-initial-setup/pages/account/um-utils.c
new file mode 100644
index 0000000..0ee5920
--- /dev/null
+++ b/gnome-initial-setup/pages/account/um-utils.c
@@ -0,0 +1,385 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright 2009-2010 Red Hat, Inc,
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ *
+ * Written by: Matthias Clasen <mclasen redhat com>
+ */
+
+#include "config.h"
+
+#include <math.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <pwd.h>
+#include <utmp.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include "um-utils.h"
+
+void
+set_entry_validation_error (GtkEntry *entry,
+ const gchar *text)
+{
+ g_object_set (entry, "caps-lock-warning", FALSE, NULL);
+ gtk_entry_set_icon_from_stock (entry,
+ GTK_ENTRY_ICON_SECONDARY,
+ GTK_STOCK_CAPS_LOCK_WARNING);
+ gtk_entry_set_icon_tooltip_text (entry,
+ GTK_ENTRY_ICON_SECONDARY,
+ text);
+}
+
+void
+clear_entry_validation_error (GtkEntry *entry)
+{
+ gboolean warning;
+
+ g_object_get (entry, "caps-lock-warning", &warning, NULL);
+
+ if (warning)
+ return;
+
+ gtk_entry_set_icon_from_pixbuf (entry,
+ GTK_ENTRY_ICON_SECONDARY,
+ NULL);
+ g_object_set (entry, "caps-lock-warning", TRUE, NULL);
+}
+
+#define MAXNAMELEN (UT_NAMESIZE - 1)
+
+static gboolean
+is_username_used (const gchar *username)
+{
+ struct passwd *pwent;
+
+ if (username == NULL || username[0] == '\0') {
+ return FALSE;
+ }
+
+ pwent = getpwnam (username);
+
+ return pwent != NULL;
+}
+
+gboolean
+is_valid_name (const gchar *name)
+{
+ gboolean is_empty = TRUE;
+ const gchar *c;
+
+ /* Valid names must contain:
+ * 1) at least one character.
+ * 2) at least one non-"space" character.
+ */
+ for (c = name; *c; c++) {
+ gunichar unichar;
+
+ unichar = g_utf8_get_char_validated (c, -1);
+
+ /* Partial UTF-8 sequence or end of string */
+ if (unichar == (gunichar) -1 || unichar == (gunichar) -2)
+ break;
+
+ /* Check for non-space character */
+ if (!g_unichar_isspace (unichar)) {
+ is_empty = FALSE;
+ break;
+ }
+ }
+
+ return !is_empty;
+}
+
+gboolean
+is_valid_username (const gchar *username, gchar **tip)
+{
+ gboolean empty;
+ gboolean in_use;
+ gboolean too_long;
+ gboolean valid;
+ const gchar *c;
+
+ if (username == NULL || username[0] == '\0') {
+ empty = TRUE;
+ in_use = FALSE;
+ too_long = FALSE;
+ } else {
+ empty = FALSE;
+ in_use = is_username_used (username);
+ too_long = strlen (username) > MAXNAMELEN;
+ }
+ valid = TRUE;
+
+ if (!in_use && !empty && !too_long) {
+ /* First char must be a letter, and it must only composed
+ * of ASCII letters, digits, and a '.', '-', '_'
+ */
+ for (c = username; *c; c++) {
+ if (! ((*c >= 'a' && *c <= 'z') ||
+ (*c >= 'A' && *c <= 'Z') ||
+ (*c >= '0' && *c <= '9') ||
+ (*c == '_') || (*c == '.') ||
+ (*c == '-' && c != username)))
+ valid = FALSE;
+ }
+ }
+
+ valid = !empty && !in_use && !too_long && valid;
+
+ if (!empty && (in_use || too_long || !valid)) {
+ if (in_use) {
+ *tip = g_strdup_printf (_("A user with the username '%s' already exists"),
+ username);
+ }
+ else if (too_long) {
+ *tip = g_strdup_printf (_("The username is too long"));
+ }
+ else if (username[0] == '-') {
+ *tip = g_strdup (_("The username cannot start with a '-'"));
+ }
+ else {
+ *tip = g_strdup (_("The username must only consist of:\n"
+ " \xe2\x9e\xa3 letters from the English alphabet\n"
+ " \xe2\x9e\xa3 digits\n"
+ " \xe2\x9e\xa3 any of the characters '.', '-' and '_'"));
+ }
+ }
+ else {
+ *tip = NULL;
+ }
+
+ return valid;
+}
+
+void
+generate_username_choices (const gchar *name,
+ GtkListStore *store)
+{
+ gboolean in_use, same_as_initial;
+ char *lc_name, *ascii_name, *stripped_name;
+ char **words1;
+ char **words2 = NULL;
+ char **w1, **w2;
+ char *c;
+ char *unicode_fallback = "?";
+ GString *first_word, *last_word;
+ GString *item0, *item1, *item2, *item3, *item4;
+ int len;
+ int nwords1, nwords2, i;
+ GHashTable *items;
+ GtkTreeIter iter;
+
+ gtk_list_store_clear (store);
+
+ ascii_name = g_convert_with_fallback (name, -1, "ASCII//TRANSLIT", "UTF-8",
+ unicode_fallback, NULL, NULL, NULL);
+
+ lc_name = g_ascii_strdown (ascii_name, -1);
+
+ /* Remove all non ASCII alphanumeric chars from the name,
+ * apart from the few allowed symbols.
+ *
+ * We do remove '.', even though it is usually allowed,
+ * since it often comes in via an abbreviated middle name,
+ * and the dot looks just wrong in the proposals then.
+ */
+ stripped_name = g_strnfill (strlen (lc_name) + 1, '\0');
+ i = 0;
+ for (c = lc_name; *c; c++) {
+ if (!(g_ascii_isdigit (*c) || g_ascii_islower (*c) ||
+ *c == ' ' || *c == '-' || *c == '_' ||
+ /* used to track invalid words, removed below */
+ *c == '?') )
+ continue;
+
+ stripped_name[i] = *c;
+ i++;
+ }
+
+ if (strlen (stripped_name) == 0) {
+ g_free (ascii_name);
+ g_free (lc_name);
+ g_free (stripped_name);
+ return;
+ }
+
+ /* we split name on spaces, and then on dashes, so that we can treat
+ * words linked with dashes the same way, i.e. both fully shown, or
+ * both abbreviated
+ */
+ words1 = g_strsplit_set (stripped_name, " ", -1);
+ len = g_strv_length (words1);
+
+ /* The default item is a concatenation of all words without ? */
+ item0 = g_string_sized_new (strlen (stripped_name));
+
+ g_free (ascii_name);
+ g_free (lc_name);
+ g_free (stripped_name);
+
+ /* Concatenate the whole first word with the first letter of each
+ * word (item1), and the last word with the first letter of each
+ * word (item2). item3 and item4 are symmetrical respectively to
+ * item1 and item2.
+ *
+ * Constant 5 is the max reasonable number of words we may get when
+ * splitting on dashes, since we can't guess it at this point,
+ * and reallocating would be too bad.
+ */
+ item1 = g_string_sized_new (strlen (words1[0]) + len - 1 + 5);
+ item3 = g_string_sized_new (strlen (words1[0]) + len - 1 + 5);
+
+ item2 = g_string_sized_new (strlen (words1[len - 1]) + len - 1 + 5);
+ item4 = g_string_sized_new (strlen (words1[len - 1]) + len - 1 + 5);
+
+ /* again, guess at the max size of names */
+ first_word = g_string_sized_new (20);
+ last_word = g_string_sized_new (20);
+
+ nwords1 = 0;
+ nwords2 = 0;
+ for (w1 = words1; *w1; w1++) {
+ if (strlen (*w1) == 0)
+ continue;
+
+ /* skip words with string '?', most likely resulting
+ * from failed transliteration to ASCII
+ */
+ if (strstr (*w1, unicode_fallback) != NULL)
+ continue;
+
+ nwords1++; /* count real words, excluding empty string */
+
+ item0 = g_string_append (item0, *w1);
+
+ words2 = g_strsplit_set (*w1, "-", -1);
+ /* reset last word if a new non-empty word has been found */
+ if (strlen (*words2) > 0)
+ last_word = g_string_set_size (last_word, 0);
+
+ for (w2 = words2; *w2; w2++) {
+ if (strlen (*w2) == 0)
+ continue;
+
+ nwords2++;
+
+ /* part of the first "toplevel" real word */
+ if (nwords1 == 1) {
+ item1 = g_string_append (item1, *w2);
+ first_word = g_string_append (first_word, *w2);
+ }
+ else {
+ item1 = g_string_append_unichar (item1,
+ g_utf8_get_char (*w2));
+ item3 = g_string_append_unichar (item3,
+ g_utf8_get_char (*w2));
+ }
+
+ /* not part of the last "toplevel" word */
+ if (w1 != words1 + len - 1) {
+ item2 = g_string_append_unichar (item2,
+ g_utf8_get_char (*w2));
+ item4 = g_string_append_unichar (item4,
+ g_utf8_get_char (*w2));
+ }
+
+ /* always save current word so that we have it if last one reveals empty */
+ last_word = g_string_append (last_word, *w2);
+ }
+
+ g_strfreev (words2);
+ }
+ item2 = g_string_append (item2, last_word->str);
+ item3 = g_string_append (item3, first_word->str);
+ item4 = g_string_prepend (item4, last_word->str);
+
+ items = g_hash_table_new (g_str_hash, g_str_equal);
+
+ in_use = is_username_used (item0->str);
+ if (!in_use && !g_ascii_isdigit (item0->str[0])) {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, item0->str, -1);
+ g_hash_table_insert (items, item0->str, item0->str);
+ }
+
+ in_use = is_username_used (item1->str);
+ same_as_initial = (g_strcmp0 (item0->str, item1->str) == 0);
+ if (!same_as_initial && nwords2 > 0 && !in_use && !g_ascii_isdigit (item1->str[0])) {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, item1->str, -1);
+ g_hash_table_insert (items, item1->str, item1->str);
+ }
+
+ /* if there's only one word, would be the same as item1 */
+ if (nwords2 > 1) {
+ /* add other items */
+ in_use = is_username_used (item2->str);
+ if (!in_use && !g_ascii_isdigit (item2->str[0]) &&
+ !g_hash_table_lookup (items, item2->str)) {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, item2->str, -1);
+ g_hash_table_insert (items, item2->str, item2->str);
+ }
+
+ in_use = is_username_used (item3->str);
+ if (!in_use && !g_ascii_isdigit (item3->str[0]) &&
+ !g_hash_table_lookup (items, item3->str)) {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, item3->str, -1);
+ g_hash_table_insert (items, item3->str, item3->str);
+ }
+
+ in_use = is_username_used (item4->str);
+ if (!in_use && !g_ascii_isdigit (item4->str[0]) &&
+ !g_hash_table_lookup (items, item4->str)) {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, item4->str, -1);
+ g_hash_table_insert (items, item4->str, item4->str);
+ }
+
+ /* add the last word */
+ in_use = is_username_used (last_word->str);
+ if (!in_use && !g_ascii_isdigit (last_word->str[0]) &&
+ !g_hash_table_lookup (items, last_word->str)) {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, last_word->str, -1);
+ g_hash_table_insert (items, last_word->str, last_word->str);
+ }
+
+ /* ...and the first one */
+ in_use = is_username_used (first_word->str);
+ if (!in_use && !g_ascii_isdigit (first_word->str[0]) &&
+ !g_hash_table_lookup (items, first_word->str)) {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, first_word->str, -1);
+ g_hash_table_insert (items, first_word->str, first_word->str);
+ }
+ }
+
+ g_hash_table_destroy (items);
+ g_strfreev (words1);
+ g_string_free (first_word, TRUE);
+ g_string_free (last_word, TRUE);
+ g_string_free (item0, TRUE);
+ g_string_free (item1, TRUE);
+ g_string_free (item2, TRUE);
+ g_string_free (item3, TRUE);
+ g_string_free (item4, TRUE);
+}
diff --git a/gnome-initial-setup/pages/account/um-utils.h b/gnome-initial-setup/pages/account/um-utils.h
new file mode 100644
index 0000000..5befff5
--- /dev/null
+++ b/gnome-initial-setup/pages/account/um-utils.h
@@ -0,0 +1,43 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright 2009-2010 Red Hat, Inc,
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ *
+ * Written by: Matthias Clasen <mclasen redhat com>
+ */
+
+#ifndef __UM_UTILS_H__
+#define __UM_UTILS_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+void set_entry_validation_error (GtkEntry *entry,
+ const gchar *text);
+void clear_entry_validation_error (GtkEntry *entry);
+
+gboolean is_valid_name (const gchar *name);
+gboolean is_valid_username (const gchar *name,
+ gchar **tip);
+
+void generate_username_choices (const gchar *name,
+ GtkListStore *store);
+
+G_END_DECLS
+
+#endif
diff --git a/gnome-initial-setup/pages/eulas/Makefile.am b/gnome-initial-setup/pages/eulas/Makefile.am
new file mode 100644
index 0000000..b5c9949
--- /dev/null
+++ b/gnome-initial-setup/pages/eulas/Makefile.am
@@ -0,0 +1,28 @@
+
+noinst_LTLIBRARIES = libgiseulas.la
+
+pkgdatadir = $(datadir)/gnome-initial-setup
+
+AM_CPPFLAGS = \
+ -DPKGDATADIR="\"$(pkgdatadir)\""
+
+BUILT_SOURCES =
+
+resource_files = $(shell glib-compile-resources --sourcedir=$(srcdir) --generate-dependencies
$(srcdir)/eulas.gresource.xml)
+eulas-resources.c: eulas.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
+eulas-resources.h: eulas.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
+BUILT_SOURCES += eulas-resources.c eulas-resources.h
+
+libgiseulas_la_SOURCES = \
+ gis-eula-page.c gis-eula-page.h \
+ gis-eula-pages.c gis-eula-pages.h \
+ utils.c utils.h \
+ $(BUILT_SOURCES)
+
+libgiseulas_la_CFLAGS = $(INITIAL_SETUP_CFLAGS) -I "$(srcdir)/../.."
+libgiseulas_la_LIBADD = $(INITIAL_SETUP_LIBS)
+libgiseulas_la_LDFLAGS = -export_dynamic -avoid-version -module -no-undefined
+
+EXTRA_DIST = eulas.gresource.xml $(resource_files)
diff --git a/gnome-initial-setup/pages/eulas/eulas.gresource.xml
b/gnome-initial-setup/pages/eulas/eulas.gresource.xml
new file mode 100644
index 0000000..4b8990f
--- /dev/null
+++ b/gnome-initial-setup/pages/eulas/eulas.gresource.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/initial-setup">
+ <file preprocess="xml-stripblanks" alias="gis-eula-page.ui">gis-eula-page.ui</file>
+ </gresource>
+</gresources>
diff --git a/gnome-initial-setup/pages/eulas/gis-eula-page.ui
b/gnome-initial-setup/pages/eulas/gis-eula-page.ui
new file mode 100644
index 0000000..0e70859
--- /dev/null
+++ b/gnome-initial-setup/pages/eulas/gis-eula-page.ui
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <template class="GisEulaPage" parent="GisPage">
+ <property name="needs-accept">True</property>
+ <child>
+ <object class="GtkBox" id="box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="can_focus">False</property>
+ <property name="halign">fill</property>
+ <property name="margin_left">80</property>
+ <property name="margin_right">80</property>
+ <child>
+ <object class="GtkLabel" id="title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ <property name="margin_bottom">18</property>
+ <property name="label" translatable="yes">License Agreements</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.6"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolled_window">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="shadow_type">etched-in</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="vexpand">True</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkTextView" id="text_view">
+ <property name="visible">True</property>
+ <property name="editable">False</property>
+ <property name="cursor_visible">False</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="checkbox">
+ <property name="visible">False</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">I have _agreed to the terms and conditions in this end
user license agreement.</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/eulas/utils.c b/gnome-initial-setup/pages/eulas/utils.c
new file mode 100644
index 0000000..20c08ac
--- /dev/null
+++ b/gnome-initial-setup/pages/eulas/utils.c
@@ -0,0 +1,180 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+#include "config.h"
+#include "utils.h"
+
+#include <gtk/gtk.h>
+#include <pango/pango.h>
+
+/* remove when this is landed in GTK+ itself */
+static GtkTextTag *
+text_buffer_get_text_tag_from_pango (PangoAttrIterator *paiter)
+{
+ PangoAttribute *attr;
+ GtkTextTag *tag = gtk_text_tag_new (NULL);
+
+ if ( (attr = pango_attr_iterator_get (paiter, PANGO_ATTR_LANGUAGE)))
+ g_object_set (tag, "language", pango_language_to_string ( ( (PangoAttrLanguage*)attr)->value), NULL);
+
+ if ( (attr = pango_attr_iterator_get (paiter, PANGO_ATTR_FAMILY)))
+ g_object_set (tag, "family", ( (PangoAttrString*)attr)->value, NULL);
+
+ if ( (attr = pango_attr_iterator_get (paiter, PANGO_ATTR_STYLE)))
+ g_object_set (tag, "style", ( (PangoAttrInt*)attr)->value, NULL);
+
+ if ( (attr = pango_attr_iterator_get (paiter, PANGO_ATTR_WEIGHT)))
+ g_object_set (tag, "weight", ( (PangoAttrInt*)attr)->value, NULL);
+
+ if ( (attr = pango_attr_iterator_get (paiter, PANGO_ATTR_VARIANT)))
+ g_object_set (tag, "variant", ( (PangoAttrInt*)attr)->value, NULL);
+
+ if ( (attr = pango_attr_iterator_get (paiter, PANGO_ATTR_STRETCH)))
+ g_object_set (tag, "stretch", ( (PangoAttrInt*)attr)->value, NULL);
+
+ if ( (attr = pango_attr_iterator_get (paiter, PANGO_ATTR_SIZE)))
+ g_object_set (tag, "size", ( (PangoAttrInt*)attr)->value, NULL);
+
+ if ( (attr = pango_attr_iterator_get (paiter, PANGO_ATTR_FONT_DESC)))
+ g_object_set (tag, "font-desc", ( (PangoAttrFontDesc*)attr)->desc, NULL);
+
+ if ( (attr = pango_attr_iterator_get (paiter, PANGO_ATTR_FOREGROUND))) {
+ GdkColor col = { 0,
+ ( (PangoAttrColor*)attr)->color.red,
+ ( (PangoAttrColor*)attr)->color.green,
+ ( (PangoAttrColor*)attr)->color.blue
+ };
+
+ g_object_set (tag, "foreground-gdk", &col, NULL);
+ }
+
+ if ( (attr = pango_attr_iterator_get (paiter, PANGO_ATTR_BACKGROUND))) {
+ GdkColor col = { 0,
+ ( (PangoAttrColor*)attr)->color.red,
+ ( (PangoAttrColor*)attr)->color.green,
+ ( (PangoAttrColor*)attr)->color.blue
+ };
+
+ g_object_set (tag, "background-gdk", &col, NULL);
+ }
+
+ if ( (attr = pango_attr_iterator_get (paiter, PANGO_ATTR_UNDERLINE)))
+ g_object_set (tag, "underline", ( (PangoAttrInt*)attr)->value, NULL);
+
+ if ( (attr = pango_attr_iterator_get (paiter, PANGO_ATTR_STRIKETHROUGH)))
+ g_object_set (tag, "strikethrough", (gboolean) ( ( (PangoAttrInt*)attr)->value != 0), NULL);
+
+ if ( (attr = pango_attr_iterator_get (paiter, PANGO_ATTR_RISE)))
+ g_object_set (tag, "rise", ( (PangoAttrInt*)attr)->value, NULL);
+
+ if ( (attr = pango_attr_iterator_get (paiter, PANGO_ATTR_SCALE)))
+ g_object_set (tag, "scale", ( (PangoAttrFloat*)attr)->value, NULL);
+
+ return tag;
+}
+
+static void
+text_buffer_insert_pango_text (GtkTextBuffer *buffer,
+ GtkTextIter *iter,
+ PangoAttrList *attrlist,
+ gchar *text)
+{
+ GtkTextMark *mark;
+ PangoAttrIterator *paiter;
+
+ g_return_if_fail (GTK_IS_TEXT_BUFFER (buffer));
+
+ /* trivial, no markup */
+ if (attrlist == NULL) {
+ gtk_text_buffer_insert (buffer, iter, text, -1);
+ return;
+ }
+
+ /* create mark with right gravity */
+ mark = gtk_text_buffer_create_mark (buffer, NULL, iter, FALSE);
+ paiter = pango_attr_list_get_iterator (attrlist);
+
+ do {
+ GtkTextTag *tag;
+ GtkTextTag *tag_para;
+ gint start, end;
+
+ pango_attr_iterator_range (paiter, &start, &end);
+
+ if (end == G_MAXINT) /* last chunk */
+ end = start-1; /* resulting in -1 to be passed to _insert */
+
+ tag = text_buffer_get_text_tag_from_pango (paiter);
+
+ gtk_text_tag_table_add (gtk_text_buffer_get_tag_table (buffer), tag);
+
+ tag_para = gtk_text_tag_table_lookup (gtk_text_buffer_get_tag_table (buffer), "para");
+ gtk_text_buffer_insert_with_tags (buffer, iter, text+start, end - start, tag, tag_para, NULL);
+
+ /* mark had right gravity, so it should be
+ * at the end of the inserted text now */
+ gtk_text_buffer_get_iter_at_mark (buffer, iter, mark);
+ } while (pango_attr_iterator_next (paiter));
+
+ gtk_text_buffer_delete_mark (buffer, mark);
+ pango_attr_iterator_destroy (paiter);
+}
+
+/* lifted from g_output_stream_splice */
+gboolean
+splice_buffer_text (GInputStream *stream,
+ GtkTextBuffer *buffer,
+ GError **error)
+{
+ char contents[8192];
+ gssize n_read;
+ GtkTextIter iter;
+
+ while (TRUE) {
+ n_read = g_input_stream_read (stream, contents, sizeof (contents), NULL, error);
+
+ /* error or eof */
+ if (n_read <= 0)
+ break;
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert (buffer, &iter, contents, n_read);
+ }
+
+ return (*error == NULL);
+}
+
+gboolean
+splice_buffer_markup (GInputStream *stream,
+ GtkTextBuffer *buffer,
+ GError **error)
+{
+ char contents[8192];
+ gssize n_read;
+ GtkTextIter iter;
+ GMarkupParseContext *context;
+ PangoAttrList *attr_list;
+ gchar *text;
+
+ context = pango_markup_parser_new (0);
+
+ while (TRUE) {
+ n_read = g_input_stream_read (stream, contents, sizeof (contents), NULL, error);
+
+ /* error or eof */
+ if (n_read <= 0)
+ break;
+
+ if (!g_markup_parse_context_parse (context, contents, n_read, error))
+ goto out;
+ }
+
+ if (!pango_markup_parser_finish (context, &attr_list, &text, NULL, error))
+ goto out;
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ text_buffer_insert_pango_text (buffer, &iter, attr_list, text);
+
+ out:
+ g_markup_parse_context_free (context);
+ return (*error == NULL);
+}
diff --git a/gnome-initial-setup/pages/eulas/utils.h b/gnome-initial-setup/pages/eulas/utils.h
new file mode 100644
index 0000000..ac017bb
--- /dev/null
+++ b/gnome-initial-setup/pages/eulas/utils.h
@@ -0,0 +1,20 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+#ifndef __UTILS_H__
+#define __UTILS_H__
+
+#include "gnome-initial-setup.h"
+
+G_BEGIN_DECLS
+
+gboolean splice_buffer_text (GInputStream *stream,
+ GtkTextBuffer *buffer,
+ GError **error);
+
+gboolean splice_buffer_markup (GInputStream *stream,
+ GtkTextBuffer *buffer,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* __UTILS_H__ */
diff --git a/gnome-initial-setup/pages/goa/Makefile.am b/gnome-initial-setup/pages/goa/Makefile.am
new file mode 100644
index 0000000..69bd5b0
--- /dev/null
+++ b/gnome-initial-setup/pages/goa/Makefile.am
@@ -0,0 +1,21 @@
+
+noinst_LTLIBRARIES = libgisgoa.la
+
+BUILT_SOURCES =
+
+resource_files = $(shell glib-compile-resources --sourcedir=$(srcdir) --generate-dependencies
$(srcdir)/goa.gresource.xml)
+goa-resources.c: goa.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
+goa-resources.h: goa.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
+BUILT_SOURCES += goa-resources.c goa-resources.h
+
+libgisgoa_la_SOURCES = \
+ gis-goa-page.c gis-goa-page.h \
+ $(BUILT_SOURCES)
+
+libgisgoa_la_CFLAGS = $(INITIAL_SETUP_CFLAGS) -I "$(srcdir)/../.." -I "$(top_srcdir)" -I "$(top_builddir)"
+libgisgoa_la_LIBADD = $(INITIAL_SETUP_LIBS)
+libgisgoa_la_LDFLAGS = -export_dynamic -avoid-version -module -no-undefined
+
+EXTRA_DIST = goa.gresource.xml $(resource_files)
diff --git a/gnome-initial-setup/pages/goa/gis-goa-page.ui b/gnome-initial-setup/pages/goa/gis-goa-page.ui
new file mode 100644
index 0000000..c7de4b4
--- /dev/null
+++ b/gnome-initial-setup/pages/goa/gis-goa-page.ui
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.0 on Wed Oct 23 11:13:34 2013 -->
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <template class="GisGoaPage" parent="GisPage">
+ <child>
+ <object class="GtkBox" id="box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">fill</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixel_size">96</property>
+ <property name="icon_name">goa-panel-symbolic</property>
+ <property name="icon_size">1</property>
+ <property name="margin_top">54</property>
+ <style>
+ <class name="dim-label" />
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ <property name="margin_top">26</property>
+ <property name="label" translatable="yes">Connect Your Online Accounts</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.6000000000000001"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">start</property>
+ <property name="margin_top">14</property>
+ <property name="label" translatable="yes">Connecting your accounts will allow you to easily
access your email, online calendar, contacts, documents and photos.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">50</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">in</property>
+ <property name="margin_top">18</property>
+ <child>
+ <object class="GtkListBox" id="accounts_list">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="selection_mode">none</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="footer_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">You can review your online accounts (and add others)
after setup.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="margin_bottom">32</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/goa/goa.gresource.xml b/gnome-initial-setup/pages/goa/goa.gresource.xml
new file mode 100644
index 0000000..ad1cfdf
--- /dev/null
+++ b/gnome-initial-setup/pages/goa/goa.gresource.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/initial-setup">
+ <file preprocess="xml-stripblanks" alias="gis-goa-page.ui">gis-goa-page.ui</file>
+ </gresource>
+</gresources>
+
diff --git a/gnome-initial-setup/pages/keyboard/Makefile.am b/gnome-initial-setup/pages/keyboard/Makefile.am
new file mode 100644
index 0000000..e7d74eb
--- /dev/null
+++ b/gnome-initial-setup/pages/keyboard/Makefile.am
@@ -0,0 +1,30 @@
+
+noinst_LTLIBRARIES = libgiskeyboard.la
+
+AM_CPPFLAGS = \
+ $(INITIAL_SETUP_CFLAGS) \
+ -DLOCALSTATEDIR="\"$(localstatedir)\"" \
+ -DUIDIR="\"$(uidir)\""
+
+BUILT_SOURCES =
+
+resource_files = $(shell glib-compile-resources --sourcedir=$(srcdir) --generate-dependencies
$(srcdir)/keyboard.gresource.xml)
+keyboard-resources.c: keyboard.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
+keyboard-resources.h: keyboard.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
+BUILT_SOURCES += keyboard-resources.c keyboard-resources.h
+
+libgiskeyboard_la_SOURCES = \
+ cc-input-chooser.c cc-input-chooser.h \
+ cc-common-language.c cc-common-language.h \
+ cc-ibus-utils.c cc-ibus-utils.h \
+ cc-util.c cc-util.h \
+ gis-keyboard-page.c gis-keyboard-page.h \
+ $(BUILT_SOURCES)
+
+libgiskeyboard_la_CFLAGS = $(INITIAL_SETUP_CFLAGS) -I "$(srcdir)/../.."
+libgiskeyboard_la_LIBADD = $(INITIAL_SETUP_LIBS)
+libgiskeyboard_la_LDFLAGS = -export_dynamic -avoid-version -module -no-undefined
+
+EXTRA_DIST = keyboard.gresource.xml $(resource_files)
diff --git a/gnome-initial-setup/pages/keyboard/cc-common-language.h
b/gnome-initial-setup/pages/keyboard/cc-common-language.h
new file mode 100644
index 0000000..7f32cab
--- /dev/null
+++ b/gnome-initial-setup/pages/keyboard/cc-common-language.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright 2009-2010 Red Hat, Inc,
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ *
+ * Written by: Matthias Clasen <mclasen redhat com>
+ */
+
+#ifndef __CC_COMMON_LANGUAGE_H__
+#define __CC_COMMON_LANGUAGE_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+gboolean cc_common_language_has_font (const gchar *locale);
+gchar *cc_common_language_get_current_language (void);
+GHashTable *cc_common_language_get_initial_languages (void);
+
+G_END_DECLS
+
+#endif
diff --git a/gnome-initial-setup/pages/keyboard/cc-util.c b/gnome-initial-setup/pages/keyboard/cc-util.c
new file mode 100644
index 0000000..e51a9d2
--- /dev/null
+++ b/gnome-initial-setup/pages/keyboard/cc-util.c
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2012 Giovanni Campagna <scampa giovanni gmail com>
+ *
+ * The Control Center is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * The Control Center is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with the Control Center; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+
+#include "cc-util.h"
+
+/* Combining diacritical mark?
+ * Basic range: [0x0300,0x036F]
+ * Supplement: [0x1DC0,0x1DFF]
+ * For Symbols: [0x20D0,0x20FF]
+ * Half marks: [0xFE20,0xFE2F]
+ */
+#define IS_CDM_UCS4(c) (((c) >= 0x0300 && (c) <= 0x036F) || \
+ ((c) >= 0x1DC0 && (c) <= 0x1DFF) || \
+ ((c) >= 0x20D0 && (c) <= 0x20FF) || \
+ ((c) >= 0xFE20 && (c) <= 0xFE2F))
+
+/* Copied from tracker/src/libtracker-fts/tracker-parser-glib.c under the GPL
+ * And then from gnome-shell/src/shell-util.c
+ *
+ * Originally written by Aleksander Morgado <aleksander gnu org>
+ */
+char *
+cc_util_normalize_casefold_and_unaccent (const char *str)
+{
+ char *normalized, *tmp;
+ int i = 0, j = 0, ilen;
+
+ if (str == NULL)
+ return NULL;
+
+ normalized = g_utf8_normalize (str, -1, G_NORMALIZE_NFKD);
+ tmp = g_utf8_casefold (normalized, -1);
+ g_free (normalized);
+
+ ilen = strlen (tmp);
+
+ while (i < ilen)
+ {
+ gunichar unichar;
+ gchar *next_utf8;
+ gint utf8_len;
+
+ /* Get next character of the word as UCS4 */
+ unichar = g_utf8_get_char_validated (&tmp[i], -1);
+
+ /* Invalid UTF-8 character or end of original string. */
+ if (unichar == (gunichar) -1 ||
+ unichar == (gunichar) -2)
+ {
+ break;
+ }
+
+ /* Find next UTF-8 character */
+ next_utf8 = g_utf8_next_char (&tmp[i]);
+ utf8_len = next_utf8 - &tmp[i];
+
+ if (IS_CDM_UCS4 ((guint32) unichar))
+ {
+ /* If the given unichar is a combining diacritical mark,
+ * just update the original index, not the output one */
+ i += utf8_len;
+ continue;
+ }
+
+ /* If already found a previous combining
+ * diacritical mark, indexes are different so
+ * need to copy characters. As output and input
+ * buffers may overlap, need to use memmove
+ * instead of memcpy */
+ if (i != j)
+ {
+ memmove (&tmp[j], &tmp[i], utf8_len);
+ }
+
+ /* Update both indexes */
+ i += utf8_len;
+ j += utf8_len;
+ }
+
+ /* Force proper string end */
+ tmp[j] = '\0';
+
+ return tmp;
+}
diff --git a/gnome-initial-setup/pages/keyboard/cc-util.h b/gnome-initial-setup/pages/keyboard/cc-util.h
new file mode 100644
index 0000000..42b09ff
--- /dev/null
+++ b/gnome-initial-setup/pages/keyboard/cc-util.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2012 Giovanni Campagna <scampa giovanni gmail com>
+ *
+ * The Control Center is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * The Control Center is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with the Control Center; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+
+#ifndef _CC_UTIL_H
+#define _CC_UTIL_H
+
+#include <glib.h>
+
+char *cc_util_normalize_casefold_and_unaccent (const char *str);
+
+#endif
diff --git a/gnome-initial-setup/pages/keyboard/gis-keyboard-page.ui
b/gnome-initial-setup/pages/keyboard/gis-keyboard-page.ui
new file mode 100644
index 0000000..994af6e
--- /dev/null
+++ b/gnome-initial-setup/pages/keyboard/gis-keyboard-page.ui
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <template class="GisKeyboardPage" parent="GisPage">
+ <child>
+ <object class="GtkBox" id="page">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">fill</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">54</property>
+ <property name="pixel_size">96</property>
+ <property name="icon_name">input-keyboard-symbolic</property>
+ <style>
+ <class name="dim-label" />
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">26</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ <property name="label" translatable="yes">Typing</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.8"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="subtitle">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">14</property>
+ <property name="label" translatable="yes">Select your keyboard layout or an input
method.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">50</property>
+ </object>
+ </child>
+ <child>
+ <object class="CcInputChooser" id="input_chooser">
+ <property name="margin_top">26</property>
+ <property name="margin_bottom">32</property>
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/keyboard/input-chooser.ui
b/gnome-initial-setup/pages/keyboard/input-chooser.ui
new file mode 100644
index 0000000..01b2bb0
--- /dev/null
+++ b/gnome-initial-setup/pages/keyboard/input-chooser.ui
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="3.0"/>
+ <template class="CcInputChooser" parent="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">10</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolled_window">
+ <property name="visible">True</property>
+ <property name="hscrollbar-policy">never</property>
+ <property name="vscrollbar-policy">never</property>
+ <property name="shadow-type">in</property>
+ <child>
+ <object class="GtkViewport" id="viewport">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkListBox" id="input_list">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSearchEntry" id="filter_entry">
+ <property name="visible">False</property>
+ <property name="hexpand">True</property>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/keyboard/keyboard.gresource.xml
b/gnome-initial-setup/pages/keyboard/keyboard.gresource.xml
new file mode 100644
index 0000000..103b3f1
--- /dev/null
+++ b/gnome-initial-setup/pages/keyboard/keyboard.gresource.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/initial-setup">
+ <file preprocess="xml-stripblanks">gis-keyboard-page.ui</file>
+ <file preprocess="xml-stripblanks">input-chooser.ui</file>
+ </gresource>
+</gresources>
diff --git a/gnome-initial-setup/pages/language/Makefile.am b/gnome-initial-setup/pages/language/Makefile.am
new file mode 100644
index 0000000..cca48f9
--- /dev/null
+++ b/gnome-initial-setup/pages/language/Makefile.am
@@ -0,0 +1,31 @@
+
+noinst_LTLIBRARIES = libgislanguage.la
+
+AM_CPPFLAGS = \
+ -I"$(top_srcdir)" \
+ -I"$(top_srcdir)/gnome-initial-setup" \
+ -I"$(top_builddir)" \
+ -DDATADIR=\""$(datadir)"\" \
+ -DGNOMELOCALEDIR=\""$(datadir)/locale"\"
+
+BUILT_SOURCES =
+
+resource_files = $(shell glib-compile-resources --sourcedir=$(srcdir) --generate-dependencies
$(srcdir)/language.gresource.xml)
+language-resources.c: language.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
+language-resources.h: language.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
+BUILT_SOURCES += language-resources.c language-resources.h
+
+libgislanguage_la_SOURCES = \
+ cc-common-language.c cc-common-language.h \
+ cc-language-chooser.c cc-language-chooser.h \
+ gis-welcome-widget.c gis-welcome-widget.h \
+ gis-language-page.c gis-language-page.h \
+ $(BUILT_SOURCES)
+
+libgislanguage_la_CFLAGS = $(INITIAL_SETUP_CFLAGS)
+libgislanguage_la_LIBADD = $(INITIAL_SETUP_LIBS)
+libgislanguage_la_LDFLAGS = -export_dynamic -avoid-version -module -no-undefined
+
+EXTRA_DIST = language.gresource.xml $(resource_files)
diff --git a/gnome-initial-setup/pages/language/cc-common-language.h
b/gnome-initial-setup/pages/language/cc-common-language.h
new file mode 100644
index 0000000..7f32cab
--- /dev/null
+++ b/gnome-initial-setup/pages/language/cc-common-language.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright 2009-2010 Red Hat, Inc,
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ *
+ * Written by: Matthias Clasen <mclasen redhat com>
+ */
+
+#ifndef __CC_COMMON_LANGUAGE_H__
+#define __CC_COMMON_LANGUAGE_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+gboolean cc_common_language_has_font (const gchar *locale);
+gchar *cc_common_language_get_current_language (void);
+GHashTable *cc_common_language_get_initial_languages (void);
+
+G_END_DECLS
+
+#endif
diff --git a/gnome-initial-setup/pages/language/gis-language-page.ui
b/gnome-initial-setup/pages/language/gis-language-page.ui
new file mode 100644
index 0000000..b54f677
--- /dev/null
+++ b/gnome-initial-setup/pages/language/gis-language-page.ui
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="3.0"/>
+ <template class="GisLanguagePage" parent="GisPage">
+ <child>
+ <object class="GtkBox" id="box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="halign">center</property>
+ <property name="valign">fill</property>
+ <child>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">54</property>
+ <property name="pixel_size">96</property>
+ <property name="icon_name">start-here-symbolic</property>
+ <style>
+ <class name="dim-label" />
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GisWelcomeWidget" id="welcome_widget">
+ <property name="visible">True</property>
+ <property name="margin_top">26</property>
+ <property name="margin_bottom">26</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ <child>
+ <object class="CcLanguageChooser" id="language_chooser">
+ <property name="margin_bottom">32</property>
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/language/gis-welcome-widget.ui
b/gnome-initial-setup/pages/language/gis-welcome-widget.ui
new file mode 100644
index 0000000..251ad46
--- /dev/null
+++ b/gnome-initial-setup/pages/language/gis-welcome-widget.ui
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="3.0"/>
+ <template class="GisWelcomeWidget" parent="GtkBin">
+ <property name="margin-top">10</property>
+ <property name="margin-bottom">10</property>
+ <child>
+ <object class="GtkStack" id="stack">
+ <property name="visible">True</property>
+ <property name="transition-type">slide-left</property>
+ <property name="transition-duration">1000</property>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/language/language-chooser.ui
b/gnome-initial-setup/pages/language/language-chooser.ui
new file mode 100644
index 0000000..84ae749
--- /dev/null
+++ b/gnome-initial-setup/pages/language/language-chooser.ui
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="3.0"/>
+ <template class="CcLanguageChooser" parent="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">10</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolled_window">
+ <property name="visible">True</property>
+ <property name="hscrollbar-policy">never</property>
+ <property name="vscrollbar-policy">never</property>
+ <property name="shadow-type">in</property>
+ <child>
+ <object class="GtkViewport" id="viewport">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkListBox" id="language_list">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSearchEntry" id="filter_entry">
+ <property name="visible">False</property>
+ <property name="hexpand">True</property>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/language/language.gresource.xml
b/gnome-initial-setup/pages/language/language.gresource.xml
new file mode 100644
index 0000000..de0688d
--- /dev/null
+++ b/gnome-initial-setup/pages/language/language.gresource.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/initial-setup">
+ <file preprocess="xml-stripblanks" alias="gis-language-page.ui">gis-language-page.ui</file>
+ <file preprocess="xml-stripblanks" alias="gis-welcome-widget.ui">gis-welcome-widget.ui</file>
+ </gresource>
+ <gresource prefix="/org/gnome/control-center">
+ <file preprocess="xml-stripblanks" alias="language-chooser.ui">language-chooser.ui</file>
+ </gresource>
+</gresources>
diff --git a/gnome-initial-setup/pages/network/Makefile.am b/gnome-initial-setup/pages/network/Makefile.am
new file mode 100644
index 0000000..93f3c35
--- /dev/null
+++ b/gnome-initial-setup/pages/network/Makefile.am
@@ -0,0 +1,22 @@
+
+noinst_LTLIBRARIES = libgisnetwork.la
+
+BUILT_SOURCES =
+
+resource_files = $(shell glib-compile-resources --sourcedir=$(srcdir) --generate-dependencies
$(srcdir)/network.gresource.xml)
+network-resources.c: network.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
+network-resources.h: network.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
+BUILT_SOURCES += network-resources.c network-resources.h
+
+libgisnetwork_la_SOURCES = \
+ network-dialogs.c network-dialogs.h \
+ gis-network-page.c gis-network-page.h \
+ $(BUILT_SOURCES)
+
+libgisnetwork_la_CFLAGS = $(INITIAL_SETUP_CFLAGS) -I "$(srcdir)/../.."
+libgisnetwork_la_LIBADD = $(INITIAL_SETUP_LIBS)
+libgisnetwork_la_LDFLAGS = -export_dynamic -avoid-version -module -no-undefined
+
+EXTRA_DIST = network.gresource.xml $(resource_files)
diff --git a/gnome-initial-setup/pages/network/gis-network-page.ui
b/gnome-initial-setup/pages/network/gis-network-page.ui
new file mode 100644
index 0000000..419a7e4
--- /dev/null
+++ b/gnome-initial-setup/pages/network/gis-network-page.ui
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.0 on Wed Oct 16 17:37:48 2013 -->
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <template class="GisNetworkPage" parent="GisPage">
+ <child>
+ <object class="GtkBox" id="box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">fill</property>
+ <property name="margin_bottom">32</property>
+ <child>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">54</property>
+ <property name="pixel_size">96</property>
+ <property name="icon_name">network-wireless-symbolic</property>
+ <style>
+ <class name="dim-label" />
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">26</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ <property name="label" translatable="yes">Wi-Fi</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.8"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">14</property>
+ <property name="label" translatable="yes">Connecting to the Internet will enable you to set the
time, add your details, and enable you to access your email, calendar, and contacts. It is also necessary for
enterprise login accounts.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">50</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolled_window">
+ <property name="margin_top">18</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkViewport" id="viewport1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkListBox" id="network_list">
+ <property name="visible">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="no_network_grid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">18</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkSpinner" id="no_network_spinner">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="margin_left">6</property>
+ <property name="margin_right">6</property>
+ <property name="active">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="no_network_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="label">No text</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/network/network-dialogs.c
b/gnome-initial-setup/pages/network/network-dialogs.c
new file mode 100644
index 0000000..81f0da8
--- /dev/null
+++ b/gnome-initial-setup/pages/network/network-dialogs.c
@@ -0,0 +1,518 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2011 Giovanni Campagna <scampa giovanni gmail com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Portions of this code were taken from network-manager-applet.
+ * Copyright 2008 - 2011 Red Hat, Inc.
+ */
+
+#include <nm-utils.h>
+#include <nm-connection.h>
+#include <nm-setting-gsm.h>
+#include <nm-setting-cdma.h>
+#include <nm-setting-serial.h>
+#include <nm-device-modem.h>
+#include <nm-device-wifi.h>
+
+#include "network-dialogs.h"
+#include "nm-wifi-dialog.h"
+#include "nm-mobile-wizard.h"
+
+typedef struct {
+ NMClient *client;
+ NMRemoteSettings *settings;
+} WirelessDialogClosure;
+
+typedef struct {
+ NMClient *client;
+ NMRemoteSettings *settings;
+ NMDevice *device;
+} MobileDialogClosure;
+
+static void
+wireless_dialog_closure_closure_notify (gpointer data,
+ GClosure *gclosure)
+{
+ WirelessDialogClosure *closure = data;
+ g_object_unref (closure->client);
+ g_object_unref (closure->settings);
+
+ g_slice_free (WirelessDialogClosure, data);
+}
+
+static void
+mobile_dialog_closure_free (gpointer data)
+{
+ MobileDialogClosure *closure = data;
+ g_object_unref (closure->client);
+ g_object_unref (closure->settings);
+ g_object_unref (closure->device);
+
+ g_slice_free (MobileDialogClosure, data);
+}
+
+static gboolean
+wifi_can_create_wifi_network (NMClient *client)
+{
+ NMClientPermissionResult perm;
+
+ /* FIXME: check WIFI_SHARE_PROTECTED too, and make the wireless dialog
+ * handle the permissions as well so that admins can restrict open network
+ * creation separately from protected network creation.
+ */
+ perm = nm_client_get_permission_result (client, NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN);
+ if (perm == NM_CLIENT_PERMISSION_RESULT_YES || perm == NM_CLIENT_PERMISSION_RESULT_AUTH)
+ return TRUE;
+
+ return FALSE;
+}
+
+static void
+activate_existing_cb (NMClient *client,
+ NMActiveConnection *active,
+ GError *error,
+ gpointer user_data)
+{
+ if (error)
+ g_warning ("Failed to activate connection: (%d) %s", error->code, error->message);
+}
+
+static void
+activate_new_cb (NMClient *client,
+ NMActiveConnection *active,
+ const char *connection_path,
+ GError *error,
+ gpointer user_data)
+{
+ if (error)
+ g_warning ("Failed to add new connection: (%d) %s", error->code, error->message);
+}
+
+static void
+wireless_dialog_response_cb (GtkDialog *foo,
+ gint response,
+ gpointer user_data)
+{
+ NMAWifiDialog *dialog = NMA_WIFI_DIALOG (foo);
+ WirelessDialogClosure *closure = user_data;
+ NMConnection *connection, *fuzzy_match = NULL;
+ NMDevice *device;
+ NMAccessPoint *ap;
+ GSList *all, *iter;
+
+ if (response != GTK_RESPONSE_OK)
+ goto done;
+
+ /* nma_wifi_dialog_get_connection() returns a connection with the
+ * refcount incremented, so the caller must remember to unref it.
+ */
+ connection = nma_wifi_dialog_get_connection (dialog, &device, &ap);
+ g_assert (connection);
+ g_assert (device);
+
+ /* Find a similar connection and use that instead */
+ all = nm_remote_settings_list_connections (closure->settings);
+ for (iter = all; iter; iter = g_slist_next (iter)) {
+ if (nm_connection_compare (connection,
+ NM_CONNECTION (iter->data),
+ (NM_SETTING_COMPARE_FLAG_FUZZY |
NM_SETTING_COMPARE_FLAG_IGNORE_ID))) {
+ fuzzy_match = NM_CONNECTION (iter->data);
+ break;
+ }
+ }
+ g_slist_free (all);
+
+ if (fuzzy_match) {
+ nm_client_activate_connection (closure->client,
+ fuzzy_match,
+ device,
+ ap ? nm_object_get_path (NM_OBJECT (ap)) : NULL,
+ activate_existing_cb,
+ NULL);
+ } else {
+ NMSetting *s_con;
+ NMSettingWireless *s_wifi;
+ const char *mode = NULL;
+
+ /* Entirely new connection */
+
+ /* Don't autoconnect adhoc networks by default for now */
+ s_wifi = (NMSettingWireless *) nm_connection_get_setting (connection,
NM_TYPE_SETTING_WIRELESS);
+ if (s_wifi)
+ mode = nm_setting_wireless_get_mode (s_wifi);
+ if (g_strcmp0 (mode, "adhoc") == 0) {
+ s_con = nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
+ if (!s_con) {
+ s_con = nm_setting_connection_new ();
+ nm_connection_add_setting (connection, s_con);
+ }
+ g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_AUTOCONNECT, FALSE, NULL);
+ }
+
+ nm_client_add_and_activate_connection (closure->client,
+ connection,
+ device,
+ ap ? nm_object_get_path (NM_OBJECT (ap)) : NULL,
+ activate_new_cb,
+ NULL);
+ }
+
+ /* Balance nma_wifi_dialog_get_connection() */
+ g_object_unref (connection);
+
+done:
+ gtk_widget_hide (GTK_WIDGET (dialog));
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
+static void
+show_wireless_dialog (GtkWidget *toplevel,
+ NMClient *client,
+ NMRemoteSettings *settings,
+ GtkWidget *dialog)
+{
+ WirelessDialogClosure *closure;
+
+ g_debug ("About to parent and show a network dialog");
+
+ g_assert (gtk_widget_is_toplevel (toplevel));
+ g_object_set (G_OBJECT (dialog),
+ "modal", TRUE,
+ "transient-for", toplevel,
+ NULL);
+
+ closure = g_slice_new (WirelessDialogClosure);
+ closure->client = g_object_ref (client);
+ closure->settings = g_object_ref (settings);
+ g_signal_connect_data (dialog, "response",
+ G_CALLBACK (wireless_dialog_response_cb),
+ closure, wireless_dialog_closure_closure_notify, 0);
+
+ g_object_bind_property (G_OBJECT (toplevel), "visible",
+ G_OBJECT (dialog), "visible",
+ G_BINDING_SYNC_CREATE);
+}
+
+void
+cc_network_panel_create_wifi_network (GtkWidget *toplevel,
+ NMClient *client,
+ NMRemoteSettings *settings)
+{
+ if (wifi_can_create_wifi_network (client)) {
+ show_wireless_dialog (toplevel, client, settings,
+ nma_wifi_dialog_new_for_create (client, settings));
+ }
+}
+
+void
+cc_network_panel_connect_to_hidden_network (GtkWidget *toplevel,
+ NMClient *client,
+ NMRemoteSettings *settings)
+{
+ g_debug ("connect to hidden wifi");
+ show_wireless_dialog (toplevel, client, settings,
+ nma_wifi_dialog_new_for_other (client, settings));
+}
+
+void
+cc_network_panel_connect_to_8021x_network (GtkWidget *toplevel,
+ NMClient *client,
+ NMRemoteSettings *settings,
+ NMDevice *device,
+ const gchar *arg_access_point)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWireless *s_wifi;
+ NMSettingWirelessSecurity *s_wsec;
+ NMSetting8021x *s_8021x;
+ NM80211ApSecurityFlags wpa_flags, rsn_flags;
+ GtkWidget *dialog;
+ char *uuid;
+ NMAccessPoint *ap;
+
+ g_debug ("connect to 8021x wifi");
+ ap = nm_device_wifi_get_access_point_by_path (NM_DEVICE_WIFI (device), arg_access_point);
+ if (ap == NULL) {
+ g_warning ("didn't find access point with path %s", arg_access_point);
+ return;
+ }
+
+ /* If the AP is WPA[2]-Enterprise then we need to set up a minimal 802.1x
+ * setting and ask the user for more information.
+ */
+ rsn_flags = nm_access_point_get_rsn_flags (ap);
+ wpa_flags = nm_access_point_get_wpa_flags (ap);
+ if (!(rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)
+ && !(wpa_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)) {
+ g_warning ("Network panel loaded with connect-8021x-wifi but the "
+ "access point does not support 802.1x");
+ return;
+ }
+
+ connection = nm_connection_new ();
+
+ /* Need a UUID for the "always ask" stuff in the Dialog of Doom */
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con, NM_SETTING_CONNECTION_UUID, uuid, NULL);
+ g_free (uuid);
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_wifi));
+ g_object_set (s_wifi,
+ NM_SETTING_WIRELESS_SSID, nm_access_point_get_ssid (ap),
+ NM_SETTING_WIRELESS_SEC, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NULL);
+
+ s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
+ g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-eap", NULL);
+ nm_connection_add_setting (connection, NM_SETTING (s_wsec));
+
+ s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
+ nm_setting_802_1x_add_eap_method (s_8021x, "ttls");
+ g_object_set (s_8021x, NM_SETTING_802_1X_PHASE2_AUTH, "mschapv2", NULL);
+ nm_connection_add_setting (connection, NM_SETTING (s_8021x));
+
+ dialog = nma_wifi_dialog_new (client, settings, connection, device, ap, FALSE);
+ show_wireless_dialog (toplevel, client, settings, dialog);
+}
+
+static void
+connect_3g (NMConnection *connection,
+ gboolean canceled,
+ gpointer user_data)
+{
+ MobileDialogClosure *closure = user_data;
+
+ if (canceled == FALSE) {
+ g_return_if_fail (connection != NULL);
+
+ /* Ask NM to add the new connection and activate it; NM will fill in the
+ * missing details based on the specific object and the device.
+ */
+ nm_client_add_and_activate_connection (closure->client,
+ connection,
+ closure->device,
+ "/",
+ activate_new_cb,
+ NULL);
+ }
+
+ mobile_dialog_closure_free (closure);
+}
+
+static void
+cdma_mobile_wizard_done (NMAMobileWizard *wizard,
+ gboolean canceled,
+ NMAMobileWizardAccessMethod *method,
+ gpointer user_data)
+{
+ NMConnection *connection = NULL;
+
+ if (!canceled && method) {
+ NMSetting *setting;
+ char *uuid, *id;
+
+ if (method->devtype != NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO) {
+ g_warning ("Unexpected device type (not CDMA).");
+ canceled = TRUE;
+ goto done;
+ }
+
+ connection = nm_connection_new ();
+
+ setting = nm_setting_cdma_new ();
+ g_object_set (setting,
+ NM_SETTING_CDMA_NUMBER, "#777",
+ NM_SETTING_CDMA_USERNAME, method->username,
+ NM_SETTING_CDMA_PASSWORD, method->password,
+ NULL);
+ nm_connection_add_setting (connection, setting);
+
+ /* Serial setting */
+ setting = nm_setting_serial_new ();
+ g_object_set (setting,
+ NM_SETTING_SERIAL_BAUD, 115200,
+ NM_SETTING_SERIAL_BITS, 8,
+ NM_SETTING_SERIAL_PARITY, 'n',
+ NM_SETTING_SERIAL_STOPBITS, 1,
+ NULL);
+ nm_connection_add_setting (connection, setting);
+
+ nm_connection_add_setting (connection, nm_setting_ppp_new ());
+
+ setting = nm_setting_connection_new ();
+ if (method->plan_name)
+ id = g_strdup_printf ("%s %s", method->provider_name, method->plan_name);
+ else
+ id = g_strdup_printf ("%s connection", method->provider_name);
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (setting,
+ NM_SETTING_CONNECTION_ID, id,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_CDMA_SETTING_NAME,
+ NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NULL);
+ g_free (uuid);
+ g_free (id);
+ nm_connection_add_setting (connection, setting);
+ }
+
+ done:
+ connect_3g (connection, canceled, user_data);
+ nma_mobile_wizard_destroy (wizard);
+}
+
+static void
+gsm_mobile_wizard_done (NMAMobileWizard *wizard,
+ gboolean canceled,
+ NMAMobileWizardAccessMethod *method,
+ gpointer user_data)
+{
+ NMConnection *connection = NULL;
+
+ if (!canceled && method) {
+ NMSetting *setting;
+ char *uuid, *id;
+
+ if (method->devtype != NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS) {
+ g_warning ("Unexpected device type (not GSM).");
+ canceled = TRUE;
+ goto done;
+ }
+
+ connection = nm_connection_new ();
+
+ setting = nm_setting_gsm_new ();
+ g_object_set (setting,
+ NM_SETTING_GSM_NUMBER, "*99#",
+ NM_SETTING_GSM_USERNAME, method->username,
+ NM_SETTING_GSM_PASSWORD, method->password,
+ NM_SETTING_GSM_APN, method->gsm_apn,
+ NULL);
+ nm_connection_add_setting (connection, setting);
+
+ /* Serial setting */
+ setting = nm_setting_serial_new ();
+ g_object_set (setting,
+ NM_SETTING_SERIAL_BAUD, 115200,
+ NM_SETTING_SERIAL_BITS, 8,
+ NM_SETTING_SERIAL_PARITY, 'n',
+ NM_SETTING_SERIAL_STOPBITS, 1,
+ NULL);
+ nm_connection_add_setting (connection, setting);
+
+ nm_connection_add_setting (connection, nm_setting_ppp_new ());
+
+ setting = nm_setting_connection_new ();
+ if (method->plan_name)
+ id = g_strdup_printf ("%s %s", method->provider_name, method->plan_name);
+ else
+ id = g_strdup_printf ("%s connection", method->provider_name);
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (setting,
+ NM_SETTING_CONNECTION_ID, id,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_GSM_SETTING_NAME,
+ NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NULL);
+ g_free (uuid);
+ g_free (id);
+ nm_connection_add_setting (connection, setting);
+ }
+
+done:
+ connect_3g (connection, canceled, user_data);
+ nma_mobile_wizard_destroy (wizard);
+}
+
+static void
+toplevel_shown (GtkWindow *toplevel,
+ GParamSpec *pspec,
+ NMAMobileWizard *wizard)
+{
+ gboolean visible = FALSE;
+
+ g_object_get (G_OBJECT (toplevel), "visible", &visible, NULL);
+ if (visible)
+ nma_mobile_wizard_present (wizard);
+}
+
+static gboolean
+show_wizard_idle_cb (NMAMobileWizard *wizard)
+{
+ nma_mobile_wizard_present (wizard);
+ return FALSE;
+}
+
+void
+cc_network_panel_connect_to_3g_network (GtkWidget *toplevel,
+ NMClient *client,
+ NMRemoteSettings *settings,
+ NMDevice *device)
+{
+ MobileDialogClosure *closure;
+ NMAMobileWizard *wizard;
+ NMDeviceModemCapabilities caps;
+ gboolean visible = FALSE;
+
+ g_debug ("connect to 3g");
+ if (!NM_IS_DEVICE_MODEM (device)) {
+ g_warning ("Network panel loaded with connect-3g but the selected device"
+ " is not a modem");
+ return;
+ }
+
+ closure = g_slice_new (MobileDialogClosure);
+ closure->client = g_object_ref (client);
+ closure->settings = g_object_ref (settings);
+ closure->device = g_object_ref (device);
+
+ caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (device));
+ if (caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS) {
+ wizard = nma_mobile_wizard_new (GTK_WINDOW (toplevel), NULL,
NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS, FALSE,
+ gsm_mobile_wizard_done, closure);
+ if (wizard == NULL) {
+ g_warning ("failed to construct GSM wizard");
+ return;
+ }
+ } else if (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO) {
+ wizard = nma_mobile_wizard_new (GTK_WINDOW (toplevel), NULL,
NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO, FALSE,
+ cdma_mobile_wizard_done, closure);
+ if (wizard == NULL) {
+ g_warning ("failed to construct CDMA wizard");
+ return;
+ }
+ } else {
+ g_warning ("Network panel loaded with connect-3g but the selected device"
+ " does not support GSM or CDMA");
+ mobile_dialog_closure_free (closure);
+ return;
+ }
+
+ g_object_get (G_OBJECT (toplevel), "visible", &visible, NULL);
+ if (visible) {
+ g_debug ("Scheduling showing the Mobile wizard");
+ g_idle_add ((GSourceFunc) show_wizard_idle_cb, wizard);
+ } else {
+ g_debug ("Will show wizard a bit later, toplevel is not visible");
+ g_signal_connect (G_OBJECT (toplevel), "notify::visible",
+ G_CALLBACK (toplevel_shown), wizard);
+ }
+}
diff --git a/gnome-initial-setup/pages/network/network-dialogs.h
b/gnome-initial-setup/pages/network/network-dialogs.h
new file mode 100644
index 0000000..ddbf392
--- /dev/null
+++ b/gnome-initial-setup/pages/network/network-dialogs.h
@@ -0,0 +1,48 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2011 Giovanni Campagna <scampa giovanni gmail com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef _NETWORK_DIALOGS_H
+#define _NETWORK_DIALOGS_H
+
+#include <nm-client.h>
+#include <nm-remote-settings.h>
+#include <nm-device.h>
+#include <nm-access-point.h>
+#include <gtk/gtk.h>
+
+void cc_network_panel_create_wifi_network (GtkWidget *toplevel,
+ NMClient *client,
+ NMRemoteSettings *settings);
+
+void cc_network_panel_connect_to_hidden_network (GtkWidget *toplevel,
+ NMClient *client,
+ NMRemoteSettings *settings);
+
+void cc_network_panel_connect_to_8021x_network (GtkWidget *toplevel,
+ NMClient *client,
+ NMRemoteSettings *settings,
+ NMDevice *device,
+ const gchar *arg_access_point);
+
+void cc_network_panel_connect_to_3g_network (GtkWidget *toplevel,
+ NMClient *client,
+ NMRemoteSettings *settings,
+ NMDevice *device);
+
+#endif /* _NETWORK_DIALOGS_H */
diff --git a/gnome-initial-setup/pages/network/network.gresource.xml
b/gnome-initial-setup/pages/network/network.gresource.xml
new file mode 100644
index 0000000..bf5394f
--- /dev/null
+++ b/gnome-initial-setup/pages/network/network.gresource.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/initial-setup">
+ <file preprocess="xml-stripblanks" alias="gis-network-page.ui">gis-network-page.ui</file>
+ </gresource>
+</gresources>
diff --git a/gnome-initial-setup/pages/password/Makefile.am b/gnome-initial-setup/pages/password/Makefile.am
new file mode 100644
index 0000000..015f5e3
--- /dev/null
+++ b/gnome-initial-setup/pages/password/Makefile.am
@@ -0,0 +1,42 @@
+
+NULL =
+
+noinst_LTLIBRARIES = libgispassword.la
+
+BUILT_SOURCES =
+
+um-realm-generated.c: um-realm-generated.h
+um-realm-generated.h: $(srcdir)/org.freedesktop.realmd.xml
+ $(AM_V_GEN) gdbus-codegen \
+ --interface-prefix org.freedesktop.realmd \
+ --generate-c-code um-realm-generated \
+ --c-namespace UmRealm $< \
+ --c-generate-object-manager \
+ --annotate "org.freedesktop.realmd.Realm" org.gtk.GDBus.C.Name Common
+BUILT_SOURCES += um-realm-generated.c um-realm-generated.h
+
+resource_files = $(shell glib-compile-resources --sourcedir=$(srcdir) --generate-dependencies
$(srcdir)/password.gresource.xml)
+password-resources.c: password.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
+password-resources.h: password.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
+BUILT_SOURCES += password-resources.c password-resources.h
+
+libgispassword_la_SOURCES = \
+ $(BUILT_SOURCES) \
+ gis-password-page.c gis-password-page.h \
+ gis-account-page-local.c gis-account-page-local.h \
+ gis-account-page-enterprise.c gis-account-page-enterprise.h \
+ um-realm-manager.c um-realm-manager.h \
+ um-utils.c um-utils.h \
+ pw-utils.c pw-utils.h \
+ $(NULL)
+
+libgispassword_la_CFLAGS = $(INITIAL_SETUP_CFLAGS) -I "$(srcdir)/../.."
+libgispassword_la_LIBADD = $(INITIAL_SETUP_LIBS) -lcrypt
+libgispassword_la_LDFLAGS = -export_dynamic -avoid-version -module -no-undefined
+
+EXTRA_DIST = \
+ org.freedesktop.realmd.xml \
+ password.gresource.xml \
+ $(resource_files)
diff --git a/gnome-initial-setup/pages/password/account-resources.c
b/gnome-initial-setup/pages/password/account-resources.c
new file mode 100644
index 0000000..39cee33
--- /dev/null
+++ b/gnome-initial-setup/pages/password/account-resources.c
@@ -0,0 +1,3381 @@
+#include <gio/gio.h>
+
+#if defined (__ELF__) && ( __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 6))
+# define SECTION __attribute__ ((section (".gresource.account"), aligned (8)))
+#else
+# define SECTION
+#endif
+
+static const SECTION union { const guint8 data[25984]; const double alignment; void * const ptr;}
account_resource_data = { {
+ 0x47, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x28, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x4b, 0x50, 0x90, 0x0b,
+ 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x4c, 0x00, 0xe8, 0x00, 0x00, 0x00,
+ 0xec, 0x00, 0x00, 0x00, 0xd4, 0xb5, 0x02, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xec, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x4c, 0x00, 0xf0, 0x00, 0x00, 0x00,
+ 0xf4, 0x00, 0x00, 0x00, 0x52, 0x87, 0x91, 0x6a,
+ 0x04, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00,
+ 0x19, 0x00, 0x76, 0x00, 0x10, 0x01, 0x00, 0x00,
+ 0xa8, 0x25, 0x00, 0x00, 0xfa, 0xa8, 0x7d, 0x23,
+ 0x04, 0x00, 0x00, 0x00, 0xa8, 0x25, 0x00, 0x00,
+ 0x13, 0x00, 0x76, 0x00, 0xc0, 0x25, 0x00, 0x00,
+ 0x39, 0x2b, 0x00, 0x00, 0xa7, 0xee, 0x9a, 0xec,
+ 0x06, 0x00, 0x00, 0x00, 0x39, 0x2b, 0x00, 0x00,
+ 0x0e, 0x00, 0x4c, 0x00, 0x48, 0x2b, 0x00, 0x00,
+ 0x54, 0x2b, 0x00, 0x00, 0xa8, 0xa1, 0xf8, 0xa8,
+ 0x04, 0x00, 0x00, 0x00, 0x54, 0x2b, 0x00, 0x00,
+ 0x1e, 0x00, 0x76, 0x00, 0x78, 0x2b, 0x00, 0x00,
+ 0x73, 0x65, 0x00, 0x00, 0xb0, 0xb7, 0x24, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x73, 0x65, 0x00, 0x00,
+ 0x06, 0x00, 0x4c, 0x00, 0x7c, 0x65, 0x00, 0x00,
+ 0x80, 0x65, 0x00, 0x00, 0x6f, 0x72, 0x67, 0x2f,
+ 0x06, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x67, 0x69, 0x73, 0x2d,
+ 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2d,
+ 0x70, 0x61, 0x67, 0x65, 0x2d, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x2e, 0x75, 0x69, 0x00, 0x00, 0x00,
+ 0x88, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3c, 0x3f, 0x78, 0x6d, 0x6c, 0x20, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x31,
+ 0x2e, 0x30, 0x22, 0x20, 0x65, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x55, 0x54,
+ 0x46, 0x2d, 0x38, 0x22, 0x3f, 0x3e, 0x0a, 0x3c,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
+ 0x65, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
+ 0x2d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
+ 0x73, 0x20, 0x67, 0x74, 0x6b, 0x2b, 0x20, 0x33,
+ 0x2e, 0x30, 0x20, 0x2d, 0x2d, 0x3e, 0x3c, 0x74,
+ 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
+ 0x74, 0x50, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x22, 0x20, 0x70, 0x61, 0x72, 0x65,
+ 0x6e, 0x74, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x42,
+ 0x69, 0x6e, 0x22, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x42, 0x6f, 0x78,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x61, 0x72,
+ 0x65, 0x61, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46,
+ 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68,
+ 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x63,
+ 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e,
+ 0x66, 0x69, 0x6c, 0x6c, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6f,
+ 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x3e, 0x76, 0x65, 0x72, 0x74,
+ 0x69, 0x63, 0x61, 0x6c, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c,
+ 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b,
+ 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x61, 0x76, 0x61, 0x74,
+ 0x61, 0x72, 0x2d, 0x62, 0x75, 0x74, 0x74, 0x6f,
+ 0x6e, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69,
+ 0x6e, 0x5f, 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x35,
+ 0x34, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69,
+ 0x67, 0x6e, 0x22, 0x3e, 0x63, 0x65, 0x6e, 0x74,
+ 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x49, 0x6d,
+ 0x61, 0x67, 0x65, 0x22, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x2d,
+ 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f,
+ 0x73, 0x69, 0x7a, 0x65, 0x22, 0x3e, 0x39, 0x36,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x69, 0x63, 0x6f, 0x6e, 0x5f,
+ 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x61, 0x76,
+ 0x61, 0x74, 0x61, 0x72, 0x2d, 0x64, 0x65, 0x66,
+ 0x61, 0x75, 0x6c, 0x74, 0x2d, 0x73, 0x79, 0x6d,
+ 0x62, 0x6f, 0x6c, 0x69, 0x63, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x7a,
+ 0x65, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x64, 0x69, 0x6d, 0x2d, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x2f, 0x3e, 0x3c,
+ 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46,
+ 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68,
+ 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x63,
+ 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e,
+ 0x73, 0x74, 0x61, 0x72, 0x74, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x5f, 0x74,
+ 0x6f, 0x70, 0x22, 0x3e, 0x32, 0x36, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x68, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20,
+ 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65,
+ 0x73, 0x22, 0x3e, 0x41, 0x62, 0x6f, 0x75, 0x74,
+ 0x20, 0x59, 0x6f, 0x75, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x73, 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x65, 0x69, 0x67,
+ 0x68, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x3d, 0x22, 0x62, 0x6f, 0x6c, 0x64, 0x22,
+ 0x2f, 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x73, 0x63, 0x61, 0x6c, 0x65,
+ 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d,
+ 0x22, 0x31, 0x2e, 0x38, 0x22, 0x2f, 0x3e, 0x3c,
+ 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61,
+ 0x62, 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x61,
+ 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x73, 0x74,
+ 0x61, 0x72, 0x74, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61,
+ 0x72, 0x67, 0x69, 0x6e, 0x5f, 0x74, 0x6f, 0x70,
+ 0x22, 0x3e, 0x31, 0x34, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72,
+ 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22,
+ 0x3e, 0x57, 0x65, 0x20, 0x6e, 0x65, 0x65, 0x64,
+ 0x20, 0x61, 0x20, 0x66, 0x65, 0x77, 0x20, 0x64,
+ 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x74,
+ 0x6f, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
+ 0x74, 0x65, 0x20, 0x73, 0x65, 0x74, 0x75, 0x70,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6a, 0x75, 0x73, 0x74,
+ 0x69, 0x66, 0x79, 0x22, 0x3e, 0x63, 0x65, 0x6e,
+ 0x74, 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x72,
+ 0x61, 0x70, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x78, 0x2d, 0x77,
+ 0x69, 0x64, 0x74, 0x68, 0x2d, 0x63, 0x68, 0x61,
+ 0x72, 0x73, 0x22, 0x3e, 0x35, 0x30, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22,
+ 0x47, 0x74, 0x6b, 0x47, 0x72, 0x69, 0x64, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x66, 0x6f, 0x72,
+ 0x6d, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x6f,
+ 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x73, 0x70, 0x61,
+ 0x63, 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x31, 0x32,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x72, 0x6f, 0x77, 0x5f, 0x73,
+ 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x22, 0x3e,
+ 0x31, 0x32, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72,
+ 0x67, 0x69, 0x6e, 0x5f, 0x74, 0x6f, 0x70, 0x22,
+ 0x3e, 0x35, 0x34, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61,
+ 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x66, 0x75, 0x6c, 0x6c, 0x6e, 0x61,
+ 0x6d, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c,
+ 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x65, 0x6e, 0x64,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67,
+ 0x6e, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72,
+ 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22,
+ 0x3e, 0x5f, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x4e,
+ 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x73,
+ 0x65, 0x5f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c,
+ 0x69, 0x6e, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x6e, 0x65, 0x6d,
+ 0x6f, 0x6e, 0x69, 0x63, 0x5f, 0x77, 0x69, 0x64,
+ 0x67, 0x65, 0x74, 0x22, 0x3e, 0x66, 0x75, 0x6c,
+ 0x6c, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x6e,
+ 0x74, 0x72, 0x79, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x33, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67,
+ 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22,
+ 0x47, 0x74, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x66, 0x75,
+ 0x6c, 0x6c, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x65,
+ 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61,
+ 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
+ 0x22, 0x3e, 0x32, 0x35, 0x35, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x77, 0x69, 0x64, 0x74, 0x68, 0x2d, 0x63, 0x68,
+ 0x61, 0x72, 0x73, 0x22, 0x3e, 0x32, 0x35, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76, 0x69,
+ 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x68,
+ 0x61, 0x72, 0x22, 0x3e, 0xe2, 0x97, 0x8f, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x72,
+ 0x5f, 0x73, 0x65, 0x74, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70,
+ 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61,
+ 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61,
+ 0x63, 0x68, 0x22, 0x3e, 0x33, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68,
+ 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x75, 0x73, 0x65,
+ 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x22, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73,
+ 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e,
+ 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e,
+ 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x68, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e,
+ 0x65, 0x6e, 0x64, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x78, 0x61,
+ 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79,
+ 0x65, 0x73, 0x22, 0x3e, 0x5f, 0x55, 0x73, 0x65,
+ 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x75, 0x73, 0x65, 0x5f, 0x75, 0x6e, 0x64, 0x65,
+ 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x6e,
+ 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x5f, 0x77,
+ 0x69, 0x64, 0x67, 0x65, 0x74, 0x22, 0x3e, 0x75,
+ 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f,
+ 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x34,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x43, 0x6f, 0x6d,
+ 0x62, 0x6f, 0x42, 0x6f, 0x78, 0x54, 0x65, 0x78,
+ 0x74, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x75,
+ 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f,
+ 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x61, 0x73, 0x5f, 0x65, 0x6e,
+ 0x74, 0x72, 0x79, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x6e, 0x74, 0x72,
+ 0x79, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x63,
+ 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0x3e, 0x30,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x69, 0x64, 0x5f, 0x63, 0x6f,
+ 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x2d, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3d,
+ 0x22, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x63, 0x6f, 0x6d,
+ 0x62, 0x6f, 0x62, 0x6f, 0x78, 0x74, 0x65, 0x78,
+ 0x74, 0x2d, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63,
+ 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x22, 0x3e,
+ 0x32, 0x35, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x34, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67,
+ 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22,
+ 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x75, 0x73,
+ 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x65,
+ 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46,
+ 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68,
+ 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x73,
+ 0x74, 0x61, 0x72, 0x74, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d,
+ 0x61, 0x72, 0x67, 0x69, 0x6e, 0x5f, 0x62, 0x6f,
+ 0x74, 0x74, 0x6f, 0x6d, 0x22, 0x3e, 0x31, 0x32,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c,
+ 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c,
+ 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22,
+ 0x79, 0x65, 0x73, 0x22, 0x3e, 0x59, 0x6f, 0x75,
+ 0x72, 0x20, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61,
+ 0x6d, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f,
+ 0x74, 0x20, 0x62, 0x65, 0x20, 0x63, 0x68, 0x61,
+ 0x6e, 0x67, 0x65, 0x64, 0x20, 0x61, 0x66, 0x74,
+ 0x65, 0x72, 0x20, 0x73, 0x65, 0x74, 0x75, 0x70,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x72, 0x61, 0x70,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x73, 0x3e, 0x3c, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x63,
+ 0x61, 0x6c, 0x65, 0x22, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x3d, 0x22, 0x30, 0x2e, 0x38, 0x22,
+ 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x35, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69,
+ 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x47, 0x72, 0x69,
+ 0x64, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73,
+ 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63,
+ 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x6c, 0x75,
+ 0x6d, 0x6e, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x69,
+ 0x6e, 0x67, 0x22, 0x3e, 0x31, 0x32, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x72, 0x6f, 0x77, 0x5f, 0x73, 0x70, 0x61,
+ 0x63, 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x31, 0x32,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69,
+ 0x6e, 0x5f, 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x31,
+ 0x38, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
+ 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69, 0x67,
+ 0x6e, 0x22, 0x3e, 0x65, 0x6e, 0x64, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e,
+ 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e, 0x5f,
+ 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x75, 0x73, 0x65, 0x5f, 0x75,
+ 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69,
+ 0x63, 0x5f, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74,
+ 0x22, 0x3e, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f,
+ 0x72, 0x64, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x66,
+ 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68,
+ 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x6f,
+ 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68,
+ 0x22, 0x3e, 0x36, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x69,
+ 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70,
+ 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c,
+ 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c,
+ 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x70, 0x61, 0x73, 0x73, 0x77,
+ 0x6f, 0x72, 0x64, 0x5f, 0x65, 0x6e, 0x74, 0x72,
+ 0x79, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73,
+ 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22,
+ 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x22,
+ 0x3e, 0xe2, 0x97, 0x8f, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69,
+ 0x6e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x5f, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x73, 0x65,
+ 0x74, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74,
+ 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70,
+ 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22,
+ 0x3e, 0x36, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64,
+ 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61,
+ 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72,
+ 0x6d, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63,
+ 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69,
+ 0x67, 0x6e, 0x22, 0x3e, 0x65, 0x6e, 0x64, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61,
+ 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e,
+ 0x5f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d,
+ 0x20, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
+ 0x64, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x73, 0x65, 0x5f,
+ 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e,
+ 0x69, 0x63, 0x5f, 0x77, 0x69, 0x64, 0x67, 0x65,
+ 0x74, 0x22, 0x3e, 0x63, 0x6f, 0x6e, 0x66, 0x69,
+ 0x72, 0x6d, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x66,
+ 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68,
+ 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x6f,
+ 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68,
+ 0x22, 0x3e, 0x37, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x69,
+ 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70,
+ 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c,
+ 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c,
+ 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x66, 0x69,
+ 0x72, 0x6d, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x3e,
+ 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76,
+ 0x65, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73,
+ 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61,
+ 0x72, 0x22, 0x3e, 0xe2, 0x97, 0x8f, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x5f,
+ 0x73, 0x65, 0x74, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65,
+ 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74,
+ 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x22, 0x3e, 0x37, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77,
+ 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74,
+ 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x70, 0x61, 0x73, 0x73,
+ 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x65, 0x78, 0x70,
+ 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c,
+ 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x73, 0x74, 0x61,
+ 0x72, 0x74, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e,
+ 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e, 0x54,
+ 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73,
+ 0x65, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61,
+ 0x73, 0x74, 0x20, 0x38, 0x20, 0x64, 0x69, 0x66,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x73, 0x2e, 0x20, 0x4d, 0x69, 0x78, 0x20, 0x75,
+ 0x70, 0x70, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63,
+ 0x61, 0x73, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x75, 0x73, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x75,
+ 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x72, 0x20,
+ 0x74, 0x77, 0x6f, 0x2e, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77,
+ 0x72, 0x61, 0x70, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x78, 0x2d,
+ 0x77, 0x69, 0x64, 0x74, 0x68, 0x2d, 0x63, 0x68,
+ 0x61, 0x72, 0x73, 0x22, 0x3e, 0x33, 0x30, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x73, 0x3e, 0x3c, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73,
+ 0x63, 0x61, 0x6c, 0x65, 0x22, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x30, 0x2e, 0x38,
+ 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x38,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x42, 0x6f, 0x78,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x62, 0x6f,
+ 0x78, 0x31, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46,
+ 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x73,
+ 0x74, 0x61, 0x72, 0x74, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6f,
+ 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x3e, 0x76, 0x65, 0x72, 0x74,
+ 0x69, 0x63, 0x61, 0x6c, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73,
+ 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x22, 0x3e,
+ 0x32, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
+ 0x5f, 0x73, 0x74, 0x72, 0x65, 0x6e, 0x67, 0x74,
+ 0x68, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63,
+ 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x78, 0x61, 0x6c, 0x69,
+ 0x67, 0x6e, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x2f, 0x3e,
+ 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x3e, 0x3c, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x63, 0x61,
+ 0x6c, 0x65, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x3d, 0x22, 0x30, 0x2e, 0x38, 0x22, 0x2f,
+ 0x3e, 0x3c, 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x73, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e,
+ 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x66, 0x69, 0x6c, 0x6c, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x70, 0x6f, 0x73,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x30,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x65,
+ 0x76, 0x65, 0x6c, 0x42, 0x61, 0x72, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x70, 0x61, 0x73, 0x73,
+ 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x73, 0x74, 0x72,
+ 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+ 0x22, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+ 0x22, 0x3e, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x78, 0x2d, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x34, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x3e,
+ 0x64, 0x69, 0x73, 0x63, 0x72, 0x65, 0x74, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x78, 0x70,
+ 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c,
+ 0x6c, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74,
+ 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22,
+ 0x3e, 0x32, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70,
+ 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22,
+ 0x3e, 0x36, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64,
+ 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e,
+ 0x32, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61,
+ 0x74, 0x65, 0x3e, 0x3c, 0x2f, 0x69, 0x6e, 0x74,
+ 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x3e, 0x0a,
+ 0x00, 0x00, 0x28, 0x75, 0x75, 0x61, 0x79, 0x29,
+ 0x67, 0x69, 0x73, 0x2d, 0x61, 0x63, 0x63, 0x6f,
+ 0x75, 0x6e, 0x74, 0x2d, 0x70, 0x61, 0x67, 0x65,
+ 0x2e, 0x75, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x69, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3c, 0x3f, 0x78, 0x6d, 0x6c, 0x20, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x31,
+ 0x2e, 0x30, 0x22, 0x20, 0x65, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x55, 0x54,
+ 0x46, 0x2d, 0x38, 0x22, 0x3f, 0x3e, 0x0a, 0x3c,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
+ 0x65, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
+ 0x2d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
+ 0x73, 0x20, 0x67, 0x74, 0x6b, 0x2b, 0x20, 0x33,
+ 0x2e, 0x30, 0x20, 0x2d, 0x2d, 0x3e, 0x3c, 0x74,
+ 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
+ 0x74, 0x50, 0x61, 0x67, 0x65, 0x22, 0x20, 0x70,
+ 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x47,
+ 0x69, 0x73, 0x50, 0x61, 0x67, 0x65, 0x22, 0x3e,
+ 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74,
+ 0x6b, 0x42, 0x6f, 0x78, 0x22, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x70, 0x61, 0x67, 0x65, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69, 0x67,
+ 0x6e, 0x22, 0x3e, 0x63, 0x65, 0x6e, 0x74, 0x65,
+ 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x61, 0x6c, 0x69,
+ 0x67, 0x6e, 0x22, 0x3e, 0x66, 0x69, 0x6c, 0x6c,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6f, 0x72, 0x69, 0x65, 0x6e,
+ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e,
+ 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d,
+ 0x22, 0x47, 0x74, 0x6b, 0x53, 0x74, 0x61, 0x63,
+ 0x6b, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73,
+ 0x74, 0x61, 0x63, 0x6b, 0x22, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69,
+ 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61,
+ 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e,
+ 0x73, 0x74, 0x61, 0x72, 0x74, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x69,
+ 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+ 0x50, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70,
+ 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x69, 0x73, 0x41, 0x63, 0x63,
+ 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x67, 0x65,
+ 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69,
+ 0x73, 0x65, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x70, 0x61, 0x67, 0x65, 0x5f, 0x65, 0x6e, 0x74,
+ 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x22,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x78, 0x70, 0x61,
+ 0x6e, 0x64, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x6c,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65,
+ 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x70, 0x61, 0x67, 0x65,
+ 0x5f, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x22,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x75, 0x73, 0x65, 0x5f, 0x75, 0x6e, 0x64,
+ 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72,
+ 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x3d, 0x22, 0x74, 0x72, 0x75, 0x65,
+ 0x22, 0x3e, 0x53, 0x65, 0x74, 0x75, 0x70, 0x20,
+ 0x5f, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72,
+ 0x69, 0x73, 0x65, 0x20, 0x4c, 0x6f, 0x67, 0x69,
+ 0x6e, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69,
+ 0x67, 0x6e, 0x22, 0x3e, 0x63, 0x65, 0x6e, 0x74,
+ 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x61, 0x6c,
+ 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x65, 0x6e, 0x64,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69,
+ 0x6e, 0x5f, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d,
+ 0x22, 0x3e, 0x33, 0x32, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c,
+ 0x61, 0x74, 0x65, 0x3e, 0x3c, 0x2f, 0x69, 0x6e,
+ 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x3e,
+ 0x0a, 0x00, 0x00, 0x28, 0x75, 0x75, 0x61, 0x79,
+ 0x29, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c,
+ 0x2d, 0x73, 0x65, 0x74, 0x75, 0x70, 0x2f, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x67, 0x69, 0x73, 0x2d,
+ 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2d,
+ 0x70, 0x61, 0x67, 0x65, 0x2d, 0x65, 0x6e, 0x74,
+ 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x2e,
+ 0x75, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xeb, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3c, 0x3f, 0x78, 0x6d, 0x6c, 0x20, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x31,
+ 0x2e, 0x30, 0x22, 0x20, 0x65, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x55, 0x54,
+ 0x46, 0x2d, 0x38, 0x22, 0x3f, 0x3e, 0x0a, 0x3c,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
+ 0x65, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
+ 0x2d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
+ 0x73, 0x20, 0x67, 0x74, 0x6b, 0x2b, 0x20, 0x33,
+ 0x2e, 0x30, 0x20, 0x2d, 0x2d, 0x3e, 0x3c, 0x74,
+ 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
+ 0x74, 0x50, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74,
+ 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x22,
+ 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d,
+ 0x22, 0x47, 0x74, 0x6b, 0x42, 0x69, 0x6e, 0x22,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x42, 0x6f, 0x78, 0x22, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x61, 0x72, 0x65, 0x61, 0x22,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63,
+ 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6f, 0x72, 0x69, 0x65,
+ 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22,
+ 0x3e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61,
+ 0x6c, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69,
+ 0x67, 0x6e, 0x22, 0x3e, 0x63, 0x65, 0x6e, 0x74,
+ 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x61, 0x6c,
+ 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x66, 0x69, 0x6c,
+ 0x6c, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x49, 0x6d, 0x61,
+ 0x67, 0x65, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x69, 0x6d, 0x61, 0x67, 0x65, 0x31, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x70, 0x69, 0x78, 0x65, 0x6c,
+ 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x3e, 0x39,
+ 0x36, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x63, 0x6f, 0x6e,
+ 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x64,
+ 0x69, 0x61, 0x6c, 0x6f, 0x67, 0x2d, 0x70, 0x61,
+ 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2d, 0x73,
+ 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x69, 0x63, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x73,
+ 0x69, 0x7a, 0x65, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x5f,
+ 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x35, 0x34, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e,
+ 0x5f, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x22,
+ 0x3e, 0x32, 0x36, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x73,
+ 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c, 0x63, 0x6c,
+ 0x61, 0x73, 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x64, 0x69, 0x6d, 0x2d, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x22, 0x2f, 0x3e, 0x3c, 0x2f,
+ 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c,
+ 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b,
+ 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x78,
+ 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e,
+ 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e, 0x45,
+ 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73,
+ 0x65, 0x20, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e,
+ 0x5f, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x22,
+ 0x3e, 0x31, 0x34, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x73, 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x65, 0x69, 0x67, 0x68,
+ 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x3d, 0x22, 0x62, 0x6f, 0x6c, 0x64, 0x22, 0x2f,
+ 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x22,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22,
+ 0x31, 0x2e, 0x38, 0x22, 0x2f, 0x3e, 0x3c, 0x2f,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x73, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x61, 0x6c,
+ 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x73, 0x74, 0x61,
+ 0x72, 0x74, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72,
+ 0x67, 0x69, 0x6e, 0x5f, 0x62, 0x6f, 0x74, 0x74,
+ 0x6f, 0x6d, 0x22, 0x3e, 0x32, 0x36, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20,
+ 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65,
+ 0x73, 0x22, 0x3e, 0x45, 0x6e, 0x74, 0x65, 0x72,
+ 0x70, 0x72, 0x69, 0x73, 0x65, 0x20, 0x6c, 0x6f,
+ 0x67, 0x69, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x6f,
+ 0x77, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78,
+ 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x63,
+ 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x6c, 0x79,
+ 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64,
+ 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x61, 0x63,
+ 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x74, 0x6f,
+ 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64,
+ 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73,
+ 0x20, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6a, 0x75, 0x73, 0x74, 0x69,
+ 0x66, 0x79, 0x22, 0x3e, 0x63, 0x65, 0x6e, 0x74,
+ 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x72, 0x61,
+ 0x70, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6d, 0x61, 0x78, 0x2d, 0x77, 0x69,
+ 0x64, 0x74, 0x68, 0x2d, 0x63, 0x68, 0x61, 0x72,
+ 0x73, 0x22, 0x3e, 0x34, 0x35, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x47, 0x72, 0x69, 0x64, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x66, 0x6f, 0x72, 0x6d,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x6f, 0x77,
+ 0x5f, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67,
+ 0x22, 0x3e, 0x31, 0x32, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x73, 0x70,
+ 0x61, 0x63, 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x31,
+ 0x32, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67,
+ 0x69, 0x6e, 0x5f, 0x62, 0x6f, 0x74, 0x74, 0x6f,
+ 0x6d, 0x22, 0x3e, 0x33, 0x32, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74,
+ 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x34, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46,
+ 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68,
+ 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x65,
+ 0x6e, 0x64, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x78, 0x61, 0x6c,
+ 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20,
+ 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65,
+ 0x73, 0x22, 0x3e, 0x5f, 0x44, 0x6f, 0x6d, 0x61,
+ 0x69, 0x6e, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x73, 0x65,
+ 0x5f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69,
+ 0x6e, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x6e, 0x65, 0x6d, 0x6f,
+ 0x6e, 0x69, 0x63, 0x5f, 0x77, 0x69, 0x64, 0x67,
+ 0x65, 0x74, 0x22, 0x3e, 0x64, 0x6f, 0x6d, 0x61,
+ 0x69, 0x6e, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70,
+ 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61,
+ 0x63, 0x68, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61,
+ 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68,
+ 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x38, 0x22, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73,
+ 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e,
+ 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e,
+ 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x68, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e,
+ 0x65, 0x6e, 0x64, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x78, 0x61,
+ 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79,
+ 0x65, 0x73, 0x22, 0x3e, 0x5f, 0x55, 0x73, 0x65,
+ 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x75, 0x73, 0x65, 0x5f, 0x75, 0x6e, 0x64, 0x65,
+ 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x6e,
+ 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x5f, 0x77,
+ 0x69, 0x64, 0x67, 0x65, 0x74, 0x22, 0x3e, 0x6c,
+ 0x6f, 0x67, 0x69, 0x6e, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x33, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69,
+ 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d,
+ 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65,
+ 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x39, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+ 0x22, 0x3e, 0x65, 0x6e, 0x64, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x78, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73,
+ 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3d,
+ 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e, 0x5f, 0x50,
+ 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x75, 0x73, 0x65, 0x5f, 0x75, 0x6e,
+ 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63,
+ 0x5f, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x22,
+ 0x3e, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
+ 0x64, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65,
+ 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74,
+ 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x22, 0x3e, 0x34, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77,
+ 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74,
+ 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x6f, 0x67, 0x69,
+ 0x6e, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x78,
+ 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63,
+ 0x68, 0x61, 0x72, 0x22, 0x3e, 0xe2, 0x97, 0x8f,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73,
+ 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61,
+ 0x72, 0x5f, 0x73, 0x65, 0x74, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61,
+ 0x78, 0x2d, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
+ 0x22, 0x3e, 0x32, 0x35, 0x35, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x77, 0x69, 0x64, 0x74, 0x68, 0x2d, 0x63, 0x68,
+ 0x61, 0x72, 0x73, 0x22, 0x3e, 0x32, 0x35, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74,
+ 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70,
+ 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22,
+ 0x3e, 0x33, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64,
+ 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61,
+ 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x22, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f,
+ 0x72, 0x64, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65,
+ 0x78, 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69,
+ 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x72,
+ 0x22, 0x3e, 0xe2, 0x97, 0x8f, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65,
+ 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+ 0x74, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x72,
+ 0x5f, 0x73, 0x65, 0x74, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x78,
+ 0x2d, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22,
+ 0x3e, 0x32, 0x35, 0x35, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77,
+ 0x69, 0x64, 0x74, 0x68, 0x2d, 0x63, 0x68, 0x61,
+ 0x72, 0x73, 0x22, 0x3e, 0x32, 0x35, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f,
+ 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f,
+ 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e,
+ 0x34, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74,
+ 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68,
+ 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x43, 0x6f,
+ 0x6d, 0x62, 0x6f, 0x42, 0x6f, 0x78, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x64, 0x6f, 0x6d, 0x61,
+ 0x69, 0x6e, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46,
+ 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68,
+ 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d,
+ 0x6f, 0x64, 0x65, 0x6c, 0x22, 0x3e, 0x72, 0x65,
+ 0x61, 0x6c, 0x6d, 0x73, 0x5f, 0x6d, 0x6f, 0x64,
+ 0x65, 0x6c, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x61, 0x73,
+ 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x65,
+ 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x74, 0x65, 0x78,
+ 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
+ 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x20, 0x69, 0x6e, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2d, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3d, 0x22, 0x65, 0x6e, 0x74,
+ 0x72, 0x79, 0x22, 0x3e, 0x3c, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x45, 0x6e,
+ 0x74, 0x72, 0x79, 0x22, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f,
+ 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6d, 0x61, 0x78, 0x2d, 0x6c, 0x65, 0x6e,
+ 0x67, 0x74, 0x68, 0x22, 0x3e, 0x32, 0x35, 0x35,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x22, 0x3e,
+ 0x32, 0x35, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67,
+ 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22,
+ 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x31, 0x30, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e,
+ 0x5f, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x22,
+ 0x3e, 0x31, 0x32, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x78, 0x61,
+ 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x30, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79,
+ 0x65, 0x73, 0x22, 0x3e, 0x45, 0x6e, 0x74, 0x65,
+ 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x20, 0x64,
+ 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x6f, 0x72,
+ 0x20, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x73, 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x73, 0x63, 0x61, 0x6c, 0x65,
+ 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d,
+ 0x22, 0x30, 0x2e, 0x38, 0x22, 0x2f, 0x3e, 0x3c,
+ 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65,
+ 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74,
+ 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x22, 0x3e, 0x32, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77,
+ 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74,
+ 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x6c,
+ 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46,
+ 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x32, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x34, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69,
+ 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x74,
+ 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x44, 0x69, 0x61, 0x6c, 0x6f, 0x67,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6a, 0x6f,
+ 0x69, 0x6e, 0x5f, 0x64, 0x69, 0x61, 0x6c, 0x6f,
+ 0x67, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x62, 0x6f,
+ 0x72, 0x64, 0x65, 0x72, 0x5f, 0x77, 0x69, 0x64,
+ 0x74, 0x68, 0x22, 0x3e, 0x31, 0x30, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x61, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x6f, 0x64, 0x61,
+ 0x6c, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f,
+ 0x79, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x70,
+ 0x61, 0x72, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x79,
+ 0x70, 0x65, 0x5f, 0x68, 0x69, 0x6e, 0x74, 0x22,
+ 0x3e, 0x64, 0x69, 0x61, 0x6c, 0x6f, 0x67, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x2d, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3d,
+ 0x22, 0x76, 0x62, 0x6f, 0x78, 0x22, 0x3e, 0x3c,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74,
+ 0x6b, 0x42, 0x6f, 0x78, 0x22, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x64, 0x69, 0x61, 0x6c, 0x6f, 0x67,
+ 0x2d, 0x76, 0x62, 0x6f, 0x78, 0x31, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6f, 0x72, 0x69, 0x65, 0x6e,
+ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e,
+ 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x73, 0x70, 0x61, 0x63, 0x69,
+ 0x6e, 0x67, 0x22, 0x3e, 0x32, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x20, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2d,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3d, 0x22, 0x61,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x72,
+ 0x65, 0x61, 0x22, 0x3e, 0x3c, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x42, 0x75,
+ 0x74, 0x74, 0x6f, 0x6e, 0x42, 0x6f, 0x78, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x69, 0x61,
+ 0x6c, 0x6f, 0x67, 0x2d, 0x61, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x5f, 0x61, 0x72, 0x65, 0x61, 0x31,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x79,
+ 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x74, 0x79, 0x6c,
+ 0x65, 0x22, 0x3e, 0x65, 0x6e, 0x64, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x62, 0x75,
+ 0x74, 0x74, 0x6f, 0x6e, 0x31, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x3e, 0x67, 0x74,
+ 0x6b, 0x2d, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x75, 0x73, 0x65, 0x5f, 0x61,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x70,
+ 0x70, 0x65, 0x61, 0x72, 0x61, 0x6e, 0x63, 0x65,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73,
+ 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x70, 0x70, 0x65,
+ 0x61, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x3e,
+ 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x75, 0x73, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x63,
+ 0x6b, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x78, 0x70, 0x61,
+ 0x6e, 0x64, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x6c,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x62, 0x75,
+ 0x74, 0x74, 0x6f, 0x6e, 0x32, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72,
+ 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22,
+ 0x3e, 0x43, 0x5f, 0x6f, 0x6e, 0x74, 0x69, 0x6e,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x73, 0x65,
+ 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+ 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x61, 0x6e,
+ 0x63, 0x65, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61,
+ 0x6e, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+ 0x74, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x61, 0x73, 0x5f, 0x64, 0x65,
+ 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x65,
+ 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x5f, 0x64,
+ 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x75,
+ 0x73, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x5f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72,
+ 0x61, 0x6e, 0x63, 0x65, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x73,
+ 0x65, 0x5f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c,
+ 0x69, 0x6e, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x78,
+ 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69,
+ 0x6c, 0x6c, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x78, 0x70,
+ 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c,
+ 0x6c, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x70, 0x61, 0x63, 0x6b, 0x5f, 0x74,
+ 0x79, 0x70, 0x65, 0x22, 0x3e, 0x65, 0x6e, 0x64,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x30, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d,
+ 0x22, 0x47, 0x74, 0x6b, 0x42, 0x6f, 0x78, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x62, 0x6f, 0x78,
+ 0x32, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x62, 0x6f,
+ 0x72, 0x64, 0x65, 0x72, 0x5f, 0x77, 0x69, 0x64,
+ 0x74, 0x68, 0x22, 0x3e, 0x35, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x76, 0x65, 0x72,
+ 0x74, 0x69, 0x63, 0x61, 0x6c, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x22,
+ 0x3e, 0x31, 0x30, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61,
+ 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x37,
+ 0x31, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61,
+ 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e,
+ 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x41,
+ 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72,
+ 0x61, 0x74, 0x6f, 0x72, 0x20, 0x4c, 0x6f, 0x67,
+ 0x69, 0x6e, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
+ 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74,
+ 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d,
+ 0x22, 0x62, 0x6f, 0x6c, 0x64, 0x22, 0x2f, 0x3e,
+ 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x22, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x31,
+ 0x2e, 0x32, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x73, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x78, 0x70, 0x61,
+ 0x6e, 0x64, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x6c,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x31, 0x32, 0x22, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69,
+ 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61,
+ 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22,
+ 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22,
+ 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x79, 0x61, 0x6c,
+ 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x30, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20,
+ 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65,
+ 0x73, 0x22, 0x3e, 0x49, 0x6e, 0x20, 0x6f, 0x72,
+ 0x64, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x75,
+ 0x73, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x65, 0x72,
+ 0x70, 0x72, 0x69, 0x73, 0x65, 0x20, 0x6c, 0x6f,
+ 0x67, 0x69, 0x6e, 0x73, 0x2c, 0x20, 0x74, 0x68,
+ 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75,
+ 0x74, 0x65, 0x72, 0x20, 0x6e, 0x65, 0x65, 0x64,
+ 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x20,
+ 0x50, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x68,
+ 0x61, 0x76, 0x65, 0x20, 0x79, 0x6f, 0x75, 0x72,
+ 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
+ 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73,
+ 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x74, 0x68, 0x65, 0x69,
+ 0x72, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
+ 0x20, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
+ 0x64, 0x20, 0x68, 0x65, 0x72, 0x65, 0x2c, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x63, 0x68, 0x6f, 0x6f,
+ 0x73, 0x65, 0x20, 0x61, 0x20, 0x75, 0x6e, 0x69,
+ 0x71, 0x75, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70,
+ 0x75, 0x74, 0x65, 0x72, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x79, 0x6f,
+ 0x75, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75,
+ 0x74, 0x65, 0x72, 0x2e, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x22,
+ 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x70, 0x6f,
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61,
+ 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x47,
+ 0x72, 0x69, 0x64, 0x22, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x67, 0x72, 0x69, 0x64, 0x31, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69,
+ 0x6e, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x22, 0x3e,
+ 0x31, 0x32, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x78,
+ 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x6f, 0x77,
+ 0x5f, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67,
+ 0x22, 0x3e, 0x36, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x6f,
+ 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x73, 0x70, 0x61,
+ 0x63, 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x31, 0x32,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d,
+ 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65,
+ 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x31, 0x33, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67,
+ 0x6e, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72,
+ 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22,
+ 0x3e, 0x5f, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x75, 0x73, 0x65, 0x5f, 0x75,
+ 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69,
+ 0x63, 0x5f, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74,
+ 0x22, 0x3e, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x64,
+ 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x64, 0x69, 0x6d, 0x2d,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x2f, 0x3e,
+ 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x64, 0x6f, 0x6d,
+ 0x61, 0x69, 0x6e, 0x22, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73,
+ 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e,
+ 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e,
+ 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x5f, 0x74,
+ 0x6f, 0x70, 0x22, 0x3e, 0x35, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x5f, 0x62,
+ 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x22, 0x3e, 0x35,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67,
+ 0x6e, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69,
+ 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d,
+ 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65,
+ 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x31, 0x38, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67,
+ 0x6e, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72,
+ 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22,
+ 0x3e, 0x5f, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74,
+ 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x73, 0x65,
+ 0x5f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69,
+ 0x6e, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x6e, 0x65, 0x6d, 0x6f,
+ 0x6e, 0x69, 0x63, 0x5f, 0x77, 0x69, 0x64, 0x67,
+ 0x65, 0x74, 0x22, 0x3e, 0x6a, 0x6f, 0x69, 0x6e,
+ 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65,
+ 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x73, 0x74, 0x79,
+ 0x6c, 0x65, 0x3e, 0x3c, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x64, 0x69, 0x6d, 0x2d, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x74,
+ 0x79, 0x6c, 0x65, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65,
+ 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74,
+ 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77,
+ 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74,
+ 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x6a, 0x6f, 0x69, 0x6e,
+ 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65,
+ 0x72, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x78,
+ 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70,
+ 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61,
+ 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61,
+ 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68,
+ 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x31, 0x34, 0x22, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69,
+ 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61,
+ 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22,
+ 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e,
+ 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e, 0x41,
+ 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72,
+ 0x61, 0x74, 0x6f, 0x72, 0x20, 0x5f, 0x4e, 0x61,
+ 0x6d, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x73, 0x65,
+ 0x5f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69,
+ 0x6e, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x6e, 0x65, 0x6d, 0x6f,
+ 0x6e, 0x69, 0x63, 0x5f, 0x77, 0x69, 0x64, 0x67,
+ 0x65, 0x74, 0x22, 0x3e, 0x6a, 0x6f, 0x69, 0x6e,
+ 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x64, 0x69, 0x6d, 0x2d,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x2f, 0x3e,
+ 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x32,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d,
+ 0x65, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x78,
+ 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63,
+ 0x68, 0x61, 0x72, 0x22, 0x3e, 0xe2, 0x97, 0x8f,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73,
+ 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61,
+ 0x72, 0x5f, 0x73, 0x65, 0x74, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x32, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67,
+ 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22,
+ 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x31, 0x35, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61,
+ 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e,
+ 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74,
+ 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x50, 0x61,
+ 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x75, 0x73, 0x65, 0x5f, 0x75, 0x6e, 0x64,
+ 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d,
+ 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x5f,
+ 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x22, 0x3e,
+ 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x73,
+ 0x73, 0x77, 0x6f, 0x72, 0x64, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x64, 0x69, 0x6d, 0x2d,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x2f, 0x3e,
+ 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x33,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x73,
+ 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x68, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c,
+ 0x69, 0x74, 0x79, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63,
+ 0x68, 0x61, 0x72, 0x22, 0x3e, 0xe2, 0x97, 0x8f,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x61, 0x63, 0x74, 0x69, 0x76,
+ 0x61, 0x74, 0x65, 0x73, 0x5f, 0x64, 0x65, 0x66,
+ 0x61, 0x75, 0x6c, 0x74, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63,
+ 0x68, 0x61, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x33,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x78,
+ 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69,
+ 0x6c, 0x6c, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x32, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x78, 0x70,
+ 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c,
+ 0x6c, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x61, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2d, 0x77, 0x69, 0x64, 0x67, 0x65,
+ 0x74, 0x73, 0x3e, 0x3c, 0x61, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2d, 0x77, 0x69, 0x64, 0x67, 0x65,
+ 0x74, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x3d, 0x22, 0x2d, 0x36, 0x22, 0x3e,
+ 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x31, 0x3c,
+ 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2d,
+ 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x3e, 0x3c,
+ 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x77,
+ 0x69, 0x64, 0x67, 0x65, 0x74, 0x20, 0x72, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3d, 0x22,
+ 0x2d, 0x35, 0x22, 0x3e, 0x62, 0x75, 0x74, 0x74,
+ 0x6f, 0x6e, 0x32, 0x3c, 0x2f, 0x61, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2d, 0x77, 0x69, 0x64, 0x67,
+ 0x65, 0x74, 0x3e, 0x3c, 0x2f, 0x61, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2d, 0x77, 0x69, 0x64, 0x67,
+ 0x65, 0x74, 0x73, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61,
+ 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c,
+ 0x69, 0x73, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x72, 0x65,
+ 0x61, 0x6c, 0x6d, 0x73, 0x5f, 0x6d, 0x6f, 0x64,
+ 0x65, 0x6c, 0x22, 0x3e, 0x3c, 0x63, 0x6f, 0x6c,
+ 0x75, 0x6d, 0x6e, 0x73, 0x3e, 0x3c, 0x21, 0x2d,
+ 0x2d, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
+ 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x67, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x72, 0x72, 0x61, 0x79,
+ 0x20, 0x2d, 0x2d, 0x3e, 0x3c, 0x63, 0x6f, 0x6c,
+ 0x75, 0x6d, 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x3d, 0x22, 0x67, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x72, 0x72, 0x61, 0x79, 0x22, 0x2f, 0x3e, 0x3c,
+ 0x21, 0x2d, 0x2d, 0x20, 0x63, 0x6f, 0x6c, 0x75,
+ 0x6d, 0x6e, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x20,
+ 0x67, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x2d, 0x2d, 0x3e, 0x3c, 0x63, 0x6f, 0x6c, 0x75,
+ 0x6d, 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d,
+ 0x22, 0x47, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x63, 0x6f, 0x6c,
+ 0x75, 0x6d, 0x6e, 0x73, 0x3e, 0x3c, 0x2f, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
+ 0x65, 0x3e, 0x0a, 0x00, 0x00, 0x28, 0x75, 0x75,
+ 0x61, 0x79, 0x29, 0x67, 0x6e, 0x6f, 0x6d, 0x65,
+ 0x2f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
+} };
+
+static GStaticResource static_resource = { account_resource_data.data, sizeof (account_resource_data.data),
NULL, NULL, NULL };
+extern GResource *account_get_resource (void);
+GResource *account_get_resource (void)
+{
+ return g_static_resource_get_resource (&static_resource);
+}
+/*
+ If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and
+ destructors, in a sane way, including e.g. on library unload. If not you're on
+ your own.
+
+ Some compilers need #pragma to handle this, which does not work with macros,
+ so the way you need to use this is (for constructors):
+
+ #ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA
+ #pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(my_constructor)
+ #endif
+ G_DEFINE_CONSTRUCTOR(my_constructor)
+ static void my_constructor(void) {
+ ...
+ }
+
+*/
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+
+#define G_HAS_CONSTRUCTORS 1
+
+#define G_DEFINE_CONSTRUCTOR(_func) static void __attribute__((constructor)) _func (void);
+#define G_DEFINE_DESTRUCTOR(_func) static void __attribute__((destructor)) _func (void);
+
+#elif defined (_MSC_VER) && (_MSC_VER >= 1500)
+/* Visual studio 2008 and later has _Pragma */
+
+#define G_HAS_CONSTRUCTORS 1
+
+#define G_DEFINE_CONSTRUCTOR(_func) \
+ static void _func(void); \
+ static int _func ## _wrapper(void) { _func(); return 0; } \
+ __pragma(section(".CRT$XCU",read)) \
+ __declspec(allocate(".CRT$XCU")) static int (* _array ## _func)(void) = _func ## _wrapper;
+
+#define G_DEFINE_DESTRUCTOR(_func) \
+ static void _func(void); \
+ static int _func ## _constructor(void) { atexit (_func); return 0; } \
+ __pragma(section(".CRT$XCU",read)) \
+ __declspec(allocate(".CRT$XCU")) static int (* _array ## _func)(void) = _func ## _constructor;
+
+#elif defined (_MSC_VER)
+
+#define G_HAS_CONSTRUCTORS 1
+
+/* Pre Visual studio 2008 must use #pragma section */
+#define G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA 1
+#define G_DEFINE_DESTRUCTOR_NEEDS_PRAGMA 1
+
+#define G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(_func) \
+ section(".CRT$XCU",read)
+#define G_DEFINE_CONSTRUCTOR(_func) \
+ static void _func(void); \
+ static int _func ## _wrapper(void) { _func(); return 0; } \
+ __declspec(allocate(".CRT$XCU")) static int (*p)(void) = _func ## _wrapper;
+
+#define G_DEFINE_DESTRUCTOR_PRAGMA_ARGS(_func) \
+ section(".CRT$XCU",read)
+#define G_DEFINE_DESTRUCTOR(_func) \
+ static void _func(void); \
+ static int _func ## _constructor(void) { atexit (_func); return 0; } \
+ __declspec(allocate(".CRT$XCU")) static int (* _array ## _func)(void) = _func ## _constructor;
+
+#elif defined(__SUNPRO_C)
+
+/* This is not tested, but i believe it should work, based on:
+ * http://opensource.apple.com/source/OpenSSL098/OpenSSL098-35/src/fips/fips_premain.c
+ */
+
+#define G_HAS_CONSTRUCTORS 1
+
+#define G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA 1
+#define G_DEFINE_DESTRUCTOR_NEEDS_PRAGMA 1
+
+#define G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(_func) \
+ init(_func)
+#define G_DEFINE_CONSTRUCTOR(_func) \
+ static void _func(void);
+
+#define G_DEFINE_DESTRUCTOR_PRAGMA_ARGS(_func) \
+ fini(_func)
+#define G_DEFINE_DESTRUCTOR(_func) \
+ static void _func(void);
+
+#else
+
+/* constructors not supported for this compiler */
+
+#endif
+
+
+#ifdef G_HAS_CONSTRUCTORS
+
+#ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA
+#pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(resource_constructor)
+#endif
+G_DEFINE_CONSTRUCTOR(resource_constructor)
+#ifdef G_DEFINE_DESTRUCTOR_NEEDS_PRAGMA
+#pragma G_DEFINE_DESTRUCTOR_PRAGMA_ARGS(resource_destructor)
+#endif
+G_DEFINE_DESTRUCTOR(resource_destructor)
+
+#else
+#warning "Constructor not supported on this compiler, linking in resources will not work"
+#endif
+
+static void resource_constructor (void)
+{
+ g_static_resource_init (&static_resource);
+}
+
+static void resource_destructor (void)
+{
+ g_static_resource_fini (&static_resource);
+}
diff --git a/gnome-initial-setup/pages/password/account-resources.h
b/gnome-initial-setup/pages/password/account-resources.h
new file mode 100644
index 0000000..d2abafe
--- /dev/null
+++ b/gnome-initial-setup/pages/password/account-resources.h
@@ -0,0 +1,7 @@
+#ifndef __RESOURCE_account_H__
+#define __RESOURCE_account_H__
+
+#include <gio/gio.h>
+
+extern GResource *account_get_resource (void);
+#endif
diff --git a/gnome-initial-setup/pages/password/gis-account-page-enterprise.ui
b/gnome-initial-setup/pages/password/gis-account-page-enterprise.ui
new file mode 100644
index 0000000..efdb77b
--- /dev/null
+++ b/gnome-initial-setup/pages/password/gis-account-page-enterprise.ui
@@ -0,0 +1,476 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <template class="GisAccountPageEnterprise" parent="GtkBin">
+ <child>
+ <object class="GtkBox" id="area">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="halign">center</property>
+ <property name="valign">fill</property>
+ <child>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixel_size">96</property>
+ <property name="icon_name">dialog-password-symbolic</property>
+ <property name="icon_size">1</property>
+ <property name="margin_top">54</property>
+ <property name="margin_bottom">26</property>
+ <style>
+ <class name="dim-label" />
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="label" translatable="yes">Enterprise Login</property>
+ <property name="margin_bottom">14</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.8"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="subtitle">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">start</property>
+ <property name="margin_bottom">26</property>
+ <property name="label" translatable="yes">Enterprise login allows an existing centrally managed
user account to be used on this device.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">45</property>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkGrid" id="form">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="row_spacing">12</property>
+ <property name="column_spacing">12</property>
+ <property name="margin_bottom">32</property>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Domain</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">domain</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Username</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">login</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label9">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Password</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">password</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="login">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="invisible_char">●</property>
+ <property name="invisible_char_set">True</property>
+ <property name="max-length">255</property>
+ <property name="width-chars">25</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="password">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="visibility">False</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ <property name="invisible_char_set">True</property>
+ <property name="max-length">255</property>
+ <property name="width-chars">25</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="domain">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="model">realms_model</property>
+ <property name="has_entry">True</property>
+ <property name="entry_text_column">0</property>
+ <child internal-child="entry">
+ <object class="GtkEntry" id="domain_entry">
+ <property name="can_focus">True</property>
+ <property name="max-length">255</property>
+ <property name="width-chars">25</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_bottom">12</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Enterprise domain or realm name</property>
+ <attributes>
+ <attribute name="scale" value="0.8"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="filler">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+ <object class="GtkDialog" id="join_dialog">
+ <property name="can_focus">False</property>
+ <property name="border_width">10</property>
+ <property name="resizable">False</property>
+ <property name="modal">True</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="type_hint">dialog</property>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="dialog-action_area1">
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="button1">
+ <property name="label">gtk-cancel</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button2">
+ <property name="label" translatable="yes">C_ontinue</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">10</property>
+ <child>
+ <object class="GtkLabel" id="label71">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Domain Administrator Login</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.2"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label12">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">In order to use enterprise logins, this computer
needs to be
+ enrolled in the domain. Please have your network administrator
+ type their domain password here, and choose a unique computer
+ name for your computer.</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">12</property>
+ <property name="hexpand">True</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="label13">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Domain</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">join_domain</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="join_domain">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">5</property>
+ <property name="margin_bottom">5</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label18">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Computer</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">join_computer</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="join_computer">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label14">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Administrator _Name</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">join_name</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="join_name">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="invisible_char">●</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label15">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Administrator Password</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">join_password</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="join_password">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="visibility">False</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-6">button1</action-widget>
+ <action-widget response="-5">button2</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkListStore" id="realms_model">
+ <columns>
+ <!-- column-name gchararray -->
+ <column type="gchararray"/>
+ <!-- column-name gobject -->
+ <column type="GObject"/>
+ </columns>
+ </object>
+</interface>
diff --git a/gnome-initial-setup/pages/password/gis-account-page-local.ui
b/gnome-initial-setup/pages/password/gis-account-page-local.ui
new file mode 100644
index 0000000..68839d6
--- /dev/null
+++ b/gnome-initial-setup/pages/password/gis-account-page-local.ui
@@ -0,0 +1,299 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <template class="GisAccountPageLocal" parent="GtkBin">
+ <child>
+ <object class="GtkBox" id="area">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">fill</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkButton" id="avatar-button">
+ <property name="visible">True</property>
+ <property name="margin_top">54</property>
+ <property name="halign">center</property>
+ <child>
+ <object class="GtkImage" id="avatar-image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixel_size">96</property>
+ <property name="icon_name">avatar-default-symbolic</property>
+ <property name="icon_size">1</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ <property name="margin_top">26</property>
+ <property name="hexpand">True</property>
+ <property name="label" translatable="yes">About You</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.8"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="subtitle">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">start</property>
+ <property name="margin_top">14</property>
+ <property name="label" translatable="yes">We need a few details to complete setup.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">50</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="form">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">12</property>
+ <property name="margin_top">54</property>
+ <child>
+ <object class="GtkLabel" id="fullname_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Full Name</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">fullname_entry</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="fullname_entry">
+ <property name="max_length">255</property>
+ <property name="width-chars">25</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="username_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Username</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">username_combo</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="username_combo">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_entry">True</property>
+ <property name="entry_text_column">0</property>
+ <property name="id_column">1</property>
+ <child internal-child="entry">
+ <object class="GtkEntry" id="comboboxtext-entry">
+ <property name="can_focus">True</property>
+ <property name="width-chars">25</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="username_explanation">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="margin_bottom">12</property>
+ <property name="label" translatable="yes">Your username cannot be changed after
setup.</property>
+ <property name="wrap">True</property>
+ <attributes>
+ <attribute name="scale" value="0.8"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">5</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="secrets">
+ <property name="visible">False</property>
+ <property name="can_focus">False</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">12</property>
+ <property name="margin_top">18</property>
+ <child>
+ <object class="GtkLabel" id="password_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Password</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">password_entry</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">6</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="password_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ <property name="invisible_char">●</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">6</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="confirm_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Confirm password</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">confirm_entry</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">7</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="confirm_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ <property name="sensitive">False</property>
+ <property name="invisible_char">●</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">7</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="password_explanation">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Try to use at least 8 different characters. Mix
upper and lower case and use a number or two.</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">30</property>
+ <attributes>
+ <attribute name="scale" value="0.8"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">8</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">start</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkLabel" id="password_strength_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label"/>
+ <attributes>
+ <attribute name="scale" value="0.8"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLevelBar" id="password_strength">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <property name="max-value">4</property>
+ <property name="mode">discrete</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">6</property>
+ <property name="width">1</property>
+ <property name="height">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/password/gis-password-page.ui
b/gnome-initial-setup/pages/password/gis-password-page.ui
new file mode 100644
index 0000000..9d03457
--- /dev/null
+++ b/gnome-initial-setup/pages/password/gis-password-page.ui
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <template class="GisPasswordPage" parent="GisPage">
+ <child>
+ <object class="GtkBox" id="page">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">fill</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixel_size">96</property>
+ <property name="icon_name">dialog-password-symbolic</property>
+ <property name="icon_size">1</property>
+ <property name="margin_top">54</property>
+ <property name="margin_bottom">26</property>
+ <style>
+ <class name="dim-label" />
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ <property name="margin_top">26</property>
+ <property name="hexpand">True</property>
+ <property name="label" translatable="yes">Set a Password</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.8"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="subtitle">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">start</property>
+ <property name="margin_top">14</property>
+ <property name="label" translatable="yes">Be careful not to lose your password.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">50</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="secrets">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">12</property>
+ <property name="margin_top">54</property>
+ <child>
+ <object class="GtkLabel" id="password_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Choose a _password</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">password_entry</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="password_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ <property name="invisible_char">●</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="confirm_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Confirm password</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">confirm_entry</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="confirm_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ <property name="sensitive">False</property>
+ <property name="invisible_char">●</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="password_explanation">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Try to use at least 8 different characters. Mix
upper and lower case and use a number or two.</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">30</property>
+ <attributes>
+ <attribute name="scale" value="0.8"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLevelBar" id="password_strength">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">fill</property>
+ <property name="valign">center</property>
+ <property name="max-value">4</property>
+ <property name="mode">discrete</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/password/org.freedesktop.realmd.xml
b/gnome-initial-setup/pages/password/org.freedesktop.realmd.xml
new file mode 100644
index 0000000..316213a
--- /dev/null
+++ b/gnome-initial-setup/pages/password/org.freedesktop.realmd.xml
@@ -0,0 +1,666 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node name="/">
+
+ <!--
+ org.freedesktop.realmd.Provider:
+ @short_description: a realm provider
+
+ Various realm providers represent different software implementations
+ that provide access to realms or domains.
+
+ This interface is implemented by individual providers, but is
+ aggregated globally at the system bus name
+ <literal>org.freedesktop.realmd</literal>
+ with the object path <literal>/org/freedesktop/realmd</literal>
+ -->
+ <interface name="org.freedesktop.realmd.Provider">
+
+ <!--
+ Name: the name of the provider
+
+ The name of the provider. This is not normally displayed
+ to the user, but may be useful for diagnostics or debugging.
+ -->
+ <property name="Name" type="s" access="read"/>
+
+ <!--
+ Version: the version of the provider
+
+ The version of the provider. This is not normally used in
+ logic, but may be useful for diagnostics or debugging.
+ -->
+ <property name="Version" type="s" access="read"/>
+
+ <!--
+ Realms: a list of realms
+
+ A list of known, enrolled or discovered realms. All realms
+ that this provider knows about are listed here. As realms
+ are discovered they are added to this list.
+
+ Each realm is represented by the DBus object path of the
+ realm object.
+ -->
+ <property name="Realms" type="ao" access="read"/>
+
+ <!--
+ Discover:
+ @string: an input string to discover realms for
+ @options: options for the discovery operation
+ @relevance: the relevance of the returned results
+ @realm: a list of realms discovered
+
+ Discover realms for the given string. The input @string is
+ usually a domain or realm name, perhaps typed by a user. If
+ an empty string is provided the realm provider should try to
+ discover a default realm if possible (eg: from DHCP).
+
+ @options can contain, but is not limited to, the following values:
+ <itemizedlist>
+ <listitem><para><literal>operation</literal>: a string
+ identifier chosen by the client, which can then later be
+ passed to org.freedesktop.realmd.Service.Cancel() in order
+ to cancel the operation</para></listitem>
+ </itemizedlist>
+
+ The @relevance returned can be used to rank results from
+ different discover calls to different providers. Implementors
+ should return a positive number if the provider highly
+ recommends that the realms be handled by this provider,
+ or a zero if it can possibly handle the realms. Negative
+ should be returned if no realms are found.
+
+ This method does not return an error when no realms are
+ discovered. It simply returns an @realm list.
+
+ To see diagnostic information about the discovery process
+ connect to the org.freedesktop.realmd.Service::Diagnostics
+ signal.
+
+ This method requires authorization for the PolicyKit action
+ called <literal>org.freedesktop.realmd.discover-realm</literal>.
+
+ In addition to common DBus error results, this method may
+ return:
+ <itemizedlist>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Failed</literal>:
+ may be returned if the discovery could not be run for some reason.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Cancelled</literal>:
+ returned if the operation was cancelled.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.NotAuthorized</literal>:
+ returned if the calling client is not permitted to perform a discovery
+ operation.</para></listitem>
+ </itemizedlist>
+ -->
+ <method name="Discover">
+ <arg name="string" type="s" direction="in"/>
+ <arg name="options" type="a{sv}" direction="in"/>
+ <arg name="relevance" type="i" direction="out"/>
+ <arg name="realm" type="ao" direction="out"/>
+ </method>
+
+ </interface>
+
+ <!--
+ org.freedesktop.realmd.Service:
+ @short_description: the realmd service
+
+ Global calls for managing the realmd service. Usually you'll want
+ to use #org.freedesktop.realmd.Provider instead.
+
+ This interface is implemented by the realmd service, and is always
+ available at the object path <literal>/org/freedesktop/realmd</literal>
+
+ The service also implements the
+ <literal>org.freedesktop.DBus.ObjectManager</literal> interface which
+ makes it easy to retrieve all realmd objects and properties in one go.
+ -->
+ <interface name="org.freedesktop.realmd.Service">
+
+ <!--
+ Cancel:
+ @operation: the operation to cancel
+
+ Cancel a realmd operation. To be able to cancel an operation
+ pass a uniquely chosen <literal>operation</literal> string
+ identifier as an option in the methods <literal>options</literal>
+ argument.
+
+ These operation string identifiers should be unique per client
+ calling the realmd service.
+
+ It is not guaranteed that the service can or will cancel the
+ operation. For example the operation may have already completed
+ by the time this method is handled. The caller of the operation
+ method will receive a
+ <literal>org.freedesktop.realmd.Error.Cancelled</literal>
+ if the operation was cancelled.
+ -->
+ <method name="Cancel">
+ <arg name="operation" type="s" direction="in"/>
+ </method>
+
+ <!--
+ SetLocale:
+ @locale: the locale for the client
+
+ Set the language @locale for the client. This locale is used
+ for error messages. The locale is used until the next time
+ this method is called, the client disconnects, or the client
+ calls #org.freedesktop.realmd.Service.Release().
+ -->
+ <method name="SetLocale">
+ <arg name="locale" type="s" direction="in"/>
+ </method>
+
+ <!--
+ Diagnostics:
+ @data: diagnostic data
+ @operation: the operation this data resulted from
+
+ This signal is fired when diagnostics result from an operation
+ in the provider or one of its realms.
+
+ It is not guaranteed that this signal is emitted once per line.
+ More than one line may be contained in @data, or a partial
+ line. New line characters are embedded in @data.
+
+ This signal is sent explicitly to the client which invoked
+ operation method. In order to tell which operation this
+ diagnostic data results from, pass a unique
+ <literal>operation</literal> string identifier in the
+ <literal>options</literal> argument of the operation method.
+ That same identifier will be passed back via the @operation
+ argument of this signal.
+ -->
+ <signal name="Diagnostics">
+ <arg name="data" type="s"/>
+ <arg name="operation" type="s"/>
+ </signal>
+
+ <!--
+ Release:
+
+ Normally realmd waits until all clients have disconnected
+ before exiting itself, sometime later. For long lived clients
+ they can call this method to allow the realmd service to quit.
+ This is an optimization. The daemon will not exit immediately.
+ It is safe to call this multiple times.
+ -->
+ <method name="Release">
+ <!-- no arguments -->
+ </method>
+
+ </interface>
+
+ <!--
+ org.freedesktop.realmd.Realm:
+ @short_description: a realm
+
+ Represents one realm.
+
+ Contains generic information about a realm, and useful properties for
+ introspecting what kind of realm this is and how to work with
+ the realm.
+
+ Use #org.freedesktop.realmd.Provider:Realms or
+ #org.freedesktop.realmd.Provider.Discover() to get access to some
+ kerberos realm objects.
+
+ Realms will always implement additional interfaces, such as
+ #org.freedesktop.realmd.Kerberos. Do not assume that all realms
+ implement that kerberos interface. Use the
+ #org.freedesktop.realmd.Realm:SupportedInterfaces property to see
+ which interfaces are set.
+
+ Different realms support various ways to configure them on the
+ system. Use the #org.freedesktop.realmd.Realm:Configured property
+ to determine if a realm is configured. If it is configured the
+ property will be set to the interface of the mechanism that was
+ used to configure it.
+
+ To configure a realm, look in the
+ #org.freedesktop.realmd.Realm:SupportedInterfaces property for a
+ recognized purpose specific interface that can be used for
+ configuration, such as the
+ #org.freedesktop.realmd.KerberosMembership interface and its
+ #org.freedesktop.realmd.KerberosMembership.Join() method.
+
+ To deconfigure a realm from the current system, you can use the
+ #org.freedesktop.realmd.Realm.Deconfigure() method. In additon some
+ of the configuration specific interfaces provide methods to
+ deconfigure a realm in a specific way, such as
+ #org.freedesktop.realmd.KerberosMembership.Leave() method.
+
+ The various properties are guaranteed to have been updated before
+ the operation methods return, if they change state.
+ -->
+ <interface name="org.freedesktop.realmd.Realm">
+
+ <!--
+ Name: the realm name
+
+ This is the name of the realm, appropriate for display to
+ end users where necessary.
+ -->
+ <property name="Name" type="s" access="read"/>
+
+ <!--
+ Configured: whether this domain is configured and how
+
+ If this property is an empty string, then the realm is not
+ configured. Otherwise the realm is configured, and contains
+ a string which is the interface that represents how it was
+ configured, for example #org.freedesktop.realmd.KerberosMembership.
+ -->
+ <property name="Configured" type="s" access="read"/>
+
+ <!--
+ Deconfigure: deconfigure this realm
+
+ Deconfigure this realm from the local machine with standard
+ default behavior.
+
+ The behavior of this method depends on the which configuration
+ interface is present in the
+ #org.freedesktop.realmd.Realm.Configured property. It does not
+ always delete membership accounts in the realm, but just
+ reconfigures the local machine so it no longer is configured
+ for the given realm. In some cases the implementation may try
+ to update membership accounts, but this is not guaranteed.
+
+ Various configuration interfaces may support more specific ways
+ to deconfigure a realm in a specific way, such as the
+ #org.freedesktop.realmd.KerberosMembership.Leave() method.
+
+ @options can contain, but is not limited to, the following values:
+ <itemizedlist>
+ <listitem><para><literal>operation</literal>: a string
+ identifier chosen by the client, which can then later be
+ passed to org.freedesktop.realmd.Service.Cancel() in order
+ to cancel the operation</para></listitem>
+ </itemizedlist>
+
+ This method requires authorization for the PolicyKit action
+ called <literal>org.freedesktop.realmd.deconfigure-realm</literal>.
+
+ In addition to common DBus error results, this method may return:
+ <itemizedlist>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Failed</literal>:
+ may be returned if the deconfigure failed for a generic reason.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Cancelled</literal>:
+ returned if the operation was cancelled.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.NotAuthorized</literal>:
+ returned if the calling client is not permitted to deconfigure a
+ realm.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.NotConfigured</literal>:
+ returned if this realm is not configured on the machine.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Busy</literal>:
+ returned if the service is currently performing another operation like
+ join or leave.</para></listitem>
+ </itemizedlist>
+ -->
+ <method name="Deconfigure">
+ <arg name="options" type="a{sv}" direction="in"/>
+ </method>
+
+ <!--
+ SupportedInterfaces:
+
+ Additional supported interfaces of this realm. This includes
+ interfaces that contain more information about the realm,
+ such as #org.freedesktop.realmd.Kerberos and interfaces
+ which contain methods for configuring a realm, such as
+ #org.freedesktop.realmd.KerberosMembership.
+ -->
+ <property name="SupportedInterfaces" type="as" access="read"/>
+
+ <!--
+ Details: informational details about the realm
+
+ Informational details about the realm. The following values
+ should be present:
+ <itemizedlist>
+ <listitem><para><literal>server-software</literal>:
+ identifier of the software running on the server (eg:
+ <literal>active-directory</literal>).</para></listitem>
+ <listitem><para><literal>client-software</literal>:
+ identifier of the software running on the client (eg:
+ <literal>sssd</literal>).</para></listitem>
+ </itemizedlist>
+ -->
+ <property name="Details" type="a(ss)" access="read"/>
+
+ <!--
+ LoginFormats: supported formats for login names
+
+ Supported formats for login to this realm. This is only
+ relevant once the realm has been enrolled. The formats
+ will contain a <literal>%U</literal> in the string, which
+ indicate where the user name should be placed. The formats
+ may contain a <literal>%D</literal> in the string which
+ indicate where a domain name should be placed.
+
+ The first format in the list is the preferred format for
+ login names.
+ -->
+ <property name="LoginFormats" type="as" access="read"/>
+
+ <!--
+ LoginPolicy: the policy for logins using this realm
+
+ The policy for logging into this computer using this realm.
+
+ The policy can be changed using the
+ #org.freedesktop.realmd.Realm.ChangeLoginPolicy() method.
+
+ The following policies are predefined. Not all providers
+ support all these policies and there may be provider specific
+ policies or multiple policies represented in the string:
+ <itemizedlist>
+ <listitem><para><literal>allow-any-login</literal>: allow
+ login by any authenticated user present in this
+ realm.</para></listitem>
+ <listitem><para><literal>allow-permitted-logins</literal>:
+ only allow the logins permitted in the
+ #org.freedesktop.realmd.Realm:PermittedLogins
+ property.</para></listitem>
+ <listitem><para><literal>deny-any-login</literal>:
+ don't allow any logins via authenticated users of this
+ realm.</para></listitem>
+ </itemizedlist>
+ -->
+ <property name="LoginPolicy" type="s" access="read"/>
+
+ <!--
+ PermittedLogins: the permitted login names
+
+ The list of permitted authenticated users allowed to login
+ into this computer. This is only relevant if the
+ #org.freedesktop.realmd.Realm:LoginPolicy property
+ contains the <literal>allow-permitted-logins</literal>
+ string.
+ -->
+ <property name="PermittedLogins" type="as" access="read"/>
+
+ <!--
+ ChangeLoginPolicy:
+ @login_policy: the new login policy, or an empty string
+ @permitted_add: a list of logins to permit
+ @permitted_remove: a list of logins to not permit
+ @options: options for this operation
+
+ Change the login policy and/or permitted logins for this realm.
+
+ Not all realms support the all the various login policies. An
+ error will be returned if the new login policy is not supported.
+ You may specify an empty string for the @login_policy argument
+ which will cause no change in the policy itself. If the policy
+ is changed, it will be reflected in the
+ #org.freedesktop.realmd.Realm:LoginPolicy property.
+
+ The @permitted_add and @permitted_remove arguments represent
+ lists of login names that should be added and removed from
+ the #org.freedesktop.realmd.Kerberos:PermittedLogins property.
+
+ @options can contain, but is not limited to, the following values:
+ <itemizedlist>
+ <listitem><para><literal>operation</literal>: a string
+ identifier chosen by the client, which can then later be
+ passed to org.freedesktop.realmd.Service.Cancel() in order
+ to cancel the operation</para></listitem>
+ </itemizedlist>
+
+ This method requires authorization for the PolicyKit action
+ called <literal>org.freedesktop.realmd.login-policy</literal>.
+
+ In addition to common DBus error results, this method may return:
+ <itemizedlist>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Failed</literal>:
+ may be returned if the policy change failed for a generic reason.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Cancelled</literal>:
+ returned if the operation was cancelled.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.NotAuthorized</literal>:
+ returned if the calling client is not permitted to change login policy
+ operation.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.NotConfigured</literal>:
+ returned if the realm is not configured.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Busy</literal>:
+ returned if the service is currently performing another operation like
+ join or leave.</para></listitem>
+ </itemizedlist>
+ -->
+ <method name="ChangeLoginPolicy">
+ <arg name="login_policy" type="s" direction="in"/>
+ <arg name="permitted_add" type="as" direction="in"/>
+ <arg name="permitted_remove" type="as" direction="in"/>
+ <arg name="options" type="a{sv}" direction="in"/>
+ </method>
+
+ </interface>
+
+ <!--
+ org.freedesktop.realmd.Kerberos:
+ @short_description: a kerberos realm
+
+ An interface that describes a kerberos realm in more detail. This
+ is always implemented on an DBus object path that also implements
+ the #org.freedesktop.realmd.Realm interface.
+ -->
+ <interface name="org.freedesktop.realmd.Kerberos">
+
+ <!--
+ RealmName: the kerberos realm name
+
+ The kerberos name for this realm. This is usually in upper
+ case.
+ -->
+ <property name="RealmName" type="s" access="read"/>
+
+ <!--
+ DomainName: the DNS domain name
+
+ The DNS domain name for this realm.
+ -->
+ <property name="DomainName" type="s" access="read"/>
+
+ </interface>
+
+ <!--
+ org.freedesktop.realmd.KerberosMembership:
+
+ An interface used to configure this machine by joining a realm.
+
+ It sets up a computer/host account in the realm for this machine
+ and a keytab to track the credentials for that account.
+
+ The various properties are guaranteed to have been updated before
+ the operation methods return, if they change state.
+ -->
+ <interface name="org.freedesktop.realmd.KerberosMembership">
+
+ <!--
+ SuggestedAdministrator: common administrator name
+
+ The common administrator name for this type of realm. This
+ can be used by clients as a hint when prompting the user for
+ administrative authentication.
+ -->
+ <property name="SuggestedAdministrator" type="s" access="read"/>
+
+ <!--
+ SupportedJoinCredentials: credentials supported for joining
+
+ Various kinds of credentials that are supported when calling the
+ #org.freedesktop.realmd.Kerberos.Join() method.
+
+ Each credential is represented by a type, and an owner. The type
+ denotes which kind of credential is passed to the method. The
+ owner indicates to the client how to prompt the user or obtain
+ the credential, and to the service how to use the credential.
+
+ The various types are:
+ <itemizedlist>
+ <listitem><para><literal>ccache</literal>:
+ the credentials should contain an array of bytes as a
+ <literal>ay</literal> containing the data from a kerberos
+ credential cache file.</para></listitem>
+ <listitem><para><literal>password</literal>:
+ the credentials should contain a pair of strings as a
+ <literal>(ss)</literal> representing a name and
+ password. The name may contain a realm in the standard
+ kerberos format. If missing, it will default to this
+ realm. The name may be empty for a computer or one time
+ password.</para></listitem>
+ <listitem><para><literal>automatic</literal>:
+ the credentials should contain an empty string as a
+ <literal>s</literal>. Using <literal>automatic</literal>
+ indicates that default or system credentials are to be
+ used.</para></listitem>
+ </itemizedlist>
+
+ The various owners are:
+ <itemizedlist>
+ <listitem><para><literal>administrator</literal>:
+ the credentials belong to a kerberos user principal.
+ The caller may use this as a hint to prompt the user
+ for administrative credentials.</para></listitem>
+ <listitem><para><literal>user</literal>:
+ the credentials belong to a kerberos user principal.
+ The caller may use this as a hint to prompt the user
+ for his (possibly non-administrative)
+ credentials.</para></listitem>
+ <listitem><para><literal>computer</literal>:
+ the credentials belong to the computer realmd is
+ being run on.</para></listitem>
+ <listitem><para><literal>secret</literal>:
+ the credentials are a one time password or other secret
+ used to join or leave the computer.</para></listitem>
+ </itemizedlist>
+ -->
+ <property name="SupportedJoinCredentials" type="a(ss)" access="read"/>
+
+ <!--
+ SupportedLeaveCredentials: credentials supported for leaving
+
+ Various kinds of credentials that are supported when calling the
+ #org.freedesktop.realmd.Kerberos.Leave() method.
+
+ See #org.freedesktop.realmd.Kerberos:SupportedJoinCredentials for
+ a discussion of what the values represent.
+ -->
+ <property name="SupportedLeaveCredentials" type="a(ss)" access="read"/>
+
+ <!--
+ Join:
+
+ Join this machine to the realm and enroll the machine.
+
+ If this method returns successfully then the machine will be
+ joined to the realm. It is not necessary to restart services or the
+ machine afterward. Relevant properties on the realm will be updated
+ before the method returns.
+
+ The @credentials should be set according to one of the
+ supported credentials returned by
+ #org.freedesktop.realmd.Kerberos:SupportedJoinCredentials.
+ The first string in the tuple is the type, the second string
+ is the owner, and the variant contains the credential contents
+ See the discussion at
+ #org.freedesktop.realmd.Kerberos:SupportedJoinCredentials
+ for more information.
+
+ @options can contain, but is not limited to, the following values:
+ <itemizedlist>
+ <listitem><para><literal>operation</literal>: a string
+ identifier chosen by the client, which can then later be
+ passed to org.freedesktop.realmd.Service.Cancel() in order
+ to cancel the operation</para></listitem>
+ </itemizedlist>
+
+ This method requires authorization for the PolicyKit action
+ called <literal>org.freedesktop.realmd.configure-realm</literal>.
+
+ In addition to common DBus error results, this method may return:
+ <itemizedlist>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Failed</literal>:
+ may be returned if the join failed for a generic reason.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Cancelled</literal>:
+ returned if the operation was cancelled.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.NotAuthorized</literal>:
+ returned if the calling client is not permitted to perform an join
+ operation.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.AuthenicationFailed</literal>:
+ returned if the credentials passed did not authenticate against the realm
+ correctly. It is appropriate to prompt the user again.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.AlreadyEnrolled</literal>:
+ returned if already enrolled in this realm, or another realm and enrolling
+ in multiple realms is not supported.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Busy</literal>:
+ returned if the service is currently performing another operation like
+ join or leave.</para></listitem>
+ </itemizedlist>
+ -->
+ <method name="Join">
+ <arg name="credentials" type="(ssv)" direction="in"/>
+ <arg name="options" type="a{sv}" direction="in"/>
+ </method>
+
+ <!--
+ Leave:
+
+ Leave the realm and unenroll the machine.
+
+ If this method returns successfully then the machine will have
+ left the domain and been unenrolled. It is not necessary to restart
+ services or the machine afterward. Relevant properties on the realm
+ will be updated before the method returns.
+
+ The @credentials should be set according to one of the
+ supported credentials returned by
+ #org.freedesktop.realmd.Kerberos:SupportedUnenrollCredentials.
+ The first string in the tuple is the type, the second string
+ is the owner, and the variant contains the credential contents
+ See the discussion at
+ #org.freedesktop.realmd.Kerberos:SupportedEnrollCredentials
+ for more information.
+
+ @options can contain, but is not limited to, the following values:
+ <itemizedlist>
+ <listitem><para><literal>operation</literal>: a string
+ identifier chosen by the client, which can then later be
+ passed to org.freedesktop.realmd.Service.Cancel() in order
+ to cancel the operation</para></listitem>
+ </itemizedlist>
+
+ This method requires authorization for the PolicyKit action
+ called <literal>org.freedesktop.realmd.deconfigure-realm</literal>.
+
+ In addition to common DBus error results, this method may return:
+ <itemizedlist>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Failed</literal>:
+ may be returned if the unenroll failed for a generic reason.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Cancelled</literal>:
+ returned if the operation was cancelled.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.NotAuthorized</literal>:
+ returned if the calling client is not permitted to perform an unenroll
+ operation.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.AuthenicationFailed</literal>:
+ returned if the credentials passed did not authenticate against the realm
+ correctly. It is appropriate to prompt the user again.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.NotEnrolled</literal>:
+ returned if not enrolled in this realm.</para></listitem>
+ <listitem><para><literal>org.freedesktop.realmd.Error.Busy</literal>:
+ returned if the service is currently performing another operation like
+ enroll or unenroll.</para></listitem>
+ </itemizedlist>
+ -->
+ <method name="Leave">
+ <arg name="credentials" type="(ssv)" direction="in"/>
+ <arg name="options" type="a{sv}" direction="in"/>
+ </method>
+
+ </interface>
+
+</node>
diff --git a/gnome-initial-setup/pages/password/password-resources.c
b/gnome-initial-setup/pages/password/password-resources.c
new file mode 100644
index 0000000..f841f91
--- /dev/null
+++ b/gnome-initial-setup/pages/password/password-resources.c
@@ -0,0 +1,3869 @@
+#include <gio/gio.h>
+
+#if defined (__ELF__) && ( __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 6))
+# define SECTION __attribute__ ((section (".gresource.password"), aligned (8)))
+#else
+# define SECTION
+#endif
+
+static const SECTION union { const guint8 data[29888]; const double alignment; void * const ptr;}
password_resource_data = { {
+ 0x47, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x28, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x60, 0x8c, 0xdc, 0x7a,
+ 0x04, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00,
+ 0x14, 0x00, 0x76, 0x00, 0xf8, 0x00, 0x00, 0x00,
+ 0xad, 0x15, 0x00, 0x00, 0x4b, 0x50, 0x90, 0x0b,
+ 0x02, 0x00, 0x00, 0x00, 0xad, 0x15, 0x00, 0x00,
+ 0x04, 0x00, 0x4c, 0x00, 0xb4, 0x15, 0x00, 0x00,
+ 0xb8, 0x15, 0x00, 0x00, 0xd4, 0xb5, 0x02, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xb8, 0x15, 0x00, 0x00,
+ 0x01, 0x00, 0x4c, 0x00, 0xbc, 0x15, 0x00, 0x00,
+ 0xc0, 0x15, 0x00, 0x00, 0x52, 0x87, 0x91, 0x6a,
+ 0x04, 0x00, 0x00, 0x00, 0xc0, 0x15, 0x00, 0x00,
+ 0x19, 0x00, 0x76, 0x00, 0xe0, 0x15, 0x00, 0x00,
+ 0x78, 0x3a, 0x00, 0x00, 0xa7, 0xee, 0x9a, 0xec,
+ 0x06, 0x00, 0x00, 0x00, 0x78, 0x3a, 0x00, 0x00,
+ 0x0e, 0x00, 0x4c, 0x00, 0x88, 0x3a, 0x00, 0x00,
+ 0x94, 0x3a, 0x00, 0x00, 0xa8, 0xa1, 0xf8, 0xa8,
+ 0x04, 0x00, 0x00, 0x00, 0x94, 0x3a, 0x00, 0x00,
+ 0x1e, 0x00, 0x76, 0x00, 0xb8, 0x3a, 0x00, 0x00,
+ 0xb3, 0x74, 0x00, 0x00, 0xb0, 0xb7, 0x24, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0xb3, 0x74, 0x00, 0x00,
+ 0x06, 0x00, 0x4c, 0x00, 0xbc, 0x74, 0x00, 0x00,
+ 0xc0, 0x74, 0x00, 0x00, 0x67, 0x69, 0x73, 0x2d,
+ 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
+ 0x2d, 0x70, 0x61, 0x67, 0x65, 0x2e, 0x75, 0x69,
+ 0xa5, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3c, 0x3f, 0x78, 0x6d, 0x6c, 0x20, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x31,
+ 0x2e, 0x30, 0x22, 0x20, 0x65, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x55, 0x54,
+ 0x46, 0x2d, 0x38, 0x22, 0x3f, 0x3e, 0x0a, 0x3c,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
+ 0x65, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
+ 0x2d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
+ 0x73, 0x20, 0x67, 0x74, 0x6b, 0x2b, 0x20, 0x33,
+ 0x2e, 0x30, 0x20, 0x2d, 0x2d, 0x3e, 0x3c, 0x74,
+ 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x69, 0x73, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f,
+ 0x72, 0x64, 0x50, 0x61, 0x67, 0x65, 0x22, 0x20,
+ 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x22,
+ 0x47, 0x69, 0x73, 0x50, 0x61, 0x67, 0x65, 0x22,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x42, 0x6f, 0x78, 0x22, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x70, 0x61, 0x67, 0x65, 0x22,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63,
+ 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69,
+ 0x67, 0x6e, 0x22, 0x3e, 0x63, 0x65, 0x6e, 0x74,
+ 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x61, 0x6c,
+ 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x66, 0x69, 0x6c,
+ 0x6c, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6f, 0x72, 0x69, 0x65,
+ 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22,
+ 0x3e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61,
+ 0x6c, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x49, 0x6d, 0x61,
+ 0x67, 0x65, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x69, 0x6d, 0x61, 0x67, 0x65, 0x31, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x70, 0x69, 0x78, 0x65, 0x6c,
+ 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x3e, 0x39,
+ 0x36, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x63, 0x6f, 0x6e,
+ 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x64,
+ 0x69, 0x61, 0x6c, 0x6f, 0x67, 0x2d, 0x70, 0x61,
+ 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2d, 0x73,
+ 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x69, 0x63, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x73,
+ 0x69, 0x7a, 0x65, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x5f,
+ 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x35, 0x34, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e,
+ 0x5f, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x22,
+ 0x3e, 0x32, 0x36, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x73,
+ 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c, 0x63, 0x6c,
+ 0x61, 0x73, 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x64, 0x69, 0x6d, 0x2d, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x22, 0x2f, 0x3e, 0x3c, 0x2f,
+ 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c,
+ 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b,
+ 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c,
+ 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x63, 0x65, 0x6e,
+ 0x74, 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x61,
+ 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x73, 0x74,
+ 0x61, 0x72, 0x74, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61,
+ 0x72, 0x67, 0x69, 0x6e, 0x5f, 0x74, 0x6f, 0x70,
+ 0x22, 0x3e, 0x32, 0x36, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68,
+ 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72,
+ 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22,
+ 0x3e, 0x53, 0x65, 0x74, 0x20, 0x61, 0x20, 0x50,
+ 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x73, 0x3e, 0x3c, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77,
+ 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x62, 0x6f,
+ 0x6c, 0x64, 0x22, 0x2f, 0x3e, 0x3c, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x63,
+ 0x61, 0x6c, 0x65, 0x22, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x3d, 0x22, 0x31, 0x2e, 0x38, 0x22,
+ 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74,
+ 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x73, 0x75, 0x62, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69,
+ 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61,
+ 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22,
+ 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22,
+ 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x5f,
+ 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x31, 0x34, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79,
+ 0x65, 0x73, 0x22, 0x3e, 0x42, 0x65, 0x20, 0x63,
+ 0x61, 0x72, 0x65, 0x66, 0x75, 0x6c, 0x20, 0x6e,
+ 0x6f, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f,
+ 0x73, 0x65, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20,
+ 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6a, 0x75, 0x73, 0x74,
+ 0x69, 0x66, 0x79, 0x22, 0x3e, 0x63, 0x65, 0x6e,
+ 0x74, 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x72,
+ 0x61, 0x70, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x78, 0x2d, 0x77,
+ 0x69, 0x64, 0x74, 0x68, 0x2d, 0x63, 0x68, 0x61,
+ 0x72, 0x73, 0x22, 0x3e, 0x35, 0x30, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22,
+ 0x47, 0x74, 0x6b, 0x47, 0x72, 0x69, 0x64, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63,
+ 0x72, 0x65, 0x74, 0x73, 0x22, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69,
+ 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61,
+ 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22,
+ 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f,
+ 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x22,
+ 0x3e, 0x31, 0x32, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x6f,
+ 0x77, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e,
+ 0x67, 0x22, 0x3e, 0x31, 0x32, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x5f, 0x74,
+ 0x6f, 0x70, 0x22, 0x3e, 0x35, 0x34, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x61, 0x73,
+ 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x22, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73,
+ 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e,
+ 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e,
+ 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x68, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e,
+ 0x65, 0x6e, 0x64, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x78, 0x61,
+ 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79,
+ 0x65, 0x73, 0x22, 0x3e, 0x43, 0x68, 0x6f, 0x6f,
+ 0x73, 0x65, 0x20, 0x61, 0x20, 0x5f, 0x70, 0x61,
+ 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x75, 0x73, 0x65, 0x5f, 0x75, 0x6e, 0x64,
+ 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d,
+ 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x5f,
+ 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x22, 0x3e,
+ 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
+ 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f,
+ 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e,
+ 0x30, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f,
+ 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e,
+ 0x30, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74,
+ 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68,
+ 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x45, 0x6e,
+ 0x74, 0x72, 0x79, 0x22, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
+ 0x64, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63,
+ 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x3e, 0x46,
+ 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69,
+ 0x6e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x5f, 0x63, 0x68, 0x61, 0x72, 0x22, 0x3e, 0xe2,
+ 0x97, 0x8f, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63,
+ 0x68, 0x61, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x5f,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+ 0x22, 0x3e, 0x65, 0x6e, 0x64, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x78, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73,
+ 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3d,
+ 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e, 0x5f, 0x43,
+ 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x20, 0x70,
+ 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x75, 0x73, 0x65, 0x5f, 0x75, 0x6e,
+ 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63,
+ 0x5f, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x22,
+ 0x3e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d,
+ 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f,
+ 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e,
+ 0x30, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f,
+ 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e,
+ 0x33, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74,
+ 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68,
+ 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x45, 0x6e,
+ 0x74, 0x72, 0x79, 0x22, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d,
+ 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69,
+ 0x6c, 0x69, 0x74, 0x79, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x65,
+ 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x22,
+ 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x22,
+ 0x3e, 0xe2, 0x97, 0x8f, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69,
+ 0x6e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x5f, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x73, 0x65,
+ 0x74, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74,
+ 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70,
+ 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22,
+ 0x3e, 0x33, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64,
+ 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61,
+ 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f,
+ 0x72, 0x64, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x61,
+ 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69, 0x67,
+ 0x6e, 0x22, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c,
+ 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c,
+ 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22,
+ 0x79, 0x65, 0x73, 0x22, 0x3e, 0x54, 0x72, 0x79,
+ 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20,
+ 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74,
+ 0x20, 0x38, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2e,
+ 0x20, 0x4d, 0x69, 0x78, 0x20, 0x75, 0x70, 0x70,
+ 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c,
+ 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73,
+ 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x73,
+ 0x65, 0x20, 0x61, 0x20, 0x6e, 0x75, 0x6d, 0x62,
+ 0x65, 0x72, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x77,
+ 0x6f, 0x2e, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x72, 0x61,
+ 0x70, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6d, 0x61, 0x78, 0x2d, 0x77, 0x69,
+ 0x64, 0x74, 0x68, 0x2d, 0x63, 0x68, 0x61, 0x72,
+ 0x73, 0x22, 0x3e, 0x33, 0x30, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x3e, 0x3c, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x63, 0x61,
+ 0x6c, 0x65, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x3d, 0x22, 0x30, 0x2e, 0x38, 0x22, 0x2f,
+ 0x3e, 0x3c, 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x73, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x32, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67,
+ 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22,
+ 0x47, 0x74, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c,
+ 0x42, 0x61, 0x72, 0x22, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
+ 0x64, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x6e, 0x67,
+ 0x74, 0x68, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46,
+ 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68,
+ 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x66,
+ 0x69, 0x6c, 0x6c, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x61,
+ 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x63, 0x65,
+ 0x6e, 0x74, 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d,
+ 0x61, 0x78, 0x2d, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x22, 0x3e, 0x34, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x6f,
+ 0x64, 0x65, 0x22, 0x3e, 0x64, 0x69, 0x73, 0x63,
+ 0x72, 0x65, 0x74, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69,
+ 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x74,
+ 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66,
+ 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x00, 0x00, 0x28,
+ 0x75, 0x75, 0x61, 0x79, 0x29, 0x6f, 0x72, 0x67,
+ 0x2f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
+ 0x2f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x67, 0x69, 0x73, 0x2d, 0x61, 0x63, 0x63, 0x6f,
+ 0x75, 0x6e, 0x74, 0x2d, 0x70, 0x61, 0x67, 0x65,
+ 0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2e, 0x75,
+ 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x88, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3c, 0x3f, 0x78, 0x6d, 0x6c, 0x20, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x31,
+ 0x2e, 0x30, 0x22, 0x20, 0x65, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x55, 0x54,
+ 0x46, 0x2d, 0x38, 0x22, 0x3f, 0x3e, 0x0a, 0x3c,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
+ 0x65, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
+ 0x2d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
+ 0x73, 0x20, 0x67, 0x74, 0x6b, 0x2b, 0x20, 0x33,
+ 0x2e, 0x30, 0x20, 0x2d, 0x2d, 0x3e, 0x3c, 0x74,
+ 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
+ 0x74, 0x50, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x22, 0x20, 0x70, 0x61, 0x72, 0x65,
+ 0x6e, 0x74, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x42,
+ 0x69, 0x6e, 0x22, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x42, 0x6f, 0x78,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x61, 0x72,
+ 0x65, 0x61, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46,
+ 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68,
+ 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x63,
+ 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e,
+ 0x66, 0x69, 0x6c, 0x6c, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6f,
+ 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x3e, 0x76, 0x65, 0x72, 0x74,
+ 0x69, 0x63, 0x61, 0x6c, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c,
+ 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b,
+ 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x61, 0x76, 0x61, 0x74,
+ 0x61, 0x72, 0x2d, 0x62, 0x75, 0x74, 0x74, 0x6f,
+ 0x6e, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69,
+ 0x6e, 0x5f, 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x35,
+ 0x34, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69,
+ 0x67, 0x6e, 0x22, 0x3e, 0x63, 0x65, 0x6e, 0x74,
+ 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x49, 0x6d,
+ 0x61, 0x67, 0x65, 0x22, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x2d,
+ 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f,
+ 0x73, 0x69, 0x7a, 0x65, 0x22, 0x3e, 0x39, 0x36,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x69, 0x63, 0x6f, 0x6e, 0x5f,
+ 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x61, 0x76,
+ 0x61, 0x74, 0x61, 0x72, 0x2d, 0x64, 0x65, 0x66,
+ 0x61, 0x75, 0x6c, 0x74, 0x2d, 0x73, 0x79, 0x6d,
+ 0x62, 0x6f, 0x6c, 0x69, 0x63, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x7a,
+ 0x65, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x64, 0x69, 0x6d, 0x2d, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x2f, 0x3e, 0x3c,
+ 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46,
+ 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68,
+ 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x63,
+ 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e,
+ 0x73, 0x74, 0x61, 0x72, 0x74, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x5f, 0x74,
+ 0x6f, 0x70, 0x22, 0x3e, 0x32, 0x36, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x68, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20,
+ 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65,
+ 0x73, 0x22, 0x3e, 0x41, 0x62, 0x6f, 0x75, 0x74,
+ 0x20, 0x59, 0x6f, 0x75, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x73, 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x65, 0x69, 0x67,
+ 0x68, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x3d, 0x22, 0x62, 0x6f, 0x6c, 0x64, 0x22,
+ 0x2f, 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x73, 0x63, 0x61, 0x6c, 0x65,
+ 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d,
+ 0x22, 0x31, 0x2e, 0x38, 0x22, 0x2f, 0x3e, 0x3c,
+ 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61,
+ 0x62, 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x61,
+ 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x73, 0x74,
+ 0x61, 0x72, 0x74, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61,
+ 0x72, 0x67, 0x69, 0x6e, 0x5f, 0x74, 0x6f, 0x70,
+ 0x22, 0x3e, 0x31, 0x34, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72,
+ 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22,
+ 0x3e, 0x57, 0x65, 0x20, 0x6e, 0x65, 0x65, 0x64,
+ 0x20, 0x61, 0x20, 0x66, 0x65, 0x77, 0x20, 0x64,
+ 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x74,
+ 0x6f, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
+ 0x74, 0x65, 0x20, 0x73, 0x65, 0x74, 0x75, 0x70,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6a, 0x75, 0x73, 0x74,
+ 0x69, 0x66, 0x79, 0x22, 0x3e, 0x63, 0x65, 0x6e,
+ 0x74, 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x72,
+ 0x61, 0x70, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x78, 0x2d, 0x77,
+ 0x69, 0x64, 0x74, 0x68, 0x2d, 0x63, 0x68, 0x61,
+ 0x72, 0x73, 0x22, 0x3e, 0x35, 0x30, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22,
+ 0x47, 0x74, 0x6b, 0x47, 0x72, 0x69, 0x64, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x66, 0x6f, 0x72,
+ 0x6d, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x6f,
+ 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x73, 0x70, 0x61,
+ 0x63, 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x31, 0x32,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x72, 0x6f, 0x77, 0x5f, 0x73,
+ 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x22, 0x3e,
+ 0x31, 0x32, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72,
+ 0x67, 0x69, 0x6e, 0x5f, 0x74, 0x6f, 0x70, 0x22,
+ 0x3e, 0x35, 0x34, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61,
+ 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x66, 0x75, 0x6c, 0x6c, 0x6e, 0x61,
+ 0x6d, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c,
+ 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x65, 0x6e, 0x64,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67,
+ 0x6e, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72,
+ 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22,
+ 0x3e, 0x5f, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x4e,
+ 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x73,
+ 0x65, 0x5f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c,
+ 0x69, 0x6e, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x6e, 0x65, 0x6d,
+ 0x6f, 0x6e, 0x69, 0x63, 0x5f, 0x77, 0x69, 0x64,
+ 0x67, 0x65, 0x74, 0x22, 0x3e, 0x66, 0x75, 0x6c,
+ 0x6c, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x6e,
+ 0x74, 0x72, 0x79, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x33, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67,
+ 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22,
+ 0x47, 0x74, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x66, 0x75,
+ 0x6c, 0x6c, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x65,
+ 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61,
+ 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
+ 0x22, 0x3e, 0x32, 0x35, 0x35, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x77, 0x69, 0x64, 0x74, 0x68, 0x2d, 0x63, 0x68,
+ 0x61, 0x72, 0x73, 0x22, 0x3e, 0x32, 0x35, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76, 0x69,
+ 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x68,
+ 0x61, 0x72, 0x22, 0x3e, 0xe2, 0x97, 0x8f, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x72,
+ 0x5f, 0x73, 0x65, 0x74, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70,
+ 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61,
+ 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61,
+ 0x63, 0x68, 0x22, 0x3e, 0x33, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68,
+ 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x75, 0x73, 0x65,
+ 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x22, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73,
+ 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e,
+ 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e,
+ 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x68, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e,
+ 0x65, 0x6e, 0x64, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x78, 0x61,
+ 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79,
+ 0x65, 0x73, 0x22, 0x3e, 0x5f, 0x55, 0x73, 0x65,
+ 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x75, 0x73, 0x65, 0x5f, 0x75, 0x6e, 0x64, 0x65,
+ 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x6e,
+ 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x5f, 0x77,
+ 0x69, 0x64, 0x67, 0x65, 0x74, 0x22, 0x3e, 0x75,
+ 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f,
+ 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x34,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x43, 0x6f, 0x6d,
+ 0x62, 0x6f, 0x42, 0x6f, 0x78, 0x54, 0x65, 0x78,
+ 0x74, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x75,
+ 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f,
+ 0x63, 0x6f, 0x6d, 0x62, 0x6f, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x61, 0x73, 0x5f, 0x65, 0x6e,
+ 0x74, 0x72, 0x79, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x6e, 0x74, 0x72,
+ 0x79, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x63,
+ 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0x3e, 0x30,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x69, 0x64, 0x5f, 0x63, 0x6f,
+ 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x2d, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3d,
+ 0x22, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x63, 0x6f, 0x6d,
+ 0x62, 0x6f, 0x62, 0x6f, 0x78, 0x74, 0x65, 0x78,
+ 0x74, 0x2d, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63,
+ 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x22, 0x3e,
+ 0x32, 0x35, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x34, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67,
+ 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22,
+ 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x75, 0x73,
+ 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x65,
+ 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46,
+ 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68,
+ 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x73,
+ 0x74, 0x61, 0x72, 0x74, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d,
+ 0x61, 0x72, 0x67, 0x69, 0x6e, 0x5f, 0x62, 0x6f,
+ 0x74, 0x74, 0x6f, 0x6d, 0x22, 0x3e, 0x31, 0x32,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c,
+ 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c,
+ 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22,
+ 0x79, 0x65, 0x73, 0x22, 0x3e, 0x59, 0x6f, 0x75,
+ 0x72, 0x20, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61,
+ 0x6d, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f,
+ 0x74, 0x20, 0x62, 0x65, 0x20, 0x63, 0x68, 0x61,
+ 0x6e, 0x67, 0x65, 0x64, 0x20, 0x61, 0x66, 0x74,
+ 0x65, 0x72, 0x20, 0x73, 0x65, 0x74, 0x75, 0x70,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x72, 0x61, 0x70,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x73, 0x3e, 0x3c, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x63,
+ 0x61, 0x6c, 0x65, 0x22, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x3d, 0x22, 0x30, 0x2e, 0x38, 0x22,
+ 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x35, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69,
+ 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x47, 0x72, 0x69,
+ 0x64, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73,
+ 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63,
+ 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x6c, 0x75,
+ 0x6d, 0x6e, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x69,
+ 0x6e, 0x67, 0x22, 0x3e, 0x31, 0x32, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x72, 0x6f, 0x77, 0x5f, 0x73, 0x70, 0x61,
+ 0x63, 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x31, 0x32,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69,
+ 0x6e, 0x5f, 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x31,
+ 0x38, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
+ 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69, 0x67,
+ 0x6e, 0x22, 0x3e, 0x65, 0x6e, 0x64, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e,
+ 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e, 0x5f,
+ 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x75, 0x73, 0x65, 0x5f, 0x75,
+ 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69,
+ 0x63, 0x5f, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74,
+ 0x22, 0x3e, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f,
+ 0x72, 0x64, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x66,
+ 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68,
+ 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x6f,
+ 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68,
+ 0x22, 0x3e, 0x36, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x69,
+ 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70,
+ 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c,
+ 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c,
+ 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x70, 0x61, 0x73, 0x73, 0x77,
+ 0x6f, 0x72, 0x64, 0x5f, 0x65, 0x6e, 0x74, 0x72,
+ 0x79, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73,
+ 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22,
+ 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x22,
+ 0x3e, 0xe2, 0x97, 0x8f, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69,
+ 0x6e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x5f, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x73, 0x65,
+ 0x74, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74,
+ 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70,
+ 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22,
+ 0x3e, 0x36, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64,
+ 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61,
+ 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72,
+ 0x6d, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63,
+ 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69,
+ 0x67, 0x6e, 0x22, 0x3e, 0x65, 0x6e, 0x64, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61,
+ 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e,
+ 0x5f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d,
+ 0x20, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
+ 0x64, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x73, 0x65, 0x5f,
+ 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e,
+ 0x69, 0x63, 0x5f, 0x77, 0x69, 0x64, 0x67, 0x65,
+ 0x74, 0x22, 0x3e, 0x63, 0x6f, 0x6e, 0x66, 0x69,
+ 0x72, 0x6d, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x66,
+ 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68,
+ 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x6f,
+ 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68,
+ 0x22, 0x3e, 0x37, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x69,
+ 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70,
+ 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c,
+ 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c,
+ 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x66, 0x69,
+ 0x72, 0x6d, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x3e,
+ 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76,
+ 0x65, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73,
+ 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61,
+ 0x72, 0x22, 0x3e, 0xe2, 0x97, 0x8f, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x5f,
+ 0x73, 0x65, 0x74, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65,
+ 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74,
+ 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x22, 0x3e, 0x37, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77,
+ 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74,
+ 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x70, 0x61, 0x73, 0x73,
+ 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x65, 0x78, 0x70,
+ 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c,
+ 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x73, 0x74, 0x61,
+ 0x72, 0x74, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e,
+ 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e, 0x54,
+ 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73,
+ 0x65, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61,
+ 0x73, 0x74, 0x20, 0x38, 0x20, 0x64, 0x69, 0x66,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x73, 0x2e, 0x20, 0x4d, 0x69, 0x78, 0x20, 0x75,
+ 0x70, 0x70, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63,
+ 0x61, 0x73, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x75, 0x73, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x75,
+ 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x72, 0x20,
+ 0x74, 0x77, 0x6f, 0x2e, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77,
+ 0x72, 0x61, 0x70, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x78, 0x2d,
+ 0x77, 0x69, 0x64, 0x74, 0x68, 0x2d, 0x63, 0x68,
+ 0x61, 0x72, 0x73, 0x22, 0x3e, 0x33, 0x30, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x73, 0x3e, 0x3c, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73,
+ 0x63, 0x61, 0x6c, 0x65, 0x22, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x30, 0x2e, 0x38,
+ 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x38,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x42, 0x6f, 0x78,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x62, 0x6f,
+ 0x78, 0x31, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46,
+ 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x73,
+ 0x74, 0x61, 0x72, 0x74, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6f,
+ 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x3e, 0x76, 0x65, 0x72, 0x74,
+ 0x69, 0x63, 0x61, 0x6c, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73,
+ 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x22, 0x3e,
+ 0x32, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
+ 0x5f, 0x73, 0x74, 0x72, 0x65, 0x6e, 0x67, 0x74,
+ 0x68, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63,
+ 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x78, 0x61, 0x6c, 0x69,
+ 0x67, 0x6e, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x2f, 0x3e,
+ 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x3e, 0x3c, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x63, 0x61,
+ 0x6c, 0x65, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x3d, 0x22, 0x30, 0x2e, 0x38, 0x22, 0x2f,
+ 0x3e, 0x3c, 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x73, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e,
+ 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x66, 0x69, 0x6c, 0x6c, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x70, 0x6f, 0x73,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x30,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x65,
+ 0x76, 0x65, 0x6c, 0x42, 0x61, 0x72, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x70, 0x61, 0x73, 0x73,
+ 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x73, 0x74, 0x72,
+ 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+ 0x22, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+ 0x22, 0x3e, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x78, 0x2d, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x34, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x3e,
+ 0x64, 0x69, 0x73, 0x63, 0x72, 0x65, 0x74, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x78, 0x70,
+ 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c,
+ 0x6c, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74,
+ 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22,
+ 0x3e, 0x32, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70,
+ 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22,
+ 0x3e, 0x36, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64,
+ 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e,
+ 0x32, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61,
+ 0x74, 0x65, 0x3e, 0x3c, 0x2f, 0x69, 0x6e, 0x74,
+ 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x3e, 0x0a,
+ 0x00, 0x00, 0x28, 0x75, 0x75, 0x61, 0x79, 0x29,
+ 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x2d,
+ 0x73, 0x65, 0x74, 0x75, 0x70, 0x2f, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x67, 0x69, 0x73, 0x2d,
+ 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2d,
+ 0x70, 0x61, 0x67, 0x65, 0x2d, 0x65, 0x6e, 0x74,
+ 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x2e,
+ 0x75, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xeb, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3c, 0x3f, 0x78, 0x6d, 0x6c, 0x20, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x31,
+ 0x2e, 0x30, 0x22, 0x20, 0x65, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x55, 0x54,
+ 0x46, 0x2d, 0x38, 0x22, 0x3f, 0x3e, 0x0a, 0x3c,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
+ 0x65, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
+ 0x2d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
+ 0x73, 0x20, 0x67, 0x74, 0x6b, 0x2b, 0x20, 0x33,
+ 0x2e, 0x30, 0x20, 0x2d, 0x2d, 0x3e, 0x3c, 0x74,
+ 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x69, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
+ 0x74, 0x50, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74,
+ 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x22,
+ 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d,
+ 0x22, 0x47, 0x74, 0x6b, 0x42, 0x69, 0x6e, 0x22,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x42, 0x6f, 0x78, 0x22, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x61, 0x72, 0x65, 0x61, 0x22,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63,
+ 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6f, 0x72, 0x69, 0x65,
+ 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22,
+ 0x3e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61,
+ 0x6c, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69,
+ 0x67, 0x6e, 0x22, 0x3e, 0x63, 0x65, 0x6e, 0x74,
+ 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x61, 0x6c,
+ 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x66, 0x69, 0x6c,
+ 0x6c, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x49, 0x6d, 0x61,
+ 0x67, 0x65, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x69, 0x6d, 0x61, 0x67, 0x65, 0x31, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x70, 0x69, 0x78, 0x65, 0x6c,
+ 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x3e, 0x39,
+ 0x36, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x63, 0x6f, 0x6e,
+ 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x64,
+ 0x69, 0x61, 0x6c, 0x6f, 0x67, 0x2d, 0x70, 0x61,
+ 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2d, 0x73,
+ 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x69, 0x63, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x73,
+ 0x69, 0x7a, 0x65, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x5f,
+ 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x35, 0x34, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e,
+ 0x5f, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x22,
+ 0x3e, 0x32, 0x36, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x73,
+ 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c, 0x63, 0x6c,
+ 0x61, 0x73, 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x64, 0x69, 0x6d, 0x2d, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x22, 0x2f, 0x3e, 0x3c, 0x2f,
+ 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c,
+ 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b,
+ 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x78,
+ 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e,
+ 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e, 0x45,
+ 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73,
+ 0x65, 0x20, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e,
+ 0x5f, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x22,
+ 0x3e, 0x31, 0x34, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x73, 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x65, 0x69, 0x67, 0x68,
+ 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x3d, 0x22, 0x62, 0x6f, 0x6c, 0x64, 0x22, 0x2f,
+ 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x22,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22,
+ 0x31, 0x2e, 0x38, 0x22, 0x2f, 0x3e, 0x3c, 0x2f,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x73, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x61, 0x6c,
+ 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x73, 0x74, 0x61,
+ 0x72, 0x74, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72,
+ 0x67, 0x69, 0x6e, 0x5f, 0x62, 0x6f, 0x74, 0x74,
+ 0x6f, 0x6d, 0x22, 0x3e, 0x32, 0x36, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20,
+ 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65,
+ 0x73, 0x22, 0x3e, 0x45, 0x6e, 0x74, 0x65, 0x72,
+ 0x70, 0x72, 0x69, 0x73, 0x65, 0x20, 0x6c, 0x6f,
+ 0x67, 0x69, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x6f,
+ 0x77, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78,
+ 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x63,
+ 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x6c, 0x79,
+ 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64,
+ 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x61, 0x63,
+ 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x74, 0x6f,
+ 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64,
+ 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73,
+ 0x20, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6a, 0x75, 0x73, 0x74, 0x69,
+ 0x66, 0x79, 0x22, 0x3e, 0x63, 0x65, 0x6e, 0x74,
+ 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x72, 0x61,
+ 0x70, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6d, 0x61, 0x78, 0x2d, 0x77, 0x69,
+ 0x64, 0x74, 0x68, 0x2d, 0x63, 0x68, 0x61, 0x72,
+ 0x73, 0x22, 0x3e, 0x34, 0x35, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x47, 0x72, 0x69, 0x64, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x66, 0x6f, 0x72, 0x6d,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x6f, 0x77,
+ 0x5f, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67,
+ 0x22, 0x3e, 0x31, 0x32, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x73, 0x70,
+ 0x61, 0x63, 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x31,
+ 0x32, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67,
+ 0x69, 0x6e, 0x5f, 0x62, 0x6f, 0x74, 0x74, 0x6f,
+ 0x6d, 0x22, 0x3e, 0x33, 0x32, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74,
+ 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x34, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46,
+ 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68,
+ 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x65,
+ 0x6e, 0x64, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x78, 0x61, 0x6c,
+ 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20,
+ 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65,
+ 0x73, 0x22, 0x3e, 0x5f, 0x44, 0x6f, 0x6d, 0x61,
+ 0x69, 0x6e, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x73, 0x65,
+ 0x5f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69,
+ 0x6e, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x6e, 0x65, 0x6d, 0x6f,
+ 0x6e, 0x69, 0x63, 0x5f, 0x77, 0x69, 0x64, 0x67,
+ 0x65, 0x74, 0x22, 0x3e, 0x64, 0x6f, 0x6d, 0x61,
+ 0x69, 0x6e, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70,
+ 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61,
+ 0x63, 0x68, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61,
+ 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68,
+ 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x38, 0x22, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73,
+ 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e,
+ 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e,
+ 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x68, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e,
+ 0x65, 0x6e, 0x64, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x78, 0x61,
+ 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79,
+ 0x65, 0x73, 0x22, 0x3e, 0x5f, 0x55, 0x73, 0x65,
+ 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x75, 0x73, 0x65, 0x5f, 0x75, 0x6e, 0x64, 0x65,
+ 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x6e,
+ 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x5f, 0x77,
+ 0x69, 0x64, 0x67, 0x65, 0x74, 0x22, 0x3e, 0x6c,
+ 0x6f, 0x67, 0x69, 0x6e, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x33, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69,
+ 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d,
+ 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65,
+ 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x39, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+ 0x22, 0x3e, 0x65, 0x6e, 0x64, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x78, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73,
+ 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3d,
+ 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e, 0x5f, 0x50,
+ 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x75, 0x73, 0x65, 0x5f, 0x75, 0x6e,
+ 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63,
+ 0x5f, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x22,
+ 0x3e, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
+ 0x64, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65,
+ 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74,
+ 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x22, 0x3e, 0x34, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77,
+ 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74,
+ 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x6f, 0x67, 0x69,
+ 0x6e, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x78,
+ 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63,
+ 0x68, 0x61, 0x72, 0x22, 0x3e, 0xe2, 0x97, 0x8f,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73,
+ 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61,
+ 0x72, 0x5f, 0x73, 0x65, 0x74, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61,
+ 0x78, 0x2d, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
+ 0x22, 0x3e, 0x32, 0x35, 0x35, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x77, 0x69, 0x64, 0x74, 0x68, 0x2d, 0x63, 0x68,
+ 0x61, 0x72, 0x73, 0x22, 0x3e, 0x32, 0x35, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74,
+ 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70,
+ 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22,
+ 0x3e, 0x33, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64,
+ 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61,
+ 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x22, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f,
+ 0x72, 0x64, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65,
+ 0x78, 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69,
+ 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x72,
+ 0x22, 0x3e, 0xe2, 0x97, 0x8f, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65,
+ 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+ 0x74, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x72,
+ 0x5f, 0x73, 0x65, 0x74, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x78,
+ 0x2d, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22,
+ 0x3e, 0x32, 0x35, 0x35, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77,
+ 0x69, 0x64, 0x74, 0x68, 0x2d, 0x63, 0x68, 0x61,
+ 0x72, 0x73, 0x22, 0x3e, 0x32, 0x35, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f,
+ 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f,
+ 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e,
+ 0x34, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74,
+ 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68,
+ 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x43, 0x6f,
+ 0x6d, 0x62, 0x6f, 0x42, 0x6f, 0x78, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x64, 0x6f, 0x6d, 0x61,
+ 0x69, 0x6e, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46,
+ 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68,
+ 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d,
+ 0x6f, 0x64, 0x65, 0x6c, 0x22, 0x3e, 0x72, 0x65,
+ 0x61, 0x6c, 0x6d, 0x73, 0x5f, 0x6d, 0x6f, 0x64,
+ 0x65, 0x6c, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x61, 0x73,
+ 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x65,
+ 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x74, 0x65, 0x78,
+ 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
+ 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x20, 0x69, 0x6e, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2d, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3d, 0x22, 0x65, 0x6e, 0x74,
+ 0x72, 0x79, 0x22, 0x3e, 0x3c, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x45, 0x6e,
+ 0x74, 0x72, 0x79, 0x22, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f,
+ 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6d, 0x61, 0x78, 0x2d, 0x6c, 0x65, 0x6e,
+ 0x67, 0x74, 0x68, 0x22, 0x3e, 0x32, 0x35, 0x35,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x22, 0x3e,
+ 0x32, 0x35, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67,
+ 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22,
+ 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x31, 0x30, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e,
+ 0x5f, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x22,
+ 0x3e, 0x31, 0x32, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x78, 0x61,
+ 0x6c, 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x30, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79,
+ 0x65, 0x73, 0x22, 0x3e, 0x45, 0x6e, 0x74, 0x65,
+ 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x20, 0x64,
+ 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x6f, 0x72,
+ 0x20, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x73, 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x73, 0x63, 0x61, 0x6c, 0x65,
+ 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d,
+ 0x22, 0x30, 0x2e, 0x38, 0x22, 0x2f, 0x3e, 0x3c,
+ 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65,
+ 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74,
+ 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x22, 0x3e, 0x32, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77,
+ 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74,
+ 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x6c,
+ 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46,
+ 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x32, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x34, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69,
+ 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x74,
+ 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x44, 0x69, 0x61, 0x6c, 0x6f, 0x67,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6a, 0x6f,
+ 0x69, 0x6e, 0x5f, 0x64, 0x69, 0x61, 0x6c, 0x6f,
+ 0x67, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x62, 0x6f,
+ 0x72, 0x64, 0x65, 0x72, 0x5f, 0x77, 0x69, 0x64,
+ 0x74, 0x68, 0x22, 0x3e, 0x31, 0x30, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x61, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x6f, 0x64, 0x61,
+ 0x6c, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f,
+ 0x79, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x70,
+ 0x61, 0x72, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74, 0x79,
+ 0x70, 0x65, 0x5f, 0x68, 0x69, 0x6e, 0x74, 0x22,
+ 0x3e, 0x64, 0x69, 0x61, 0x6c, 0x6f, 0x67, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x2d, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3d,
+ 0x22, 0x76, 0x62, 0x6f, 0x78, 0x22, 0x3e, 0x3c,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74,
+ 0x6b, 0x42, 0x6f, 0x78, 0x22, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x64, 0x69, 0x61, 0x6c, 0x6f, 0x67,
+ 0x2d, 0x76, 0x62, 0x6f, 0x78, 0x31, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6f, 0x72, 0x69, 0x65, 0x6e,
+ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e,
+ 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x73, 0x70, 0x61, 0x63, 0x69,
+ 0x6e, 0x67, 0x22, 0x3e, 0x32, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x20, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2d,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3d, 0x22, 0x61,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x72,
+ 0x65, 0x61, 0x22, 0x3e, 0x3c, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x42, 0x75,
+ 0x74, 0x74, 0x6f, 0x6e, 0x42, 0x6f, 0x78, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x69, 0x61,
+ 0x6c, 0x6f, 0x67, 0x2d, 0x61, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x5f, 0x61, 0x72, 0x65, 0x61, 0x31,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x79,
+ 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x74, 0x79, 0x6c,
+ 0x65, 0x22, 0x3e, 0x65, 0x6e, 0x64, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x62, 0x75,
+ 0x74, 0x74, 0x6f, 0x6e, 0x31, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x3e, 0x67, 0x74,
+ 0x6b, 0x2d, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x75, 0x73, 0x65, 0x5f, 0x61,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x70,
+ 0x70, 0x65, 0x61, 0x72, 0x61, 0x6e, 0x63, 0x65,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f,
+ 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73,
+ 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x70, 0x70, 0x65,
+ 0x61, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x3e,
+ 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x75, 0x73, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x63,
+ 0x6b, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x78, 0x70, 0x61,
+ 0x6e, 0x64, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x6c,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x62, 0x75,
+ 0x74, 0x74, 0x6f, 0x6e, 0x32, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72,
+ 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22,
+ 0x3e, 0x43, 0x5f, 0x6f, 0x6e, 0x74, 0x69, 0x6e,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x73, 0x65,
+ 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+ 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x61, 0x6e,
+ 0x63, 0x65, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f,
+ 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61,
+ 0x6e, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+ 0x74, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x61, 0x73, 0x5f, 0x64, 0x65,
+ 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x65,
+ 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x5f, 0x64,
+ 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x75,
+ 0x73, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x5f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72,
+ 0x61, 0x6e, 0x63, 0x65, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x73,
+ 0x65, 0x5f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c,
+ 0x69, 0x6e, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x78,
+ 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69,
+ 0x6c, 0x6c, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x78, 0x70,
+ 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c,
+ 0x6c, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x70, 0x61, 0x63, 0x6b, 0x5f, 0x74,
+ 0x79, 0x70, 0x65, 0x22, 0x3e, 0x65, 0x6e, 0x64,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x30, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d,
+ 0x22, 0x47, 0x74, 0x6b, 0x42, 0x6f, 0x78, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x62, 0x6f, 0x78,
+ 0x32, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x62, 0x6f,
+ 0x72, 0x64, 0x65, 0x72, 0x5f, 0x77, 0x69, 0x64,
+ 0x74, 0x68, 0x22, 0x3e, 0x35, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x76, 0x65, 0x72,
+ 0x74, 0x69, 0x63, 0x61, 0x6c, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x22,
+ 0x3e, 0x31, 0x30, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61,
+ 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x37,
+ 0x31, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61,
+ 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e,
+ 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x41,
+ 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72,
+ 0x61, 0x74, 0x6f, 0x72, 0x20, 0x4c, 0x6f, 0x67,
+ 0x69, 0x6e, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
+ 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74,
+ 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d,
+ 0x22, 0x62, 0x6f, 0x6c, 0x64, 0x22, 0x2f, 0x3e,
+ 0x3c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x22, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x31,
+ 0x2e, 0x32, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x73, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x78, 0x70, 0x61,
+ 0x6e, 0x64, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73,
+ 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x6c,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x31, 0x32, 0x22, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69,
+ 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61,
+ 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22,
+ 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22,
+ 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x79, 0x61, 0x6c,
+ 0x69, 0x67, 0x6e, 0x22, 0x3e, 0x30, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20,
+ 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65,
+ 0x73, 0x22, 0x3e, 0x49, 0x6e, 0x20, 0x6f, 0x72,
+ 0x64, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x75,
+ 0x73, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x65, 0x72,
+ 0x70, 0x72, 0x69, 0x73, 0x65, 0x20, 0x6c, 0x6f,
+ 0x67, 0x69, 0x6e, 0x73, 0x2c, 0x20, 0x74, 0x68,
+ 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75,
+ 0x74, 0x65, 0x72, 0x20, 0x6e, 0x65, 0x65, 0x64,
+ 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x20,
+ 0x50, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x68,
+ 0x61, 0x76, 0x65, 0x20, 0x79, 0x6f, 0x75, 0x72,
+ 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
+ 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73,
+ 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x74, 0x68, 0x65, 0x69,
+ 0x72, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
+ 0x20, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
+ 0x64, 0x20, 0x68, 0x65, 0x72, 0x65, 0x2c, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x63, 0x68, 0x6f, 0x6f,
+ 0x73, 0x65, 0x20, 0x61, 0x20, 0x75, 0x6e, 0x69,
+ 0x71, 0x75, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70,
+ 0x75, 0x74, 0x65, 0x72, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x79, 0x6f,
+ 0x75, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75,
+ 0x74, 0x65, 0x72, 0x2e, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x22,
+ 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x66, 0x69, 0x6c, 0x6c, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x70, 0x6f,
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61,
+ 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x47,
+ 0x72, 0x69, 0x64, 0x22, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x67, 0x72, 0x69, 0x64, 0x31, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69,
+ 0x6e, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x22, 0x3e,
+ 0x31, 0x32, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x78,
+ 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x6f, 0x77,
+ 0x5f, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67,
+ 0x22, 0x3e, 0x36, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x6f,
+ 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x73, 0x70, 0x61,
+ 0x63, 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x31, 0x32,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d,
+ 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65,
+ 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x31, 0x33, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67,
+ 0x6e, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72,
+ 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22,
+ 0x3e, 0x5f, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x75, 0x73, 0x65, 0x5f, 0x75,
+ 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69,
+ 0x63, 0x5f, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74,
+ 0x22, 0x3e, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x64,
+ 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x64, 0x69, 0x6d, 0x2d,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x2f, 0x3e,
+ 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x64, 0x6f, 0x6d,
+ 0x61, 0x69, 0x6e, 0x22, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73,
+ 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e,
+ 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e,
+ 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x5f, 0x74,
+ 0x6f, 0x70, 0x22, 0x3e, 0x35, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x5f, 0x62,
+ 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x22, 0x3e, 0x35,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67,
+ 0x6e, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e,
+ 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74,
+ 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69,
+ 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d,
+ 0x22, 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65,
+ 0x6c, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x31, 0x38, 0x22, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x63, 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75,
+ 0x73, 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67,
+ 0x6e, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72,
+ 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22,
+ 0x3e, 0x5f, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74,
+ 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x73, 0x65,
+ 0x5f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69,
+ 0x6e, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x6e, 0x65, 0x6d, 0x6f,
+ 0x6e, 0x69, 0x63, 0x5f, 0x77, 0x69, 0x64, 0x67,
+ 0x65, 0x74, 0x22, 0x3e, 0x6a, 0x6f, 0x69, 0x6e,
+ 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65,
+ 0x72, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x73, 0x74, 0x79,
+ 0x6c, 0x65, 0x3e, 0x3c, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x64, 0x69, 0x6d, 0x2d, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x74,
+ 0x79, 0x6c, 0x65, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65,
+ 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74,
+ 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x77,
+ 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e, 0x3c,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74,
+ 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x6a, 0x6f, 0x69, 0x6e,
+ 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65,
+ 0x72, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x78,
+ 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70,
+ 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
+ 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x61,
+ 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61,
+ 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e, 0x31,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67, 0x68,
+ 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3e,
+ 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x47,
+ 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x22,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x31, 0x34, 0x22, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76, 0x69,
+ 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x61,
+ 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x22,
+ 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x22,
+ 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e,
+ 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e, 0x41,
+ 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72,
+ 0x61, 0x74, 0x6f, 0x72, 0x20, 0x5f, 0x4e, 0x61,
+ 0x6d, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x73, 0x65,
+ 0x5f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69,
+ 0x6e, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x6d, 0x6e, 0x65, 0x6d, 0x6f,
+ 0x6e, 0x69, 0x63, 0x5f, 0x77, 0x69, 0x64, 0x67,
+ 0x65, 0x74, 0x22, 0x3e, 0x6a, 0x6f, 0x69, 0x6e,
+ 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x64, 0x69, 0x6d, 0x2d,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x2f, 0x3e,
+ 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x32,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d,
+ 0x65, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x66,
+ 0x6f, 0x63, 0x75, 0x73, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x78,
+ 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63,
+ 0x68, 0x61, 0x72, 0x22, 0x3e, 0xe2, 0x97, 0x8f,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76, 0x69, 0x73,
+ 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61,
+ 0x72, 0x5f, 0x73, 0x65, 0x74, 0x22, 0x3e, 0x54,
+ 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x2f,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c,
+ 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e,
+ 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
+ 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x74, 0x74,
+ 0x61, 0x63, 0x68, 0x22, 0x3e, 0x32, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0x3e,
+ 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65, 0x69, 0x67,
+ 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22,
+ 0x47, 0x74, 0x6b, 0x4c, 0x61, 0x62, 0x65, 0x6c,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x31, 0x35, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x78, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x22, 0x20, 0x74, 0x72, 0x61,
+ 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x3d, 0x22, 0x79, 0x65, 0x73, 0x22, 0x3e,
+ 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74,
+ 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x50, 0x61,
+ 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x75, 0x73, 0x65, 0x5f, 0x75, 0x6e, 0x64,
+ 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d,
+ 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x5f,
+ 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x22, 0x3e,
+ 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x73,
+ 0x73, 0x77, 0x6f, 0x72, 0x64, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c,
+ 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3d, 0x22, 0x64, 0x69, 0x6d, 0x2d,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x2f, 0x3e,
+ 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x30,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x33,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73,
+ 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x73,
+ 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x3e,
+ 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63,
+ 0x61, 0x6e, 0x5f, 0x66, 0x6f, 0x63, 0x75, 0x73,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x68, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64,
+ 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c,
+ 0x69, 0x74, 0x79, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63,
+ 0x68, 0x61, 0x72, 0x22, 0x3e, 0xe2, 0x97, 0x8f,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x61, 0x63, 0x74, 0x69, 0x76,
+ 0x61, 0x74, 0x65, 0x73, 0x5f, 0x64, 0x65, 0x66,
+ 0x61, 0x75, 0x6c, 0x74, 0x22, 0x3e, 0x54, 0x72,
+ 0x75, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x6e, 0x76,
+ 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x63,
+ 0x68, 0x61, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x22,
+ 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x3e, 0x3c, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x31,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x5f, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x3e, 0x33,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x68, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x31, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b,
+ 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61,
+ 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x78,
+ 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x46, 0x61,
+ 0x6c, 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69,
+ 0x6c, 0x6c, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x32, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69,
+ 0x6e, 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x70, 0x61, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x78, 0x70,
+ 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x46, 0x61, 0x6c,
+ 0x73, 0x65, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x3e, 0x3c, 0x70, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c,
+ 0x6c, 0x22, 0x3e, 0x54, 0x72, 0x75, 0x65, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
+ 0x79, 0x3e, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x3e, 0x31, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3e, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x3e, 0x3c, 0x2f, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3e, 0x3c, 0x61, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2d, 0x77, 0x69, 0x64, 0x67, 0x65,
+ 0x74, 0x73, 0x3e, 0x3c, 0x61, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2d, 0x77, 0x69, 0x64, 0x67, 0x65,
+ 0x74, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x3d, 0x22, 0x2d, 0x36, 0x22, 0x3e,
+ 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x31, 0x3c,
+ 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2d,
+ 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x3e, 0x3c,
+ 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x77,
+ 0x69, 0x64, 0x67, 0x65, 0x74, 0x20, 0x72, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3d, 0x22,
+ 0x2d, 0x35, 0x22, 0x3e, 0x62, 0x75, 0x74, 0x74,
+ 0x6f, 0x6e, 0x32, 0x3c, 0x2f, 0x61, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2d, 0x77, 0x69, 0x64, 0x67,
+ 0x65, 0x74, 0x3e, 0x3c, 0x2f, 0x61, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2d, 0x77, 0x69, 0x64, 0x67,
+ 0x65, 0x74, 0x73, 0x3e, 0x3c, 0x2f, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6c, 0x61,
+ 0x73, 0x73, 0x3d, 0x22, 0x47, 0x74, 0x6b, 0x4c,
+ 0x69, 0x73, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65,
+ 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x72, 0x65,
+ 0x61, 0x6c, 0x6d, 0x73, 0x5f, 0x6d, 0x6f, 0x64,
+ 0x65, 0x6c, 0x22, 0x3e, 0x3c, 0x63, 0x6f, 0x6c,
+ 0x75, 0x6d, 0x6e, 0x73, 0x3e, 0x3c, 0x21, 0x2d,
+ 0x2d, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
+ 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x67, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x72, 0x72, 0x61, 0x79,
+ 0x20, 0x2d, 0x2d, 0x3e, 0x3c, 0x63, 0x6f, 0x6c,
+ 0x75, 0x6d, 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x3d, 0x22, 0x67, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x72, 0x72, 0x61, 0x79, 0x22, 0x2f, 0x3e, 0x3c,
+ 0x21, 0x2d, 0x2d, 0x20, 0x63, 0x6f, 0x6c, 0x75,
+ 0x6d, 0x6e, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x20,
+ 0x67, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
+ 0x2d, 0x2d, 0x3e, 0x3c, 0x63, 0x6f, 0x6c, 0x75,
+ 0x6d, 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d,
+ 0x22, 0x47, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x63, 0x6f, 0x6c,
+ 0x75, 0x6d, 0x6e, 0x73, 0x3e, 0x3c, 0x2f, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x3c, 0x2f,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
+ 0x65, 0x3e, 0x0a, 0x00, 0x00, 0x28, 0x75, 0x75,
+ 0x61, 0x79, 0x29, 0x67, 0x6e, 0x6f, 0x6d, 0x65,
+ 0x2f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
+} };
+
+static GStaticResource static_resource = { password_resource_data.data, sizeof
(password_resource_data.data), NULL, NULL, NULL };
+extern GResource *password_get_resource (void);
+GResource *password_get_resource (void)
+{
+ return g_static_resource_get_resource (&static_resource);
+}
+/*
+ If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and
+ destructors, in a sane way, including e.g. on library unload. If not you're on
+ your own.
+
+ Some compilers need #pragma to handle this, which does not work with macros,
+ so the way you need to use this is (for constructors):
+
+ #ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA
+ #pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(my_constructor)
+ #endif
+ G_DEFINE_CONSTRUCTOR(my_constructor)
+ static void my_constructor(void) {
+ ...
+ }
+
+*/
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+
+#define G_HAS_CONSTRUCTORS 1
+
+#define G_DEFINE_CONSTRUCTOR(_func) static void __attribute__((constructor)) _func (void);
+#define G_DEFINE_DESTRUCTOR(_func) static void __attribute__((destructor)) _func (void);
+
+#elif defined (_MSC_VER) && (_MSC_VER >= 1500)
+/* Visual studio 2008 and later has _Pragma */
+
+#define G_HAS_CONSTRUCTORS 1
+
+#define G_DEFINE_CONSTRUCTOR(_func) \
+ static void _func(void); \
+ static int _func ## _wrapper(void) { _func(); return 0; } \
+ __pragma(section(".CRT$XCU",read)) \
+ __declspec(allocate(".CRT$XCU")) static int (* _array ## _func)(void) = _func ## _wrapper;
+
+#define G_DEFINE_DESTRUCTOR(_func) \
+ static void _func(void); \
+ static int _func ## _constructor(void) { atexit (_func); return 0; } \
+ __pragma(section(".CRT$XCU",read)) \
+ __declspec(allocate(".CRT$XCU")) static int (* _array ## _func)(void) = _func ## _constructor;
+
+#elif defined (_MSC_VER)
+
+#define G_HAS_CONSTRUCTORS 1
+
+/* Pre Visual studio 2008 must use #pragma section */
+#define G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA 1
+#define G_DEFINE_DESTRUCTOR_NEEDS_PRAGMA 1
+
+#define G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(_func) \
+ section(".CRT$XCU",read)
+#define G_DEFINE_CONSTRUCTOR(_func) \
+ static void _func(void); \
+ static int _func ## _wrapper(void) { _func(); return 0; } \
+ __declspec(allocate(".CRT$XCU")) static int (*p)(void) = _func ## _wrapper;
+
+#define G_DEFINE_DESTRUCTOR_PRAGMA_ARGS(_func) \
+ section(".CRT$XCU",read)
+#define G_DEFINE_DESTRUCTOR(_func) \
+ static void _func(void); \
+ static int _func ## _constructor(void) { atexit (_func); return 0; } \
+ __declspec(allocate(".CRT$XCU")) static int (* _array ## _func)(void) = _func ## _constructor;
+
+#elif defined(__SUNPRO_C)
+
+/* This is not tested, but i believe it should work, based on:
+ * http://opensource.apple.com/source/OpenSSL098/OpenSSL098-35/src/fips/fips_premain.c
+ */
+
+#define G_HAS_CONSTRUCTORS 1
+
+#define G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA 1
+#define G_DEFINE_DESTRUCTOR_NEEDS_PRAGMA 1
+
+#define G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(_func) \
+ init(_func)
+#define G_DEFINE_CONSTRUCTOR(_func) \
+ static void _func(void);
+
+#define G_DEFINE_DESTRUCTOR_PRAGMA_ARGS(_func) \
+ fini(_func)
+#define G_DEFINE_DESTRUCTOR(_func) \
+ static void _func(void);
+
+#else
+
+/* constructors not supported for this compiler */
+
+#endif
+
+
+#ifdef G_HAS_CONSTRUCTORS
+
+#ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA
+#pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(resource_constructor)
+#endif
+G_DEFINE_CONSTRUCTOR(resource_constructor)
+#ifdef G_DEFINE_DESTRUCTOR_NEEDS_PRAGMA
+#pragma G_DEFINE_DESTRUCTOR_PRAGMA_ARGS(resource_destructor)
+#endif
+G_DEFINE_DESTRUCTOR(resource_destructor)
+
+#else
+#warning "Constructor not supported on this compiler, linking in resources will not work"
+#endif
+
+static void resource_constructor (void)
+{
+ g_static_resource_init (&static_resource);
+}
+
+static void resource_destructor (void)
+{
+ g_static_resource_fini (&static_resource);
+}
diff --git a/gnome-initial-setup/pages/password/password-resources.h
b/gnome-initial-setup/pages/password/password-resources.h
new file mode 100644
index 0000000..35aeb8b
--- /dev/null
+++ b/gnome-initial-setup/pages/password/password-resources.h
@@ -0,0 +1,7 @@
+#ifndef __RESOURCE_password_H__
+#define __RESOURCE_password_H__
+
+#include <gio/gio.h>
+
+extern GResource *password_get_resource (void);
+#endif
diff --git a/gnome-initial-setup/pages/password/password.gresource.xml
b/gnome-initial-setup/pages/password/password.gresource.xml
new file mode 100644
index 0000000..9f240b1
--- /dev/null
+++ b/gnome-initial-setup/pages/password/password.gresource.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/initial-setup">
+ <file preprocess="xml-stripblanks" alias="gis-password-page.ui">gis-password-page.ui</file>
+ <file preprocess="xml-stripblanks" alias="gis-account-page-local.ui">gis-account-page-local.ui</file>
+ <file preprocess="xml-stripblanks"
alias="gis-account-page-enterprise.ui">gis-account-page-enterprise.ui</file>
+ </gresource>
+</gresources>
diff --git a/gnome-initial-setup/pages/password/um-realm-generated.c
b/gnome-initial-setup/pages/password/um-realm-generated.c
new file mode 100644
index 0000000..4613977
--- /dev/null
+++ b/gnome-initial-setup/pages/password/um-realm-generated.c
@@ -0,0 +1,8713 @@
+/*
+ * Generated by gdbus-codegen 2.39.2. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "um-realm-generated.h"
+
+#include <string.h>
+#ifdef G_OS_UNIX
+# include <gio/gunixfdlist.h>
+#endif
+
+typedef struct
+{
+ GDBusArgInfo parent_struct;
+ gboolean use_gvariant;
+} _ExtendedGDBusArgInfo;
+
+typedef struct
+{
+ GDBusMethodInfo parent_struct;
+ const gchar *signal_name;
+ gboolean pass_fdlist;
+} _ExtendedGDBusMethodInfo;
+
+typedef struct
+{
+ GDBusSignalInfo parent_struct;
+ const gchar *signal_name;
+} _ExtendedGDBusSignalInfo;
+
+typedef struct
+{
+ GDBusPropertyInfo parent_struct;
+ const gchar *hyphen_name;
+ gboolean use_gvariant;
+} _ExtendedGDBusPropertyInfo;
+
+typedef struct
+{
+ GDBusInterfaceInfo parent_struct;
+ const gchar *hyphen_name;
+} _ExtendedGDBusInterfaceInfo;
+
+typedef struct
+{
+ const _ExtendedGDBusPropertyInfo *info;
+ guint prop_id;
+ GValue orig_value; /* the value before the change */
+} ChangedProperty;
+
+static void
+_changed_property_free (ChangedProperty *data)
+{
+ g_value_unset (&data->orig_value);
+ g_free (data);
+}
+
+static gboolean
+_g_strv_equal0 (gchar **a, gchar **b)
+{
+ gboolean ret = FALSE;
+ guint n;
+ if (a == NULL && b == NULL)
+ {
+ ret = TRUE;
+ goto out;
+ }
+ if (a == NULL || b == NULL)
+ goto out;
+ if (g_strv_length (a) != g_strv_length (b))
+ goto out;
+ for (n = 0; a[n] != NULL; n++)
+ if (g_strcmp0 (a[n], b[n]) != 0)
+ goto out;
+ ret = TRUE;
+out:
+ return ret;
+}
+
+static gboolean
+_g_variant_equal0 (GVariant *a, GVariant *b)
+{
+ gboolean ret = FALSE;
+ if (a == NULL && b == NULL)
+ {
+ ret = TRUE;
+ goto out;
+ }
+ if (a == NULL || b == NULL)
+ goto out;
+ ret = g_variant_equal (a, b);
+out:
+ return ret;
+}
+
+G_GNUC_UNUSED static gboolean
+_g_value_equal (const GValue *a, const GValue *b)
+{
+ gboolean ret = FALSE;
+ g_assert (G_VALUE_TYPE (a) == G_VALUE_TYPE (b));
+ switch (G_VALUE_TYPE (a))
+ {
+ case G_TYPE_BOOLEAN:
+ ret = (g_value_get_boolean (a) == g_value_get_boolean (b));
+ break;
+ case G_TYPE_UCHAR:
+ ret = (g_value_get_uchar (a) == g_value_get_uchar (b));
+ break;
+ case G_TYPE_INT:
+ ret = (g_value_get_int (a) == g_value_get_int (b));
+ break;
+ case G_TYPE_UINT:
+ ret = (g_value_get_uint (a) == g_value_get_uint (b));
+ break;
+ case G_TYPE_INT64:
+ ret = (g_value_get_int64 (a) == g_value_get_int64 (b));
+ break;
+ case G_TYPE_UINT64:
+ ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b));
+ break;
+ case G_TYPE_DOUBLE:
+ {
+ /* Avoid -Wfloat-equal warnings by doing a direct bit compare */
+ gdouble da = g_value_get_double (a);
+ gdouble db = g_value_get_double (b);
+ ret = memcmp (&da, &db, sizeof (gdouble)) == 0;
+ }
+ break;
+ case G_TYPE_STRING:
+ ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0);
+ break;
+ case G_TYPE_VARIANT:
+ ret = _g_variant_equal0 (g_value_get_variant (a), g_value_get_variant (b));
+ break;
+ default:
+ if (G_VALUE_TYPE (a) == G_TYPE_STRV)
+ ret = _g_strv_equal0 (g_value_get_boxed (a), g_value_get_boxed (b));
+ else
+ g_critical ("_g_value_equal() does not handle type %s", g_type_name (G_VALUE_TYPE (a)));
+ break;
+ }
+ return ret;
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.freedesktop.realmd.Provider
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:UmRealmProvider
+ * @title: UmRealmProvider
+ * @short_description: Generated C code for the org.freedesktop.realmd.Provider D-Bus interface
+ *
+ * This section contains code for working with the <link
linkend="gdbus-interface-org-freedesktop-realmd-Provider.top_of_page">org.freedesktop.realmd.Provider</link>
D-Bus interface in C.
+ */
+
+/* ---- Introspection data for org.freedesktop.realmd.Provider ---- */
+
+static const _ExtendedGDBusArgInfo _um_realm_provider_method_info_discover_IN_ARG_string =
+{
+ {
+ -1,
+ (gchar *) "string",
+ (gchar *) "s",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _um_realm_provider_method_info_discover_IN_ARG_options =
+{
+ {
+ -1,
+ (gchar *) "options",
+ (gchar *) "a{sv}",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _um_realm_provider_method_info_discover_IN_ARG_pointers[] =
+{
+ &_um_realm_provider_method_info_discover_IN_ARG_string,
+ &_um_realm_provider_method_info_discover_IN_ARG_options,
+ NULL
+};
+
+static const _ExtendedGDBusArgInfo _um_realm_provider_method_info_discover_OUT_ARG_relevance =
+{
+ {
+ -1,
+ (gchar *) "relevance",
+ (gchar *) "i",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _um_realm_provider_method_info_discover_OUT_ARG_realm =
+{
+ {
+ -1,
+ (gchar *) "realm",
+ (gchar *) "ao",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _um_realm_provider_method_info_discover_OUT_ARG_pointers[] =
+{
+ &_um_realm_provider_method_info_discover_OUT_ARG_relevance,
+ &_um_realm_provider_method_info_discover_OUT_ARG_realm,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _um_realm_provider_method_info_discover =
+{
+ {
+ -1,
+ (gchar *) "Discover",
+ (GDBusArgInfo **) &_um_realm_provider_method_info_discover_IN_ARG_pointers,
+ (GDBusArgInfo **) &_um_realm_provider_method_info_discover_OUT_ARG_pointers,
+ NULL
+ },
+ "handle-discover",
+ FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _um_realm_provider_method_info_pointers[] =
+{
+ &_um_realm_provider_method_info_discover,
+ NULL
+};
+
+static const _ExtendedGDBusPropertyInfo _um_realm_provider_property_info_name =
+{
+ {
+ -1,
+ (gchar *) "Name",
+ (gchar *) "s",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "name",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _um_realm_provider_property_info_version =
+{
+ {
+ -1,
+ (gchar *) "Version",
+ (gchar *) "s",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "version",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _um_realm_provider_property_info_realms =
+{
+ {
+ -1,
+ (gchar *) "Realms",
+ (gchar *) "ao",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "realms",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo * const _um_realm_provider_property_info_pointers[] =
+{
+ &_um_realm_provider_property_info_name,
+ &_um_realm_provider_property_info_version,
+ &_um_realm_provider_property_info_realms,
+ NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _um_realm_provider_interface_info =
+{
+ {
+ -1,
+ (gchar *) "org.freedesktop.realmd.Provider",
+ (GDBusMethodInfo **) &_um_realm_provider_method_info_pointers,
+ NULL,
+ (GDBusPropertyInfo **) &_um_realm_provider_property_info_pointers,
+ NULL
+ },
+ "provider",
+};
+
+
+/**
+ * um_realm_provider_interface_info:
+ *
+ * Gets a machine-readable description of the <link
linkend="gdbus-interface-org-freedesktop-realmd-Provider.top_of_page">org.freedesktop.realmd.Provider</link>
D-Bus interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+um_realm_provider_interface_info (void)
+{
+ return (GDBusInterfaceInfo *) &_um_realm_provider_interface_info.parent_struct;
+}
+
+/**
+ * um_realm_provider_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #UmRealmProvider interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+um_realm_provider_override_properties (GObjectClass *klass, guint property_id_begin)
+{
+ g_object_class_override_property (klass, property_id_begin++, "name");
+ g_object_class_override_property (klass, property_id_begin++, "version");
+ g_object_class_override_property (klass, property_id_begin++, "realms");
+ return property_id_begin - 1;
+}
+
+
+
+/**
+ * UmRealmProvider:
+ *
+ * Abstract interface type for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Provider.top_of_page">org.freedesktop.realmd.Provider</link>.
+ */
+
+/**
+ * UmRealmProviderIface:
+ * @parent_iface: The parent interface.
+ * @handle_discover: Handler for the #UmRealmProvider::handle-discover signal.
+ * @get_name: Getter for the #UmRealmProvider:name property.
+ * @get_realms: Getter for the #UmRealmProvider:realms property.
+ * @get_version: Getter for the #UmRealmProvider:version property.
+ *
+ * Virtual table for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Provider.top_of_page">org.freedesktop.realmd.Provider</link>.
+ */
+
+typedef UmRealmProviderIface UmRealmProviderInterface;
+G_DEFINE_INTERFACE (UmRealmProvider, um_realm_provider, G_TYPE_OBJECT);
+
+static void
+um_realm_provider_default_init (UmRealmProviderIface *iface)
+{
+ /* GObject signals for incoming D-Bus method calls: */
+ /**
+ * UmRealmProvider::handle-discover:
+ * @object: A #UmRealmProvider.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_string: Argument passed by remote caller.
+ * @arg_options: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link
linkend="gdbus-method-org-freedesktop-realmd-Provider.Discover">Discover()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a
reference to @invocation and eventually call um_realm_provider_complete_discover() or e.g.
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-discover",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (UmRealmProviderIface, handle_discover),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 3,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_VARIANT);
+
+ /* GObject properties for D-Bus properties: */
+ /**
+ * UmRealmProvider:name:
+ *
+ * Represents the D-Bus property <link
linkend="gdbus-property-org-freedesktop-realmd-Provider.Name">"Name"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to
read from it on both the client- and service-side. It is only meaningful, however, to write to it on the
service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_string ("name", "Name", "Name", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * UmRealmProvider:version:
+ *
+ * Represents the D-Bus property <link
linkend="gdbus-property-org-freedesktop-realmd-Provider.Version">"Version"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to
read from it on both the client- and service-side. It is only meaningful, however, to write to it on the
service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_string ("version", "Version", "Version", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * UmRealmProvider:realms:
+ *
+ * Represents the D-Bus property <link
linkend="gdbus-property-org-freedesktop-realmd-Provider.Realms">"Realms"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to
read from it on both the client- and service-side. It is only meaningful, however, to write to it on the
service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_boxed ("realms", "Realms", "Realms", G_TYPE_STRV, G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
+}
+
+/**
+ * um_realm_provider_get_name: (skip)
+ * @object: A #UmRealmProvider.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-freedesktop-realmd-Provider.Name">"Name"</link>
D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only
safe to use this function on the thread where @object was constructed. Use um_realm_provider_dup_name() if on
another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the
returned value, it belongs to @object.
+ */
+const gchar *
+um_realm_provider_get_name (UmRealmProvider *object)
+{
+ return UM_REALM_PROVIDER_GET_IFACE (object)->get_name (object);
+}
+
+/**
+ * um_realm_provider_dup_name: (skip)
+ * @object: A #UmRealmProvider.
+ *
+ * Gets a copy of the <link linkend="gdbus-property-org-freedesktop-realmd-Provider.Name">"Name"</link>
D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value
should be freed with g_free().
+ */
+gchar *
+um_realm_provider_dup_name (UmRealmProvider *object)
+{
+ gchar *value;
+ g_object_get (G_OBJECT (object), "name", &value, NULL);
+ return value;
+}
+
+/**
+ * um_realm_provider_set_name: (skip)
+ * @object: A #UmRealmProvider.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-freedesktop-realmd-Provider.Name">"Name"</link> D-Bus property
to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+um_realm_provider_set_name (UmRealmProvider *object, const gchar *value)
+{
+ g_object_set (G_OBJECT (object), "name", value, NULL);
+}
+
+/**
+ * um_realm_provider_get_version: (skip)
+ * @object: A #UmRealmProvider.
+ *
+ * Gets the value of the <link
linkend="gdbus-property-org-freedesktop-realmd-Provider.Version">"Version"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only
safe to use this function on the thread where @object was constructed. Use um_realm_provider_dup_version() if
on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the
returned value, it belongs to @object.
+ */
+const gchar *
+um_realm_provider_get_version (UmRealmProvider *object)
+{
+ return UM_REALM_PROVIDER_GET_IFACE (object)->get_version (object);
+}
+
+/**
+ * um_realm_provider_dup_version: (skip)
+ * @object: A #UmRealmProvider.
+ *
+ * Gets a copy of the <link
linkend="gdbus-property-org-freedesktop-realmd-Provider.Version">"Version"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value
should be freed with g_free().
+ */
+gchar *
+um_realm_provider_dup_version (UmRealmProvider *object)
+{
+ gchar *value;
+ g_object_get (G_OBJECT (object), "version", &value, NULL);
+ return value;
+}
+
+/**
+ * um_realm_provider_set_version: (skip)
+ * @object: A #UmRealmProvider.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-freedesktop-realmd-Provider.Version">"Version"</link> D-Bus
property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+um_realm_provider_set_version (UmRealmProvider *object, const gchar *value)
+{
+ g_object_set (G_OBJECT (object), "version", value, NULL);
+}
+
+/**
+ * um_realm_provider_get_realms: (skip)
+ * @object: A #UmRealmProvider.
+ *
+ * Gets the value of the <link
linkend="gdbus-property-org-freedesktop-realmd-Provider.Realms">"Realms"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only
safe to use this function on the thread where @object was constructed. Use um_realm_provider_dup_realms() if
on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the
returned value, it belongs to @object.
+ */
+const gchar *const *
+um_realm_provider_get_realms (UmRealmProvider *object)
+{
+ return UM_REALM_PROVIDER_GET_IFACE (object)->get_realms (object);
+}
+
+/**
+ * um_realm_provider_dup_realms: (skip)
+ * @object: A #UmRealmProvider.
+ *
+ * Gets a copy of the <link linkend="gdbus-property-org-freedesktop-realmd-Provider.Realms">"Realms"</link>
D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value
should be freed with g_strfreev().
+ */
+gchar **
+um_realm_provider_dup_realms (UmRealmProvider *object)
+{
+ gchar **value;
+ g_object_get (G_OBJECT (object), "realms", &value, NULL);
+ return value;
+}
+
+/**
+ * um_realm_provider_set_realms: (skip)
+ * @object: A #UmRealmProvider.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-freedesktop-realmd-Provider.Realms">"Realms"</link> D-Bus
property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+um_realm_provider_set_realms (UmRealmProvider *object, const gchar *const *value)
+{
+ g_object_set (G_OBJECT (object), "realms", value, NULL);
+}
+
+/**
+ * um_realm_provider_call_discover:
+ * @proxy: A #UmRealmProviderProxy.
+ * @arg_string: Argument to pass with the method invocation.
+ * @arg_options: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link
linkend="gdbus-method-org-freedesktop-realmd-Provider.Discover">Discover()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_provider_call_discover_finish() to get the result of the operation.
+ *
+ * See um_realm_provider_call_discover_sync() for the synchronous, blocking version of this method.
+ */
+void
+um_realm_provider_call_discover (
+ UmRealmProvider *proxy,
+ const gchar *arg_string,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "Discover",
+ g_variant_new ("(s a{sv})",
+ arg_string,
+ arg_options),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * um_realm_provider_call_discover_finish:
+ * @proxy: A #UmRealmProviderProxy.
+ * @out_relevance: (out): Return location for return parameter or %NULL to ignore.
+ * @out_realm: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
um_realm_provider_call_discover().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with um_realm_provider_call_discover().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+um_realm_provider_call_discover_finish (
+ UmRealmProvider *proxy,
+ gint *out_relevance,
+ gchar ***out_realm,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(i^ao)",
+ out_relevance,
+ out_realm);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * um_realm_provider_call_discover_sync:
+ * @proxy: A #UmRealmProviderProxy.
+ * @arg_string: Argument to pass with the method invocation.
+ * @arg_options: Argument to pass with the method invocation.
+ * @out_relevance: (out): Return location for return parameter or %NULL to ignore.
+ * @out_realm: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link
linkend="gdbus-method-org-freedesktop-realmd-Provider.Discover">Discover()</link> D-Bus method on @proxy. The
calling thread is blocked until a reply is received.
+ *
+ * See um_realm_provider_call_discover() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+um_realm_provider_call_discover_sync (
+ UmRealmProvider *proxy,
+ const gchar *arg_string,
+ GVariant *arg_options,
+ gint *out_relevance,
+ gchar ***out_realm,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "Discover",
+ g_variant_new ("(s a{sv})",
+ arg_string,
+ arg_options),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(i^ao)",
+ out_relevance,
+ out_realm);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * um_realm_provider_complete_discover:
+ * @object: A #UmRealmProvider.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @relevance: Parameter to return.
+ * @realm: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link
linkend="gdbus-method-org-freedesktop-realmd-Provider.Discover">Discover()</link> D-Bus method. If you
instead want to finish handling an invocation by returning an error, use
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+um_realm_provider_complete_discover (
+ UmRealmProvider *object,
+ GDBusMethodInvocation *invocation,
+ gint relevance,
+ const gchar *const *realm)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(i^ao)",
+ relevance,
+ realm));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * UmRealmProviderProxy:
+ *
+ * The #UmRealmProviderProxy structure contains only private data and should only be accessed using the
provided API.
+ */
+
+/**
+ * UmRealmProviderProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #UmRealmProviderProxy.
+ */
+
+struct _UmRealmProviderProxyPrivate
+{
+ GData *qdata;
+};
+
+static void um_realm_provider_proxy_iface_init (UmRealmProviderIface *iface);
+
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (UmRealmProviderProxy, um_realm_provider_proxy, G_TYPE_DBUS_PROXY,
+ G_ADD_PRIVATE (UmRealmProviderProxy)
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_PROVIDER, um_realm_provider_proxy_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (UmRealmProviderProxy, um_realm_provider_proxy, G_TYPE_DBUS_PROXY,
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_PROVIDER, um_realm_provider_proxy_iface_init));
+
+#endif
+static void
+um_realm_provider_proxy_finalize (GObject *object)
+{
+ UmRealmProviderProxy *proxy = UM_REALM_PROVIDER_PROXY (object);
+ g_datalist_clear (&proxy->priv->qdata);
+ G_OBJECT_CLASS (um_realm_provider_proxy_parent_class)->finalize (object);
+}
+
+static void
+um_realm_provider_proxy_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+ const _ExtendedGDBusPropertyInfo *info;
+ GVariant *variant;
+ g_assert (prop_id != 0 && prop_id - 1 < 3);
+ info = _um_realm_provider_property_info_pointers[prop_id - 1];
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name);
+ if (info->use_gvariant)
+ {
+ g_value_set_variant (value, variant);
+ }
+ else
+ {
+ if (variant != NULL)
+ g_dbus_gvariant_to_gvalue (variant, value);
+ }
+ if (variant != NULL)
+ g_variant_unref (variant);
+}
+
+static void
+um_realm_provider_proxy_set_property_cb (GDBusProxy *proxy,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ const _ExtendedGDBusPropertyInfo *info = user_data;
+ GError *error;
+ GVariant *_ret;
+ error = NULL;
+ _ret = g_dbus_proxy_call_finish (proxy, res, &error);
+ if (!_ret)
+ {
+ g_warning ("Error setting property '%s' on interface org.freedesktop.realmd.Provider: %s (%s, %d)",
+ info->parent_struct.name,
+ error->message, g_quark_to_string (error->domain), error->code);
+ g_error_free (error);
+ }
+ else
+ {
+ g_variant_unref (_ret);
+ }
+}
+
+static void
+um_realm_provider_proxy_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+ const _ExtendedGDBusPropertyInfo *info;
+ GVariant *variant;
+ g_assert (prop_id != 0 && prop_id - 1 < 3);
+ info = _um_realm_provider_property_info_pointers[prop_id - 1];
+ variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature));
+ g_dbus_proxy_call (G_DBUS_PROXY (object),
+ "org.freedesktop.DBus.Properties.Set",
+ g_variant_new ("(ssv)", "org.freedesktop.realmd.Provider", info->parent_struct.name, variant),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL, (GAsyncReadyCallback) um_realm_provider_proxy_set_property_cb, (GDBusPropertyInfo *)
&info->parent_struct);
+ g_variant_unref (variant);
+}
+
+static void
+um_realm_provider_proxy_g_signal (GDBusProxy *proxy,
+ const gchar *sender_name G_GNUC_UNUSED,
+ const gchar *signal_name,
+ GVariant *parameters)
+{
+ _ExtendedGDBusSignalInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint n;
+ guint signal_id;
+ info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *)
&_um_realm_provider_interface_info.parent_struct, signal_name);
+ if (info == NULL)
+ return;
+ num_params = g_variant_n_children (parameters);
+ paramv = g_new0 (GValue, num_params + 1);
+ g_value_init (¶mv[0], UM_REALM_TYPE_PROVIDER);
+ g_value_set_object (¶mv[0], proxy);
+ g_variant_iter_init (&iter, parameters);
+ n = 1;
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (¶mv[n], G_TYPE_VARIANT);
+ g_value_set_variant (¶mv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, ¶mv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, UM_REALM_TYPE_PROVIDER);
+ g_signal_emitv (paramv, signal_id, 0, NULL);
+ for (n = 0; n < num_params + 1; n++)
+ g_value_unset (¶mv[n]);
+ g_free (paramv);
+}
+
+static void
+um_realm_provider_proxy_g_properties_changed (GDBusProxy *_proxy,
+ GVariant *changed_properties,
+ const gchar *const *invalidated_properties)
+{
+ UmRealmProviderProxy *proxy = UM_REALM_PROVIDER_PROXY (_proxy);
+ guint n;
+ const gchar *key;
+ GVariantIter *iter;
+ _ExtendedGDBusPropertyInfo *info;
+ g_variant_get (changed_properties, "a{sv}", &iter);
+ while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_provider_interface_info.parent_struct, key);
+ g_datalist_remove_data (&proxy->priv->qdata, key);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+ g_variant_iter_free (iter);
+ for (n = 0; invalidated_properties[n] != NULL; n++)
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_provider_interface_info.parent_struct, invalidated_properties[n]);
+ g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+}
+
+static const gchar *
+um_realm_provider_proxy_get_name (UmRealmProvider *object)
+{
+ UmRealmProviderProxy *proxy = UM_REALM_PROVIDER_PROXY (object);
+ GVariant *variant;
+ const gchar *value = NULL;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "Name");
+ if (variant != NULL)
+ {
+ value = g_variant_get_string (variant, NULL);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static const gchar *
+um_realm_provider_proxy_get_version (UmRealmProvider *object)
+{
+ UmRealmProviderProxy *proxy = UM_REALM_PROVIDER_PROXY (object);
+ GVariant *variant;
+ const gchar *value = NULL;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "Version");
+ if (variant != NULL)
+ {
+ value = g_variant_get_string (variant, NULL);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static const gchar *const *
+um_realm_provider_proxy_get_realms (UmRealmProvider *object)
+{
+ UmRealmProviderProxy *proxy = UM_REALM_PROVIDER_PROXY (object);
+ GVariant *variant;
+ const gchar *const *value = NULL;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "Realms");
+ if (variant != NULL)
+ {
+ value = g_variant_get_objv (variant, NULL);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static void
+um_realm_provider_proxy_init (UmRealmProviderProxy *proxy)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+ proxy->priv = um_realm_provider_proxy_get_instance_private (proxy);
+#else
+ proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, UM_REALM_TYPE_PROVIDER_PROXY,
UmRealmProviderProxyPrivate);
+#endif
+
+ g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), um_realm_provider_interface_info ());
+}
+
+static void
+um_realm_provider_proxy_class_init (UmRealmProviderProxyClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusProxyClass *proxy_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = um_realm_provider_proxy_finalize;
+ gobject_class->get_property = um_realm_provider_proxy_get_property;
+ gobject_class->set_property = um_realm_provider_proxy_set_property;
+
+ proxy_class = G_DBUS_PROXY_CLASS (klass);
+ proxy_class->g_signal = um_realm_provider_proxy_g_signal;
+ proxy_class->g_properties_changed = um_realm_provider_proxy_g_properties_changed;
+
+ um_realm_provider_override_properties (gobject_class, 1);
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+ g_type_class_add_private (klass, sizeof (UmRealmProviderProxyPrivate));
+#endif
+}
+
+static void
+um_realm_provider_proxy_iface_init (UmRealmProviderIface *iface)
+{
+ iface->get_name = um_realm_provider_proxy_get_name;
+ iface->get_version = um_realm_provider_proxy_get_version;
+ iface->get_realms = um_realm_provider_proxy_get_realms;
+}
+
+/**
+ * um_realm_provider_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Provider.top_of_page">org.freedesktop.realmd.Provider</link>.
See g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_provider_proxy_new_finish() to get the result of the operation.
+ *
+ * See um_realm_provider_proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+um_realm_provider_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (UM_REALM_TYPE_PROVIDER_PROXY, G_PRIORITY_DEFAULT, cancellable, callback,
user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path,
"g-interface-name", "org.freedesktop.realmd.Provider", NULL);
+}
+
+/**
+ * um_realm_provider_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to um_realm_provider_proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with um_realm_provider_proxy_new().
+ *
+ * Returns: (transfer full) (type UmRealmProviderProxy): The constructed proxy object or %NULL if @error is
set.
+ */
+UmRealmProvider *
+um_realm_provider_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return UM_REALM_PROVIDER (ret);
+ else
+ return NULL;
+}
+
+/**
+ * um_realm_provider_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Provider.top_of_page">org.freedesktop.realmd.Provider</link>.
See g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_provider_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type UmRealmProviderProxy): The constructed proxy object or %NULL if @error is
set.
+ */
+UmRealmProvider *
+um_realm_provider_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (UM_REALM_TYPE_PROVIDER_PROXY, cancellable, error, "g-flags", flags, "g-name", name,
"g-connection", connection, "g-object-path", object_path, "g-interface-name",
"org.freedesktop.realmd.Provider", NULL);
+ if (ret != NULL)
+ return UM_REALM_PROVIDER (ret);
+ else
+ return NULL;
+}
+
+
+/**
+ * um_realm_provider_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like um_realm_provider_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_provider_proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See um_realm_provider_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+um_realm_provider_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (UM_REALM_TYPE_PROVIDER_PROXY, G_PRIORITY_DEFAULT, cancellable, callback,
user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path,
"g-interface-name", "org.freedesktop.realmd.Provider", NULL);
+}
+
+/**
+ * um_realm_provider_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
um_realm_provider_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with um_realm_provider_proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type UmRealmProviderProxy): The constructed proxy object or %NULL if @error is
set.
+ */
+UmRealmProvider *
+um_realm_provider_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return UM_REALM_PROVIDER (ret);
+ else
+ return NULL;
+}
+
+/**
+ * um_realm_provider_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like um_realm_provider_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_provider_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type UmRealmProviderProxy): The constructed proxy object or %NULL if @error is
set.
+ */
+UmRealmProvider *
+um_realm_provider_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (UM_REALM_TYPE_PROVIDER_PROXY, cancellable, error, "g-flags", flags, "g-name", name,
"g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.freedesktop.realmd.Provider",
NULL);
+ if (ret != NULL)
+ return UM_REALM_PROVIDER (ret);
+ else
+ return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * UmRealmProviderSkeleton:
+ *
+ * The #UmRealmProviderSkeleton structure contains only private data and should only be accessed using the
provided API.
+ */
+
+/**
+ * UmRealmProviderSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #UmRealmProviderSkeleton.
+ */
+
+struct _UmRealmProviderSkeletonPrivate
+{
+ GValue *properties;
+ GList *changed_properties;
+ GSource *changed_properties_idle_source;
+ GMainContext *context;
+ GMutex lock;
+};
+
+static void
+_um_realm_provider_skeleton_handle_method_call (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name,
+ const gchar *method_name,
+ GVariant *parameters,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ UmRealmProviderSkeleton *skeleton = UM_REALM_PROVIDER_SKELETON (user_data);
+ _ExtendedGDBusMethodInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint num_extra;
+ guint n;
+ guint signal_id;
+ GValue return_value = G_VALUE_INIT;
+ info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+ g_assert (info != NULL);
+ num_params = g_variant_n_children (parameters);
+ num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra);
+ n = 0;
+ g_value_init (¶mv[n], UM_REALM_TYPE_PROVIDER);
+ g_value_set_object (¶mv[n++], skeleton);
+ g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+ g_value_set_object (¶mv[n++], invocation);
+ if (info->pass_fdlist)
+ {
+#ifdef G_OS_UNIX
+ g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST);
+ g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list
(g_dbus_method_invocation_get_message (invocation)));
+#else
+ g_assert_not_reached ();
+#endif
+ }
+ g_variant_iter_init (&iter, parameters);
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (¶mv[n], G_TYPE_VARIANT);
+ g_value_set_variant (¶mv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, ¶mv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, UM_REALM_TYPE_PROVIDER);
+ g_value_init (&return_value, G_TYPE_BOOLEAN);
+ g_signal_emitv (paramv, signal_id, 0, &return_value);
+ if (!g_value_get_boolean (&return_value))
+ g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s
is not implemented on interface %s", method_name, interface_name);
+ g_value_unset (&return_value);
+ for (n = 0; n < num_params + num_extra; n++)
+ g_value_unset (¶mv[n]);
+ g_free (paramv);
+}
+
+static GVariant *
+_um_realm_provider_skeleton_handle_get_property (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name G_GNUC_UNUSED,
+ const gchar *property_name,
+ GError **error,
+ gpointer user_data)
+{
+ UmRealmProviderSkeleton *skeleton = UM_REALM_PROVIDER_SKELETON (user_data);
+ GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ GVariant *ret;
+ ret = NULL;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_provider_interface_info.parent_struct, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s",
property_name);
+ }
+ else
+ {
+ g_value_init (&value, pspec->value_type);
+ g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+ g_value_unset (&value);
+ }
+ return ret;
+}
+
+static gboolean
+_um_realm_provider_skeleton_handle_set_property (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name G_GNUC_UNUSED,
+ const gchar *property_name,
+ GVariant *variant,
+ GError **error,
+ gpointer user_data)
+{
+ UmRealmProviderSkeleton *skeleton = UM_REALM_PROVIDER_SKELETON (user_data);
+ GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ gboolean ret;
+ ret = FALSE;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_provider_interface_info.parent_struct, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s",
property_name);
+ }
+ else
+ {
+ if (info->use_gvariant)
+ g_value_set_variant (&value, variant);
+ else
+ g_dbus_gvariant_to_gvalue (variant, &value);
+ g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ g_value_unset (&value);
+ ret = TRUE;
+ }
+ return ret;
+}
+
+static const GDBusInterfaceVTable _um_realm_provider_skeleton_vtable =
+{
+ _um_realm_provider_skeleton_handle_method_call,
+ _um_realm_provider_skeleton_handle_get_property,
+ _um_realm_provider_skeleton_handle_set_property,
+ {NULL}
+};
+
+static GDBusInterfaceInfo *
+um_realm_provider_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+ return um_realm_provider_interface_info ();
+}
+
+static GDBusInterfaceVTable *
+um_realm_provider_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+ return (GDBusInterfaceVTable *) &_um_realm_provider_skeleton_vtable;
+}
+
+static GVariant *
+um_realm_provider_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+ UmRealmProviderSkeleton *skeleton = UM_REALM_PROVIDER_SKELETON (_skeleton);
+
+ GVariantBuilder builder;
+ guint n;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ if (_um_realm_provider_interface_info.parent_struct.properties == NULL)
+ goto out;
+ for (n = 0; _um_realm_provider_interface_info.parent_struct.properties[n] != NULL; n++)
+ {
+ GDBusPropertyInfo *info = _um_realm_provider_interface_info.parent_struct.properties[n];
+ if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+ {
+ GVariant *value;
+ value = _um_realm_provider_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection
(G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path
(G_DBUS_INTERFACE_SKELETON (skeleton)), "org.freedesktop.realmd.Provider", info->name, NULL, skeleton);
+ if (value != NULL)
+ {
+ g_variant_take_ref (value);
+ g_variant_builder_add (&builder, "{sv}", info->name, value);
+ g_variant_unref (value);
+ }
+ }
+ }
+out:
+ return g_variant_builder_end (&builder);
+}
+
+static gboolean _um_realm_provider_emit_changed (gpointer user_data);
+
+static void
+um_realm_provider_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+ UmRealmProviderSkeleton *skeleton = UM_REALM_PROVIDER_SKELETON (_skeleton);
+ gboolean emit_changed = FALSE;
+
+ g_mutex_lock (&skeleton->priv->lock);
+ if (skeleton->priv->changed_properties_idle_source != NULL)
+ {
+ g_source_destroy (skeleton->priv->changed_properties_idle_source);
+ skeleton->priv->changed_properties_idle_source = NULL;
+ emit_changed = TRUE;
+ }
+ g_mutex_unlock (&skeleton->priv->lock);
+
+ if (emit_changed)
+ _um_realm_provider_emit_changed (skeleton);
+}
+
+static void um_realm_provider_skeleton_iface_init (UmRealmProviderIface *iface);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (UmRealmProviderSkeleton, um_realm_provider_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_ADD_PRIVATE (UmRealmProviderSkeleton)
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_PROVIDER,
um_realm_provider_skeleton_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (UmRealmProviderSkeleton, um_realm_provider_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_PROVIDER,
um_realm_provider_skeleton_iface_init));
+
+#endif
+static void
+um_realm_provider_skeleton_finalize (GObject *object)
+{
+ UmRealmProviderSkeleton *skeleton = UM_REALM_PROVIDER_SKELETON (object);
+ guint n;
+ for (n = 0; n < 3; n++)
+ g_value_unset (&skeleton->priv->properties[n]);
+ g_free (skeleton->priv->properties);
+ g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+ if (skeleton->priv->changed_properties_idle_source != NULL)
+ g_source_destroy (skeleton->priv->changed_properties_idle_source);
+ g_main_context_unref (skeleton->priv->context);
+ g_mutex_clear (&skeleton->priv->lock);
+ G_OBJECT_CLASS (um_realm_provider_skeleton_parent_class)->finalize (object);
+}
+
+static void
+um_realm_provider_skeleton_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+ UmRealmProviderSkeleton *skeleton = UM_REALM_PROVIDER_SKELETON (object);
+ g_assert (prop_id != 0 && prop_id - 1 < 3);
+ g_mutex_lock (&skeleton->priv->lock);
+ g_value_copy (&skeleton->priv->properties[prop_id - 1], value);
+ g_mutex_unlock (&skeleton->priv->lock);
+}
+
+static gboolean
+_um_realm_provider_emit_changed (gpointer user_data)
+{
+ UmRealmProviderSkeleton *skeleton = UM_REALM_PROVIDER_SKELETON (user_data);
+ GList *l;
+ GVariantBuilder builder;
+ GVariantBuilder invalidated_builder;
+ guint num_changes;
+
+ g_mutex_lock (&skeleton->priv->lock);
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as"));
+ for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next)
+ {
+ ChangedProperty *cp = l->data;
+ GVariant *variant;
+ const GValue *cur_value;
+
+ cur_value = &skeleton->priv->properties[cp->prop_id - 1];
+ if (!_g_value_equal (cur_value, &cp->orig_value))
+ {
+ variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE
(cp->info->parent_struct.signature));
+ g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant);
+ g_variant_unref (variant);
+ num_changes++;
+ }
+ }
+ if (num_changes > 0)
+ {
+ GList *connections, *ll;
+ GVariant *signal_variant;
+ signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.freedesktop.realmd.Provider",
+ &builder, &invalidated_builder));
+ connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+ for (ll = connections; ll != NULL; ll = ll->next)
+ {
+ GDBusConnection *connection = ll->data;
+
+ g_dbus_connection_emit_signal (connection,
+ NULL, g_dbus_interface_skeleton_get_object_path
(G_DBUS_INTERFACE_SKELETON (skeleton)),
+ "org.freedesktop.DBus.Properties",
+ "PropertiesChanged",
+ signal_variant,
+ NULL);
+ }
+ g_variant_unref (signal_variant);
+ g_list_free_full (connections, g_object_unref);
+ }
+ else
+ {
+ g_variant_builder_clear (&builder);
+ g_variant_builder_clear (&invalidated_builder);
+ }
+ g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+ skeleton->priv->changed_properties = NULL;
+ skeleton->priv->changed_properties_idle_source = NULL;
+ g_mutex_unlock (&skeleton->priv->lock);
+ return FALSE;
+}
+
+static void
+_um_realm_provider_schedule_emit_changed (UmRealmProviderSkeleton *skeleton, const
_ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value)
+{
+ ChangedProperty *cp;
+ GList *l;
+ cp = NULL;
+ for (l = skeleton->priv->changed_properties; l != NULL; l = l->next)
+ {
+ ChangedProperty *i_cp = l->data;
+ if (i_cp->info == info)
+ {
+ cp = i_cp;
+ break;
+ }
+ }
+ if (cp == NULL)
+ {
+ cp = g_new0 (ChangedProperty, 1);
+ cp->prop_id = prop_id;
+ cp->info = info;
+ skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp);
+ g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value));
+ g_value_copy (orig_value, &cp->orig_value);
+ }
+}
+
+static void
+um_realm_provider_skeleton_notify (GObject *object,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+ UmRealmProviderSkeleton *skeleton = UM_REALM_PROVIDER_SKELETON (object);
+ g_mutex_lock (&skeleton->priv->lock);
+ if (skeleton->priv->changed_properties != NULL &&
+ skeleton->priv->changed_properties_idle_source == NULL)
+ {
+ skeleton->priv->changed_properties_idle_source = g_idle_source_new ();
+ g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT);
+ g_source_set_callback (skeleton->priv->changed_properties_idle_source,
_um_realm_provider_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref);
+ g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context);
+ g_source_unref (skeleton->priv->changed_properties_idle_source);
+ }
+ g_mutex_unlock (&skeleton->priv->lock);
+}
+
+static void
+um_realm_provider_skeleton_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ UmRealmProviderSkeleton *skeleton = UM_REALM_PROVIDER_SKELETON (object);
+ g_assert (prop_id != 0 && prop_id - 1 < 3);
+ g_mutex_lock (&skeleton->priv->lock);
+ g_object_freeze_notify (object);
+ if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1]))
+ {
+ if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL)
+ _um_realm_provider_schedule_emit_changed (skeleton,
_um_realm_provider_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]);
+ g_value_copy (value, &skeleton->priv->properties[prop_id - 1]);
+ g_object_notify_by_pspec (object, pspec);
+ }
+ g_mutex_unlock (&skeleton->priv->lock);
+ g_object_thaw_notify (object);
+}
+
+static void
+um_realm_provider_skeleton_init (UmRealmProviderSkeleton *skeleton)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+ skeleton->priv = um_realm_provider_skeleton_get_instance_private (skeleton);
+#else
+ skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, UM_REALM_TYPE_PROVIDER_SKELETON,
UmRealmProviderSkeletonPrivate);
+#endif
+
+ g_mutex_init (&skeleton->priv->lock);
+ skeleton->priv->context = g_main_context_ref_thread_default ();
+ skeleton->priv->properties = g_new0 (GValue, 3);
+ g_value_init (&skeleton->priv->properties[0], G_TYPE_STRING);
+ g_value_init (&skeleton->priv->properties[1], G_TYPE_STRING);
+ g_value_init (&skeleton->priv->properties[2], G_TYPE_STRV);
+}
+
+static const gchar *
+um_realm_provider_skeleton_get_name (UmRealmProvider *object)
+{
+ UmRealmProviderSkeleton *skeleton = UM_REALM_PROVIDER_SKELETON (object);
+ const gchar *value;
+ g_mutex_lock (&skeleton->priv->lock);
+ value = g_value_get_string (&(skeleton->priv->properties[0]));
+ g_mutex_unlock (&skeleton->priv->lock);
+ return value;
+}
+
+static const gchar *
+um_realm_provider_skeleton_get_version (UmRealmProvider *object)
+{
+ UmRealmProviderSkeleton *skeleton = UM_REALM_PROVIDER_SKELETON (object);
+ const gchar *value;
+ g_mutex_lock (&skeleton->priv->lock);
+ value = g_value_get_string (&(skeleton->priv->properties[1]));
+ g_mutex_unlock (&skeleton->priv->lock);
+ return value;
+}
+
+static const gchar *const *
+um_realm_provider_skeleton_get_realms (UmRealmProvider *object)
+{
+ UmRealmProviderSkeleton *skeleton = UM_REALM_PROVIDER_SKELETON (object);
+ const gchar *const *value;
+ g_mutex_lock (&skeleton->priv->lock);
+ value = g_value_get_boxed (&(skeleton->priv->properties[2]));
+ g_mutex_unlock (&skeleton->priv->lock);
+ return value;
+}
+
+static void
+um_realm_provider_skeleton_class_init (UmRealmProviderSkeletonClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusInterfaceSkeletonClass *skeleton_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = um_realm_provider_skeleton_finalize;
+ gobject_class->get_property = um_realm_provider_skeleton_get_property;
+ gobject_class->set_property = um_realm_provider_skeleton_set_property;
+ gobject_class->notify = um_realm_provider_skeleton_notify;
+
+
+ um_realm_provider_override_properties (gobject_class, 1);
+
+ skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+ skeleton_class->get_info = um_realm_provider_skeleton_dbus_interface_get_info;
+ skeleton_class->get_properties = um_realm_provider_skeleton_dbus_interface_get_properties;
+ skeleton_class->flush = um_realm_provider_skeleton_dbus_interface_flush;
+ skeleton_class->get_vtable = um_realm_provider_skeleton_dbus_interface_get_vtable;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+ g_type_class_add_private (klass, sizeof (UmRealmProviderSkeletonPrivate));
+#endif
+}
+
+static void
+um_realm_provider_skeleton_iface_init (UmRealmProviderIface *iface)
+{
+ iface->get_name = um_realm_provider_skeleton_get_name;
+ iface->get_version = um_realm_provider_skeleton_get_version;
+ iface->get_realms = um_realm_provider_skeleton_get_realms;
+}
+
+/**
+ * um_realm_provider_skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Provider.top_of_page">org.freedesktop.realmd.Provider</link>.
+ *
+ * Returns: (transfer full) (type UmRealmProviderSkeleton): The skeleton object.
+ */
+UmRealmProvider *
+um_realm_provider_skeleton_new (void)
+{
+ return UM_REALM_PROVIDER (g_object_new (UM_REALM_TYPE_PROVIDER_SKELETON, NULL));
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.freedesktop.realmd.Service
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:UmRealmService
+ * @title: UmRealmService
+ * @short_description: Generated C code for the org.freedesktop.realmd.Service D-Bus interface
+ *
+ * This section contains code for working with the <link
linkend="gdbus-interface-org-freedesktop-realmd-Service.top_of_page">org.freedesktop.realmd.Service</link>
D-Bus interface in C.
+ */
+
+/* ---- Introspection data for org.freedesktop.realmd.Service ---- */
+
+static const _ExtendedGDBusArgInfo _um_realm_service_method_info_cancel_IN_ARG_operation =
+{
+ {
+ -1,
+ (gchar *) "operation",
+ (gchar *) "s",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _um_realm_service_method_info_cancel_IN_ARG_pointers[] =
+{
+ &_um_realm_service_method_info_cancel_IN_ARG_operation,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _um_realm_service_method_info_cancel =
+{
+ {
+ -1,
+ (gchar *) "Cancel",
+ (GDBusArgInfo **) &_um_realm_service_method_info_cancel_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-cancel",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _um_realm_service_method_info_set_locale_IN_ARG_locale =
+{
+ {
+ -1,
+ (gchar *) "locale",
+ (gchar *) "s",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _um_realm_service_method_info_set_locale_IN_ARG_pointers[] =
+{
+ &_um_realm_service_method_info_set_locale_IN_ARG_locale,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _um_realm_service_method_info_set_locale =
+{
+ {
+ -1,
+ (gchar *) "SetLocale",
+ (GDBusArgInfo **) &_um_realm_service_method_info_set_locale_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-set-locale",
+ FALSE
+};
+
+static const _ExtendedGDBusMethodInfo _um_realm_service_method_info_release =
+{
+ {
+ -1,
+ (gchar *) "Release",
+ NULL,
+ NULL,
+ NULL
+ },
+ "handle-release",
+ FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _um_realm_service_method_info_pointers[] =
+{
+ &_um_realm_service_method_info_cancel,
+ &_um_realm_service_method_info_set_locale,
+ &_um_realm_service_method_info_release,
+ NULL
+};
+
+static const _ExtendedGDBusArgInfo _um_realm_service_signal_info_diagnostics_ARG_data =
+{
+ {
+ -1,
+ (gchar *) "data",
+ (gchar *) "s",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _um_realm_service_signal_info_diagnostics_ARG_operation =
+{
+ {
+ -1,
+ (gchar *) "operation",
+ (gchar *) "s",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _um_realm_service_signal_info_diagnostics_ARG_pointers[] =
+{
+ &_um_realm_service_signal_info_diagnostics_ARG_data,
+ &_um_realm_service_signal_info_diagnostics_ARG_operation,
+ NULL
+};
+
+static const _ExtendedGDBusSignalInfo _um_realm_service_signal_info_diagnostics =
+{
+ {
+ -1,
+ (gchar *) "Diagnostics",
+ (GDBusArgInfo **) &_um_realm_service_signal_info_diagnostics_ARG_pointers,
+ NULL
+ },
+ "diagnostics"
+};
+
+static const _ExtendedGDBusSignalInfo * const _um_realm_service_signal_info_pointers[] =
+{
+ &_um_realm_service_signal_info_diagnostics,
+ NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _um_realm_service_interface_info =
+{
+ {
+ -1,
+ (gchar *) "org.freedesktop.realmd.Service",
+ (GDBusMethodInfo **) &_um_realm_service_method_info_pointers,
+ (GDBusSignalInfo **) &_um_realm_service_signal_info_pointers,
+ NULL,
+ NULL
+ },
+ "service",
+};
+
+
+/**
+ * um_realm_service_interface_info:
+ *
+ * Gets a machine-readable description of the <link
linkend="gdbus-interface-org-freedesktop-realmd-Service.top_of_page">org.freedesktop.realmd.Service</link>
D-Bus interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+um_realm_service_interface_info (void)
+{
+ return (GDBusInterfaceInfo *) &_um_realm_service_interface_info.parent_struct;
+}
+
+/**
+ * um_realm_service_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #UmRealmService interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+um_realm_service_override_properties (GObjectClass *klass, guint property_id_begin)
+{
+ return property_id_begin - 1;
+}
+
+
+
+/**
+ * UmRealmService:
+ *
+ * Abstract interface type for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Service.top_of_page">org.freedesktop.realmd.Service</link>.
+ */
+
+/**
+ * UmRealmServiceIface:
+ * @parent_iface: The parent interface.
+ * @handle_cancel: Handler for the #UmRealmService::handle-cancel signal.
+ * @handle_release: Handler for the #UmRealmService::handle-release signal.
+ * @handle_set_locale: Handler for the #UmRealmService::handle-set-locale signal.
+ * @diagnostics: Handler for the #UmRealmService::diagnostics signal.
+ *
+ * Virtual table for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Service.top_of_page">org.freedesktop.realmd.Service</link>.
+ */
+
+typedef UmRealmServiceIface UmRealmServiceInterface;
+G_DEFINE_INTERFACE (UmRealmService, um_realm_service, G_TYPE_OBJECT);
+
+static void
+um_realm_service_default_init (UmRealmServiceIface *iface)
+{
+ /* GObject signals for incoming D-Bus method calls: */
+ /**
+ * UmRealmService::handle-cancel:
+ * @object: A #UmRealmService.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_operation: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link
linkend="gdbus-method-org-freedesktop-realmd-Service.Cancel">Cancel()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a
reference to @invocation and eventually call um_realm_service_complete_cancel() or e.g.
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-cancel",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (UmRealmServiceIface, handle_cancel),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 2,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING);
+
+ /**
+ * UmRealmService::handle-set-locale:
+ * @object: A #UmRealmService.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_locale: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link
linkend="gdbus-method-org-freedesktop-realmd-Service.SetLocale">SetLocale()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a
reference to @invocation and eventually call um_realm_service_complete_set_locale() or e.g.
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-set-locale",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (UmRealmServiceIface, handle_set_locale),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 2,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING);
+
+ /**
+ * UmRealmService::handle-release:
+ * @object: A #UmRealmService.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link
linkend="gdbus-method-org-freedesktop-realmd-Service.Release">Release()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a
reference to @invocation and eventually call um_realm_service_complete_release() or e.g.
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-release",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (UmRealmServiceIface, handle_release),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 1,
+ G_TYPE_DBUS_METHOD_INVOCATION);
+
+ /* GObject signals for received D-Bus signals: */
+ /**
+ * UmRealmService::diagnostics:
+ * @object: A #UmRealmService.
+ * @arg_data: Argument.
+ * @arg_operation: Argument.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link
linkend="gdbus-signal-org-freedesktop-realmd-Service.Diagnostics">"Diagnostics"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit
the D-Bus signal.
+ */
+ g_signal_new ("diagnostics",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (UmRealmServiceIface, diagnostics),
+ NULL,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 2, G_TYPE_STRING, G_TYPE_STRING);
+
+}
+
+/**
+ * um_realm_service_emit_diagnostics:
+ * @object: A #UmRealmService.
+ * @arg_data: Argument to pass with the signal.
+ * @arg_operation: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-freedesktop-realmd-Service.Diagnostics">"Diagnostics"</link>
D-Bus signal.
+ */
+void
+um_realm_service_emit_diagnostics (
+ UmRealmService *object,
+ const gchar *arg_data,
+ const gchar *arg_operation)
+{
+ g_signal_emit_by_name (object, "diagnostics", arg_data, arg_operation);
+}
+
+/**
+ * um_realm_service_call_cancel:
+ * @proxy: A #UmRealmServiceProxy.
+ * @arg_operation: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link
linkend="gdbus-method-org-freedesktop-realmd-Service.Cancel">Cancel()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_service_call_cancel_finish() to get the result of the operation.
+ *
+ * See um_realm_service_call_cancel_sync() for the synchronous, blocking version of this method.
+ */
+void
+um_realm_service_call_cancel (
+ UmRealmService *proxy,
+ const gchar *arg_operation,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "Cancel",
+ g_variant_new ("(s)",
+ arg_operation),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * um_realm_service_call_cancel_finish:
+ * @proxy: A #UmRealmServiceProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to um_realm_service_call_cancel().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with um_realm_service_call_cancel().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+um_realm_service_call_cancel_finish (
+ UmRealmService *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * um_realm_service_call_cancel_sync:
+ * @proxy: A #UmRealmServiceProxy.
+ * @arg_operation: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link
linkend="gdbus-method-org-freedesktop-realmd-Service.Cancel">Cancel()</link> D-Bus method on @proxy. The
calling thread is blocked until a reply is received.
+ *
+ * See um_realm_service_call_cancel() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+um_realm_service_call_cancel_sync (
+ UmRealmService *proxy,
+ const gchar *arg_operation,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "Cancel",
+ g_variant_new ("(s)",
+ arg_operation),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * um_realm_service_call_set_locale:
+ * @proxy: A #UmRealmServiceProxy.
+ * @arg_locale: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link
linkend="gdbus-method-org-freedesktop-realmd-Service.SetLocale">SetLocale()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_service_call_set_locale_finish() to get the result of the operation.
+ *
+ * See um_realm_service_call_set_locale_sync() for the synchronous, blocking version of this method.
+ */
+void
+um_realm_service_call_set_locale (
+ UmRealmService *proxy,
+ const gchar *arg_locale,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "SetLocale",
+ g_variant_new ("(s)",
+ arg_locale),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * um_realm_service_call_set_locale_finish:
+ * @proxy: A #UmRealmServiceProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
um_realm_service_call_set_locale().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with um_realm_service_call_set_locale().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+um_realm_service_call_set_locale_finish (
+ UmRealmService *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * um_realm_service_call_set_locale_sync:
+ * @proxy: A #UmRealmServiceProxy.
+ * @arg_locale: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link
linkend="gdbus-method-org-freedesktop-realmd-Service.SetLocale">SetLocale()</link> D-Bus method on @proxy.
The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_service_call_set_locale() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+um_realm_service_call_set_locale_sync (
+ UmRealmService *proxy,
+ const gchar *arg_locale,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "SetLocale",
+ g_variant_new ("(s)",
+ arg_locale),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * um_realm_service_call_release:
+ * @proxy: A #UmRealmServiceProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link
linkend="gdbus-method-org-freedesktop-realmd-Service.Release">Release()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_service_call_release_finish() to get the result of the operation.
+ *
+ * See um_realm_service_call_release_sync() for the synchronous, blocking version of this method.
+ */
+void
+um_realm_service_call_release (
+ UmRealmService *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "Release",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * um_realm_service_call_release_finish:
+ * @proxy: A #UmRealmServiceProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to um_realm_service_call_release().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with um_realm_service_call_release().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+um_realm_service_call_release_finish (
+ UmRealmService *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * um_realm_service_call_release_sync:
+ * @proxy: A #UmRealmServiceProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link
linkend="gdbus-method-org-freedesktop-realmd-Service.Release">Release()</link> D-Bus method on @proxy. The
calling thread is blocked until a reply is received.
+ *
+ * See um_realm_service_call_release() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+um_realm_service_call_release_sync (
+ UmRealmService *proxy,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "Release",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * um_realm_service_complete_cancel:
+ * @object: A #UmRealmService.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link
linkend="gdbus-method-org-freedesktop-realmd-Service.Cancel">Cancel()</link> D-Bus method. If you instead
want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or
similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+um_realm_service_complete_cancel (
+ UmRealmService *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * um_realm_service_complete_set_locale:
+ * @object: A #UmRealmService.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link
linkend="gdbus-method-org-freedesktop-realmd-Service.SetLocale">SetLocale()</link> D-Bus method. If you
instead want to finish handling an invocation by returning an error, use
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+um_realm_service_complete_set_locale (
+ UmRealmService *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * um_realm_service_complete_release:
+ * @object: A #UmRealmService.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link
linkend="gdbus-method-org-freedesktop-realmd-Service.Release">Release()</link> D-Bus method. If you instead
want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or
similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+um_realm_service_complete_release (
+ UmRealmService *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * UmRealmServiceProxy:
+ *
+ * The #UmRealmServiceProxy structure contains only private data and should only be accessed using the
provided API.
+ */
+
+/**
+ * UmRealmServiceProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #UmRealmServiceProxy.
+ */
+
+struct _UmRealmServiceProxyPrivate
+{
+ GData *qdata;
+};
+
+static void um_realm_service_proxy_iface_init (UmRealmServiceIface *iface);
+
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (UmRealmServiceProxy, um_realm_service_proxy, G_TYPE_DBUS_PROXY,
+ G_ADD_PRIVATE (UmRealmServiceProxy)
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_SERVICE, um_realm_service_proxy_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (UmRealmServiceProxy, um_realm_service_proxy, G_TYPE_DBUS_PROXY,
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_SERVICE, um_realm_service_proxy_iface_init));
+
+#endif
+static void
+um_realm_service_proxy_finalize (GObject *object)
+{
+ UmRealmServiceProxy *proxy = UM_REALM_SERVICE_PROXY (object);
+ g_datalist_clear (&proxy->priv->qdata);
+ G_OBJECT_CLASS (um_realm_service_proxy_parent_class)->finalize (object);
+}
+
+static void
+um_realm_service_proxy_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+um_realm_service_proxy_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+um_realm_service_proxy_g_signal (GDBusProxy *proxy,
+ const gchar *sender_name G_GNUC_UNUSED,
+ const gchar *signal_name,
+ GVariant *parameters)
+{
+ _ExtendedGDBusSignalInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint n;
+ guint signal_id;
+ info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *)
&_um_realm_service_interface_info.parent_struct, signal_name);
+ if (info == NULL)
+ return;
+ num_params = g_variant_n_children (parameters);
+ paramv = g_new0 (GValue, num_params + 1);
+ g_value_init (¶mv[0], UM_REALM_TYPE_SERVICE);
+ g_value_set_object (¶mv[0], proxy);
+ g_variant_iter_init (&iter, parameters);
+ n = 1;
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (¶mv[n], G_TYPE_VARIANT);
+ g_value_set_variant (¶mv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, ¶mv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, UM_REALM_TYPE_SERVICE);
+ g_signal_emitv (paramv, signal_id, 0, NULL);
+ for (n = 0; n < num_params + 1; n++)
+ g_value_unset (¶mv[n]);
+ g_free (paramv);
+}
+
+static void
+um_realm_service_proxy_g_properties_changed (GDBusProxy *_proxy,
+ GVariant *changed_properties,
+ const gchar *const *invalidated_properties)
+{
+ UmRealmServiceProxy *proxy = UM_REALM_SERVICE_PROXY (_proxy);
+ guint n;
+ const gchar *key;
+ GVariantIter *iter;
+ _ExtendedGDBusPropertyInfo *info;
+ g_variant_get (changed_properties, "a{sv}", &iter);
+ while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_service_interface_info.parent_struct, key);
+ g_datalist_remove_data (&proxy->priv->qdata, key);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+ g_variant_iter_free (iter);
+ for (n = 0; invalidated_properties[n] != NULL; n++)
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_service_interface_info.parent_struct, invalidated_properties[n]);
+ g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+}
+
+static void
+um_realm_service_proxy_init (UmRealmServiceProxy *proxy)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+ proxy->priv = um_realm_service_proxy_get_instance_private (proxy);
+#else
+ proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, UM_REALM_TYPE_SERVICE_PROXY, UmRealmServiceProxyPrivate);
+#endif
+
+ g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), um_realm_service_interface_info ());
+}
+
+static void
+um_realm_service_proxy_class_init (UmRealmServiceProxyClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusProxyClass *proxy_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = um_realm_service_proxy_finalize;
+ gobject_class->get_property = um_realm_service_proxy_get_property;
+ gobject_class->set_property = um_realm_service_proxy_set_property;
+
+ proxy_class = G_DBUS_PROXY_CLASS (klass);
+ proxy_class->g_signal = um_realm_service_proxy_g_signal;
+ proxy_class->g_properties_changed = um_realm_service_proxy_g_properties_changed;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+ g_type_class_add_private (klass, sizeof (UmRealmServiceProxyPrivate));
+#endif
+}
+
+static void
+um_realm_service_proxy_iface_init (UmRealmServiceIface *iface)
+{
+}
+
+/**
+ * um_realm_service_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Service.top_of_page">org.freedesktop.realmd.Service</link>.
See g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_service_proxy_new_finish() to get the result of the operation.
+ *
+ * See um_realm_service_proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+um_realm_service_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (UM_REALM_TYPE_SERVICE_PROXY, G_PRIORITY_DEFAULT, cancellable, callback,
user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path,
"g-interface-name", "org.freedesktop.realmd.Service", NULL);
+}
+
+/**
+ * um_realm_service_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to um_realm_service_proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with um_realm_service_proxy_new().
+ *
+ * Returns: (transfer full) (type UmRealmServiceProxy): The constructed proxy object or %NULL if @error is
set.
+ */
+UmRealmService *
+um_realm_service_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return UM_REALM_SERVICE (ret);
+ else
+ return NULL;
+}
+
+/**
+ * um_realm_service_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Service.top_of_page">org.freedesktop.realmd.Service</link>.
See g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_service_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type UmRealmServiceProxy): The constructed proxy object or %NULL if @error is
set.
+ */
+UmRealmService *
+um_realm_service_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (UM_REALM_TYPE_SERVICE_PROXY, cancellable, error, "g-flags", flags, "g-name", name,
"g-connection", connection, "g-object-path", object_path, "g-interface-name",
"org.freedesktop.realmd.Service", NULL);
+ if (ret != NULL)
+ return UM_REALM_SERVICE (ret);
+ else
+ return NULL;
+}
+
+
+/**
+ * um_realm_service_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like um_realm_service_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_service_proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See um_realm_service_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+um_realm_service_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (UM_REALM_TYPE_SERVICE_PROXY, G_PRIORITY_DEFAULT, cancellable, callback,
user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path,
"g-interface-name", "org.freedesktop.realmd.Service", NULL);
+}
+
+/**
+ * um_realm_service_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
um_realm_service_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with um_realm_service_proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type UmRealmServiceProxy): The constructed proxy object or %NULL if @error is
set.
+ */
+UmRealmService *
+um_realm_service_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return UM_REALM_SERVICE (ret);
+ else
+ return NULL;
+}
+
+/**
+ * um_realm_service_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like um_realm_service_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_service_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type UmRealmServiceProxy): The constructed proxy object or %NULL if @error is
set.
+ */
+UmRealmService *
+um_realm_service_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (UM_REALM_TYPE_SERVICE_PROXY, cancellable, error, "g-flags", flags, "g-name", name,
"g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.freedesktop.realmd.Service",
NULL);
+ if (ret != NULL)
+ return UM_REALM_SERVICE (ret);
+ else
+ return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * UmRealmServiceSkeleton:
+ *
+ * The #UmRealmServiceSkeleton structure contains only private data and should only be accessed using the
provided API.
+ */
+
+/**
+ * UmRealmServiceSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #UmRealmServiceSkeleton.
+ */
+
+struct _UmRealmServiceSkeletonPrivate
+{
+ GValue *properties;
+ GList *changed_properties;
+ GSource *changed_properties_idle_source;
+ GMainContext *context;
+ GMutex lock;
+};
+
+static void
+_um_realm_service_skeleton_handle_method_call (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name,
+ const gchar *method_name,
+ GVariant *parameters,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ UmRealmServiceSkeleton *skeleton = UM_REALM_SERVICE_SKELETON (user_data);
+ _ExtendedGDBusMethodInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint num_extra;
+ guint n;
+ guint signal_id;
+ GValue return_value = G_VALUE_INIT;
+ info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+ g_assert (info != NULL);
+ num_params = g_variant_n_children (parameters);
+ num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra);
+ n = 0;
+ g_value_init (¶mv[n], UM_REALM_TYPE_SERVICE);
+ g_value_set_object (¶mv[n++], skeleton);
+ g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+ g_value_set_object (¶mv[n++], invocation);
+ if (info->pass_fdlist)
+ {
+#ifdef G_OS_UNIX
+ g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST);
+ g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list
(g_dbus_method_invocation_get_message (invocation)));
+#else
+ g_assert_not_reached ();
+#endif
+ }
+ g_variant_iter_init (&iter, parameters);
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (¶mv[n], G_TYPE_VARIANT);
+ g_value_set_variant (¶mv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, ¶mv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, UM_REALM_TYPE_SERVICE);
+ g_value_init (&return_value, G_TYPE_BOOLEAN);
+ g_signal_emitv (paramv, signal_id, 0, &return_value);
+ if (!g_value_get_boolean (&return_value))
+ g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s
is not implemented on interface %s", method_name, interface_name);
+ g_value_unset (&return_value);
+ for (n = 0; n < num_params + num_extra; n++)
+ g_value_unset (¶mv[n]);
+ g_free (paramv);
+}
+
+static GVariant *
+_um_realm_service_skeleton_handle_get_property (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name G_GNUC_UNUSED,
+ const gchar *property_name,
+ GError **error,
+ gpointer user_data)
+{
+ UmRealmServiceSkeleton *skeleton = UM_REALM_SERVICE_SKELETON (user_data);
+ GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ GVariant *ret;
+ ret = NULL;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_service_interface_info.parent_struct, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s",
property_name);
+ }
+ else
+ {
+ g_value_init (&value, pspec->value_type);
+ g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+ g_value_unset (&value);
+ }
+ return ret;
+}
+
+static gboolean
+_um_realm_service_skeleton_handle_set_property (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name G_GNUC_UNUSED,
+ const gchar *property_name,
+ GVariant *variant,
+ GError **error,
+ gpointer user_data)
+{
+ UmRealmServiceSkeleton *skeleton = UM_REALM_SERVICE_SKELETON (user_data);
+ GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ gboolean ret;
+ ret = FALSE;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_service_interface_info.parent_struct, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s",
property_name);
+ }
+ else
+ {
+ if (info->use_gvariant)
+ g_value_set_variant (&value, variant);
+ else
+ g_dbus_gvariant_to_gvalue (variant, &value);
+ g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ g_value_unset (&value);
+ ret = TRUE;
+ }
+ return ret;
+}
+
+static const GDBusInterfaceVTable _um_realm_service_skeleton_vtable =
+{
+ _um_realm_service_skeleton_handle_method_call,
+ _um_realm_service_skeleton_handle_get_property,
+ _um_realm_service_skeleton_handle_set_property,
+ {NULL}
+};
+
+static GDBusInterfaceInfo *
+um_realm_service_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+ return um_realm_service_interface_info ();
+}
+
+static GDBusInterfaceVTable *
+um_realm_service_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+ return (GDBusInterfaceVTable *) &_um_realm_service_skeleton_vtable;
+}
+
+static GVariant *
+um_realm_service_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+ UmRealmServiceSkeleton *skeleton = UM_REALM_SERVICE_SKELETON (_skeleton);
+
+ GVariantBuilder builder;
+ guint n;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ if (_um_realm_service_interface_info.parent_struct.properties == NULL)
+ goto out;
+ for (n = 0; _um_realm_service_interface_info.parent_struct.properties[n] != NULL; n++)
+ {
+ GDBusPropertyInfo *info = _um_realm_service_interface_info.parent_struct.properties[n];
+ if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+ {
+ GVariant *value;
+ value = _um_realm_service_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection
(G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path
(G_DBUS_INTERFACE_SKELETON (skeleton)), "org.freedesktop.realmd.Service", info->name, NULL, skeleton);
+ if (value != NULL)
+ {
+ g_variant_take_ref (value);
+ g_variant_builder_add (&builder, "{sv}", info->name, value);
+ g_variant_unref (value);
+ }
+ }
+ }
+out:
+ return g_variant_builder_end (&builder);
+}
+
+static void
+um_realm_service_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+}
+
+static void
+_um_realm_service_on_signal_diagnostics (
+ UmRealmService *object,
+ const gchar *arg_data,
+ const gchar *arg_operation)
+{
+ UmRealmServiceSkeleton *skeleton = UM_REALM_SERVICE_SKELETON (object);
+
+ GList *connections, *l;
+ GVariant *signal_variant;
+ connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+ signal_variant = g_variant_ref_sink (g_variant_new ("(ss)",
+ arg_data,
+ arg_operation));
+ for (l = connections; l != NULL; l = l->next)
+ {
+ GDBusConnection *connection = l->data;
+ g_dbus_connection_emit_signal (connection,
+ NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)),
"org.freedesktop.realmd.Service", "Diagnostics",
+ signal_variant, NULL);
+ }
+ g_variant_unref (signal_variant);
+ g_list_free_full (connections, g_object_unref);
+}
+
+static void um_realm_service_skeleton_iface_init (UmRealmServiceIface *iface);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (UmRealmServiceSkeleton, um_realm_service_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_ADD_PRIVATE (UmRealmServiceSkeleton)
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_SERVICE,
um_realm_service_skeleton_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (UmRealmServiceSkeleton, um_realm_service_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_SERVICE,
um_realm_service_skeleton_iface_init));
+
+#endif
+static void
+um_realm_service_skeleton_finalize (GObject *object)
+{
+ UmRealmServiceSkeleton *skeleton = UM_REALM_SERVICE_SKELETON (object);
+ g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+ if (skeleton->priv->changed_properties_idle_source != NULL)
+ g_source_destroy (skeleton->priv->changed_properties_idle_source);
+ g_main_context_unref (skeleton->priv->context);
+ g_mutex_clear (&skeleton->priv->lock);
+ G_OBJECT_CLASS (um_realm_service_skeleton_parent_class)->finalize (object);
+}
+
+static void
+um_realm_service_skeleton_init (UmRealmServiceSkeleton *skeleton)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+ skeleton->priv = um_realm_service_skeleton_get_instance_private (skeleton);
+#else
+ skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, UM_REALM_TYPE_SERVICE_SKELETON,
UmRealmServiceSkeletonPrivate);
+#endif
+
+ g_mutex_init (&skeleton->priv->lock);
+ skeleton->priv->context = g_main_context_ref_thread_default ();
+}
+
+static void
+um_realm_service_skeleton_class_init (UmRealmServiceSkeletonClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusInterfaceSkeletonClass *skeleton_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = um_realm_service_skeleton_finalize;
+
+ skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+ skeleton_class->get_info = um_realm_service_skeleton_dbus_interface_get_info;
+ skeleton_class->get_properties = um_realm_service_skeleton_dbus_interface_get_properties;
+ skeleton_class->flush = um_realm_service_skeleton_dbus_interface_flush;
+ skeleton_class->get_vtable = um_realm_service_skeleton_dbus_interface_get_vtable;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+ g_type_class_add_private (klass, sizeof (UmRealmServiceSkeletonPrivate));
+#endif
+}
+
+static void
+um_realm_service_skeleton_iface_init (UmRealmServiceIface *iface)
+{
+ iface->diagnostics = _um_realm_service_on_signal_diagnostics;
+}
+
+/**
+ * um_realm_service_skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Service.top_of_page">org.freedesktop.realmd.Service</link>.
+ *
+ * Returns: (transfer full) (type UmRealmServiceSkeleton): The skeleton object.
+ */
+UmRealmService *
+um_realm_service_skeleton_new (void)
+{
+ return UM_REALM_SERVICE (g_object_new (UM_REALM_TYPE_SERVICE_SKELETON, NULL));
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.freedesktop.realmd.Realm
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:UmRealmCommon
+ * @title: UmRealmCommon
+ * @short_description: Generated C code for the org.freedesktop.realmd.Realm D-Bus interface
+ *
+ * This section contains code for working with the <link
linkend="gdbus-interface-org-freedesktop-realmd-Realm.top_of_page">org.freedesktop.realmd.Realm</link> D-Bus
interface in C.
+ */
+
+/* ---- Introspection data for org.freedesktop.realmd.Realm ---- */
+
+static const _ExtendedGDBusArgInfo _um_realm_common_method_info_deconfigure_IN_ARG_options =
+{
+ {
+ -1,
+ (gchar *) "options",
+ (gchar *) "a{sv}",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _um_realm_common_method_info_deconfigure_IN_ARG_pointers[] =
+{
+ &_um_realm_common_method_info_deconfigure_IN_ARG_options,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _um_realm_common_method_info_deconfigure =
+{
+ {
+ -1,
+ (gchar *) "Deconfigure",
+ (GDBusArgInfo **) &_um_realm_common_method_info_deconfigure_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-deconfigure",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _um_realm_common_method_info_change_login_policy_IN_ARG_login_policy =
+{
+ {
+ -1,
+ (gchar *) "login_policy",
+ (gchar *) "s",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _um_realm_common_method_info_change_login_policy_IN_ARG_permitted_add =
+{
+ {
+ -1,
+ (gchar *) "permitted_add",
+ (gchar *) "as",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _um_realm_common_method_info_change_login_policy_IN_ARG_permitted_remove =
+{
+ {
+ -1,
+ (gchar *) "permitted_remove",
+ (gchar *) "as",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _um_realm_common_method_info_change_login_policy_IN_ARG_options =
+{
+ {
+ -1,
+ (gchar *) "options",
+ (gchar *) "a{sv}",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const
_um_realm_common_method_info_change_login_policy_IN_ARG_pointers[] =
+{
+ &_um_realm_common_method_info_change_login_policy_IN_ARG_login_policy,
+ &_um_realm_common_method_info_change_login_policy_IN_ARG_permitted_add,
+ &_um_realm_common_method_info_change_login_policy_IN_ARG_permitted_remove,
+ &_um_realm_common_method_info_change_login_policy_IN_ARG_options,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _um_realm_common_method_info_change_login_policy =
+{
+ {
+ -1,
+ (gchar *) "ChangeLoginPolicy",
+ (GDBusArgInfo **) &_um_realm_common_method_info_change_login_policy_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-change-login-policy",
+ FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _um_realm_common_method_info_pointers[] =
+{
+ &_um_realm_common_method_info_deconfigure,
+ &_um_realm_common_method_info_change_login_policy,
+ NULL
+};
+
+static const _ExtendedGDBusPropertyInfo _um_realm_common_property_info_name =
+{
+ {
+ -1,
+ (gchar *) "Name",
+ (gchar *) "s",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "name",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _um_realm_common_property_info_configured =
+{
+ {
+ -1,
+ (gchar *) "Configured",
+ (gchar *) "s",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "configured",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _um_realm_common_property_info_supported_interfaces =
+{
+ {
+ -1,
+ (gchar *) "SupportedInterfaces",
+ (gchar *) "as",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "supported-interfaces",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _um_realm_common_property_info_details =
+{
+ {
+ -1,
+ (gchar *) "Details",
+ (gchar *) "a(ss)",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "details",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _um_realm_common_property_info_login_formats =
+{
+ {
+ -1,
+ (gchar *) "LoginFormats",
+ (gchar *) "as",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "login-formats",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _um_realm_common_property_info_login_policy =
+{
+ {
+ -1,
+ (gchar *) "LoginPolicy",
+ (gchar *) "s",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "login-policy",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _um_realm_common_property_info_permitted_logins =
+{
+ {
+ -1,
+ (gchar *) "PermittedLogins",
+ (gchar *) "as",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "permitted-logins",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo * const _um_realm_common_property_info_pointers[] =
+{
+ &_um_realm_common_property_info_name,
+ &_um_realm_common_property_info_configured,
+ &_um_realm_common_property_info_supported_interfaces,
+ &_um_realm_common_property_info_details,
+ &_um_realm_common_property_info_login_formats,
+ &_um_realm_common_property_info_login_policy,
+ &_um_realm_common_property_info_permitted_logins,
+ NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _um_realm_common_interface_info =
+{
+ {
+ -1,
+ (gchar *) "org.freedesktop.realmd.Realm",
+ (GDBusMethodInfo **) &_um_realm_common_method_info_pointers,
+ NULL,
+ (GDBusPropertyInfo **) &_um_realm_common_property_info_pointers,
+ NULL
+ },
+ "common",
+};
+
+
+/**
+ * um_realm_common_interface_info:
+ *
+ * Gets a machine-readable description of the <link
linkend="gdbus-interface-org-freedesktop-realmd-Realm.top_of_page">org.freedesktop.realmd.Realm</link> D-Bus
interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+um_realm_common_interface_info (void)
+{
+ return (GDBusInterfaceInfo *) &_um_realm_common_interface_info.parent_struct;
+}
+
+/**
+ * um_realm_common_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #UmRealmCommon interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+um_realm_common_override_properties (GObjectClass *klass, guint property_id_begin)
+{
+ g_object_class_override_property (klass, property_id_begin++, "name");
+ g_object_class_override_property (klass, property_id_begin++, "configured");
+ g_object_class_override_property (klass, property_id_begin++, "supported-interfaces");
+ g_object_class_override_property (klass, property_id_begin++, "details");
+ g_object_class_override_property (klass, property_id_begin++, "login-formats");
+ g_object_class_override_property (klass, property_id_begin++, "login-policy");
+ g_object_class_override_property (klass, property_id_begin++, "permitted-logins");
+ return property_id_begin - 1;
+}
+
+
+
+/**
+ * UmRealmCommon:
+ *
+ * Abstract interface type for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Realm.top_of_page">org.freedesktop.realmd.Realm</link>.
+ */
+
+/**
+ * UmRealmCommonIface:
+ * @parent_iface: The parent interface.
+ * @handle_change_login_policy: Handler for the #UmRealmCommon::handle-change-login-policy signal.
+ * @handle_deconfigure: Handler for the #UmRealmCommon::handle-deconfigure signal.
+ * @get_configured: Getter for the #UmRealmCommon:configured property.
+ * @get_details: Getter for the #UmRealmCommon:details property.
+ * @get_login_formats: Getter for the #UmRealmCommon:login-formats property.
+ * @get_login_policy: Getter for the #UmRealmCommon:login-policy property.
+ * @get_name: Getter for the #UmRealmCommon:name property.
+ * @get_permitted_logins: Getter for the #UmRealmCommon:permitted-logins property.
+ * @get_supported_interfaces: Getter for the #UmRealmCommon:supported-interfaces property.
+ *
+ * Virtual table for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Realm.top_of_page">org.freedesktop.realmd.Realm</link>.
+ */
+
+typedef UmRealmCommonIface UmRealmCommonInterface;
+G_DEFINE_INTERFACE (UmRealmCommon, um_realm_common, G_TYPE_OBJECT);
+
+static void
+um_realm_common_default_init (UmRealmCommonIface *iface)
+{
+ /* GObject signals for incoming D-Bus method calls: */
+ /**
+ * UmRealmCommon::handle-deconfigure:
+ * @object: A #UmRealmCommon.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_options: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link
linkend="gdbus-method-org-freedesktop-realmd-Realm.Deconfigure">Deconfigure()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a
reference to @invocation and eventually call um_realm_common_complete_deconfigure() or e.g.
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-deconfigure",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (UmRealmCommonIface, handle_deconfigure),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 2,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_VARIANT);
+
+ /**
+ * UmRealmCommon::handle-change-login-policy:
+ * @object: A #UmRealmCommon.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_login_policy: Argument passed by remote caller.
+ * @arg_permitted_add: Argument passed by remote caller.
+ * @arg_permitted_remove: Argument passed by remote caller.
+ * @arg_options: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link
linkend="gdbus-method-org-freedesktop-realmd-Realm.ChangeLoginPolicy">ChangeLoginPolicy()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a
reference to @invocation and eventually call um_realm_common_complete_change_login_policy() or e.g.
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-change-login-policy",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (UmRealmCommonIface, handle_change_login_policy),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 5,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRV, G_TYPE_STRV, G_TYPE_VARIANT);
+
+ /* GObject properties for D-Bus properties: */
+ /**
+ * UmRealmCommon:name:
+ *
+ * Represents the D-Bus property <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.Name">"Name"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to
read from it on both the client- and service-side. It is only meaningful, however, to write to it on the
service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_string ("name", "Name", "Name", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * UmRealmCommon:configured:
+ *
+ * Represents the D-Bus property <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.Configured">"Configured"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to
read from it on both the client- and service-side. It is only meaningful, however, to write to it on the
service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_string ("configured", "Configured", "Configured", NULL, G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
+ /**
+ * UmRealmCommon:supported-interfaces:
+ *
+ * Represents the D-Bus property <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.SupportedInterfaces">"SupportedInterfaces"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to
read from it on both the client- and service-side. It is only meaningful, however, to write to it on the
service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_boxed ("supported-interfaces", "SupportedInterfaces", "SupportedInterfaces", G_TYPE_STRV,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * UmRealmCommon:details:
+ *
+ * Represents the D-Bus property <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.Details">"Details"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to
read from it on both the client- and service-side. It is only meaningful, however, to write to it on the
service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_variant ("details", "Details", "Details", G_VARIANT_TYPE ("a(ss)"), NULL, G_PARAM_READWRITE
| G_PARAM_STATIC_STRINGS));
+ /**
+ * UmRealmCommon:login-formats:
+ *
+ * Represents the D-Bus property <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.LoginFormats">"LoginFormats"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to
read from it on both the client- and service-side. It is only meaningful, however, to write to it on the
service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_boxed ("login-formats", "LoginFormats", "LoginFormats", G_TYPE_STRV, G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
+ /**
+ * UmRealmCommon:login-policy:
+ *
+ * Represents the D-Bus property <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.LoginPolicy">"LoginPolicy"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to
read from it on both the client- and service-side. It is only meaningful, however, to write to it on the
service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_string ("login-policy", "LoginPolicy", "LoginPolicy", NULL, G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
+ /**
+ * UmRealmCommon:permitted-logins:
+ *
+ * Represents the D-Bus property <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.PermittedLogins">"PermittedLogins"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to
read from it on both the client- and service-side. It is only meaningful, however, to write to it on the
service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_boxed ("permitted-logins", "PermittedLogins", "PermittedLogins", G_TYPE_STRV,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+}
+
+/**
+ * um_realm_common_get_name: (skip)
+ * @object: A #UmRealmCommon.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-freedesktop-realmd-Realm.Name">"Name"</link>
D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only
safe to use this function on the thread where @object was constructed. Use um_realm_common_dup_name() if on
another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the
returned value, it belongs to @object.
+ */
+const gchar *
+um_realm_common_get_name (UmRealmCommon *object)
+{
+ return UM_REALM_COMMON_GET_IFACE (object)->get_name (object);
+}
+
+/**
+ * um_realm_common_dup_name: (skip)
+ * @object: A #UmRealmCommon.
+ *
+ * Gets a copy of the <link linkend="gdbus-property-org-freedesktop-realmd-Realm.Name">"Name"</link> D-Bus
property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value
should be freed with g_free().
+ */
+gchar *
+um_realm_common_dup_name (UmRealmCommon *object)
+{
+ gchar *value;
+ g_object_get (G_OBJECT (object), "name", &value, NULL);
+ return value;
+}
+
+/**
+ * um_realm_common_set_name: (skip)
+ * @object: A #UmRealmCommon.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-freedesktop-realmd-Realm.Name">"Name"</link> D-Bus property to
@value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+um_realm_common_set_name (UmRealmCommon *object, const gchar *value)
+{
+ g_object_set (G_OBJECT (object), "name", value, NULL);
+}
+
+/**
+ * um_realm_common_get_configured: (skip)
+ * @object: A #UmRealmCommon.
+ *
+ * Gets the value of the <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.Configured">"Configured"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only
safe to use this function on the thread where @object was constructed. Use um_realm_common_dup_configured()
if on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the
returned value, it belongs to @object.
+ */
+const gchar *
+um_realm_common_get_configured (UmRealmCommon *object)
+{
+ return UM_REALM_COMMON_GET_IFACE (object)->get_configured (object);
+}
+
+/**
+ * um_realm_common_dup_configured: (skip)
+ * @object: A #UmRealmCommon.
+ *
+ * Gets a copy of the <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.Configured">"Configured"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value
should be freed with g_free().
+ */
+gchar *
+um_realm_common_dup_configured (UmRealmCommon *object)
+{
+ gchar *value;
+ g_object_get (G_OBJECT (object), "configured", &value, NULL);
+ return value;
+}
+
+/**
+ * um_realm_common_set_configured: (skip)
+ * @object: A #UmRealmCommon.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-freedesktop-realmd-Realm.Configured">"Configured"</link> D-Bus
property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+um_realm_common_set_configured (UmRealmCommon *object, const gchar *value)
+{
+ g_object_set (G_OBJECT (object), "configured", value, NULL);
+}
+
+/**
+ * um_realm_common_get_supported_interfaces: (skip)
+ * @object: A #UmRealmCommon.
+ *
+ * Gets the value of the <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.SupportedInterfaces">"SupportedInterfaces"</link> D-Bus
property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only
safe to use this function on the thread where @object was constructed. Use
um_realm_common_dup_supported_interfaces() if on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the
returned value, it belongs to @object.
+ */
+const gchar *const *
+um_realm_common_get_supported_interfaces (UmRealmCommon *object)
+{
+ return UM_REALM_COMMON_GET_IFACE (object)->get_supported_interfaces (object);
+}
+
+/**
+ * um_realm_common_dup_supported_interfaces: (skip)
+ * @object: A #UmRealmCommon.
+ *
+ * Gets a copy of the <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.SupportedInterfaces">"SupportedInterfaces"</link> D-Bus
property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value
should be freed with g_strfreev().
+ */
+gchar **
+um_realm_common_dup_supported_interfaces (UmRealmCommon *object)
+{
+ gchar **value;
+ g_object_get (G_OBJECT (object), "supported-interfaces", &value, NULL);
+ return value;
+}
+
+/**
+ * um_realm_common_set_supported_interfaces: (skip)
+ * @object: A #UmRealmCommon.
+ * @value: The value to set.
+ *
+ * Sets the <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.SupportedInterfaces">"SupportedInterfaces"</link> D-Bus
property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+um_realm_common_set_supported_interfaces (UmRealmCommon *object, const gchar *const *value)
+{
+ g_object_set (G_OBJECT (object), "supported-interfaces", value, NULL);
+}
+
+/**
+ * um_realm_common_get_details: (skip)
+ * @object: A #UmRealmCommon.
+ *
+ * Gets the value of the <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.Details">"Details"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only
safe to use this function on the thread where @object was constructed. Use um_realm_common_dup_details() if
on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the
returned value, it belongs to @object.
+ */
+GVariant *
+um_realm_common_get_details (UmRealmCommon *object)
+{
+ return UM_REALM_COMMON_GET_IFACE (object)->get_details (object);
+}
+
+/**
+ * um_realm_common_dup_details: (skip)
+ * @object: A #UmRealmCommon.
+ *
+ * Gets a copy of the <link linkend="gdbus-property-org-freedesktop-realmd-Realm.Details">"Details"</link>
D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value
should be freed with g_variant_unref().
+ */
+GVariant *
+um_realm_common_dup_details (UmRealmCommon *object)
+{
+ GVariant *value;
+ g_object_get (G_OBJECT (object), "details", &value, NULL);
+ return value;
+}
+
+/**
+ * um_realm_common_set_details: (skip)
+ * @object: A #UmRealmCommon.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-freedesktop-realmd-Realm.Details">"Details"</link> D-Bus
property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+um_realm_common_set_details (UmRealmCommon *object, GVariant *value)
+{
+ g_object_set (G_OBJECT (object), "details", value, NULL);
+}
+
+/**
+ * um_realm_common_get_login_formats: (skip)
+ * @object: A #UmRealmCommon.
+ *
+ * Gets the value of the <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.LoginFormats">"LoginFormats"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only
safe to use this function on the thread where @object was constructed. Use
um_realm_common_dup_login_formats() if on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the
returned value, it belongs to @object.
+ */
+const gchar *const *
+um_realm_common_get_login_formats (UmRealmCommon *object)
+{
+ return UM_REALM_COMMON_GET_IFACE (object)->get_login_formats (object);
+}
+
+/**
+ * um_realm_common_dup_login_formats: (skip)
+ * @object: A #UmRealmCommon.
+ *
+ * Gets a copy of the <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.LoginFormats">"LoginFormats"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value
should be freed with g_strfreev().
+ */
+gchar **
+um_realm_common_dup_login_formats (UmRealmCommon *object)
+{
+ gchar **value;
+ g_object_get (G_OBJECT (object), "login-formats", &value, NULL);
+ return value;
+}
+
+/**
+ * um_realm_common_set_login_formats: (skip)
+ * @object: A #UmRealmCommon.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-freedesktop-realmd-Realm.LoginFormats">"LoginFormats"</link>
D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+um_realm_common_set_login_formats (UmRealmCommon *object, const gchar *const *value)
+{
+ g_object_set (G_OBJECT (object), "login-formats", value, NULL);
+}
+
+/**
+ * um_realm_common_get_login_policy: (skip)
+ * @object: A #UmRealmCommon.
+ *
+ * Gets the value of the <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.LoginPolicy">"LoginPolicy"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only
safe to use this function on the thread where @object was constructed. Use um_realm_common_dup_login_policy()
if on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the
returned value, it belongs to @object.
+ */
+const gchar *
+um_realm_common_get_login_policy (UmRealmCommon *object)
+{
+ return UM_REALM_COMMON_GET_IFACE (object)->get_login_policy (object);
+}
+
+/**
+ * um_realm_common_dup_login_policy: (skip)
+ * @object: A #UmRealmCommon.
+ *
+ * Gets a copy of the <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.LoginPolicy">"LoginPolicy"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value
should be freed with g_free().
+ */
+gchar *
+um_realm_common_dup_login_policy (UmRealmCommon *object)
+{
+ gchar *value;
+ g_object_get (G_OBJECT (object), "login-policy", &value, NULL);
+ return value;
+}
+
+/**
+ * um_realm_common_set_login_policy: (skip)
+ * @object: A #UmRealmCommon.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-freedesktop-realmd-Realm.LoginPolicy">"LoginPolicy"</link>
D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+um_realm_common_set_login_policy (UmRealmCommon *object, const gchar *value)
+{
+ g_object_set (G_OBJECT (object), "login-policy", value, NULL);
+}
+
+/**
+ * um_realm_common_get_permitted_logins: (skip)
+ * @object: A #UmRealmCommon.
+ *
+ * Gets the value of the <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.PermittedLogins">"PermittedLogins"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only
safe to use this function on the thread where @object was constructed. Use
um_realm_common_dup_permitted_logins() if on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the
returned value, it belongs to @object.
+ */
+const gchar *const *
+um_realm_common_get_permitted_logins (UmRealmCommon *object)
+{
+ return UM_REALM_COMMON_GET_IFACE (object)->get_permitted_logins (object);
+}
+
+/**
+ * um_realm_common_dup_permitted_logins: (skip)
+ * @object: A #UmRealmCommon.
+ *
+ * Gets a copy of the <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.PermittedLogins">"PermittedLogins"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value
should be freed with g_strfreev().
+ */
+gchar **
+um_realm_common_dup_permitted_logins (UmRealmCommon *object)
+{
+ gchar **value;
+ g_object_get (G_OBJECT (object), "permitted-logins", &value, NULL);
+ return value;
+}
+
+/**
+ * um_realm_common_set_permitted_logins: (skip)
+ * @object: A #UmRealmCommon.
+ * @value: The value to set.
+ *
+ * Sets the <link
linkend="gdbus-property-org-freedesktop-realmd-Realm.PermittedLogins">"PermittedLogins"</link> D-Bus property
to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+um_realm_common_set_permitted_logins (UmRealmCommon *object, const gchar *const *value)
+{
+ g_object_set (G_OBJECT (object), "permitted-logins", value, NULL);
+}
+
+/**
+ * um_realm_common_call_deconfigure:
+ * @proxy: A #UmRealmCommonProxy.
+ * @arg_options: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link
linkend="gdbus-method-org-freedesktop-realmd-Realm.Deconfigure">Deconfigure()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_common_call_deconfigure_finish() to get the result of the operation.
+ *
+ * See um_realm_common_call_deconfigure_sync() for the synchronous, blocking version of this method.
+ */
+void
+um_realm_common_call_deconfigure (
+ UmRealmCommon *proxy,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "Deconfigure",
+ g_variant_new ("(@a{sv})",
+ arg_options),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * um_realm_common_call_deconfigure_finish:
+ * @proxy: A #UmRealmCommonProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
um_realm_common_call_deconfigure().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with um_realm_common_call_deconfigure().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+um_realm_common_call_deconfigure_finish (
+ UmRealmCommon *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * um_realm_common_call_deconfigure_sync:
+ * @proxy: A #UmRealmCommonProxy.
+ * @arg_options: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link
linkend="gdbus-method-org-freedesktop-realmd-Realm.Deconfigure">Deconfigure()</link> D-Bus method on @proxy.
The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_common_call_deconfigure() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+um_realm_common_call_deconfigure_sync (
+ UmRealmCommon *proxy,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "Deconfigure",
+ g_variant_new ("(@a{sv})",
+ arg_options),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * um_realm_common_call_change_login_policy:
+ * @proxy: A #UmRealmCommonProxy.
+ * @arg_login_policy: Argument to pass with the method invocation.
+ * @arg_permitted_add: Argument to pass with the method invocation.
+ * @arg_permitted_remove: Argument to pass with the method invocation.
+ * @arg_options: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link
linkend="gdbus-method-org-freedesktop-realmd-Realm.ChangeLoginPolicy">ChangeLoginPolicy()</link> D-Bus method
on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_common_call_change_login_policy_finish() to get the result of the operation.
+ *
+ * See um_realm_common_call_change_login_policy_sync() for the synchronous, blocking version of this method.
+ */
+void
+um_realm_common_call_change_login_policy (
+ UmRealmCommon *proxy,
+ const gchar *arg_login_policy,
+ const gchar *const *arg_permitted_add,
+ const gchar *const *arg_permitted_remove,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "ChangeLoginPolicy",
+ g_variant_new ("(s^as^as a{sv})",
+ arg_login_policy,
+ arg_permitted_add,
+ arg_permitted_remove,
+ arg_options),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * um_realm_common_call_change_login_policy_finish:
+ * @proxy: A #UmRealmCommonProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
um_realm_common_call_change_login_policy().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with um_realm_common_call_change_login_policy().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+um_realm_common_call_change_login_policy_finish (
+ UmRealmCommon *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * um_realm_common_call_change_login_policy_sync:
+ * @proxy: A #UmRealmCommonProxy.
+ * @arg_login_policy: Argument to pass with the method invocation.
+ * @arg_permitted_add: Argument to pass with the method invocation.
+ * @arg_permitted_remove: Argument to pass with the method invocation.
+ * @arg_options: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link
linkend="gdbus-method-org-freedesktop-realmd-Realm.ChangeLoginPolicy">ChangeLoginPolicy()</link> D-Bus method
on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_common_call_change_login_policy() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+um_realm_common_call_change_login_policy_sync (
+ UmRealmCommon *proxy,
+ const gchar *arg_login_policy,
+ const gchar *const *arg_permitted_add,
+ const gchar *const *arg_permitted_remove,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "ChangeLoginPolicy",
+ g_variant_new ("(s^as^as a{sv})",
+ arg_login_policy,
+ arg_permitted_add,
+ arg_permitted_remove,
+ arg_options),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * um_realm_common_complete_deconfigure:
+ * @object: A #UmRealmCommon.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link
linkend="gdbus-method-org-freedesktop-realmd-Realm.Deconfigure">Deconfigure()</link> D-Bus method. If you
instead want to finish handling an invocation by returning an error, use
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+um_realm_common_complete_deconfigure (
+ UmRealmCommon *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * um_realm_common_complete_change_login_policy:
+ * @object: A #UmRealmCommon.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link
linkend="gdbus-method-org-freedesktop-realmd-Realm.ChangeLoginPolicy">ChangeLoginPolicy()</link> D-Bus
method. If you instead want to finish handling an invocation by returning an error, use
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+um_realm_common_complete_change_login_policy (
+ UmRealmCommon *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * UmRealmCommonProxy:
+ *
+ * The #UmRealmCommonProxy structure contains only private data and should only be accessed using the
provided API.
+ */
+
+/**
+ * UmRealmCommonProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #UmRealmCommonProxy.
+ */
+
+struct _UmRealmCommonProxyPrivate
+{
+ GData *qdata;
+};
+
+static void um_realm_common_proxy_iface_init (UmRealmCommonIface *iface);
+
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (UmRealmCommonProxy, um_realm_common_proxy, G_TYPE_DBUS_PROXY,
+ G_ADD_PRIVATE (UmRealmCommonProxy)
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_COMMON, um_realm_common_proxy_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (UmRealmCommonProxy, um_realm_common_proxy, G_TYPE_DBUS_PROXY,
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_COMMON, um_realm_common_proxy_iface_init));
+
+#endif
+static void
+um_realm_common_proxy_finalize (GObject *object)
+{
+ UmRealmCommonProxy *proxy = UM_REALM_COMMON_PROXY (object);
+ g_datalist_clear (&proxy->priv->qdata);
+ G_OBJECT_CLASS (um_realm_common_proxy_parent_class)->finalize (object);
+}
+
+static void
+um_realm_common_proxy_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+ const _ExtendedGDBusPropertyInfo *info;
+ GVariant *variant;
+ g_assert (prop_id != 0 && prop_id - 1 < 7);
+ info = _um_realm_common_property_info_pointers[prop_id - 1];
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name);
+ if (info->use_gvariant)
+ {
+ g_value_set_variant (value, variant);
+ }
+ else
+ {
+ if (variant != NULL)
+ g_dbus_gvariant_to_gvalue (variant, value);
+ }
+ if (variant != NULL)
+ g_variant_unref (variant);
+}
+
+static void
+um_realm_common_proxy_set_property_cb (GDBusProxy *proxy,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ const _ExtendedGDBusPropertyInfo *info = user_data;
+ GError *error;
+ GVariant *_ret;
+ error = NULL;
+ _ret = g_dbus_proxy_call_finish (proxy, res, &error);
+ if (!_ret)
+ {
+ g_warning ("Error setting property '%s' on interface org.freedesktop.realmd.Realm: %s (%s, %d)",
+ info->parent_struct.name,
+ error->message, g_quark_to_string (error->domain), error->code);
+ g_error_free (error);
+ }
+ else
+ {
+ g_variant_unref (_ret);
+ }
+}
+
+static void
+um_realm_common_proxy_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+ const _ExtendedGDBusPropertyInfo *info;
+ GVariant *variant;
+ g_assert (prop_id != 0 && prop_id - 1 < 7);
+ info = _um_realm_common_property_info_pointers[prop_id - 1];
+ variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature));
+ g_dbus_proxy_call (G_DBUS_PROXY (object),
+ "org.freedesktop.DBus.Properties.Set",
+ g_variant_new ("(ssv)", "org.freedesktop.realmd.Realm", info->parent_struct.name, variant),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL, (GAsyncReadyCallback) um_realm_common_proxy_set_property_cb, (GDBusPropertyInfo *)
&info->parent_struct);
+ g_variant_unref (variant);
+}
+
+static void
+um_realm_common_proxy_g_signal (GDBusProxy *proxy,
+ const gchar *sender_name G_GNUC_UNUSED,
+ const gchar *signal_name,
+ GVariant *parameters)
+{
+ _ExtendedGDBusSignalInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint n;
+ guint signal_id;
+ info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *)
&_um_realm_common_interface_info.parent_struct, signal_name);
+ if (info == NULL)
+ return;
+ num_params = g_variant_n_children (parameters);
+ paramv = g_new0 (GValue, num_params + 1);
+ g_value_init (¶mv[0], UM_REALM_TYPE_COMMON);
+ g_value_set_object (¶mv[0], proxy);
+ g_variant_iter_init (&iter, parameters);
+ n = 1;
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (¶mv[n], G_TYPE_VARIANT);
+ g_value_set_variant (¶mv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, ¶mv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, UM_REALM_TYPE_COMMON);
+ g_signal_emitv (paramv, signal_id, 0, NULL);
+ for (n = 0; n < num_params + 1; n++)
+ g_value_unset (¶mv[n]);
+ g_free (paramv);
+}
+
+static void
+um_realm_common_proxy_g_properties_changed (GDBusProxy *_proxy,
+ GVariant *changed_properties,
+ const gchar *const *invalidated_properties)
+{
+ UmRealmCommonProxy *proxy = UM_REALM_COMMON_PROXY (_proxy);
+ guint n;
+ const gchar *key;
+ GVariantIter *iter;
+ _ExtendedGDBusPropertyInfo *info;
+ g_variant_get (changed_properties, "a{sv}", &iter);
+ while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_common_interface_info.parent_struct, key);
+ g_datalist_remove_data (&proxy->priv->qdata, key);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+ g_variant_iter_free (iter);
+ for (n = 0; invalidated_properties[n] != NULL; n++)
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_common_interface_info.parent_struct, invalidated_properties[n]);
+ g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+}
+
+static const gchar *
+um_realm_common_proxy_get_name (UmRealmCommon *object)
+{
+ UmRealmCommonProxy *proxy = UM_REALM_COMMON_PROXY (object);
+ GVariant *variant;
+ const gchar *value = NULL;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "Name");
+ if (variant != NULL)
+ {
+ value = g_variant_get_string (variant, NULL);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static const gchar *
+um_realm_common_proxy_get_configured (UmRealmCommon *object)
+{
+ UmRealmCommonProxy *proxy = UM_REALM_COMMON_PROXY (object);
+ GVariant *variant;
+ const gchar *value = NULL;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "Configured");
+ if (variant != NULL)
+ {
+ value = g_variant_get_string (variant, NULL);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static const gchar *const *
+um_realm_common_proxy_get_supported_interfaces (UmRealmCommon *object)
+{
+ UmRealmCommonProxy *proxy = UM_REALM_COMMON_PROXY (object);
+ GVariant *variant;
+ const gchar *const *value = NULL;
+ value = g_datalist_get_data (&proxy->priv->qdata, "SupportedInterfaces");
+ if (value != NULL)
+ return value;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "SupportedInterfaces");
+ if (variant != NULL)
+ {
+ value = g_variant_get_strv (variant, NULL);
+ g_datalist_set_data_full (&proxy->priv->qdata, "SupportedInterfaces", (gpointer) value, g_free);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static GVariant *
+um_realm_common_proxy_get_details (UmRealmCommon *object)
+{
+ UmRealmCommonProxy *proxy = UM_REALM_COMMON_PROXY (object);
+ GVariant *variant;
+ GVariant *value = NULL;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "Details");
+ value = variant;
+ if (variant != NULL)
+ g_variant_unref (variant);
+ return value;
+}
+
+static const gchar *const *
+um_realm_common_proxy_get_login_formats (UmRealmCommon *object)
+{
+ UmRealmCommonProxy *proxy = UM_REALM_COMMON_PROXY (object);
+ GVariant *variant;
+ const gchar *const *value = NULL;
+ value = g_datalist_get_data (&proxy->priv->qdata, "LoginFormats");
+ if (value != NULL)
+ return value;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "LoginFormats");
+ if (variant != NULL)
+ {
+ value = g_variant_get_strv (variant, NULL);
+ g_datalist_set_data_full (&proxy->priv->qdata, "LoginFormats", (gpointer) value, g_free);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static const gchar *
+um_realm_common_proxy_get_login_policy (UmRealmCommon *object)
+{
+ UmRealmCommonProxy *proxy = UM_REALM_COMMON_PROXY (object);
+ GVariant *variant;
+ const gchar *value = NULL;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "LoginPolicy");
+ if (variant != NULL)
+ {
+ value = g_variant_get_string (variant, NULL);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static const gchar *const *
+um_realm_common_proxy_get_permitted_logins (UmRealmCommon *object)
+{
+ UmRealmCommonProxy *proxy = UM_REALM_COMMON_PROXY (object);
+ GVariant *variant;
+ const gchar *const *value = NULL;
+ value = g_datalist_get_data (&proxy->priv->qdata, "PermittedLogins");
+ if (value != NULL)
+ return value;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "PermittedLogins");
+ if (variant != NULL)
+ {
+ value = g_variant_get_strv (variant, NULL);
+ g_datalist_set_data_full (&proxy->priv->qdata, "PermittedLogins", (gpointer) value, g_free);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static void
+um_realm_common_proxy_init (UmRealmCommonProxy *proxy)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+ proxy->priv = um_realm_common_proxy_get_instance_private (proxy);
+#else
+ proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, UM_REALM_TYPE_COMMON_PROXY, UmRealmCommonProxyPrivate);
+#endif
+
+ g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), um_realm_common_interface_info ());
+}
+
+static void
+um_realm_common_proxy_class_init (UmRealmCommonProxyClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusProxyClass *proxy_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = um_realm_common_proxy_finalize;
+ gobject_class->get_property = um_realm_common_proxy_get_property;
+ gobject_class->set_property = um_realm_common_proxy_set_property;
+
+ proxy_class = G_DBUS_PROXY_CLASS (klass);
+ proxy_class->g_signal = um_realm_common_proxy_g_signal;
+ proxy_class->g_properties_changed = um_realm_common_proxy_g_properties_changed;
+
+ um_realm_common_override_properties (gobject_class, 1);
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+ g_type_class_add_private (klass, sizeof (UmRealmCommonProxyPrivate));
+#endif
+}
+
+static void
+um_realm_common_proxy_iface_init (UmRealmCommonIface *iface)
+{
+ iface->get_name = um_realm_common_proxy_get_name;
+ iface->get_configured = um_realm_common_proxy_get_configured;
+ iface->get_supported_interfaces = um_realm_common_proxy_get_supported_interfaces;
+ iface->get_details = um_realm_common_proxy_get_details;
+ iface->get_login_formats = um_realm_common_proxy_get_login_formats;
+ iface->get_login_policy = um_realm_common_proxy_get_login_policy;
+ iface->get_permitted_logins = um_realm_common_proxy_get_permitted_logins;
+}
+
+/**
+ * um_realm_common_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Realm.top_of_page">org.freedesktop.realmd.Realm</link>. See
g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_common_proxy_new_finish() to get the result of the operation.
+ *
+ * See um_realm_common_proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+um_realm_common_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (UM_REALM_TYPE_COMMON_PROXY, G_PRIORITY_DEFAULT, cancellable, callback,
user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path,
"g-interface-name", "org.freedesktop.realmd.Realm", NULL);
+}
+
+/**
+ * um_realm_common_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to um_realm_common_proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with um_realm_common_proxy_new().
+ *
+ * Returns: (transfer full) (type UmRealmCommonProxy): The constructed proxy object or %NULL if @error is
set.
+ */
+UmRealmCommon *
+um_realm_common_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return UM_REALM_COMMON (ret);
+ else
+ return NULL;
+}
+
+/**
+ * um_realm_common_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Realm.top_of_page">org.freedesktop.realmd.Realm</link>. See
g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_common_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type UmRealmCommonProxy): The constructed proxy object or %NULL if @error is
set.
+ */
+UmRealmCommon *
+um_realm_common_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (UM_REALM_TYPE_COMMON_PROXY, cancellable, error, "g-flags", flags, "g-name", name,
"g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.freedesktop.realmd.Realm",
NULL);
+ if (ret != NULL)
+ return UM_REALM_COMMON (ret);
+ else
+ return NULL;
+}
+
+
+/**
+ * um_realm_common_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like um_realm_common_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_common_proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See um_realm_common_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+um_realm_common_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (UM_REALM_TYPE_COMMON_PROXY, G_PRIORITY_DEFAULT, cancellable, callback,
user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path,
"g-interface-name", "org.freedesktop.realmd.Realm", NULL);
+}
+
+/**
+ * um_realm_common_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
um_realm_common_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with um_realm_common_proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type UmRealmCommonProxy): The constructed proxy object or %NULL if @error is
set.
+ */
+UmRealmCommon *
+um_realm_common_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return UM_REALM_COMMON (ret);
+ else
+ return NULL;
+}
+
+/**
+ * um_realm_common_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like um_realm_common_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_common_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type UmRealmCommonProxy): The constructed proxy object or %NULL if @error is
set.
+ */
+UmRealmCommon *
+um_realm_common_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (UM_REALM_TYPE_COMMON_PROXY, cancellable, error, "g-flags", flags, "g-name", name,
"g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.freedesktop.realmd.Realm",
NULL);
+ if (ret != NULL)
+ return UM_REALM_COMMON (ret);
+ else
+ return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * UmRealmCommonSkeleton:
+ *
+ * The #UmRealmCommonSkeleton structure contains only private data and should only be accessed using the
provided API.
+ */
+
+/**
+ * UmRealmCommonSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #UmRealmCommonSkeleton.
+ */
+
+struct _UmRealmCommonSkeletonPrivate
+{
+ GValue *properties;
+ GList *changed_properties;
+ GSource *changed_properties_idle_source;
+ GMainContext *context;
+ GMutex lock;
+};
+
+static void
+_um_realm_common_skeleton_handle_method_call (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name,
+ const gchar *method_name,
+ GVariant *parameters,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (user_data);
+ _ExtendedGDBusMethodInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint num_extra;
+ guint n;
+ guint signal_id;
+ GValue return_value = G_VALUE_INIT;
+ info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+ g_assert (info != NULL);
+ num_params = g_variant_n_children (parameters);
+ num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra);
+ n = 0;
+ g_value_init (¶mv[n], UM_REALM_TYPE_COMMON);
+ g_value_set_object (¶mv[n++], skeleton);
+ g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+ g_value_set_object (¶mv[n++], invocation);
+ if (info->pass_fdlist)
+ {
+#ifdef G_OS_UNIX
+ g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST);
+ g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list
(g_dbus_method_invocation_get_message (invocation)));
+#else
+ g_assert_not_reached ();
+#endif
+ }
+ g_variant_iter_init (&iter, parameters);
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (¶mv[n], G_TYPE_VARIANT);
+ g_value_set_variant (¶mv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, ¶mv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, UM_REALM_TYPE_COMMON);
+ g_value_init (&return_value, G_TYPE_BOOLEAN);
+ g_signal_emitv (paramv, signal_id, 0, &return_value);
+ if (!g_value_get_boolean (&return_value))
+ g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s
is not implemented on interface %s", method_name, interface_name);
+ g_value_unset (&return_value);
+ for (n = 0; n < num_params + num_extra; n++)
+ g_value_unset (¶mv[n]);
+ g_free (paramv);
+}
+
+static GVariant *
+_um_realm_common_skeleton_handle_get_property (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name G_GNUC_UNUSED,
+ const gchar *property_name,
+ GError **error,
+ gpointer user_data)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (user_data);
+ GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ GVariant *ret;
+ ret = NULL;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_common_interface_info.parent_struct, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s",
property_name);
+ }
+ else
+ {
+ g_value_init (&value, pspec->value_type);
+ g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+ g_value_unset (&value);
+ }
+ return ret;
+}
+
+static gboolean
+_um_realm_common_skeleton_handle_set_property (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name G_GNUC_UNUSED,
+ const gchar *property_name,
+ GVariant *variant,
+ GError **error,
+ gpointer user_data)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (user_data);
+ GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ gboolean ret;
+ ret = FALSE;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_common_interface_info.parent_struct, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s",
property_name);
+ }
+ else
+ {
+ if (info->use_gvariant)
+ g_value_set_variant (&value, variant);
+ else
+ g_dbus_gvariant_to_gvalue (variant, &value);
+ g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ g_value_unset (&value);
+ ret = TRUE;
+ }
+ return ret;
+}
+
+static const GDBusInterfaceVTable _um_realm_common_skeleton_vtable =
+{
+ _um_realm_common_skeleton_handle_method_call,
+ _um_realm_common_skeleton_handle_get_property,
+ _um_realm_common_skeleton_handle_set_property,
+ {NULL}
+};
+
+static GDBusInterfaceInfo *
+um_realm_common_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+ return um_realm_common_interface_info ();
+}
+
+static GDBusInterfaceVTable *
+um_realm_common_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+ return (GDBusInterfaceVTable *) &_um_realm_common_skeleton_vtable;
+}
+
+static GVariant *
+um_realm_common_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (_skeleton);
+
+ GVariantBuilder builder;
+ guint n;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ if (_um_realm_common_interface_info.parent_struct.properties == NULL)
+ goto out;
+ for (n = 0; _um_realm_common_interface_info.parent_struct.properties[n] != NULL; n++)
+ {
+ GDBusPropertyInfo *info = _um_realm_common_interface_info.parent_struct.properties[n];
+ if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+ {
+ GVariant *value;
+ value = _um_realm_common_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection
(G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path
(G_DBUS_INTERFACE_SKELETON (skeleton)), "org.freedesktop.realmd.Realm", info->name, NULL, skeleton);
+ if (value != NULL)
+ {
+ g_variant_take_ref (value);
+ g_variant_builder_add (&builder, "{sv}", info->name, value);
+ g_variant_unref (value);
+ }
+ }
+ }
+out:
+ return g_variant_builder_end (&builder);
+}
+
+static gboolean _um_realm_common_emit_changed (gpointer user_data);
+
+static void
+um_realm_common_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (_skeleton);
+ gboolean emit_changed = FALSE;
+
+ g_mutex_lock (&skeleton->priv->lock);
+ if (skeleton->priv->changed_properties_idle_source != NULL)
+ {
+ g_source_destroy (skeleton->priv->changed_properties_idle_source);
+ skeleton->priv->changed_properties_idle_source = NULL;
+ emit_changed = TRUE;
+ }
+ g_mutex_unlock (&skeleton->priv->lock);
+
+ if (emit_changed)
+ _um_realm_common_emit_changed (skeleton);
+}
+
+static void um_realm_common_skeleton_iface_init (UmRealmCommonIface *iface);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (UmRealmCommonSkeleton, um_realm_common_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_ADD_PRIVATE (UmRealmCommonSkeleton)
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_COMMON, um_realm_common_skeleton_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (UmRealmCommonSkeleton, um_realm_common_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_COMMON, um_realm_common_skeleton_iface_init));
+
+#endif
+static void
+um_realm_common_skeleton_finalize (GObject *object)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (object);
+ guint n;
+ for (n = 0; n < 7; n++)
+ g_value_unset (&skeleton->priv->properties[n]);
+ g_free (skeleton->priv->properties);
+ g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+ if (skeleton->priv->changed_properties_idle_source != NULL)
+ g_source_destroy (skeleton->priv->changed_properties_idle_source);
+ g_main_context_unref (skeleton->priv->context);
+ g_mutex_clear (&skeleton->priv->lock);
+ G_OBJECT_CLASS (um_realm_common_skeleton_parent_class)->finalize (object);
+}
+
+static void
+um_realm_common_skeleton_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (object);
+ g_assert (prop_id != 0 && prop_id - 1 < 7);
+ g_mutex_lock (&skeleton->priv->lock);
+ g_value_copy (&skeleton->priv->properties[prop_id - 1], value);
+ g_mutex_unlock (&skeleton->priv->lock);
+}
+
+static gboolean
+_um_realm_common_emit_changed (gpointer user_data)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (user_data);
+ GList *l;
+ GVariantBuilder builder;
+ GVariantBuilder invalidated_builder;
+ guint num_changes;
+
+ g_mutex_lock (&skeleton->priv->lock);
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as"));
+ for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next)
+ {
+ ChangedProperty *cp = l->data;
+ GVariant *variant;
+ const GValue *cur_value;
+
+ cur_value = &skeleton->priv->properties[cp->prop_id - 1];
+ if (!_g_value_equal (cur_value, &cp->orig_value))
+ {
+ variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE
(cp->info->parent_struct.signature));
+ g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant);
+ g_variant_unref (variant);
+ num_changes++;
+ }
+ }
+ if (num_changes > 0)
+ {
+ GList *connections, *ll;
+ GVariant *signal_variant;
+ signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.freedesktop.realmd.Realm",
+ &builder, &invalidated_builder));
+ connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+ for (ll = connections; ll != NULL; ll = ll->next)
+ {
+ GDBusConnection *connection = ll->data;
+
+ g_dbus_connection_emit_signal (connection,
+ NULL, g_dbus_interface_skeleton_get_object_path
(G_DBUS_INTERFACE_SKELETON (skeleton)),
+ "org.freedesktop.DBus.Properties",
+ "PropertiesChanged",
+ signal_variant,
+ NULL);
+ }
+ g_variant_unref (signal_variant);
+ g_list_free_full (connections, g_object_unref);
+ }
+ else
+ {
+ g_variant_builder_clear (&builder);
+ g_variant_builder_clear (&invalidated_builder);
+ }
+ g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+ skeleton->priv->changed_properties = NULL;
+ skeleton->priv->changed_properties_idle_source = NULL;
+ g_mutex_unlock (&skeleton->priv->lock);
+ return FALSE;
+}
+
+static void
+_um_realm_common_schedule_emit_changed (UmRealmCommonSkeleton *skeleton, const _ExtendedGDBusPropertyInfo
*info, guint prop_id, const GValue *orig_value)
+{
+ ChangedProperty *cp;
+ GList *l;
+ cp = NULL;
+ for (l = skeleton->priv->changed_properties; l != NULL; l = l->next)
+ {
+ ChangedProperty *i_cp = l->data;
+ if (i_cp->info == info)
+ {
+ cp = i_cp;
+ break;
+ }
+ }
+ if (cp == NULL)
+ {
+ cp = g_new0 (ChangedProperty, 1);
+ cp->prop_id = prop_id;
+ cp->info = info;
+ skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp);
+ g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value));
+ g_value_copy (orig_value, &cp->orig_value);
+ }
+}
+
+static void
+um_realm_common_skeleton_notify (GObject *object,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (object);
+ g_mutex_lock (&skeleton->priv->lock);
+ if (skeleton->priv->changed_properties != NULL &&
+ skeleton->priv->changed_properties_idle_source == NULL)
+ {
+ skeleton->priv->changed_properties_idle_source = g_idle_source_new ();
+ g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT);
+ g_source_set_callback (skeleton->priv->changed_properties_idle_source, _um_realm_common_emit_changed,
g_object_ref (skeleton), (GDestroyNotify) g_object_unref);
+ g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context);
+ g_source_unref (skeleton->priv->changed_properties_idle_source);
+ }
+ g_mutex_unlock (&skeleton->priv->lock);
+}
+
+static void
+um_realm_common_skeleton_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (object);
+ g_assert (prop_id != 0 && prop_id - 1 < 7);
+ g_mutex_lock (&skeleton->priv->lock);
+ g_object_freeze_notify (object);
+ if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1]))
+ {
+ if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL)
+ _um_realm_common_schedule_emit_changed (skeleton, _um_realm_common_property_info_pointers[prop_id -
1], prop_id, &skeleton->priv->properties[prop_id - 1]);
+ g_value_copy (value, &skeleton->priv->properties[prop_id - 1]);
+ g_object_notify_by_pspec (object, pspec);
+ }
+ g_mutex_unlock (&skeleton->priv->lock);
+ g_object_thaw_notify (object);
+}
+
+static void
+um_realm_common_skeleton_init (UmRealmCommonSkeleton *skeleton)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+ skeleton->priv = um_realm_common_skeleton_get_instance_private (skeleton);
+#else
+ skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, UM_REALM_TYPE_COMMON_SKELETON,
UmRealmCommonSkeletonPrivate);
+#endif
+
+ g_mutex_init (&skeleton->priv->lock);
+ skeleton->priv->context = g_main_context_ref_thread_default ();
+ skeleton->priv->properties = g_new0 (GValue, 7);
+ g_value_init (&skeleton->priv->properties[0], G_TYPE_STRING);
+ g_value_init (&skeleton->priv->properties[1], G_TYPE_STRING);
+ g_value_init (&skeleton->priv->properties[2], G_TYPE_STRV);
+ g_value_init (&skeleton->priv->properties[3], G_TYPE_VARIANT);
+ g_value_init (&skeleton->priv->properties[4], G_TYPE_STRV);
+ g_value_init (&skeleton->priv->properties[5], G_TYPE_STRING);
+ g_value_init (&skeleton->priv->properties[6], G_TYPE_STRV);
+}
+
+static const gchar *
+um_realm_common_skeleton_get_name (UmRealmCommon *object)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (object);
+ const gchar *value;
+ g_mutex_lock (&skeleton->priv->lock);
+ value = g_value_get_string (&(skeleton->priv->properties[0]));
+ g_mutex_unlock (&skeleton->priv->lock);
+ return value;
+}
+
+static const gchar *
+um_realm_common_skeleton_get_configured (UmRealmCommon *object)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (object);
+ const gchar *value;
+ g_mutex_lock (&skeleton->priv->lock);
+ value = g_value_get_string (&(skeleton->priv->properties[1]));
+ g_mutex_unlock (&skeleton->priv->lock);
+ return value;
+}
+
+static const gchar *const *
+um_realm_common_skeleton_get_supported_interfaces (UmRealmCommon *object)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (object);
+ const gchar *const *value;
+ g_mutex_lock (&skeleton->priv->lock);
+ value = g_value_get_boxed (&(skeleton->priv->properties[2]));
+ g_mutex_unlock (&skeleton->priv->lock);
+ return value;
+}
+
+static GVariant *
+um_realm_common_skeleton_get_details (UmRealmCommon *object)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (object);
+ GVariant *value;
+ g_mutex_lock (&skeleton->priv->lock);
+ value = g_value_get_variant (&(skeleton->priv->properties[3]));
+ g_mutex_unlock (&skeleton->priv->lock);
+ return value;
+}
+
+static const gchar *const *
+um_realm_common_skeleton_get_login_formats (UmRealmCommon *object)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (object);
+ const gchar *const *value;
+ g_mutex_lock (&skeleton->priv->lock);
+ value = g_value_get_boxed (&(skeleton->priv->properties[4]));
+ g_mutex_unlock (&skeleton->priv->lock);
+ return value;
+}
+
+static const gchar *
+um_realm_common_skeleton_get_login_policy (UmRealmCommon *object)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (object);
+ const gchar *value;
+ g_mutex_lock (&skeleton->priv->lock);
+ value = g_value_get_string (&(skeleton->priv->properties[5]));
+ g_mutex_unlock (&skeleton->priv->lock);
+ return value;
+}
+
+static const gchar *const *
+um_realm_common_skeleton_get_permitted_logins (UmRealmCommon *object)
+{
+ UmRealmCommonSkeleton *skeleton = UM_REALM_COMMON_SKELETON (object);
+ const gchar *const *value;
+ g_mutex_lock (&skeleton->priv->lock);
+ value = g_value_get_boxed (&(skeleton->priv->properties[6]));
+ g_mutex_unlock (&skeleton->priv->lock);
+ return value;
+}
+
+static void
+um_realm_common_skeleton_class_init (UmRealmCommonSkeletonClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusInterfaceSkeletonClass *skeleton_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = um_realm_common_skeleton_finalize;
+ gobject_class->get_property = um_realm_common_skeleton_get_property;
+ gobject_class->set_property = um_realm_common_skeleton_set_property;
+ gobject_class->notify = um_realm_common_skeleton_notify;
+
+
+ um_realm_common_override_properties (gobject_class, 1);
+
+ skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+ skeleton_class->get_info = um_realm_common_skeleton_dbus_interface_get_info;
+ skeleton_class->get_properties = um_realm_common_skeleton_dbus_interface_get_properties;
+ skeleton_class->flush = um_realm_common_skeleton_dbus_interface_flush;
+ skeleton_class->get_vtable = um_realm_common_skeleton_dbus_interface_get_vtable;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+ g_type_class_add_private (klass, sizeof (UmRealmCommonSkeletonPrivate));
+#endif
+}
+
+static void
+um_realm_common_skeleton_iface_init (UmRealmCommonIface *iface)
+{
+ iface->get_name = um_realm_common_skeleton_get_name;
+ iface->get_configured = um_realm_common_skeleton_get_configured;
+ iface->get_supported_interfaces = um_realm_common_skeleton_get_supported_interfaces;
+ iface->get_details = um_realm_common_skeleton_get_details;
+ iface->get_login_formats = um_realm_common_skeleton_get_login_formats;
+ iface->get_login_policy = um_realm_common_skeleton_get_login_policy;
+ iface->get_permitted_logins = um_realm_common_skeleton_get_permitted_logins;
+}
+
+/**
+ * um_realm_common_skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Realm.top_of_page">org.freedesktop.realmd.Realm</link>.
+ *
+ * Returns: (transfer full) (type UmRealmCommonSkeleton): The skeleton object.
+ */
+UmRealmCommon *
+um_realm_common_skeleton_new (void)
+{
+ return UM_REALM_COMMON (g_object_new (UM_REALM_TYPE_COMMON_SKELETON, NULL));
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.freedesktop.realmd.Kerberos
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:UmRealmKerberos
+ * @title: UmRealmKerberos
+ * @short_description: Generated C code for the org.freedesktop.realmd.Kerberos D-Bus interface
+ *
+ * This section contains code for working with the <link
linkend="gdbus-interface-org-freedesktop-realmd-Kerberos.top_of_page">org.freedesktop.realmd.Kerberos</link>
D-Bus interface in C.
+ */
+
+/* ---- Introspection data for org.freedesktop.realmd.Kerberos ---- */
+
+static const _ExtendedGDBusPropertyInfo _um_realm_kerberos_property_info_realm_name =
+{
+ {
+ -1,
+ (gchar *) "RealmName",
+ (gchar *) "s",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "realm-name",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _um_realm_kerberos_property_info_domain_name =
+{
+ {
+ -1,
+ (gchar *) "DomainName",
+ (gchar *) "s",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "domain-name",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo * const _um_realm_kerberos_property_info_pointers[] =
+{
+ &_um_realm_kerberos_property_info_realm_name,
+ &_um_realm_kerberos_property_info_domain_name,
+ NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _um_realm_kerberos_interface_info =
+{
+ {
+ -1,
+ (gchar *) "org.freedesktop.realmd.Kerberos",
+ NULL,
+ NULL,
+ (GDBusPropertyInfo **) &_um_realm_kerberos_property_info_pointers,
+ NULL
+ },
+ "kerberos",
+};
+
+
+/**
+ * um_realm_kerberos_interface_info:
+ *
+ * Gets a machine-readable description of the <link
linkend="gdbus-interface-org-freedesktop-realmd-Kerberos.top_of_page">org.freedesktop.realmd.Kerberos</link>
D-Bus interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+um_realm_kerberos_interface_info (void)
+{
+ return (GDBusInterfaceInfo *) &_um_realm_kerberos_interface_info.parent_struct;
+}
+
+/**
+ * um_realm_kerberos_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #UmRealmKerberos interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+um_realm_kerberos_override_properties (GObjectClass *klass, guint property_id_begin)
+{
+ g_object_class_override_property (klass, property_id_begin++, "realm-name");
+ g_object_class_override_property (klass, property_id_begin++, "domain-name");
+ return property_id_begin - 1;
+}
+
+
+
+/**
+ * UmRealmKerberos:
+ *
+ * Abstract interface type for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Kerberos.top_of_page">org.freedesktop.realmd.Kerberos</link>.
+ */
+
+/**
+ * UmRealmKerberosIface:
+ * @parent_iface: The parent interface.
+ * @get_domain_name: Getter for the #UmRealmKerberos:domain-name property.
+ * @get_realm_name: Getter for the #UmRealmKerberos:realm-name property.
+ *
+ * Virtual table for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Kerberos.top_of_page">org.freedesktop.realmd.Kerberos</link>.
+ */
+
+typedef UmRealmKerberosIface UmRealmKerberosInterface;
+G_DEFINE_INTERFACE (UmRealmKerberos, um_realm_kerberos, G_TYPE_OBJECT);
+
+static void
+um_realm_kerberos_default_init (UmRealmKerberosIface *iface)
+{
+ /* GObject properties for D-Bus properties: */
+ /**
+ * UmRealmKerberos:realm-name:
+ *
+ * Represents the D-Bus property <link
linkend="gdbus-property-org-freedesktop-realmd-Kerberos.RealmName">"RealmName"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to
read from it on both the client- and service-side. It is only meaningful, however, to write to it on the
service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_string ("realm-name", "RealmName", "RealmName", NULL, G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
+ /**
+ * UmRealmKerberos:domain-name:
+ *
+ * Represents the D-Bus property <link
linkend="gdbus-property-org-freedesktop-realmd-Kerberos.DomainName">"DomainName"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to
read from it on both the client- and service-side. It is only meaningful, however, to write to it on the
service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_string ("domain-name", "DomainName", "DomainName", NULL, G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
+}
+
+/**
+ * um_realm_kerberos_get_realm_name: (skip)
+ * @object: A #UmRealmKerberos.
+ *
+ * Gets the value of the <link
linkend="gdbus-property-org-freedesktop-realmd-Kerberos.RealmName">"RealmName"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only
safe to use this function on the thread where @object was constructed. Use um_realm_kerberos_dup_realm_name()
if on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the
returned value, it belongs to @object.
+ */
+const gchar *
+um_realm_kerberos_get_realm_name (UmRealmKerberos *object)
+{
+ return UM_REALM_KERBEROS_GET_IFACE (object)->get_realm_name (object);
+}
+
+/**
+ * um_realm_kerberos_dup_realm_name: (skip)
+ * @object: A #UmRealmKerberos.
+ *
+ * Gets a copy of the <link
linkend="gdbus-property-org-freedesktop-realmd-Kerberos.RealmName">"RealmName"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value
should be freed with g_free().
+ */
+gchar *
+um_realm_kerberos_dup_realm_name (UmRealmKerberos *object)
+{
+ gchar *value;
+ g_object_get (G_OBJECT (object), "realm-name", &value, NULL);
+ return value;
+}
+
+/**
+ * um_realm_kerberos_set_realm_name: (skip)
+ * @object: A #UmRealmKerberos.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-freedesktop-realmd-Kerberos.RealmName">"RealmName"</link>
D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+um_realm_kerberos_set_realm_name (UmRealmKerberos *object, const gchar *value)
+{
+ g_object_set (G_OBJECT (object), "realm-name", value, NULL);
+}
+
+/**
+ * um_realm_kerberos_get_domain_name: (skip)
+ * @object: A #UmRealmKerberos.
+ *
+ * Gets the value of the <link
linkend="gdbus-property-org-freedesktop-realmd-Kerberos.DomainName">"DomainName"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only
safe to use this function on the thread where @object was constructed. Use
um_realm_kerberos_dup_domain_name() if on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the
returned value, it belongs to @object.
+ */
+const gchar *
+um_realm_kerberos_get_domain_name (UmRealmKerberos *object)
+{
+ return UM_REALM_KERBEROS_GET_IFACE (object)->get_domain_name (object);
+}
+
+/**
+ * um_realm_kerberos_dup_domain_name: (skip)
+ * @object: A #UmRealmKerberos.
+ *
+ * Gets a copy of the <link
linkend="gdbus-property-org-freedesktop-realmd-Kerberos.DomainName">"DomainName"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value
should be freed with g_free().
+ */
+gchar *
+um_realm_kerberos_dup_domain_name (UmRealmKerberos *object)
+{
+ gchar *value;
+ g_object_get (G_OBJECT (object), "domain-name", &value, NULL);
+ return value;
+}
+
+/**
+ * um_realm_kerberos_set_domain_name: (skip)
+ * @object: A #UmRealmKerberos.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-freedesktop-realmd-Kerberos.DomainName">"DomainName"</link>
D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+um_realm_kerberos_set_domain_name (UmRealmKerberos *object, const gchar *value)
+{
+ g_object_set (G_OBJECT (object), "domain-name", value, NULL);
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * UmRealmKerberosProxy:
+ *
+ * The #UmRealmKerberosProxy structure contains only private data and should only be accessed using the
provided API.
+ */
+
+/**
+ * UmRealmKerberosProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #UmRealmKerberosProxy.
+ */
+
+struct _UmRealmKerberosProxyPrivate
+{
+ GData *qdata;
+};
+
+static void um_realm_kerberos_proxy_iface_init (UmRealmKerberosIface *iface);
+
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (UmRealmKerberosProxy, um_realm_kerberos_proxy, G_TYPE_DBUS_PROXY,
+ G_ADD_PRIVATE (UmRealmKerberosProxy)
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_KERBEROS, um_realm_kerberos_proxy_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (UmRealmKerberosProxy, um_realm_kerberos_proxy, G_TYPE_DBUS_PROXY,
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_KERBEROS, um_realm_kerberos_proxy_iface_init));
+
+#endif
+static void
+um_realm_kerberos_proxy_finalize (GObject *object)
+{
+ UmRealmKerberosProxy *proxy = UM_REALM_KERBEROS_PROXY (object);
+ g_datalist_clear (&proxy->priv->qdata);
+ G_OBJECT_CLASS (um_realm_kerberos_proxy_parent_class)->finalize (object);
+}
+
+static void
+um_realm_kerberos_proxy_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+ const _ExtendedGDBusPropertyInfo *info;
+ GVariant *variant;
+ g_assert (prop_id != 0 && prop_id - 1 < 2);
+ info = _um_realm_kerberos_property_info_pointers[prop_id - 1];
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name);
+ if (info->use_gvariant)
+ {
+ g_value_set_variant (value, variant);
+ }
+ else
+ {
+ if (variant != NULL)
+ g_dbus_gvariant_to_gvalue (variant, value);
+ }
+ if (variant != NULL)
+ g_variant_unref (variant);
+}
+
+static void
+um_realm_kerberos_proxy_set_property_cb (GDBusProxy *proxy,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ const _ExtendedGDBusPropertyInfo *info = user_data;
+ GError *error;
+ GVariant *_ret;
+ error = NULL;
+ _ret = g_dbus_proxy_call_finish (proxy, res, &error);
+ if (!_ret)
+ {
+ g_warning ("Error setting property '%s' on interface org.freedesktop.realmd.Kerberos: %s (%s, %d)",
+ info->parent_struct.name,
+ error->message, g_quark_to_string (error->domain), error->code);
+ g_error_free (error);
+ }
+ else
+ {
+ g_variant_unref (_ret);
+ }
+}
+
+static void
+um_realm_kerberos_proxy_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+ const _ExtendedGDBusPropertyInfo *info;
+ GVariant *variant;
+ g_assert (prop_id != 0 && prop_id - 1 < 2);
+ info = _um_realm_kerberos_property_info_pointers[prop_id - 1];
+ variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature));
+ g_dbus_proxy_call (G_DBUS_PROXY (object),
+ "org.freedesktop.DBus.Properties.Set",
+ g_variant_new ("(ssv)", "org.freedesktop.realmd.Kerberos", info->parent_struct.name, variant),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL, (GAsyncReadyCallback) um_realm_kerberos_proxy_set_property_cb, (GDBusPropertyInfo *)
&info->parent_struct);
+ g_variant_unref (variant);
+}
+
+static void
+um_realm_kerberos_proxy_g_signal (GDBusProxy *proxy,
+ const gchar *sender_name G_GNUC_UNUSED,
+ const gchar *signal_name,
+ GVariant *parameters)
+{
+ _ExtendedGDBusSignalInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint n;
+ guint signal_id;
+ info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *)
&_um_realm_kerberos_interface_info.parent_struct, signal_name);
+ if (info == NULL)
+ return;
+ num_params = g_variant_n_children (parameters);
+ paramv = g_new0 (GValue, num_params + 1);
+ g_value_init (¶mv[0], UM_REALM_TYPE_KERBEROS);
+ g_value_set_object (¶mv[0], proxy);
+ g_variant_iter_init (&iter, parameters);
+ n = 1;
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (¶mv[n], G_TYPE_VARIANT);
+ g_value_set_variant (¶mv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, ¶mv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, UM_REALM_TYPE_KERBEROS);
+ g_signal_emitv (paramv, signal_id, 0, NULL);
+ for (n = 0; n < num_params + 1; n++)
+ g_value_unset (¶mv[n]);
+ g_free (paramv);
+}
+
+static void
+um_realm_kerberos_proxy_g_properties_changed (GDBusProxy *_proxy,
+ GVariant *changed_properties,
+ const gchar *const *invalidated_properties)
+{
+ UmRealmKerberosProxy *proxy = UM_REALM_KERBEROS_PROXY (_proxy);
+ guint n;
+ const gchar *key;
+ GVariantIter *iter;
+ _ExtendedGDBusPropertyInfo *info;
+ g_variant_get (changed_properties, "a{sv}", &iter);
+ while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_kerberos_interface_info.parent_struct, key);
+ g_datalist_remove_data (&proxy->priv->qdata, key);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+ g_variant_iter_free (iter);
+ for (n = 0; invalidated_properties[n] != NULL; n++)
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_kerberos_interface_info.parent_struct, invalidated_properties[n]);
+ g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+}
+
+static const gchar *
+um_realm_kerberos_proxy_get_realm_name (UmRealmKerberos *object)
+{
+ UmRealmKerberosProxy *proxy = UM_REALM_KERBEROS_PROXY (object);
+ GVariant *variant;
+ const gchar *value = NULL;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "RealmName");
+ if (variant != NULL)
+ {
+ value = g_variant_get_string (variant, NULL);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static const gchar *
+um_realm_kerberos_proxy_get_domain_name (UmRealmKerberos *object)
+{
+ UmRealmKerberosProxy *proxy = UM_REALM_KERBEROS_PROXY (object);
+ GVariant *variant;
+ const gchar *value = NULL;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "DomainName");
+ if (variant != NULL)
+ {
+ value = g_variant_get_string (variant, NULL);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static void
+um_realm_kerberos_proxy_init (UmRealmKerberosProxy *proxy)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+ proxy->priv = um_realm_kerberos_proxy_get_instance_private (proxy);
+#else
+ proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, UM_REALM_TYPE_KERBEROS_PROXY,
UmRealmKerberosProxyPrivate);
+#endif
+
+ g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), um_realm_kerberos_interface_info ());
+}
+
+static void
+um_realm_kerberos_proxy_class_init (UmRealmKerberosProxyClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusProxyClass *proxy_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = um_realm_kerberos_proxy_finalize;
+ gobject_class->get_property = um_realm_kerberos_proxy_get_property;
+ gobject_class->set_property = um_realm_kerberos_proxy_set_property;
+
+ proxy_class = G_DBUS_PROXY_CLASS (klass);
+ proxy_class->g_signal = um_realm_kerberos_proxy_g_signal;
+ proxy_class->g_properties_changed = um_realm_kerberos_proxy_g_properties_changed;
+
+ um_realm_kerberos_override_properties (gobject_class, 1);
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+ g_type_class_add_private (klass, sizeof (UmRealmKerberosProxyPrivate));
+#endif
+}
+
+static void
+um_realm_kerberos_proxy_iface_init (UmRealmKerberosIface *iface)
+{
+ iface->get_realm_name = um_realm_kerberos_proxy_get_realm_name;
+ iface->get_domain_name = um_realm_kerberos_proxy_get_domain_name;
+}
+
+/**
+ * um_realm_kerberos_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Kerberos.top_of_page">org.freedesktop.realmd.Kerberos</link>.
See g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_kerberos_proxy_new_finish() to get the result of the operation.
+ *
+ * See um_realm_kerberos_proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+um_realm_kerberos_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (UM_REALM_TYPE_KERBEROS_PROXY, G_PRIORITY_DEFAULT, cancellable, callback,
user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path,
"g-interface-name", "org.freedesktop.realmd.Kerberos", NULL);
+}
+
+/**
+ * um_realm_kerberos_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to um_realm_kerberos_proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with um_realm_kerberos_proxy_new().
+ *
+ * Returns: (transfer full) (type UmRealmKerberosProxy): The constructed proxy object or %NULL if @error is
set.
+ */
+UmRealmKerberos *
+um_realm_kerberos_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return UM_REALM_KERBEROS (ret);
+ else
+ return NULL;
+}
+
+/**
+ * um_realm_kerberos_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Kerberos.top_of_page">org.freedesktop.realmd.Kerberos</link>.
See g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_kerberos_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type UmRealmKerberosProxy): The constructed proxy object or %NULL if @error is
set.
+ */
+UmRealmKerberos *
+um_realm_kerberos_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (UM_REALM_TYPE_KERBEROS_PROXY, cancellable, error, "g-flags", flags, "g-name", name,
"g-connection", connection, "g-object-path", object_path, "g-interface-name",
"org.freedesktop.realmd.Kerberos", NULL);
+ if (ret != NULL)
+ return UM_REALM_KERBEROS (ret);
+ else
+ return NULL;
+}
+
+
+/**
+ * um_realm_kerberos_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like um_realm_kerberos_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_kerberos_proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See um_realm_kerberos_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+um_realm_kerberos_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (UM_REALM_TYPE_KERBEROS_PROXY, G_PRIORITY_DEFAULT, cancellable, callback,
user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path,
"g-interface-name", "org.freedesktop.realmd.Kerberos", NULL);
+}
+
+/**
+ * um_realm_kerberos_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
um_realm_kerberos_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with um_realm_kerberos_proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type UmRealmKerberosProxy): The constructed proxy object or %NULL if @error is
set.
+ */
+UmRealmKerberos *
+um_realm_kerberos_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return UM_REALM_KERBEROS (ret);
+ else
+ return NULL;
+}
+
+/**
+ * um_realm_kerberos_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like um_realm_kerberos_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_kerberos_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type UmRealmKerberosProxy): The constructed proxy object or %NULL if @error is
set.
+ */
+UmRealmKerberos *
+um_realm_kerberos_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (UM_REALM_TYPE_KERBEROS_PROXY, cancellable, error, "g-flags", flags, "g-name", name,
"g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.freedesktop.realmd.Kerberos",
NULL);
+ if (ret != NULL)
+ return UM_REALM_KERBEROS (ret);
+ else
+ return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * UmRealmKerberosSkeleton:
+ *
+ * The #UmRealmKerberosSkeleton structure contains only private data and should only be accessed using the
provided API.
+ */
+
+/**
+ * UmRealmKerberosSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #UmRealmKerberosSkeleton.
+ */
+
+struct _UmRealmKerberosSkeletonPrivate
+{
+ GValue *properties;
+ GList *changed_properties;
+ GSource *changed_properties_idle_source;
+ GMainContext *context;
+ GMutex lock;
+};
+
+static void
+_um_realm_kerberos_skeleton_handle_method_call (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name,
+ const gchar *method_name,
+ GVariant *parameters,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ UmRealmKerberosSkeleton *skeleton = UM_REALM_KERBEROS_SKELETON (user_data);
+ _ExtendedGDBusMethodInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint num_extra;
+ guint n;
+ guint signal_id;
+ GValue return_value = G_VALUE_INIT;
+ info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+ g_assert (info != NULL);
+ num_params = g_variant_n_children (parameters);
+ num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra);
+ n = 0;
+ g_value_init (¶mv[n], UM_REALM_TYPE_KERBEROS);
+ g_value_set_object (¶mv[n++], skeleton);
+ g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+ g_value_set_object (¶mv[n++], invocation);
+ if (info->pass_fdlist)
+ {
+#ifdef G_OS_UNIX
+ g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST);
+ g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list
(g_dbus_method_invocation_get_message (invocation)));
+#else
+ g_assert_not_reached ();
+#endif
+ }
+ g_variant_iter_init (&iter, parameters);
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (¶mv[n], G_TYPE_VARIANT);
+ g_value_set_variant (¶mv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, ¶mv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, UM_REALM_TYPE_KERBEROS);
+ g_value_init (&return_value, G_TYPE_BOOLEAN);
+ g_signal_emitv (paramv, signal_id, 0, &return_value);
+ if (!g_value_get_boolean (&return_value))
+ g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s
is not implemented on interface %s", method_name, interface_name);
+ g_value_unset (&return_value);
+ for (n = 0; n < num_params + num_extra; n++)
+ g_value_unset (¶mv[n]);
+ g_free (paramv);
+}
+
+static GVariant *
+_um_realm_kerberos_skeleton_handle_get_property (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name G_GNUC_UNUSED,
+ const gchar *property_name,
+ GError **error,
+ gpointer user_data)
+{
+ UmRealmKerberosSkeleton *skeleton = UM_REALM_KERBEROS_SKELETON (user_data);
+ GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ GVariant *ret;
+ ret = NULL;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_kerberos_interface_info.parent_struct, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s",
property_name);
+ }
+ else
+ {
+ g_value_init (&value, pspec->value_type);
+ g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+ g_value_unset (&value);
+ }
+ return ret;
+}
+
+static gboolean
+_um_realm_kerberos_skeleton_handle_set_property (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name G_GNUC_UNUSED,
+ const gchar *property_name,
+ GVariant *variant,
+ GError **error,
+ gpointer user_data)
+{
+ UmRealmKerberosSkeleton *skeleton = UM_REALM_KERBEROS_SKELETON (user_data);
+ GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ gboolean ret;
+ ret = FALSE;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_kerberos_interface_info.parent_struct, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s",
property_name);
+ }
+ else
+ {
+ if (info->use_gvariant)
+ g_value_set_variant (&value, variant);
+ else
+ g_dbus_gvariant_to_gvalue (variant, &value);
+ g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ g_value_unset (&value);
+ ret = TRUE;
+ }
+ return ret;
+}
+
+static const GDBusInterfaceVTable _um_realm_kerberos_skeleton_vtable =
+{
+ _um_realm_kerberos_skeleton_handle_method_call,
+ _um_realm_kerberos_skeleton_handle_get_property,
+ _um_realm_kerberos_skeleton_handle_set_property,
+ {NULL}
+};
+
+static GDBusInterfaceInfo *
+um_realm_kerberos_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+ return um_realm_kerberos_interface_info ();
+}
+
+static GDBusInterfaceVTable *
+um_realm_kerberos_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+ return (GDBusInterfaceVTable *) &_um_realm_kerberos_skeleton_vtable;
+}
+
+static GVariant *
+um_realm_kerberos_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+ UmRealmKerberosSkeleton *skeleton = UM_REALM_KERBEROS_SKELETON (_skeleton);
+
+ GVariantBuilder builder;
+ guint n;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ if (_um_realm_kerberos_interface_info.parent_struct.properties == NULL)
+ goto out;
+ for (n = 0; _um_realm_kerberos_interface_info.parent_struct.properties[n] != NULL; n++)
+ {
+ GDBusPropertyInfo *info = _um_realm_kerberos_interface_info.parent_struct.properties[n];
+ if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+ {
+ GVariant *value;
+ value = _um_realm_kerberos_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection
(G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path
(G_DBUS_INTERFACE_SKELETON (skeleton)), "org.freedesktop.realmd.Kerberos", info->name, NULL, skeleton);
+ if (value != NULL)
+ {
+ g_variant_take_ref (value);
+ g_variant_builder_add (&builder, "{sv}", info->name, value);
+ g_variant_unref (value);
+ }
+ }
+ }
+out:
+ return g_variant_builder_end (&builder);
+}
+
+static gboolean _um_realm_kerberos_emit_changed (gpointer user_data);
+
+static void
+um_realm_kerberos_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+ UmRealmKerberosSkeleton *skeleton = UM_REALM_KERBEROS_SKELETON (_skeleton);
+ gboolean emit_changed = FALSE;
+
+ g_mutex_lock (&skeleton->priv->lock);
+ if (skeleton->priv->changed_properties_idle_source != NULL)
+ {
+ g_source_destroy (skeleton->priv->changed_properties_idle_source);
+ skeleton->priv->changed_properties_idle_source = NULL;
+ emit_changed = TRUE;
+ }
+ g_mutex_unlock (&skeleton->priv->lock);
+
+ if (emit_changed)
+ _um_realm_kerberos_emit_changed (skeleton);
+}
+
+static void um_realm_kerberos_skeleton_iface_init (UmRealmKerberosIface *iface);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (UmRealmKerberosSkeleton, um_realm_kerberos_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_ADD_PRIVATE (UmRealmKerberosSkeleton)
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_KERBEROS,
um_realm_kerberos_skeleton_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (UmRealmKerberosSkeleton, um_realm_kerberos_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_KERBEROS,
um_realm_kerberos_skeleton_iface_init));
+
+#endif
+static void
+um_realm_kerberos_skeleton_finalize (GObject *object)
+{
+ UmRealmKerberosSkeleton *skeleton = UM_REALM_KERBEROS_SKELETON (object);
+ guint n;
+ for (n = 0; n < 2; n++)
+ g_value_unset (&skeleton->priv->properties[n]);
+ g_free (skeleton->priv->properties);
+ g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+ if (skeleton->priv->changed_properties_idle_source != NULL)
+ g_source_destroy (skeleton->priv->changed_properties_idle_source);
+ g_main_context_unref (skeleton->priv->context);
+ g_mutex_clear (&skeleton->priv->lock);
+ G_OBJECT_CLASS (um_realm_kerberos_skeleton_parent_class)->finalize (object);
+}
+
+static void
+um_realm_kerberos_skeleton_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+ UmRealmKerberosSkeleton *skeleton = UM_REALM_KERBEROS_SKELETON (object);
+ g_assert (prop_id != 0 && prop_id - 1 < 2);
+ g_mutex_lock (&skeleton->priv->lock);
+ g_value_copy (&skeleton->priv->properties[prop_id - 1], value);
+ g_mutex_unlock (&skeleton->priv->lock);
+}
+
+static gboolean
+_um_realm_kerberos_emit_changed (gpointer user_data)
+{
+ UmRealmKerberosSkeleton *skeleton = UM_REALM_KERBEROS_SKELETON (user_data);
+ GList *l;
+ GVariantBuilder builder;
+ GVariantBuilder invalidated_builder;
+ guint num_changes;
+
+ g_mutex_lock (&skeleton->priv->lock);
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as"));
+ for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next)
+ {
+ ChangedProperty *cp = l->data;
+ GVariant *variant;
+ const GValue *cur_value;
+
+ cur_value = &skeleton->priv->properties[cp->prop_id - 1];
+ if (!_g_value_equal (cur_value, &cp->orig_value))
+ {
+ variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE
(cp->info->parent_struct.signature));
+ g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant);
+ g_variant_unref (variant);
+ num_changes++;
+ }
+ }
+ if (num_changes > 0)
+ {
+ GList *connections, *ll;
+ GVariant *signal_variant;
+ signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.freedesktop.realmd.Kerberos",
+ &builder, &invalidated_builder));
+ connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+ for (ll = connections; ll != NULL; ll = ll->next)
+ {
+ GDBusConnection *connection = ll->data;
+
+ g_dbus_connection_emit_signal (connection,
+ NULL, g_dbus_interface_skeleton_get_object_path
(G_DBUS_INTERFACE_SKELETON (skeleton)),
+ "org.freedesktop.DBus.Properties",
+ "PropertiesChanged",
+ signal_variant,
+ NULL);
+ }
+ g_variant_unref (signal_variant);
+ g_list_free_full (connections, g_object_unref);
+ }
+ else
+ {
+ g_variant_builder_clear (&builder);
+ g_variant_builder_clear (&invalidated_builder);
+ }
+ g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+ skeleton->priv->changed_properties = NULL;
+ skeleton->priv->changed_properties_idle_source = NULL;
+ g_mutex_unlock (&skeleton->priv->lock);
+ return FALSE;
+}
+
+static void
+_um_realm_kerberos_schedule_emit_changed (UmRealmKerberosSkeleton *skeleton, const
_ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value)
+{
+ ChangedProperty *cp;
+ GList *l;
+ cp = NULL;
+ for (l = skeleton->priv->changed_properties; l != NULL; l = l->next)
+ {
+ ChangedProperty *i_cp = l->data;
+ if (i_cp->info == info)
+ {
+ cp = i_cp;
+ break;
+ }
+ }
+ if (cp == NULL)
+ {
+ cp = g_new0 (ChangedProperty, 1);
+ cp->prop_id = prop_id;
+ cp->info = info;
+ skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp);
+ g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value));
+ g_value_copy (orig_value, &cp->orig_value);
+ }
+}
+
+static void
+um_realm_kerberos_skeleton_notify (GObject *object,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+ UmRealmKerberosSkeleton *skeleton = UM_REALM_KERBEROS_SKELETON (object);
+ g_mutex_lock (&skeleton->priv->lock);
+ if (skeleton->priv->changed_properties != NULL &&
+ skeleton->priv->changed_properties_idle_source == NULL)
+ {
+ skeleton->priv->changed_properties_idle_source = g_idle_source_new ();
+ g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT);
+ g_source_set_callback (skeleton->priv->changed_properties_idle_source,
_um_realm_kerberos_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref);
+ g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context);
+ g_source_unref (skeleton->priv->changed_properties_idle_source);
+ }
+ g_mutex_unlock (&skeleton->priv->lock);
+}
+
+static void
+um_realm_kerberos_skeleton_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ UmRealmKerberosSkeleton *skeleton = UM_REALM_KERBEROS_SKELETON (object);
+ g_assert (prop_id != 0 && prop_id - 1 < 2);
+ g_mutex_lock (&skeleton->priv->lock);
+ g_object_freeze_notify (object);
+ if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1]))
+ {
+ if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL)
+ _um_realm_kerberos_schedule_emit_changed (skeleton,
_um_realm_kerberos_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]);
+ g_value_copy (value, &skeleton->priv->properties[prop_id - 1]);
+ g_object_notify_by_pspec (object, pspec);
+ }
+ g_mutex_unlock (&skeleton->priv->lock);
+ g_object_thaw_notify (object);
+}
+
+static void
+um_realm_kerberos_skeleton_init (UmRealmKerberosSkeleton *skeleton)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+ skeleton->priv = um_realm_kerberos_skeleton_get_instance_private (skeleton);
+#else
+ skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, UM_REALM_TYPE_KERBEROS_SKELETON,
UmRealmKerberosSkeletonPrivate);
+#endif
+
+ g_mutex_init (&skeleton->priv->lock);
+ skeleton->priv->context = g_main_context_ref_thread_default ();
+ skeleton->priv->properties = g_new0 (GValue, 2);
+ g_value_init (&skeleton->priv->properties[0], G_TYPE_STRING);
+ g_value_init (&skeleton->priv->properties[1], G_TYPE_STRING);
+}
+
+static const gchar *
+um_realm_kerberos_skeleton_get_realm_name (UmRealmKerberos *object)
+{
+ UmRealmKerberosSkeleton *skeleton = UM_REALM_KERBEROS_SKELETON (object);
+ const gchar *value;
+ g_mutex_lock (&skeleton->priv->lock);
+ value = g_value_get_string (&(skeleton->priv->properties[0]));
+ g_mutex_unlock (&skeleton->priv->lock);
+ return value;
+}
+
+static const gchar *
+um_realm_kerberos_skeleton_get_domain_name (UmRealmKerberos *object)
+{
+ UmRealmKerberosSkeleton *skeleton = UM_REALM_KERBEROS_SKELETON (object);
+ const gchar *value;
+ g_mutex_lock (&skeleton->priv->lock);
+ value = g_value_get_string (&(skeleton->priv->properties[1]));
+ g_mutex_unlock (&skeleton->priv->lock);
+ return value;
+}
+
+static void
+um_realm_kerberos_skeleton_class_init (UmRealmKerberosSkeletonClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusInterfaceSkeletonClass *skeleton_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = um_realm_kerberos_skeleton_finalize;
+ gobject_class->get_property = um_realm_kerberos_skeleton_get_property;
+ gobject_class->set_property = um_realm_kerberos_skeleton_set_property;
+ gobject_class->notify = um_realm_kerberos_skeleton_notify;
+
+
+ um_realm_kerberos_override_properties (gobject_class, 1);
+
+ skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+ skeleton_class->get_info = um_realm_kerberos_skeleton_dbus_interface_get_info;
+ skeleton_class->get_properties = um_realm_kerberos_skeleton_dbus_interface_get_properties;
+ skeleton_class->flush = um_realm_kerberos_skeleton_dbus_interface_flush;
+ skeleton_class->get_vtable = um_realm_kerberos_skeleton_dbus_interface_get_vtable;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+ g_type_class_add_private (klass, sizeof (UmRealmKerberosSkeletonPrivate));
+#endif
+}
+
+static void
+um_realm_kerberos_skeleton_iface_init (UmRealmKerberosIface *iface)
+{
+ iface->get_realm_name = um_realm_kerberos_skeleton_get_realm_name;
+ iface->get_domain_name = um_realm_kerberos_skeleton_get_domain_name;
+}
+
+/**
+ * um_realm_kerberos_skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Kerberos.top_of_page">org.freedesktop.realmd.Kerberos</link>.
+ *
+ * Returns: (transfer full) (type UmRealmKerberosSkeleton): The skeleton object.
+ */
+UmRealmKerberos *
+um_realm_kerberos_skeleton_new (void)
+{
+ return UM_REALM_KERBEROS (g_object_new (UM_REALM_TYPE_KERBEROS_SKELETON, NULL));
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.freedesktop.realmd.KerberosMembership
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:UmRealmKerberosMembership
+ * @title: UmRealmKerberosMembership
+ * @short_description: Generated C code for the org.freedesktop.realmd.KerberosMembership D-Bus interface
+ *
+ * This section contains code for working with the <link
linkend="gdbus-interface-org-freedesktop-realmd-KerberosMembership.top_of_page">org.freedesktop.realmd.KerberosMembership</link>
D-Bus interface in C.
+ */
+
+/* ---- Introspection data for org.freedesktop.realmd.KerberosMembership ---- */
+
+static const _ExtendedGDBusArgInfo _um_realm_kerberos_membership_method_info_join_IN_ARG_credentials =
+{
+ {
+ -1,
+ (gchar *) "credentials",
+ (gchar *) "(ssv)",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _um_realm_kerberos_membership_method_info_join_IN_ARG_options =
+{
+ {
+ -1,
+ (gchar *) "options",
+ (gchar *) "a{sv}",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _um_realm_kerberos_membership_method_info_join_IN_ARG_pointers[] =
+{
+ &_um_realm_kerberos_membership_method_info_join_IN_ARG_credentials,
+ &_um_realm_kerberos_membership_method_info_join_IN_ARG_options,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _um_realm_kerberos_membership_method_info_join =
+{
+ {
+ -1,
+ (gchar *) "Join",
+ (GDBusArgInfo **) &_um_realm_kerberos_membership_method_info_join_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-join",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _um_realm_kerberos_membership_method_info_leave_IN_ARG_credentials =
+{
+ {
+ -1,
+ (gchar *) "credentials",
+ (gchar *) "(ssv)",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _um_realm_kerberos_membership_method_info_leave_IN_ARG_options =
+{
+ {
+ -1,
+ (gchar *) "options",
+ (gchar *) "a{sv}",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _um_realm_kerberos_membership_method_info_leave_IN_ARG_pointers[]
=
+{
+ &_um_realm_kerberos_membership_method_info_leave_IN_ARG_credentials,
+ &_um_realm_kerberos_membership_method_info_leave_IN_ARG_options,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _um_realm_kerberos_membership_method_info_leave =
+{
+ {
+ -1,
+ (gchar *) "Leave",
+ (GDBusArgInfo **) &_um_realm_kerberos_membership_method_info_leave_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-leave",
+ FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _um_realm_kerberos_membership_method_info_pointers[] =
+{
+ &_um_realm_kerberos_membership_method_info_join,
+ &_um_realm_kerberos_membership_method_info_leave,
+ NULL
+};
+
+static const _ExtendedGDBusPropertyInfo _um_realm_kerberos_membership_property_info_suggested_administrator =
+{
+ {
+ -1,
+ (gchar *) "SuggestedAdministrator",
+ (gchar *) "s",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "suggested-administrator",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo
_um_realm_kerberos_membership_property_info_supported_join_credentials =
+{
+ {
+ -1,
+ (gchar *) "SupportedJoinCredentials",
+ (gchar *) "a(ss)",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "supported-join-credentials",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo
_um_realm_kerberos_membership_property_info_supported_leave_credentials =
+{
+ {
+ -1,
+ (gchar *) "SupportedLeaveCredentials",
+ (gchar *) "a(ss)",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "supported-leave-credentials",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo * const _um_realm_kerberos_membership_property_info_pointers[] =
+{
+ &_um_realm_kerberos_membership_property_info_suggested_administrator,
+ &_um_realm_kerberos_membership_property_info_supported_join_credentials,
+ &_um_realm_kerberos_membership_property_info_supported_leave_credentials,
+ NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _um_realm_kerberos_membership_interface_info =
+{
+ {
+ -1,
+ (gchar *) "org.freedesktop.realmd.KerberosMembership",
+ (GDBusMethodInfo **) &_um_realm_kerberos_membership_method_info_pointers,
+ NULL,
+ (GDBusPropertyInfo **) &_um_realm_kerberos_membership_property_info_pointers,
+ NULL
+ },
+ "kerberos-membership",
+};
+
+
+/**
+ * um_realm_kerberos_membership_interface_info:
+ *
+ * Gets a machine-readable description of the <link
linkend="gdbus-interface-org-freedesktop-realmd-KerberosMembership.top_of_page">org.freedesktop.realmd.KerberosMembership</link>
D-Bus interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+um_realm_kerberos_membership_interface_info (void)
+{
+ return (GDBusInterfaceInfo *) &_um_realm_kerberos_membership_interface_info.parent_struct;
+}
+
+/**
+ * um_realm_kerberos_membership_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #UmRealmKerberosMembership interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+um_realm_kerberos_membership_override_properties (GObjectClass *klass, guint property_id_begin)
+{
+ g_object_class_override_property (klass, property_id_begin++, "suggested-administrator");
+ g_object_class_override_property (klass, property_id_begin++, "supported-join-credentials");
+ g_object_class_override_property (klass, property_id_begin++, "supported-leave-credentials");
+ return property_id_begin - 1;
+}
+
+
+
+/**
+ * UmRealmKerberosMembership:
+ *
+ * Abstract interface type for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-KerberosMembership.top_of_page">org.freedesktop.realmd.KerberosMembership</link>.
+ */
+
+/**
+ * UmRealmKerberosMembershipIface:
+ * @parent_iface: The parent interface.
+ * @handle_join: Handler for the #UmRealmKerberosMembership::handle-join signal.
+ * @handle_leave: Handler for the #UmRealmKerberosMembership::handle-leave signal.
+ * @get_suggested_administrator: Getter for the #UmRealmKerberosMembership:suggested-administrator property.
+ * @get_supported_join_credentials: Getter for the #UmRealmKerberosMembership:supported-join-credentials
property.
+ * @get_supported_leave_credentials: Getter for the #UmRealmKerberosMembership:supported-leave-credentials
property.
+ *
+ * Virtual table for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-KerberosMembership.top_of_page">org.freedesktop.realmd.KerberosMembership</link>.
+ */
+
+typedef UmRealmKerberosMembershipIface UmRealmKerberosMembershipInterface;
+G_DEFINE_INTERFACE (UmRealmKerberosMembership, um_realm_kerberos_membership, G_TYPE_OBJECT);
+
+static void
+um_realm_kerberos_membership_default_init (UmRealmKerberosMembershipIface *iface)
+{
+ /* GObject signals for incoming D-Bus method calls: */
+ /**
+ * UmRealmKerberosMembership::handle-join:
+ * @object: A #UmRealmKerberosMembership.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_credentials: Argument passed by remote caller.
+ * @arg_options: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link
linkend="gdbus-method-org-freedesktop-realmd-KerberosMembership.Join">Join()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a
reference to @invocation and eventually call um_realm_kerberos_membership_complete_join() or e.g.
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-join",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (UmRealmKerberosMembershipIface, handle_join),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 3,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_VARIANT, G_TYPE_VARIANT);
+
+ /**
+ * UmRealmKerberosMembership::handle-leave:
+ * @object: A #UmRealmKerberosMembership.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_credentials: Argument passed by remote caller.
+ * @arg_options: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link
linkend="gdbus-method-org-freedesktop-realmd-KerberosMembership.Leave">Leave()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a
reference to @invocation and eventually call um_realm_kerberos_membership_complete_leave() or e.g.
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-leave",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (UmRealmKerberosMembershipIface, handle_leave),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 3,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_VARIANT, G_TYPE_VARIANT);
+
+ /* GObject properties for D-Bus properties: */
+ /**
+ * UmRealmKerberosMembership:suggested-administrator:
+ *
+ * Represents the D-Bus property <link
linkend="gdbus-property-org-freedesktop-realmd-KerberosMembership.SuggestedAdministrator">"SuggestedAdministrator"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to
read from it on both the client- and service-side. It is only meaningful, however, to write to it on the
service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_string ("suggested-administrator", "SuggestedAdministrator", "SuggestedAdministrator",
NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * UmRealmKerberosMembership:supported-join-credentials:
+ *
+ * Represents the D-Bus property <link
linkend="gdbus-property-org-freedesktop-realmd-KerberosMembership.SupportedJoinCredentials">"SupportedJoinCredentials"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to
read from it on both the client- and service-side. It is only meaningful, however, to write to it on the
service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_variant ("supported-join-credentials", "SupportedJoinCredentials",
"SupportedJoinCredentials", G_VARIANT_TYPE ("a(ss)"), NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * UmRealmKerberosMembership:supported-leave-credentials:
+ *
+ * Represents the D-Bus property <link
linkend="gdbus-property-org-freedesktop-realmd-KerberosMembership.SupportedLeaveCredentials">"SupportedLeaveCredentials"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to
read from it on both the client- and service-side. It is only meaningful, however, to write to it on the
service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_variant ("supported-leave-credentials", "SupportedLeaveCredentials",
"SupportedLeaveCredentials", G_VARIANT_TYPE ("a(ss)"), NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+}
+
+/**
+ * um_realm_kerberos_membership_get_suggested_administrator: (skip)
+ * @object: A #UmRealmKerberosMembership.
+ *
+ * Gets the value of the <link
linkend="gdbus-property-org-freedesktop-realmd-KerberosMembership.SuggestedAdministrator">"SuggestedAdministrator"</link>
D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only
safe to use this function on the thread where @object was constructed. Use
um_realm_kerberos_membership_dup_suggested_administrator() if on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the
returned value, it belongs to @object.
+ */
+const gchar *
+um_realm_kerberos_membership_get_suggested_administrator (UmRealmKerberosMembership *object)
+{
+ return UM_REALM_KERBEROS_MEMBERSHIP_GET_IFACE (object)->get_suggested_administrator (object);
+}
+
+/**
+ * um_realm_kerberos_membership_dup_suggested_administrator: (skip)
+ * @object: A #UmRealmKerberosMembership.
+ *
+ * Gets a copy of the <link
linkend="gdbus-property-org-freedesktop-realmd-KerberosMembership.SuggestedAdministrator">"SuggestedAdministrator"</link>
D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value
should be freed with g_free().
+ */
+gchar *
+um_realm_kerberos_membership_dup_suggested_administrator (UmRealmKerberosMembership *object)
+{
+ gchar *value;
+ g_object_get (G_OBJECT (object), "suggested-administrator", &value, NULL);
+ return value;
+}
+
+/**
+ * um_realm_kerberos_membership_set_suggested_administrator: (skip)
+ * @object: A #UmRealmKerberosMembership.
+ * @value: The value to set.
+ *
+ * Sets the <link
linkend="gdbus-property-org-freedesktop-realmd-KerberosMembership.SuggestedAdministrator">"SuggestedAdministrator"</link>
D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+um_realm_kerberos_membership_set_suggested_administrator (UmRealmKerberosMembership *object, const gchar
*value)
+{
+ g_object_set (G_OBJECT (object), "suggested-administrator", value, NULL);
+}
+
+/**
+ * um_realm_kerberos_membership_get_supported_join_credentials: (skip)
+ * @object: A #UmRealmKerberosMembership.
+ *
+ * Gets the value of the <link
linkend="gdbus-property-org-freedesktop-realmd-KerberosMembership.SupportedJoinCredentials">"SupportedJoinCredentials"</link>
D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only
safe to use this function on the thread where @object was constructed. Use
um_realm_kerberos_membership_dup_supported_join_credentials() if on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the
returned value, it belongs to @object.
+ */
+GVariant *
+um_realm_kerberos_membership_get_supported_join_credentials (UmRealmKerberosMembership *object)
+{
+ return UM_REALM_KERBEROS_MEMBERSHIP_GET_IFACE (object)->get_supported_join_credentials (object);
+}
+
+/**
+ * um_realm_kerberos_membership_dup_supported_join_credentials: (skip)
+ * @object: A #UmRealmKerberosMembership.
+ *
+ * Gets a copy of the <link
linkend="gdbus-property-org-freedesktop-realmd-KerberosMembership.SupportedJoinCredentials">"SupportedJoinCredentials"</link>
D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value
should be freed with g_variant_unref().
+ */
+GVariant *
+um_realm_kerberos_membership_dup_supported_join_credentials (UmRealmKerberosMembership *object)
+{
+ GVariant *value;
+ g_object_get (G_OBJECT (object), "supported-join-credentials", &value, NULL);
+ return value;
+}
+
+/**
+ * um_realm_kerberos_membership_set_supported_join_credentials: (skip)
+ * @object: A #UmRealmKerberosMembership.
+ * @value: The value to set.
+ *
+ * Sets the <link
linkend="gdbus-property-org-freedesktop-realmd-KerberosMembership.SupportedJoinCredentials">"SupportedJoinCredentials"</link>
D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+um_realm_kerberos_membership_set_supported_join_credentials (UmRealmKerberosMembership *object, GVariant
*value)
+{
+ g_object_set (G_OBJECT (object), "supported-join-credentials", value, NULL);
+}
+
+/**
+ * um_realm_kerberos_membership_get_supported_leave_credentials: (skip)
+ * @object: A #UmRealmKerberosMembership.
+ *
+ * Gets the value of the <link
linkend="gdbus-property-org-freedesktop-realmd-KerberosMembership.SupportedLeaveCredentials">"SupportedLeaveCredentials"</link>
D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only
safe to use this function on the thread where @object was constructed. Use
um_realm_kerberos_membership_dup_supported_leave_credentials() if on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the
returned value, it belongs to @object.
+ */
+GVariant *
+um_realm_kerberos_membership_get_supported_leave_credentials (UmRealmKerberosMembership *object)
+{
+ return UM_REALM_KERBEROS_MEMBERSHIP_GET_IFACE (object)->get_supported_leave_credentials (object);
+}
+
+/**
+ * um_realm_kerberos_membership_dup_supported_leave_credentials: (skip)
+ * @object: A #UmRealmKerberosMembership.
+ *
+ * Gets a copy of the <link
linkend="gdbus-property-org-freedesktop-realmd-KerberosMembership.SupportedLeaveCredentials">"SupportedLeaveCredentials"</link>
D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and
service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value
should be freed with g_variant_unref().
+ */
+GVariant *
+um_realm_kerberos_membership_dup_supported_leave_credentials (UmRealmKerberosMembership *object)
+{
+ GVariant *value;
+ g_object_get (G_OBJECT (object), "supported-leave-credentials", &value, NULL);
+ return value;
+}
+
+/**
+ * um_realm_kerberos_membership_set_supported_leave_credentials: (skip)
+ * @object: A #UmRealmKerberosMembership.
+ * @value: The value to set.
+ *
+ * Sets the <link
linkend="gdbus-property-org-freedesktop-realmd-KerberosMembership.SupportedLeaveCredentials">"SupportedLeaveCredentials"</link>
D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+um_realm_kerberos_membership_set_supported_leave_credentials (UmRealmKerberosMembership *object, GVariant
*value)
+{
+ g_object_set (G_OBJECT (object), "supported-leave-credentials", value, NULL);
+}
+
+/**
+ * um_realm_kerberos_membership_call_join:
+ * @proxy: A #UmRealmKerberosMembershipProxy.
+ * @arg_credentials: Argument to pass with the method invocation.
+ * @arg_options: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link
linkend="gdbus-method-org-freedesktop-realmd-KerberosMembership.Join">Join()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_kerberos_membership_call_join_finish() to get the result of the operation.
+ *
+ * See um_realm_kerberos_membership_call_join_sync() for the synchronous, blocking version of this method.
+ */
+void
+um_realm_kerberos_membership_call_join (
+ UmRealmKerberosMembership *proxy,
+ GVariant *arg_credentials,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "Join",
+ g_variant_new ("(@(ssv)@a{sv})",
+ arg_credentials,
+ arg_options),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * um_realm_kerberos_membership_call_join_finish:
+ * @proxy: A #UmRealmKerberosMembershipProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
um_realm_kerberos_membership_call_join().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with um_realm_kerberos_membership_call_join().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+um_realm_kerberos_membership_call_join_finish (
+ UmRealmKerberosMembership *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * um_realm_kerberos_membership_call_join_sync:
+ * @proxy: A #UmRealmKerberosMembershipProxy.
+ * @arg_credentials: Argument to pass with the method invocation.
+ * @arg_options: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link
linkend="gdbus-method-org-freedesktop-realmd-KerberosMembership.Join">Join()</link> D-Bus method on @proxy.
The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_kerberos_membership_call_join() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+um_realm_kerberos_membership_call_join_sync (
+ UmRealmKerberosMembership *proxy,
+ GVariant *arg_credentials,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "Join",
+ g_variant_new ("(@(ssv)@a{sv})",
+ arg_credentials,
+ arg_options),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * um_realm_kerberos_membership_call_leave:
+ * @proxy: A #UmRealmKerberosMembershipProxy.
+ * @arg_credentials: Argument to pass with the method invocation.
+ * @arg_options: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link
linkend="gdbus-method-org-freedesktop-realmd-KerberosMembership.Leave">Leave()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_kerberos_membership_call_leave_finish() to get the result of the operation.
+ *
+ * See um_realm_kerberos_membership_call_leave_sync() for the synchronous, blocking version of this method.
+ */
+void
+um_realm_kerberos_membership_call_leave (
+ UmRealmKerberosMembership *proxy,
+ GVariant *arg_credentials,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "Leave",
+ g_variant_new ("(@(ssv)@a{sv})",
+ arg_credentials,
+ arg_options),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * um_realm_kerberos_membership_call_leave_finish:
+ * @proxy: A #UmRealmKerberosMembershipProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
um_realm_kerberos_membership_call_leave().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with um_realm_kerberos_membership_call_leave().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+um_realm_kerberos_membership_call_leave_finish (
+ UmRealmKerberosMembership *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * um_realm_kerberos_membership_call_leave_sync:
+ * @proxy: A #UmRealmKerberosMembershipProxy.
+ * @arg_credentials: Argument to pass with the method invocation.
+ * @arg_options: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link
linkend="gdbus-method-org-freedesktop-realmd-KerberosMembership.Leave">Leave()</link> D-Bus method on @proxy.
The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_kerberos_membership_call_leave() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+um_realm_kerberos_membership_call_leave_sync (
+ UmRealmKerberosMembership *proxy,
+ GVariant *arg_credentials,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "Leave",
+ g_variant_new ("(@(ssv)@a{sv})",
+ arg_credentials,
+ arg_options),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * um_realm_kerberos_membership_complete_join:
+ * @object: A #UmRealmKerberosMembership.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link
linkend="gdbus-method-org-freedesktop-realmd-KerberosMembership.Join">Join()</link> D-Bus method. If you
instead want to finish handling an invocation by returning an error, use
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+um_realm_kerberos_membership_complete_join (
+ UmRealmKerberosMembership *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * um_realm_kerberos_membership_complete_leave:
+ * @object: A #UmRealmKerberosMembership.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link
linkend="gdbus-method-org-freedesktop-realmd-KerberosMembership.Leave">Leave()</link> D-Bus method. If you
instead want to finish handling an invocation by returning an error, use
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+um_realm_kerberos_membership_complete_leave (
+ UmRealmKerberosMembership *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * UmRealmKerberosMembershipProxy:
+ *
+ * The #UmRealmKerberosMembershipProxy structure contains only private data and should only be accessed
using the provided API.
+ */
+
+/**
+ * UmRealmKerberosMembershipProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #UmRealmKerberosMembershipProxy.
+ */
+
+struct _UmRealmKerberosMembershipProxyPrivate
+{
+ GData *qdata;
+};
+
+static void um_realm_kerberos_membership_proxy_iface_init (UmRealmKerberosMembershipIface *iface);
+
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (UmRealmKerberosMembershipProxy, um_realm_kerberos_membership_proxy,
G_TYPE_DBUS_PROXY,
+ G_ADD_PRIVATE (UmRealmKerberosMembershipProxy)
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_KERBEROS_MEMBERSHIP,
um_realm_kerberos_membership_proxy_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (UmRealmKerberosMembershipProxy, um_realm_kerberos_membership_proxy,
G_TYPE_DBUS_PROXY,
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_KERBEROS_MEMBERSHIP,
um_realm_kerberos_membership_proxy_iface_init));
+
+#endif
+static void
+um_realm_kerberos_membership_proxy_finalize (GObject *object)
+{
+ UmRealmKerberosMembershipProxy *proxy = UM_REALM_KERBEROS_MEMBERSHIP_PROXY (object);
+ g_datalist_clear (&proxy->priv->qdata);
+ G_OBJECT_CLASS (um_realm_kerberos_membership_proxy_parent_class)->finalize (object);
+}
+
+static void
+um_realm_kerberos_membership_proxy_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+ const _ExtendedGDBusPropertyInfo *info;
+ GVariant *variant;
+ g_assert (prop_id != 0 && prop_id - 1 < 3);
+ info = _um_realm_kerberos_membership_property_info_pointers[prop_id - 1];
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name);
+ if (info->use_gvariant)
+ {
+ g_value_set_variant (value, variant);
+ }
+ else
+ {
+ if (variant != NULL)
+ g_dbus_gvariant_to_gvalue (variant, value);
+ }
+ if (variant != NULL)
+ g_variant_unref (variant);
+}
+
+static void
+um_realm_kerberos_membership_proxy_set_property_cb (GDBusProxy *proxy,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ const _ExtendedGDBusPropertyInfo *info = user_data;
+ GError *error;
+ GVariant *_ret;
+ error = NULL;
+ _ret = g_dbus_proxy_call_finish (proxy, res, &error);
+ if (!_ret)
+ {
+ g_warning ("Error setting property '%s' on interface org.freedesktop.realmd.KerberosMembership: %s
(%s, %d)",
+ info->parent_struct.name,
+ error->message, g_quark_to_string (error->domain), error->code);
+ g_error_free (error);
+ }
+ else
+ {
+ g_variant_unref (_ret);
+ }
+}
+
+static void
+um_realm_kerberos_membership_proxy_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+ const _ExtendedGDBusPropertyInfo *info;
+ GVariant *variant;
+ g_assert (prop_id != 0 && prop_id - 1 < 3);
+ info = _um_realm_kerberos_membership_property_info_pointers[prop_id - 1];
+ variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature));
+ g_dbus_proxy_call (G_DBUS_PROXY (object),
+ "org.freedesktop.DBus.Properties.Set",
+ g_variant_new ("(ssv)", "org.freedesktop.realmd.KerberosMembership", info->parent_struct.name, variant),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL, (GAsyncReadyCallback) um_realm_kerberos_membership_proxy_set_property_cb, (GDBusPropertyInfo *)
&info->parent_struct);
+ g_variant_unref (variant);
+}
+
+static void
+um_realm_kerberos_membership_proxy_g_signal (GDBusProxy *proxy,
+ const gchar *sender_name G_GNUC_UNUSED,
+ const gchar *signal_name,
+ GVariant *parameters)
+{
+ _ExtendedGDBusSignalInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint n;
+ guint signal_id;
+ info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *)
&_um_realm_kerberos_membership_interface_info.parent_struct, signal_name);
+ if (info == NULL)
+ return;
+ num_params = g_variant_n_children (parameters);
+ paramv = g_new0 (GValue, num_params + 1);
+ g_value_init (¶mv[0], UM_REALM_TYPE_KERBEROS_MEMBERSHIP);
+ g_value_set_object (¶mv[0], proxy);
+ g_variant_iter_init (&iter, parameters);
+ n = 1;
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (¶mv[n], G_TYPE_VARIANT);
+ g_value_set_variant (¶mv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, ¶mv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, UM_REALM_TYPE_KERBEROS_MEMBERSHIP);
+ g_signal_emitv (paramv, signal_id, 0, NULL);
+ for (n = 0; n < num_params + 1; n++)
+ g_value_unset (¶mv[n]);
+ g_free (paramv);
+}
+
+static void
+um_realm_kerberos_membership_proxy_g_properties_changed (GDBusProxy *_proxy,
+ GVariant *changed_properties,
+ const gchar *const *invalidated_properties)
+{
+ UmRealmKerberosMembershipProxy *proxy = UM_REALM_KERBEROS_MEMBERSHIP_PROXY (_proxy);
+ guint n;
+ const gchar *key;
+ GVariantIter *iter;
+ _ExtendedGDBusPropertyInfo *info;
+ g_variant_get (changed_properties, "a{sv}", &iter);
+ while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_kerberos_membership_interface_info.parent_struct, key);
+ g_datalist_remove_data (&proxy->priv->qdata, key);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+ g_variant_iter_free (iter);
+ for (n = 0; invalidated_properties[n] != NULL; n++)
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_kerberos_membership_interface_info.parent_struct, invalidated_properties[n]);
+ g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+}
+
+static const gchar *
+um_realm_kerberos_membership_proxy_get_suggested_administrator (UmRealmKerberosMembership *object)
+{
+ UmRealmKerberosMembershipProxy *proxy = UM_REALM_KERBEROS_MEMBERSHIP_PROXY (object);
+ GVariant *variant;
+ const gchar *value = NULL;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "SuggestedAdministrator");
+ if (variant != NULL)
+ {
+ value = g_variant_get_string (variant, NULL);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static GVariant *
+um_realm_kerberos_membership_proxy_get_supported_join_credentials (UmRealmKerberosMembership *object)
+{
+ UmRealmKerberosMembershipProxy *proxy = UM_REALM_KERBEROS_MEMBERSHIP_PROXY (object);
+ GVariant *variant;
+ GVariant *value = NULL;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "SupportedJoinCredentials");
+ value = variant;
+ if (variant != NULL)
+ g_variant_unref (variant);
+ return value;
+}
+
+static GVariant *
+um_realm_kerberos_membership_proxy_get_supported_leave_credentials (UmRealmKerberosMembership *object)
+{
+ UmRealmKerberosMembershipProxy *proxy = UM_REALM_KERBEROS_MEMBERSHIP_PROXY (object);
+ GVariant *variant;
+ GVariant *value = NULL;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "SupportedLeaveCredentials");
+ value = variant;
+ if (variant != NULL)
+ g_variant_unref (variant);
+ return value;
+}
+
+static void
+um_realm_kerberos_membership_proxy_init (UmRealmKerberosMembershipProxy *proxy)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+ proxy->priv = um_realm_kerberos_membership_proxy_get_instance_private (proxy);
+#else
+ proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, UM_REALM_TYPE_KERBEROS_MEMBERSHIP_PROXY,
UmRealmKerberosMembershipProxyPrivate);
+#endif
+
+ g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), um_realm_kerberos_membership_interface_info ());
+}
+
+static void
+um_realm_kerberos_membership_proxy_class_init (UmRealmKerberosMembershipProxyClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusProxyClass *proxy_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = um_realm_kerberos_membership_proxy_finalize;
+ gobject_class->get_property = um_realm_kerberos_membership_proxy_get_property;
+ gobject_class->set_property = um_realm_kerberos_membership_proxy_set_property;
+
+ proxy_class = G_DBUS_PROXY_CLASS (klass);
+ proxy_class->g_signal = um_realm_kerberos_membership_proxy_g_signal;
+ proxy_class->g_properties_changed = um_realm_kerberos_membership_proxy_g_properties_changed;
+
+ um_realm_kerberos_membership_override_properties (gobject_class, 1);
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+ g_type_class_add_private (klass, sizeof (UmRealmKerberosMembershipProxyPrivate));
+#endif
+}
+
+static void
+um_realm_kerberos_membership_proxy_iface_init (UmRealmKerberosMembershipIface *iface)
+{
+ iface->get_suggested_administrator = um_realm_kerberos_membership_proxy_get_suggested_administrator;
+ iface->get_supported_join_credentials = um_realm_kerberos_membership_proxy_get_supported_join_credentials;
+ iface->get_supported_leave_credentials =
um_realm_kerberos_membership_proxy_get_supported_leave_credentials;
+}
+
+/**
+ * um_realm_kerberos_membership_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-KerberosMembership.top_of_page">org.freedesktop.realmd.KerberosMembership</link>.
See g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_kerberos_membership_proxy_new_finish() to get the result of the operation.
+ *
+ * See um_realm_kerberos_membership_proxy_new_sync() for the synchronous, blocking version of this
constructor.
+ */
+void
+um_realm_kerberos_membership_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (UM_REALM_TYPE_KERBEROS_MEMBERSHIP_PROXY, G_PRIORITY_DEFAULT, cancellable,
callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path",
object_path, "g-interface-name", "org.freedesktop.realmd.KerberosMembership", NULL);
+}
+
+/**
+ * um_realm_kerberos_membership_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
um_realm_kerberos_membership_proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with um_realm_kerberos_membership_proxy_new().
+ *
+ * Returns: (transfer full) (type UmRealmKerberosMembershipProxy): The constructed proxy object or %NULL if
@error is set.
+ */
+UmRealmKerberosMembership *
+um_realm_kerberos_membership_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return UM_REALM_KERBEROS_MEMBERSHIP (ret);
+ else
+ return NULL;
+}
+
+/**
+ * um_realm_kerberos_membership_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-KerberosMembership.top_of_page">org.freedesktop.realmd.KerberosMembership</link>.
See g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_kerberos_membership_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type UmRealmKerberosMembershipProxy): The constructed proxy object or %NULL if
@error is set.
+ */
+UmRealmKerberosMembership *
+um_realm_kerberos_membership_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (UM_REALM_TYPE_KERBEROS_MEMBERSHIP_PROXY, cancellable, error, "g-flags", flags,
"g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name",
"org.freedesktop.realmd.KerberosMembership", NULL);
+ if (ret != NULL)
+ return UM_REALM_KERBEROS_MEMBERSHIP (ret);
+ else
+ return NULL;
+}
+
+
+/**
+ * um_realm_kerberos_membership_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like um_realm_kerberos_membership_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_kerberos_membership_proxy_new_for_bus_finish() to get the result of the
operation.
+ *
+ * See um_realm_kerberos_membership_proxy_new_for_bus_sync() for the synchronous, blocking version of this
constructor.
+ */
+void
+um_realm_kerberos_membership_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (UM_REALM_TYPE_KERBEROS_MEMBERSHIP_PROXY, G_PRIORITY_DEFAULT, cancellable,
callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path,
"g-interface-name", "org.freedesktop.realmd.KerberosMembership", NULL);
+}
+
+/**
+ * um_realm_kerberos_membership_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
um_realm_kerberos_membership_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with um_realm_kerberos_membership_proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type UmRealmKerberosMembershipProxy): The constructed proxy object or %NULL if
@error is set.
+ */
+UmRealmKerberosMembership *
+um_realm_kerberos_membership_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return UM_REALM_KERBEROS_MEMBERSHIP (ret);
+ else
+ return NULL;
+}
+
+/**
+ * um_realm_kerberos_membership_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like um_realm_kerberos_membership_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_kerberos_membership_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type UmRealmKerberosMembershipProxy): The constructed proxy object or %NULL if
@error is set.
+ */
+UmRealmKerberosMembership *
+um_realm_kerberos_membership_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (UM_REALM_TYPE_KERBEROS_MEMBERSHIP_PROXY, cancellable, error, "g-flags", flags,
"g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name",
"org.freedesktop.realmd.KerberosMembership", NULL);
+ if (ret != NULL)
+ return UM_REALM_KERBEROS_MEMBERSHIP (ret);
+ else
+ return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * UmRealmKerberosMembershipSkeleton:
+ *
+ * The #UmRealmKerberosMembershipSkeleton structure contains only private data and should only be accessed
using the provided API.
+ */
+
+/**
+ * UmRealmKerberosMembershipSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #UmRealmKerberosMembershipSkeleton.
+ */
+
+struct _UmRealmKerberosMembershipSkeletonPrivate
+{
+ GValue *properties;
+ GList *changed_properties;
+ GSource *changed_properties_idle_source;
+ GMainContext *context;
+ GMutex lock;
+};
+
+static void
+_um_realm_kerberos_membership_skeleton_handle_method_call (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name,
+ const gchar *method_name,
+ GVariant *parameters,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ UmRealmKerberosMembershipSkeleton *skeleton = UM_REALM_KERBEROS_MEMBERSHIP_SKELETON (user_data);
+ _ExtendedGDBusMethodInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint num_extra;
+ guint n;
+ guint signal_id;
+ GValue return_value = G_VALUE_INIT;
+ info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+ g_assert (info != NULL);
+ num_params = g_variant_n_children (parameters);
+ num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra);
+ n = 0;
+ g_value_init (¶mv[n], UM_REALM_TYPE_KERBEROS_MEMBERSHIP);
+ g_value_set_object (¶mv[n++], skeleton);
+ g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+ g_value_set_object (¶mv[n++], invocation);
+ if (info->pass_fdlist)
+ {
+#ifdef G_OS_UNIX
+ g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST);
+ g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list
(g_dbus_method_invocation_get_message (invocation)));
+#else
+ g_assert_not_reached ();
+#endif
+ }
+ g_variant_iter_init (&iter, parameters);
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (¶mv[n], G_TYPE_VARIANT);
+ g_value_set_variant (¶mv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, ¶mv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, UM_REALM_TYPE_KERBEROS_MEMBERSHIP);
+ g_value_init (&return_value, G_TYPE_BOOLEAN);
+ g_signal_emitv (paramv, signal_id, 0, &return_value);
+ if (!g_value_get_boolean (&return_value))
+ g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s
is not implemented on interface %s", method_name, interface_name);
+ g_value_unset (&return_value);
+ for (n = 0; n < num_params + num_extra; n++)
+ g_value_unset (¶mv[n]);
+ g_free (paramv);
+}
+
+static GVariant *
+_um_realm_kerberos_membership_skeleton_handle_get_property (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name G_GNUC_UNUSED,
+ const gchar *property_name,
+ GError **error,
+ gpointer user_data)
+{
+ UmRealmKerberosMembershipSkeleton *skeleton = UM_REALM_KERBEROS_MEMBERSHIP_SKELETON (user_data);
+ GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ GVariant *ret;
+ ret = NULL;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_kerberos_membership_interface_info.parent_struct, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s",
property_name);
+ }
+ else
+ {
+ g_value_init (&value, pspec->value_type);
+ g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+ g_value_unset (&value);
+ }
+ return ret;
+}
+
+static gboolean
+_um_realm_kerberos_membership_skeleton_handle_set_property (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name G_GNUC_UNUSED,
+ const gchar *property_name,
+ GVariant *variant,
+ GError **error,
+ gpointer user_data)
+{
+ UmRealmKerberosMembershipSkeleton *skeleton = UM_REALM_KERBEROS_MEMBERSHIP_SKELETON (user_data);
+ GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ gboolean ret;
+ ret = FALSE;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *)
&_um_realm_kerberos_membership_interface_info.parent_struct, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s",
property_name);
+ }
+ else
+ {
+ if (info->use_gvariant)
+ g_value_set_variant (&value, variant);
+ else
+ g_dbus_gvariant_to_gvalue (variant, &value);
+ g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ g_value_unset (&value);
+ ret = TRUE;
+ }
+ return ret;
+}
+
+static const GDBusInterfaceVTable _um_realm_kerberos_membership_skeleton_vtable =
+{
+ _um_realm_kerberos_membership_skeleton_handle_method_call,
+ _um_realm_kerberos_membership_skeleton_handle_get_property,
+ _um_realm_kerberos_membership_skeleton_handle_set_property,
+ {NULL}
+};
+
+static GDBusInterfaceInfo *
+um_realm_kerberos_membership_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton
G_GNUC_UNUSED)
+{
+ return um_realm_kerberos_membership_interface_info ();
+}
+
+static GDBusInterfaceVTable *
+um_realm_kerberos_membership_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton
G_GNUC_UNUSED)
+{
+ return (GDBusInterfaceVTable *) &_um_realm_kerberos_membership_skeleton_vtable;
+}
+
+static GVariant *
+um_realm_kerberos_membership_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+ UmRealmKerberosMembershipSkeleton *skeleton = UM_REALM_KERBEROS_MEMBERSHIP_SKELETON (_skeleton);
+
+ GVariantBuilder builder;
+ guint n;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ if (_um_realm_kerberos_membership_interface_info.parent_struct.properties == NULL)
+ goto out;
+ for (n = 0; _um_realm_kerberos_membership_interface_info.parent_struct.properties[n] != NULL; n++)
+ {
+ GDBusPropertyInfo *info = _um_realm_kerberos_membership_interface_info.parent_struct.properties[n];
+ if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+ {
+ GVariant *value;
+ value = _um_realm_kerberos_membership_skeleton_handle_get_property
(g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL,
g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)),
"org.freedesktop.realmd.KerberosMembership", info->name, NULL, skeleton);
+ if (value != NULL)
+ {
+ g_variant_take_ref (value);
+ g_variant_builder_add (&builder, "{sv}", info->name, value);
+ g_variant_unref (value);
+ }
+ }
+ }
+out:
+ return g_variant_builder_end (&builder);
+}
+
+static gboolean _um_realm_kerberos_membership_emit_changed (gpointer user_data);
+
+static void
+um_realm_kerberos_membership_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+ UmRealmKerberosMembershipSkeleton *skeleton = UM_REALM_KERBEROS_MEMBERSHIP_SKELETON (_skeleton);
+ gboolean emit_changed = FALSE;
+
+ g_mutex_lock (&skeleton->priv->lock);
+ if (skeleton->priv->changed_properties_idle_source != NULL)
+ {
+ g_source_destroy (skeleton->priv->changed_properties_idle_source);
+ skeleton->priv->changed_properties_idle_source = NULL;
+ emit_changed = TRUE;
+ }
+ g_mutex_unlock (&skeleton->priv->lock);
+
+ if (emit_changed)
+ _um_realm_kerberos_membership_emit_changed (skeleton);
+}
+
+static void um_realm_kerberos_membership_skeleton_iface_init (UmRealmKerberosMembershipIface *iface);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (UmRealmKerberosMembershipSkeleton, um_realm_kerberos_membership_skeleton,
G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_ADD_PRIVATE (UmRealmKerberosMembershipSkeleton)
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_KERBEROS_MEMBERSHIP,
um_realm_kerberos_membership_skeleton_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (UmRealmKerberosMembershipSkeleton, um_realm_kerberos_membership_skeleton,
G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_KERBEROS_MEMBERSHIP,
um_realm_kerberos_membership_skeleton_iface_init));
+
+#endif
+static void
+um_realm_kerberos_membership_skeleton_finalize (GObject *object)
+{
+ UmRealmKerberosMembershipSkeleton *skeleton = UM_REALM_KERBEROS_MEMBERSHIP_SKELETON (object);
+ guint n;
+ for (n = 0; n < 3; n++)
+ g_value_unset (&skeleton->priv->properties[n]);
+ g_free (skeleton->priv->properties);
+ g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+ if (skeleton->priv->changed_properties_idle_source != NULL)
+ g_source_destroy (skeleton->priv->changed_properties_idle_source);
+ g_main_context_unref (skeleton->priv->context);
+ g_mutex_clear (&skeleton->priv->lock);
+ G_OBJECT_CLASS (um_realm_kerberos_membership_skeleton_parent_class)->finalize (object);
+}
+
+static void
+um_realm_kerberos_membership_skeleton_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+ UmRealmKerberosMembershipSkeleton *skeleton = UM_REALM_KERBEROS_MEMBERSHIP_SKELETON (object);
+ g_assert (prop_id != 0 && prop_id - 1 < 3);
+ g_mutex_lock (&skeleton->priv->lock);
+ g_value_copy (&skeleton->priv->properties[prop_id - 1], value);
+ g_mutex_unlock (&skeleton->priv->lock);
+}
+
+static gboolean
+_um_realm_kerberos_membership_emit_changed (gpointer user_data)
+{
+ UmRealmKerberosMembershipSkeleton *skeleton = UM_REALM_KERBEROS_MEMBERSHIP_SKELETON (user_data);
+ GList *l;
+ GVariantBuilder builder;
+ GVariantBuilder invalidated_builder;
+ guint num_changes;
+
+ g_mutex_lock (&skeleton->priv->lock);
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as"));
+ for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next)
+ {
+ ChangedProperty *cp = l->data;
+ GVariant *variant;
+ const GValue *cur_value;
+
+ cur_value = &skeleton->priv->properties[cp->prop_id - 1];
+ if (!_g_value_equal (cur_value, &cp->orig_value))
+ {
+ variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE
(cp->info->parent_struct.signature));
+ g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant);
+ g_variant_unref (variant);
+ num_changes++;
+ }
+ }
+ if (num_changes > 0)
+ {
+ GList *connections, *ll;
+ GVariant *signal_variant;
+ signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)",
"org.freedesktop.realmd.KerberosMembership",
+ &builder, &invalidated_builder));
+ connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+ for (ll = connections; ll != NULL; ll = ll->next)
+ {
+ GDBusConnection *connection = ll->data;
+
+ g_dbus_connection_emit_signal (connection,
+ NULL, g_dbus_interface_skeleton_get_object_path
(G_DBUS_INTERFACE_SKELETON (skeleton)),
+ "org.freedesktop.DBus.Properties",
+ "PropertiesChanged",
+ signal_variant,
+ NULL);
+ }
+ g_variant_unref (signal_variant);
+ g_list_free_full (connections, g_object_unref);
+ }
+ else
+ {
+ g_variant_builder_clear (&builder);
+ g_variant_builder_clear (&invalidated_builder);
+ }
+ g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+ skeleton->priv->changed_properties = NULL;
+ skeleton->priv->changed_properties_idle_source = NULL;
+ g_mutex_unlock (&skeleton->priv->lock);
+ return FALSE;
+}
+
+static void
+_um_realm_kerberos_membership_schedule_emit_changed (UmRealmKerberosMembershipSkeleton *skeleton, const
_ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value)
+{
+ ChangedProperty *cp;
+ GList *l;
+ cp = NULL;
+ for (l = skeleton->priv->changed_properties; l != NULL; l = l->next)
+ {
+ ChangedProperty *i_cp = l->data;
+ if (i_cp->info == info)
+ {
+ cp = i_cp;
+ break;
+ }
+ }
+ if (cp == NULL)
+ {
+ cp = g_new0 (ChangedProperty, 1);
+ cp->prop_id = prop_id;
+ cp->info = info;
+ skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp);
+ g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value));
+ g_value_copy (orig_value, &cp->orig_value);
+ }
+}
+
+static void
+um_realm_kerberos_membership_skeleton_notify (GObject *object,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+ UmRealmKerberosMembershipSkeleton *skeleton = UM_REALM_KERBEROS_MEMBERSHIP_SKELETON (object);
+ g_mutex_lock (&skeleton->priv->lock);
+ if (skeleton->priv->changed_properties != NULL &&
+ skeleton->priv->changed_properties_idle_source == NULL)
+ {
+ skeleton->priv->changed_properties_idle_source = g_idle_source_new ();
+ g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT);
+ g_source_set_callback (skeleton->priv->changed_properties_idle_source,
_um_realm_kerberos_membership_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref);
+ g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context);
+ g_source_unref (skeleton->priv->changed_properties_idle_source);
+ }
+ g_mutex_unlock (&skeleton->priv->lock);
+}
+
+static void
+um_realm_kerberos_membership_skeleton_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ UmRealmKerberosMembershipSkeleton *skeleton = UM_REALM_KERBEROS_MEMBERSHIP_SKELETON (object);
+ g_assert (prop_id != 0 && prop_id - 1 < 3);
+ g_mutex_lock (&skeleton->priv->lock);
+ g_object_freeze_notify (object);
+ if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1]))
+ {
+ if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL)
+ _um_realm_kerberos_membership_schedule_emit_changed (skeleton,
_um_realm_kerberos_membership_property_info_pointers[prop_id - 1], prop_id,
&skeleton->priv->properties[prop_id - 1]);
+ g_value_copy (value, &skeleton->priv->properties[prop_id - 1]);
+ g_object_notify_by_pspec (object, pspec);
+ }
+ g_mutex_unlock (&skeleton->priv->lock);
+ g_object_thaw_notify (object);
+}
+
+static void
+um_realm_kerberos_membership_skeleton_init (UmRealmKerberosMembershipSkeleton *skeleton)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+ skeleton->priv = um_realm_kerberos_membership_skeleton_get_instance_private (skeleton);
+#else
+ skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, UM_REALM_TYPE_KERBEROS_MEMBERSHIP_SKELETON,
UmRealmKerberosMembershipSkeletonPrivate);
+#endif
+
+ g_mutex_init (&skeleton->priv->lock);
+ skeleton->priv->context = g_main_context_ref_thread_default ();
+ skeleton->priv->properties = g_new0 (GValue, 3);
+ g_value_init (&skeleton->priv->properties[0], G_TYPE_STRING);
+ g_value_init (&skeleton->priv->properties[1], G_TYPE_VARIANT);
+ g_value_init (&skeleton->priv->properties[2], G_TYPE_VARIANT);
+}
+
+static const gchar *
+um_realm_kerberos_membership_skeleton_get_suggested_administrator (UmRealmKerberosMembership *object)
+{
+ UmRealmKerberosMembershipSkeleton *skeleton = UM_REALM_KERBEROS_MEMBERSHIP_SKELETON (object);
+ const gchar *value;
+ g_mutex_lock (&skeleton->priv->lock);
+ value = g_value_get_string (&(skeleton->priv->properties[0]));
+ g_mutex_unlock (&skeleton->priv->lock);
+ return value;
+}
+
+static GVariant *
+um_realm_kerberos_membership_skeleton_get_supported_join_credentials (UmRealmKerberosMembership *object)
+{
+ UmRealmKerberosMembershipSkeleton *skeleton = UM_REALM_KERBEROS_MEMBERSHIP_SKELETON (object);
+ GVariant *value;
+ g_mutex_lock (&skeleton->priv->lock);
+ value = g_value_get_variant (&(skeleton->priv->properties[1]));
+ g_mutex_unlock (&skeleton->priv->lock);
+ return value;
+}
+
+static GVariant *
+um_realm_kerberos_membership_skeleton_get_supported_leave_credentials (UmRealmKerberosMembership *object)
+{
+ UmRealmKerberosMembershipSkeleton *skeleton = UM_REALM_KERBEROS_MEMBERSHIP_SKELETON (object);
+ GVariant *value;
+ g_mutex_lock (&skeleton->priv->lock);
+ value = g_value_get_variant (&(skeleton->priv->properties[2]));
+ g_mutex_unlock (&skeleton->priv->lock);
+ return value;
+}
+
+static void
+um_realm_kerberos_membership_skeleton_class_init (UmRealmKerberosMembershipSkeletonClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusInterfaceSkeletonClass *skeleton_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = um_realm_kerberos_membership_skeleton_finalize;
+ gobject_class->get_property = um_realm_kerberos_membership_skeleton_get_property;
+ gobject_class->set_property = um_realm_kerberos_membership_skeleton_set_property;
+ gobject_class->notify = um_realm_kerberos_membership_skeleton_notify;
+
+
+ um_realm_kerberos_membership_override_properties (gobject_class, 1);
+
+ skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+ skeleton_class->get_info = um_realm_kerberos_membership_skeleton_dbus_interface_get_info;
+ skeleton_class->get_properties = um_realm_kerberos_membership_skeleton_dbus_interface_get_properties;
+ skeleton_class->flush = um_realm_kerberos_membership_skeleton_dbus_interface_flush;
+ skeleton_class->get_vtable = um_realm_kerberos_membership_skeleton_dbus_interface_get_vtable;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+ g_type_class_add_private (klass, sizeof (UmRealmKerberosMembershipSkeletonPrivate));
+#endif
+}
+
+static void
+um_realm_kerberos_membership_skeleton_iface_init (UmRealmKerberosMembershipIface *iface)
+{
+ iface->get_suggested_administrator = um_realm_kerberos_membership_skeleton_get_suggested_administrator;
+ iface->get_supported_join_credentials =
um_realm_kerberos_membership_skeleton_get_supported_join_credentials;
+ iface->get_supported_leave_credentials =
um_realm_kerberos_membership_skeleton_get_supported_leave_credentials;
+}
+
+/**
+ * um_realm_kerberos_membership_skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-KerberosMembership.top_of_page">org.freedesktop.realmd.KerberosMembership</link>.
+ *
+ * Returns: (transfer full) (type UmRealmKerberosMembershipSkeleton): The skeleton object.
+ */
+UmRealmKerberosMembership *
+um_realm_kerberos_membership_skeleton_new (void)
+{
+ return UM_REALM_KERBEROS_MEMBERSHIP (g_object_new (UM_REALM_TYPE_KERBEROS_MEMBERSHIP_SKELETON, NULL));
+}
+
+/* ------------------------------------------------------------------------
+ * Code for Object, ObjectProxy and ObjectSkeleton
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:UmRealmObject
+ * @title: UmRealmObject
+ * @short_description: Specialized GDBusObject types
+ *
+ * This section contains the #UmRealmObject, #UmRealmObjectProxy, and #UmRealmObjectSkeleton types which
make it easier to work with objects implementing generated types for D-Bus interfaces.
+ */
+
+/**
+ * UmRealmObject:
+ *
+ * The #UmRealmObject type is a specialized container of interfaces.
+ */
+
+/**
+ * UmRealmObjectIface:
+ * @parent_iface: The parent interface.
+ *
+ * Virtual table for the #UmRealmObject interface.
+ */
+
+typedef UmRealmObjectIface UmRealmObjectInterface;
+G_DEFINE_INTERFACE_WITH_CODE (UmRealmObject, um_realm_object, G_TYPE_OBJECT,
g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_DBUS_OBJECT));
+
+static void
+um_realm_object_default_init (UmRealmObjectIface *iface)
+{
+ /**
+ * UmRealmObject:provider:
+ *
+ * The #UmRealmProvider instance corresponding to the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Provider.top_of_page">org.freedesktop.realmd.Provider</link>,
if any.
+ *
+ * Connect to the #GObject::notify signal to get informed of property changes.
+ */
+ g_object_interface_install_property (iface, g_param_spec_object ("provider", "provider", "provider",
UM_REALM_TYPE_PROVIDER, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS));
+
+ /**
+ * UmRealmObject:service:
+ *
+ * The #UmRealmService instance corresponding to the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Service.top_of_page">org.freedesktop.realmd.Service</link>,
if any.
+ *
+ * Connect to the #GObject::notify signal to get informed of property changes.
+ */
+ g_object_interface_install_property (iface, g_param_spec_object ("service", "service", "service",
UM_REALM_TYPE_SERVICE, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS));
+
+ /**
+ * UmRealmObject:common:
+ *
+ * The #UmRealmCommon instance corresponding to the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Realm.top_of_page">org.freedesktop.realmd.Realm</link>, if
any.
+ *
+ * Connect to the #GObject::notify signal to get informed of property changes.
+ */
+ g_object_interface_install_property (iface, g_param_spec_object ("common", "common", "common",
UM_REALM_TYPE_COMMON, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS));
+
+ /**
+ * UmRealmObject:kerberos:
+ *
+ * The #UmRealmKerberos instance corresponding to the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Kerberos.top_of_page">org.freedesktop.realmd.Kerberos</link>,
if any.
+ *
+ * Connect to the #GObject::notify signal to get informed of property changes.
+ */
+ g_object_interface_install_property (iface, g_param_spec_object ("kerberos", "kerberos", "kerberos",
UM_REALM_TYPE_KERBEROS, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS));
+
+ /**
+ * UmRealmObject:kerberos-membership:
+ *
+ * The #UmRealmKerberosMembership instance corresponding to the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-KerberosMembership.top_of_page">org.freedesktop.realmd.KerberosMembership</link>,
if any.
+ *
+ * Connect to the #GObject::notify signal to get informed of property changes.
+ */
+ g_object_interface_install_property (iface, g_param_spec_object ("kerberos-membership",
"kerberos-membership", "kerberos-membership", UM_REALM_TYPE_KERBEROS_MEMBERSHIP,
G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS));
+
+}
+
+/**
+ * um_realm_object_get_provider:
+ * @object: A #UmRealmObject.
+ *
+ * Gets the #UmRealmProvider instance for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Provider.top_of_page">org.freedesktop.realmd.Provider</link>
on @object, if any.
+ *
+ * Returns: (transfer full): A #UmRealmProvider that must be freed with g_object_unref() or %NULL if @object
does not implement the interface.
+ */
+UmRealmProvider *um_realm_object_get_provider (UmRealmObject *object)
+{
+ GDBusInterface *ret;
+ ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.Provider");
+ if (ret == NULL)
+ return NULL;
+ return UM_REALM_PROVIDER (ret);
+}
+
+/**
+ * um_realm_object_get_service:
+ * @object: A #UmRealmObject.
+ *
+ * Gets the #UmRealmService instance for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Service.top_of_page">org.freedesktop.realmd.Service</link> on
@object, if any.
+ *
+ * Returns: (transfer full): A #UmRealmService that must be freed with g_object_unref() or %NULL if @object
does not implement the interface.
+ */
+UmRealmService *um_realm_object_get_service (UmRealmObject *object)
+{
+ GDBusInterface *ret;
+ ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.Service");
+ if (ret == NULL)
+ return NULL;
+ return UM_REALM_SERVICE (ret);
+}
+
+/**
+ * um_realm_object_get_common:
+ * @object: A #UmRealmObject.
+ *
+ * Gets the #UmRealmCommon instance for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Realm.top_of_page">org.freedesktop.realmd.Realm</link> on
@object, if any.
+ *
+ * Returns: (transfer full): A #UmRealmCommon that must be freed with g_object_unref() or %NULL if @object
does not implement the interface.
+ */
+UmRealmCommon *um_realm_object_get_common (UmRealmObject *object)
+{
+ GDBusInterface *ret;
+ ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.Realm");
+ if (ret == NULL)
+ return NULL;
+ return UM_REALM_COMMON (ret);
+}
+
+/**
+ * um_realm_object_get_kerberos:
+ * @object: A #UmRealmObject.
+ *
+ * Gets the #UmRealmKerberos instance for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Kerberos.top_of_page">org.freedesktop.realmd.Kerberos</link>
on @object, if any.
+ *
+ * Returns: (transfer full): A #UmRealmKerberos that must be freed with g_object_unref() or %NULL if @object
does not implement the interface.
+ */
+UmRealmKerberos *um_realm_object_get_kerberos (UmRealmObject *object)
+{
+ GDBusInterface *ret;
+ ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.Kerberos");
+ if (ret == NULL)
+ return NULL;
+ return UM_REALM_KERBEROS (ret);
+}
+
+/**
+ * um_realm_object_get_kerberos_membership:
+ * @object: A #UmRealmObject.
+ *
+ * Gets the #UmRealmKerberosMembership instance for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-KerberosMembership.top_of_page">org.freedesktop.realmd.KerberosMembership</link>
on @object, if any.
+ *
+ * Returns: (transfer full): A #UmRealmKerberosMembership that must be freed with g_object_unref() or %NULL
if @object does not implement the interface.
+ */
+UmRealmKerberosMembership *um_realm_object_get_kerberos_membership (UmRealmObject *object)
+{
+ GDBusInterface *ret;
+ ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.KerberosMembership");
+ if (ret == NULL)
+ return NULL;
+ return UM_REALM_KERBEROS_MEMBERSHIP (ret);
+}
+
+
+/**
+ * um_realm_object_peek_provider: (skip)
+ * @object: A #UmRealmObject.
+ *
+ * Like um_realm_object_get_provider() but doesn't increase the reference count on the returned object.
+ *
+ * <warning>It is not safe to use the returned object if you are on another thread than the one where the
#GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning>
+ *
+ * Returns: (transfer none): A #UmRealmProvider or %NULL if @object does not implement the interface. Do not
free the returned object, it is owned by @object.
+ */
+UmRealmProvider *um_realm_object_peek_provider (UmRealmObject *object)
+{
+ GDBusInterface *ret;
+ ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.Provider");
+ if (ret == NULL)
+ return NULL;
+ g_object_unref (ret);
+ return UM_REALM_PROVIDER (ret);
+}
+
+/**
+ * um_realm_object_peek_service: (skip)
+ * @object: A #UmRealmObject.
+ *
+ * Like um_realm_object_get_service() but doesn't increase the reference count on the returned object.
+ *
+ * <warning>It is not safe to use the returned object if you are on another thread than the one where the
#GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning>
+ *
+ * Returns: (transfer none): A #UmRealmService or %NULL if @object does not implement the interface. Do not
free the returned object, it is owned by @object.
+ */
+UmRealmService *um_realm_object_peek_service (UmRealmObject *object)
+{
+ GDBusInterface *ret;
+ ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.Service");
+ if (ret == NULL)
+ return NULL;
+ g_object_unref (ret);
+ return UM_REALM_SERVICE (ret);
+}
+
+/**
+ * um_realm_object_peek_common: (skip)
+ * @object: A #UmRealmObject.
+ *
+ * Like um_realm_object_get_common() but doesn't increase the reference count on the returned object.
+ *
+ * <warning>It is not safe to use the returned object if you are on another thread than the one where the
#GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning>
+ *
+ * Returns: (transfer none): A #UmRealmCommon or %NULL if @object does not implement the interface. Do not
free the returned object, it is owned by @object.
+ */
+UmRealmCommon *um_realm_object_peek_common (UmRealmObject *object)
+{
+ GDBusInterface *ret;
+ ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.Realm");
+ if (ret == NULL)
+ return NULL;
+ g_object_unref (ret);
+ return UM_REALM_COMMON (ret);
+}
+
+/**
+ * um_realm_object_peek_kerberos: (skip)
+ * @object: A #UmRealmObject.
+ *
+ * Like um_realm_object_get_kerberos() but doesn't increase the reference count on the returned object.
+ *
+ * <warning>It is not safe to use the returned object if you are on another thread than the one where the
#GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning>
+ *
+ * Returns: (transfer none): A #UmRealmKerberos or %NULL if @object does not implement the interface. Do not
free the returned object, it is owned by @object.
+ */
+UmRealmKerberos *um_realm_object_peek_kerberos (UmRealmObject *object)
+{
+ GDBusInterface *ret;
+ ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.Kerberos");
+ if (ret == NULL)
+ return NULL;
+ g_object_unref (ret);
+ return UM_REALM_KERBEROS (ret);
+}
+
+/**
+ * um_realm_object_peek_kerberos_membership: (skip)
+ * @object: A #UmRealmObject.
+ *
+ * Like um_realm_object_get_kerberos_membership() but doesn't increase the reference count on the returned
object.
+ *
+ * <warning>It is not safe to use the returned object if you are on another thread than the one where the
#GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning>
+ *
+ * Returns: (transfer none): A #UmRealmKerberosMembership or %NULL if @object does not implement the
interface. Do not free the returned object, it is owned by @object.
+ */
+UmRealmKerberosMembership *um_realm_object_peek_kerberos_membership (UmRealmObject *object)
+{
+ GDBusInterface *ret;
+ ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.KerberosMembership");
+ if (ret == NULL)
+ return NULL;
+ g_object_unref (ret);
+ return UM_REALM_KERBEROS_MEMBERSHIP (ret);
+}
+
+
+static void
+um_realm_object_notify (GDBusObject *object, GDBusInterface *interface)
+{
+ g_object_notify (G_OBJECT (object), ((_ExtendedGDBusInterfaceInfo *) g_dbus_interface_get_info
(interface))->hyphen_name);
+}
+
+/**
+ * UmRealmObjectProxy:
+ *
+ * The #UmRealmObjectProxy structure contains only private data and should only be accessed using the
provided API.
+ */
+
+/**
+ * UmRealmObjectProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #UmRealmObjectProxy.
+ */
+
+static void
+um_realm_object_proxy__um_realm_object_iface_init (UmRealmObjectIface *iface G_GNUC_UNUSED)
+{
+}
+
+static void
+um_realm_object_proxy__g_dbus_object_iface_init (GDBusObjectIface *iface)
+{
+ iface->interface_added = um_realm_object_notify;
+ iface->interface_removed = um_realm_object_notify;
+}
+
+
+G_DEFINE_TYPE_WITH_CODE (UmRealmObjectProxy, um_realm_object_proxy, G_TYPE_DBUS_OBJECT_PROXY,
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_OBJECT,
um_realm_object_proxy__um_realm_object_iface_init)
+ G_IMPLEMENT_INTERFACE (G_TYPE_DBUS_OBJECT,
um_realm_object_proxy__g_dbus_object_iface_init));
+
+static void
+um_realm_object_proxy_init (UmRealmObjectProxy *object G_GNUC_UNUSED)
+{
+}
+
+static void
+um_realm_object_proxy_set_property (GObject *gobject,
+ guint prop_id,
+ const GValue *value G_GNUC_UNUSED,
+ GParamSpec *pspec)
+{
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+}
+
+static void
+um_realm_object_proxy_get_property (GObject *gobject,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ UmRealmObjectProxy *object = UM_REALM_OBJECT_PROXY (gobject);
+ GDBusInterface *interface;
+
+ switch (prop_id)
+ {
+ case 1:
+ interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.Provider");
+ g_value_take_object (value, interface);
+ break;
+
+ case 2:
+ interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.Service");
+ g_value_take_object (value, interface);
+ break;
+
+ case 3:
+ interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.Realm");
+ g_value_take_object (value, interface);
+ break;
+
+ case 4:
+ interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.Kerberos");
+ g_value_take_object (value, interface);
+ break;
+
+ case 5:
+ interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object),
"org.freedesktop.realmd.KerberosMembership");
+ g_value_take_object (value, interface);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+um_realm_object_proxy_class_init (UmRealmObjectProxyClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->set_property = um_realm_object_proxy_set_property;
+ gobject_class->get_property = um_realm_object_proxy_get_property;
+
+ g_object_class_override_property (gobject_class, 1, "provider");
+ g_object_class_override_property (gobject_class, 2, "service");
+ g_object_class_override_property (gobject_class, 3, "common");
+ g_object_class_override_property (gobject_class, 4, "kerberos");
+ g_object_class_override_property (gobject_class, 5, "kerberos-membership");
+}
+
+/**
+ * um_realm_object_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @object_path: An object path.
+ *
+ * Creates a new proxy object.
+ *
+ * Returns: (transfer full): The proxy object.
+ */
+UmRealmObjectProxy *
+um_realm_object_proxy_new (GDBusConnection *connection,
+ const gchar *object_path)
+{
+ g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), NULL);
+ g_return_val_if_fail (g_variant_is_object_path (object_path), NULL);
+ return UM_REALM_OBJECT_PROXY (g_object_new (UM_REALM_TYPE_OBJECT_PROXY, "g-connection", connection,
"g-object-path", object_path, NULL));
+}
+
+/**
+ * UmRealmObjectSkeleton:
+ *
+ * The #UmRealmObjectSkeleton structure contains only private data and should only be accessed using the
provided API.
+ */
+
+/**
+ * UmRealmObjectSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #UmRealmObjectSkeleton.
+ */
+
+static void
+um_realm_object_skeleton__um_realm_object_iface_init (UmRealmObjectIface *iface G_GNUC_UNUSED)
+{
+}
+
+
+static void
+um_realm_object_skeleton__g_dbus_object_iface_init (GDBusObjectIface *iface)
+{
+ iface->interface_added = um_realm_object_notify;
+ iface->interface_removed = um_realm_object_notify;
+}
+
+G_DEFINE_TYPE_WITH_CODE (UmRealmObjectSkeleton, um_realm_object_skeleton, G_TYPE_DBUS_OBJECT_SKELETON,
+ G_IMPLEMENT_INTERFACE (UM_REALM_TYPE_OBJECT,
um_realm_object_skeleton__um_realm_object_iface_init)
+ G_IMPLEMENT_INTERFACE (G_TYPE_DBUS_OBJECT,
um_realm_object_skeleton__g_dbus_object_iface_init));
+
+static void
+um_realm_object_skeleton_init (UmRealmObjectSkeleton *object G_GNUC_UNUSED)
+{
+}
+
+static void
+um_realm_object_skeleton_set_property (GObject *gobject,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ UmRealmObjectSkeleton *object = UM_REALM_OBJECT_SKELETON (gobject);
+ GDBusInterfaceSkeleton *interface;
+
+ switch (prop_id)
+ {
+ case 1:
+ interface = g_value_get_object (value);
+ if (interface != NULL)
+ {
+ g_warn_if_fail (UM_REALM_IS_PROVIDER (interface));
+ g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface);
+ }
+ else
+ {
+ g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object),
"org.freedesktop.realmd.Provider");
+ }
+ break;
+
+ case 2:
+ interface = g_value_get_object (value);
+ if (interface != NULL)
+ {
+ g_warn_if_fail (UM_REALM_IS_SERVICE (interface));
+ g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface);
+ }
+ else
+ {
+ g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object),
"org.freedesktop.realmd.Service");
+ }
+ break;
+
+ case 3:
+ interface = g_value_get_object (value);
+ if (interface != NULL)
+ {
+ g_warn_if_fail (UM_REALM_IS_COMMON (interface));
+ g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface);
+ }
+ else
+ {
+ g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object),
"org.freedesktop.realmd.Realm");
+ }
+ break;
+
+ case 4:
+ interface = g_value_get_object (value);
+ if (interface != NULL)
+ {
+ g_warn_if_fail (UM_REALM_IS_KERBEROS (interface));
+ g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface);
+ }
+ else
+ {
+ g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object),
"org.freedesktop.realmd.Kerberos");
+ }
+ break;
+
+ case 5:
+ interface = g_value_get_object (value);
+ if (interface != NULL)
+ {
+ g_warn_if_fail (UM_REALM_IS_KERBEROS_MEMBERSHIP (interface));
+ g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface);
+ }
+ else
+ {
+ g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object),
"org.freedesktop.realmd.KerberosMembership");
+ }
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+um_realm_object_skeleton_get_property (GObject *gobject,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ UmRealmObjectSkeleton *object = UM_REALM_OBJECT_SKELETON (gobject);
+ GDBusInterface *interface;
+
+ switch (prop_id)
+ {
+ case 1:
+ interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.Provider");
+ g_value_take_object (value, interface);
+ break;
+
+ case 2:
+ interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.Service");
+ g_value_take_object (value, interface);
+ break;
+
+ case 3:
+ interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.Realm");
+ g_value_take_object (value, interface);
+ break;
+
+ case 4:
+ interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.freedesktop.realmd.Kerberos");
+ g_value_take_object (value, interface);
+ break;
+
+ case 5:
+ interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object),
"org.freedesktop.realmd.KerberosMembership");
+ g_value_take_object (value, interface);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+um_realm_object_skeleton_class_init (UmRealmObjectSkeletonClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->set_property = um_realm_object_skeleton_set_property;
+ gobject_class->get_property = um_realm_object_skeleton_get_property;
+
+ g_object_class_override_property (gobject_class, 1, "provider");
+ g_object_class_override_property (gobject_class, 2, "service");
+ g_object_class_override_property (gobject_class, 3, "common");
+ g_object_class_override_property (gobject_class, 4, "kerberos");
+ g_object_class_override_property (gobject_class, 5, "kerberos-membership");
+}
+
+/**
+ * um_realm_object_skeleton_new:
+ * @object_path: An object path.
+ *
+ * Creates a new skeleton object.
+ *
+ * Returns: (transfer full): The skeleton object.
+ */
+UmRealmObjectSkeleton *
+um_realm_object_skeleton_new (const gchar *object_path)
+{
+ g_return_val_if_fail (g_variant_is_object_path (object_path), NULL);
+ return UM_REALM_OBJECT_SKELETON (g_object_new (UM_REALM_TYPE_OBJECT_SKELETON, "g-object-path",
object_path, NULL));
+}
+
+/**
+ * um_realm_object_skeleton_set_provider:
+ * @object: A #UmRealmObjectSkeleton.
+ * @interface_: (allow-none): A #UmRealmProvider or %NULL to clear the interface.
+ *
+ * Sets the #UmRealmProvider instance for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Provider.top_of_page">org.freedesktop.realmd.Provider</link>
on @object.
+ */
+void um_realm_object_skeleton_set_provider (UmRealmObjectSkeleton *object, UmRealmProvider *interface_)
+{
+ g_object_set (G_OBJECT (object), "provider", interface_, NULL);
+}
+
+/**
+ * um_realm_object_skeleton_set_service:
+ * @object: A #UmRealmObjectSkeleton.
+ * @interface_: (allow-none): A #UmRealmService or %NULL to clear the interface.
+ *
+ * Sets the #UmRealmService instance for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Service.top_of_page">org.freedesktop.realmd.Service</link> on
@object.
+ */
+void um_realm_object_skeleton_set_service (UmRealmObjectSkeleton *object, UmRealmService *interface_)
+{
+ g_object_set (G_OBJECT (object), "service", interface_, NULL);
+}
+
+/**
+ * um_realm_object_skeleton_set_common:
+ * @object: A #UmRealmObjectSkeleton.
+ * @interface_: (allow-none): A #UmRealmCommon or %NULL to clear the interface.
+ *
+ * Sets the #UmRealmCommon instance for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Realm.top_of_page">org.freedesktop.realmd.Realm</link> on
@object.
+ */
+void um_realm_object_skeleton_set_common (UmRealmObjectSkeleton *object, UmRealmCommon *interface_)
+{
+ g_object_set (G_OBJECT (object), "common", interface_, NULL);
+}
+
+/**
+ * um_realm_object_skeleton_set_kerberos:
+ * @object: A #UmRealmObjectSkeleton.
+ * @interface_: (allow-none): A #UmRealmKerberos or %NULL to clear the interface.
+ *
+ * Sets the #UmRealmKerberos instance for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-Kerberos.top_of_page">org.freedesktop.realmd.Kerberos</link>
on @object.
+ */
+void um_realm_object_skeleton_set_kerberos (UmRealmObjectSkeleton *object, UmRealmKerberos *interface_)
+{
+ g_object_set (G_OBJECT (object), "kerberos", interface_, NULL);
+}
+
+/**
+ * um_realm_object_skeleton_set_kerberos_membership:
+ * @object: A #UmRealmObjectSkeleton.
+ * @interface_: (allow-none): A #UmRealmKerberosMembership or %NULL to clear the interface.
+ *
+ * Sets the #UmRealmKerberosMembership instance for the D-Bus interface <link
linkend="gdbus-interface-org-freedesktop-realmd-KerberosMembership.top_of_page">org.freedesktop.realmd.KerberosMembership</link>
on @object.
+ */
+void um_realm_object_skeleton_set_kerberos_membership (UmRealmObjectSkeleton *object,
UmRealmKerberosMembership *interface_)
+{
+ g_object_set (G_OBJECT (object), "kerberos-membership", interface_, NULL);
+}
+
+
+/* ------------------------------------------------------------------------
+ * Code for ObjectManager client
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:UmRealmObjectManagerClient
+ * @title: UmRealmObjectManagerClient
+ * @short_description: Generated GDBusObjectManagerClient type
+ *
+ * This section contains a #GDBusObjectManagerClient that uses
um_realm_object_manager_client_get_proxy_type() as the #GDBusProxyTypeFunc.
+ */
+
+/**
+ * UmRealmObjectManagerClient:
+ *
+ * The #UmRealmObjectManagerClient structure contains only private data and should only be accessed using
the provided API.
+ */
+
+/**
+ * UmRealmObjectManagerClientClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #UmRealmObjectManagerClient.
+ */
+
+G_DEFINE_TYPE (UmRealmObjectManagerClient, um_realm_object_manager_client,
G_TYPE_DBUS_OBJECT_MANAGER_CLIENT);
+
+static void
+um_realm_object_manager_client_init (UmRealmObjectManagerClient *manager G_GNUC_UNUSED)
+{
+}
+
+static void
+um_realm_object_manager_client_class_init (UmRealmObjectManagerClientClass *klass G_GNUC_UNUSED)
+{
+}
+
+/**
+ * um_realm_object_manager_client_get_proxy_type:
+ * @manager: A #GDBusObjectManagerClient.
+ * @object_path: The object path of the remote object (unused).
+ * @interface_name: (allow-none): Interface name of the remote object or %NULL to get the object proxy
#GType.
+ * @user_data: User data (unused).
+ *
+ * A #GDBusProxyTypeFunc that maps @interface_name to the generated #GDBusObjectProxy<!-- -->- and
#GDBusProxy<!-- -->-derived types.
+ *
+ * Returns: A #GDBusProxy<!-- -->-derived #GType if @interface_name is not %NULL, otherwise the #GType for
#UmRealmObjectProxy.
+ */
+GType
+um_realm_object_manager_client_get_proxy_type (GDBusObjectManagerClient *manager G_GNUC_UNUSED, const gchar
*object_path G_GNUC_UNUSED, const gchar *interface_name, gpointer user_data G_GNUC_UNUSED)
+{
+ static gsize once_init_value = 0;
+ static GHashTable *lookup_hash;
+ GType ret;
+
+ if (interface_name == NULL)
+ return UM_REALM_TYPE_OBJECT_PROXY;
+ if (g_once_init_enter (&once_init_value))
+ {
+ lookup_hash = g_hash_table_new (g_str_hash, g_str_equal);
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.realmd.Provider", GSIZE_TO_POINTER
(UM_REALM_TYPE_PROVIDER_PROXY));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.realmd.Service", GSIZE_TO_POINTER
(UM_REALM_TYPE_SERVICE_PROXY));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.realmd.Realm", GSIZE_TO_POINTER
(UM_REALM_TYPE_COMMON_PROXY));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.realmd.Kerberos", GSIZE_TO_POINTER
(UM_REALM_TYPE_KERBEROS_PROXY));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.freedesktop.realmd.KerberosMembership",
GSIZE_TO_POINTER (UM_REALM_TYPE_KERBEROS_MEMBERSHIP_PROXY));
+ g_once_init_leave (&once_init_value, 1);
+ }
+ ret = (GType) GPOINTER_TO_SIZE (g_hash_table_lookup (lookup_hash, interface_name));
+ if (ret == (GType) 0)
+ ret = G_TYPE_DBUS_PROXY;
+ return ret;
+}
+
+/**
+ * um_realm_object_manager_client_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates #GDBusObjectManagerClient using um_realm_object_manager_client_get_proxy_type() as
the #GDBusProxyTypeFunc. See g_dbus_object_manager_client_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_object_manager_client_new_finish() to get the result of the operation.
+ *
+ * See um_realm_object_manager_client_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+um_realm_object_manager_client_new (
+ GDBusConnection *connection,
+ GDBusObjectManagerClientFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (UM_REALM_TYPE_OBJECT_MANAGER_CLIENT, G_PRIORITY_DEFAULT, cancellable,
callback, user_data, "flags", flags, "name", name, "connection", connection, "object-path", object_path,
"get-proxy-type-func", um_realm_object_manager_client_get_proxy_type, NULL);
+}
+
+/**
+ * um_realm_object_manager_client_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
um_realm_object_manager_client_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with um_realm_object_manager_client_new().
+ *
+ * Returns: (transfer full) (type UmRealmObjectManagerClient): The constructed object manager client or
%NULL if @error is set.
+ */
+GDBusObjectManager *
+um_realm_object_manager_client_new_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return G_DBUS_OBJECT_MANAGER (ret);
+ else
+ return NULL;
+}
+
+/**
+ * um_realm_object_manager_client_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates #GDBusObjectManagerClient using um_realm_object_manager_client_get_proxy_type() as
the #GDBusProxyTypeFunc. See g_dbus_object_manager_client_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_object_manager_client_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type UmRealmObjectManagerClient): The constructed object manager client or
%NULL if @error is set.
+ */
+GDBusObjectManager *
+um_realm_object_manager_client_new_sync (
+ GDBusConnection *connection,
+ GDBusObjectManagerClientFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (UM_REALM_TYPE_OBJECT_MANAGER_CLIENT, cancellable, error, "flags", flags, "name",
name, "connection", connection, "object-path", object_path, "get-proxy-type-func",
um_realm_object_manager_client_get_proxy_type, NULL);
+ if (ret != NULL)
+ return G_DBUS_OBJECT_MANAGER (ret);
+ else
+ return NULL;
+}
+
+
+/**
+ * um_realm_object_manager_client_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like um_realm_object_manager_client_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling
this method from.
+ * You can then call um_realm_object_manager_client_new_for_bus_finish() to get the result of the operation.
+ *
+ * See um_realm_object_manager_client_new_for_bus_sync() for the synchronous, blocking version of this
constructor.
+ */
+void
+um_realm_object_manager_client_new_for_bus (
+ GBusType bus_type,
+ GDBusObjectManagerClientFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (UM_REALM_TYPE_OBJECT_MANAGER_CLIENT, G_PRIORITY_DEFAULT, cancellable,
callback, user_data, "flags", flags, "name", name, "bus-type", bus_type, "object-path", object_path,
"get-proxy-type-func", um_realm_object_manager_client_get_proxy_type, NULL);
+}
+
+/**
+ * um_realm_object_manager_client_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to
um_realm_object_manager_client_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with um_realm_object_manager_client_new_for_bus().
+ *
+ * Returns: (transfer full) (type UmRealmObjectManagerClient): The constructed object manager client or
%NULL if @error is set.
+ */
+GDBusObjectManager *
+um_realm_object_manager_client_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return G_DBUS_OBJECT_MANAGER (ret);
+ else
+ return NULL;
+}
+
+/**
+ * um_realm_object_manager_client_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like um_realm_object_manager_client_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See um_realm_object_manager_client_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type UmRealmObjectManagerClient): The constructed object manager client or
%NULL if @error is set.
+ */
+GDBusObjectManager *
+um_realm_object_manager_client_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusObjectManagerClientFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (UM_REALM_TYPE_OBJECT_MANAGER_CLIENT, cancellable, error, "flags", flags, "name",
name, "bus-type", bus_type, "object-path", object_path, "get-proxy-type-func",
um_realm_object_manager_client_get_proxy_type, NULL);
+ if (ret != NULL)
+ return G_DBUS_OBJECT_MANAGER (ret);
+ else
+ return NULL;
+}
+
+
diff --git a/gnome-initial-setup/pages/password/um-realm-generated.h
b/gnome-initial-setup/pages/password/um-realm-generated.h
new file mode 100644
index 0000000..571743d
--- /dev/null
+++ b/gnome-initial-setup/pages/password/um-realm-generated.h
@@ -0,0 +1,1147 @@
+/*
+ * Generated by gdbus-codegen 2.39.2. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifndef __UM_REALM_GENERATED_H__
+#define __UM_REALM_GENERATED_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+
+/* ------------------------------------------------------------------------ */
+/* Declarations for org.freedesktop.realmd.Provider */
+
+#define UM_REALM_TYPE_PROVIDER (um_realm_provider_get_type ())
+#define UM_REALM_PROVIDER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UM_REALM_TYPE_PROVIDER, UmRealmProvider))
+#define UM_REALM_IS_PROVIDER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UM_REALM_TYPE_PROVIDER))
+#define UM_REALM_PROVIDER_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), UM_REALM_TYPE_PROVIDER,
UmRealmProviderIface))
+
+struct _UmRealmProvider;
+typedef struct _UmRealmProvider UmRealmProvider;
+typedef struct _UmRealmProviderIface UmRealmProviderIface;
+
+struct _UmRealmProviderIface
+{
+ GTypeInterface parent_iface;
+
+
+ gboolean (*handle_discover) (
+ UmRealmProvider *object,
+ GDBusMethodInvocation *invocation,
+ const gchar *arg_string,
+ GVariant *arg_options);
+
+ const gchar * (*get_name) (UmRealmProvider *object);
+
+ const gchar *const * (*get_realms) (UmRealmProvider *object);
+
+ const gchar * (*get_version) (UmRealmProvider *object);
+
+};
+
+GType um_realm_provider_get_type (void) G_GNUC_CONST;
+
+GDBusInterfaceInfo *um_realm_provider_interface_info (void);
+guint um_realm_provider_override_properties (GObjectClass *klass, guint property_id_begin);
+
+
+/* D-Bus method call completion functions: */
+void um_realm_provider_complete_discover (
+ UmRealmProvider *object,
+ GDBusMethodInvocation *invocation,
+ gint relevance,
+ const gchar *const *realm);
+
+
+
+/* D-Bus method calls: */
+void um_realm_provider_call_discover (
+ UmRealmProvider *proxy,
+ const gchar *arg_string,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean um_realm_provider_call_discover_finish (
+ UmRealmProvider *proxy,
+ gint *out_relevance,
+ gchar ***out_realm,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean um_realm_provider_call_discover_sync (
+ UmRealmProvider *proxy,
+ const gchar *arg_string,
+ GVariant *arg_options,
+ gint *out_relevance,
+ gchar ***out_realm,
+ GCancellable *cancellable,
+ GError **error);
+
+
+
+/* D-Bus property accessors: */
+const gchar *um_realm_provider_get_name (UmRealmProvider *object);
+gchar *um_realm_provider_dup_name (UmRealmProvider *object);
+void um_realm_provider_set_name (UmRealmProvider *object, const gchar *value);
+
+const gchar *um_realm_provider_get_version (UmRealmProvider *object);
+gchar *um_realm_provider_dup_version (UmRealmProvider *object);
+void um_realm_provider_set_version (UmRealmProvider *object, const gchar *value);
+
+const gchar *const *um_realm_provider_get_realms (UmRealmProvider *object);
+gchar **um_realm_provider_dup_realms (UmRealmProvider *object);
+void um_realm_provider_set_realms (UmRealmProvider *object, const gchar *const *value);
+
+
+/* ---- */
+
+#define UM_REALM_TYPE_PROVIDER_PROXY (um_realm_provider_proxy_get_type ())
+#define UM_REALM_PROVIDER_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UM_REALM_TYPE_PROVIDER_PROXY,
UmRealmProviderProxy))
+#define UM_REALM_PROVIDER_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), UM_REALM_TYPE_PROVIDER_PROXY,
UmRealmProviderProxyClass))
+#define UM_REALM_PROVIDER_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), UM_REALM_TYPE_PROVIDER_PROXY,
UmRealmProviderProxyClass))
+#define UM_REALM_IS_PROVIDER_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UM_REALM_TYPE_PROVIDER_PROXY))
+#define UM_REALM_IS_PROVIDER_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), UM_REALM_TYPE_PROVIDER_PROXY))
+
+typedef struct _UmRealmProviderProxy UmRealmProviderProxy;
+typedef struct _UmRealmProviderProxyClass UmRealmProviderProxyClass;
+typedef struct _UmRealmProviderProxyPrivate UmRealmProviderProxyPrivate;
+
+struct _UmRealmProviderProxy
+{
+ /*< private >*/
+ GDBusProxy parent_instance;
+ UmRealmProviderProxyPrivate *priv;
+};
+
+struct _UmRealmProviderProxyClass
+{
+ GDBusProxyClass parent_class;
+};
+
+GType um_realm_provider_proxy_get_type (void) G_GNUC_CONST;
+
+void um_realm_provider_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+UmRealmProvider *um_realm_provider_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error);
+UmRealmProvider *um_realm_provider_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+void um_realm_provider_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+UmRealmProvider *um_realm_provider_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error);
+UmRealmProvider *um_realm_provider_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+
+/* ---- */
+
+#define UM_REALM_TYPE_PROVIDER_SKELETON (um_realm_provider_skeleton_get_type ())
+#define UM_REALM_PROVIDER_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UM_REALM_TYPE_PROVIDER_SKELETON,
UmRealmProviderSkeleton))
+#define UM_REALM_PROVIDER_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), UM_REALM_TYPE_PROVIDER_SKELETON,
UmRealmProviderSkeletonClass))
+#define UM_REALM_PROVIDER_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o),
UM_REALM_TYPE_PROVIDER_SKELETON, UmRealmProviderSkeletonClass))
+#define UM_REALM_IS_PROVIDER_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UM_REALM_TYPE_PROVIDER_SKELETON))
+#define UM_REALM_IS_PROVIDER_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k),
UM_REALM_TYPE_PROVIDER_SKELETON))
+
+typedef struct _UmRealmProviderSkeleton UmRealmProviderSkeleton;
+typedef struct _UmRealmProviderSkeletonClass UmRealmProviderSkeletonClass;
+typedef struct _UmRealmProviderSkeletonPrivate UmRealmProviderSkeletonPrivate;
+
+struct _UmRealmProviderSkeleton
+{
+ /*< private >*/
+ GDBusInterfaceSkeleton parent_instance;
+ UmRealmProviderSkeletonPrivate *priv;
+};
+
+struct _UmRealmProviderSkeletonClass
+{
+ GDBusInterfaceSkeletonClass parent_class;
+};
+
+GType um_realm_provider_skeleton_get_type (void) G_GNUC_CONST;
+
+UmRealmProvider *um_realm_provider_skeleton_new (void);
+
+
+/* ------------------------------------------------------------------------ */
+/* Declarations for org.freedesktop.realmd.Service */
+
+#define UM_REALM_TYPE_SERVICE (um_realm_service_get_type ())
+#define UM_REALM_SERVICE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UM_REALM_TYPE_SERVICE, UmRealmService))
+#define UM_REALM_IS_SERVICE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UM_REALM_TYPE_SERVICE))
+#define UM_REALM_SERVICE_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), UM_REALM_TYPE_SERVICE,
UmRealmServiceIface))
+
+struct _UmRealmService;
+typedef struct _UmRealmService UmRealmService;
+typedef struct _UmRealmServiceIface UmRealmServiceIface;
+
+struct _UmRealmServiceIface
+{
+ GTypeInterface parent_iface;
+
+
+ gboolean (*handle_cancel) (
+ UmRealmService *object,
+ GDBusMethodInvocation *invocation,
+ const gchar *arg_operation);
+
+ gboolean (*handle_release) (
+ UmRealmService *object,
+ GDBusMethodInvocation *invocation);
+
+ gboolean (*handle_set_locale) (
+ UmRealmService *object,
+ GDBusMethodInvocation *invocation,
+ const gchar *arg_locale);
+
+ void (*diagnostics) (
+ UmRealmService *object,
+ const gchar *arg_data,
+ const gchar *arg_operation);
+
+};
+
+GType um_realm_service_get_type (void) G_GNUC_CONST;
+
+GDBusInterfaceInfo *um_realm_service_interface_info (void);
+guint um_realm_service_override_properties (GObjectClass *klass, guint property_id_begin);
+
+
+/* D-Bus method call completion functions: */
+void um_realm_service_complete_cancel (
+ UmRealmService *object,
+ GDBusMethodInvocation *invocation);
+
+void um_realm_service_complete_set_locale (
+ UmRealmService *object,
+ GDBusMethodInvocation *invocation);
+
+void um_realm_service_complete_release (
+ UmRealmService *object,
+ GDBusMethodInvocation *invocation);
+
+
+
+/* D-Bus signal emissions functions: */
+void um_realm_service_emit_diagnostics (
+ UmRealmService *object,
+ const gchar *arg_data,
+ const gchar *arg_operation);
+
+
+
+/* D-Bus method calls: */
+void um_realm_service_call_cancel (
+ UmRealmService *proxy,
+ const gchar *arg_operation,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean um_realm_service_call_cancel_finish (
+ UmRealmService *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean um_realm_service_call_cancel_sync (
+ UmRealmService *proxy,
+ const gchar *arg_operation,
+ GCancellable *cancellable,
+ GError **error);
+
+void um_realm_service_call_set_locale (
+ UmRealmService *proxy,
+ const gchar *arg_locale,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean um_realm_service_call_set_locale_finish (
+ UmRealmService *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean um_realm_service_call_set_locale_sync (
+ UmRealmService *proxy,
+ const gchar *arg_locale,
+ GCancellable *cancellable,
+ GError **error);
+
+void um_realm_service_call_release (
+ UmRealmService *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean um_realm_service_call_release_finish (
+ UmRealmService *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean um_realm_service_call_release_sync (
+ UmRealmService *proxy,
+ GCancellable *cancellable,
+ GError **error);
+
+
+
+/* ---- */
+
+#define UM_REALM_TYPE_SERVICE_PROXY (um_realm_service_proxy_get_type ())
+#define UM_REALM_SERVICE_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UM_REALM_TYPE_SERVICE_PROXY,
UmRealmServiceProxy))
+#define UM_REALM_SERVICE_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), UM_REALM_TYPE_SERVICE_PROXY,
UmRealmServiceProxyClass))
+#define UM_REALM_SERVICE_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), UM_REALM_TYPE_SERVICE_PROXY,
UmRealmServiceProxyClass))
+#define UM_REALM_IS_SERVICE_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UM_REALM_TYPE_SERVICE_PROXY))
+#define UM_REALM_IS_SERVICE_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), UM_REALM_TYPE_SERVICE_PROXY))
+
+typedef struct _UmRealmServiceProxy UmRealmServiceProxy;
+typedef struct _UmRealmServiceProxyClass UmRealmServiceProxyClass;
+typedef struct _UmRealmServiceProxyPrivate UmRealmServiceProxyPrivate;
+
+struct _UmRealmServiceProxy
+{
+ /*< private >*/
+ GDBusProxy parent_instance;
+ UmRealmServiceProxyPrivate *priv;
+};
+
+struct _UmRealmServiceProxyClass
+{
+ GDBusProxyClass parent_class;
+};
+
+GType um_realm_service_proxy_get_type (void) G_GNUC_CONST;
+
+void um_realm_service_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+UmRealmService *um_realm_service_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error);
+UmRealmService *um_realm_service_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+void um_realm_service_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+UmRealmService *um_realm_service_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error);
+UmRealmService *um_realm_service_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+
+/* ---- */
+
+#define UM_REALM_TYPE_SERVICE_SKELETON (um_realm_service_skeleton_get_type ())
+#define UM_REALM_SERVICE_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UM_REALM_TYPE_SERVICE_SKELETON,
UmRealmServiceSkeleton))
+#define UM_REALM_SERVICE_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), UM_REALM_TYPE_SERVICE_SKELETON,
UmRealmServiceSkeletonClass))
+#define UM_REALM_SERVICE_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o),
UM_REALM_TYPE_SERVICE_SKELETON, UmRealmServiceSkeletonClass))
+#define UM_REALM_IS_SERVICE_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UM_REALM_TYPE_SERVICE_SKELETON))
+#define UM_REALM_IS_SERVICE_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), UM_REALM_TYPE_SERVICE_SKELETON))
+
+typedef struct _UmRealmServiceSkeleton UmRealmServiceSkeleton;
+typedef struct _UmRealmServiceSkeletonClass UmRealmServiceSkeletonClass;
+typedef struct _UmRealmServiceSkeletonPrivate UmRealmServiceSkeletonPrivate;
+
+struct _UmRealmServiceSkeleton
+{
+ /*< private >*/
+ GDBusInterfaceSkeleton parent_instance;
+ UmRealmServiceSkeletonPrivate *priv;
+};
+
+struct _UmRealmServiceSkeletonClass
+{
+ GDBusInterfaceSkeletonClass parent_class;
+};
+
+GType um_realm_service_skeleton_get_type (void) G_GNUC_CONST;
+
+UmRealmService *um_realm_service_skeleton_new (void);
+
+
+/* ------------------------------------------------------------------------ */
+/* Declarations for org.freedesktop.realmd.Realm */
+
+#define UM_REALM_TYPE_COMMON (um_realm_common_get_type ())
+#define UM_REALM_COMMON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UM_REALM_TYPE_COMMON, UmRealmCommon))
+#define UM_REALM_IS_COMMON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UM_REALM_TYPE_COMMON))
+#define UM_REALM_COMMON_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), UM_REALM_TYPE_COMMON,
UmRealmCommonIface))
+
+struct _UmRealmCommon;
+typedef struct _UmRealmCommon UmRealmCommon;
+typedef struct _UmRealmCommonIface UmRealmCommonIface;
+
+struct _UmRealmCommonIface
+{
+ GTypeInterface parent_iface;
+
+
+ gboolean (*handle_change_login_policy) (
+ UmRealmCommon *object,
+ GDBusMethodInvocation *invocation,
+ const gchar *arg_login_policy,
+ const gchar *const *arg_permitted_add,
+ const gchar *const *arg_permitted_remove,
+ GVariant *arg_options);
+
+ gboolean (*handle_deconfigure) (
+ UmRealmCommon *object,
+ GDBusMethodInvocation *invocation,
+ GVariant *arg_options);
+
+ const gchar * (*get_configured) (UmRealmCommon *object);
+
+ GVariant * (*get_details) (UmRealmCommon *object);
+
+ const gchar *const * (*get_login_formats) (UmRealmCommon *object);
+
+ const gchar * (*get_login_policy) (UmRealmCommon *object);
+
+ const gchar * (*get_name) (UmRealmCommon *object);
+
+ const gchar *const * (*get_permitted_logins) (UmRealmCommon *object);
+
+ const gchar *const * (*get_supported_interfaces) (UmRealmCommon *object);
+
+};
+
+GType um_realm_common_get_type (void) G_GNUC_CONST;
+
+GDBusInterfaceInfo *um_realm_common_interface_info (void);
+guint um_realm_common_override_properties (GObjectClass *klass, guint property_id_begin);
+
+
+/* D-Bus method call completion functions: */
+void um_realm_common_complete_deconfigure (
+ UmRealmCommon *object,
+ GDBusMethodInvocation *invocation);
+
+void um_realm_common_complete_change_login_policy (
+ UmRealmCommon *object,
+ GDBusMethodInvocation *invocation);
+
+
+
+/* D-Bus method calls: */
+void um_realm_common_call_deconfigure (
+ UmRealmCommon *proxy,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean um_realm_common_call_deconfigure_finish (
+ UmRealmCommon *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean um_realm_common_call_deconfigure_sync (
+ UmRealmCommon *proxy,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GError **error);
+
+void um_realm_common_call_change_login_policy (
+ UmRealmCommon *proxy,
+ const gchar *arg_login_policy,
+ const gchar *const *arg_permitted_add,
+ const gchar *const *arg_permitted_remove,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean um_realm_common_call_change_login_policy_finish (
+ UmRealmCommon *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean um_realm_common_call_change_login_policy_sync (
+ UmRealmCommon *proxy,
+ const gchar *arg_login_policy,
+ const gchar *const *arg_permitted_add,
+ const gchar *const *arg_permitted_remove,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GError **error);
+
+
+
+/* D-Bus property accessors: */
+const gchar *um_realm_common_get_name (UmRealmCommon *object);
+gchar *um_realm_common_dup_name (UmRealmCommon *object);
+void um_realm_common_set_name (UmRealmCommon *object, const gchar *value);
+
+const gchar *um_realm_common_get_configured (UmRealmCommon *object);
+gchar *um_realm_common_dup_configured (UmRealmCommon *object);
+void um_realm_common_set_configured (UmRealmCommon *object, const gchar *value);
+
+const gchar *const *um_realm_common_get_supported_interfaces (UmRealmCommon *object);
+gchar **um_realm_common_dup_supported_interfaces (UmRealmCommon *object);
+void um_realm_common_set_supported_interfaces (UmRealmCommon *object, const gchar *const *value);
+
+GVariant *um_realm_common_get_details (UmRealmCommon *object);
+GVariant *um_realm_common_dup_details (UmRealmCommon *object);
+void um_realm_common_set_details (UmRealmCommon *object, GVariant *value);
+
+const gchar *const *um_realm_common_get_login_formats (UmRealmCommon *object);
+gchar **um_realm_common_dup_login_formats (UmRealmCommon *object);
+void um_realm_common_set_login_formats (UmRealmCommon *object, const gchar *const *value);
+
+const gchar *um_realm_common_get_login_policy (UmRealmCommon *object);
+gchar *um_realm_common_dup_login_policy (UmRealmCommon *object);
+void um_realm_common_set_login_policy (UmRealmCommon *object, const gchar *value);
+
+const gchar *const *um_realm_common_get_permitted_logins (UmRealmCommon *object);
+gchar **um_realm_common_dup_permitted_logins (UmRealmCommon *object);
+void um_realm_common_set_permitted_logins (UmRealmCommon *object, const gchar *const *value);
+
+
+/* ---- */
+
+#define UM_REALM_TYPE_COMMON_PROXY (um_realm_common_proxy_get_type ())
+#define UM_REALM_COMMON_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UM_REALM_TYPE_COMMON_PROXY,
UmRealmCommonProxy))
+#define UM_REALM_COMMON_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), UM_REALM_TYPE_COMMON_PROXY,
UmRealmCommonProxyClass))
+#define UM_REALM_COMMON_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), UM_REALM_TYPE_COMMON_PROXY,
UmRealmCommonProxyClass))
+#define UM_REALM_IS_COMMON_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UM_REALM_TYPE_COMMON_PROXY))
+#define UM_REALM_IS_COMMON_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), UM_REALM_TYPE_COMMON_PROXY))
+
+typedef struct _UmRealmCommonProxy UmRealmCommonProxy;
+typedef struct _UmRealmCommonProxyClass UmRealmCommonProxyClass;
+typedef struct _UmRealmCommonProxyPrivate UmRealmCommonProxyPrivate;
+
+struct _UmRealmCommonProxy
+{
+ /*< private >*/
+ GDBusProxy parent_instance;
+ UmRealmCommonProxyPrivate *priv;
+};
+
+struct _UmRealmCommonProxyClass
+{
+ GDBusProxyClass parent_class;
+};
+
+GType um_realm_common_proxy_get_type (void) G_GNUC_CONST;
+
+void um_realm_common_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+UmRealmCommon *um_realm_common_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error);
+UmRealmCommon *um_realm_common_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+void um_realm_common_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+UmRealmCommon *um_realm_common_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error);
+UmRealmCommon *um_realm_common_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+
+/* ---- */
+
+#define UM_REALM_TYPE_COMMON_SKELETON (um_realm_common_skeleton_get_type ())
+#define UM_REALM_COMMON_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UM_REALM_TYPE_COMMON_SKELETON,
UmRealmCommonSkeleton))
+#define UM_REALM_COMMON_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), UM_REALM_TYPE_COMMON_SKELETON,
UmRealmCommonSkeletonClass))
+#define UM_REALM_COMMON_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o),
UM_REALM_TYPE_COMMON_SKELETON, UmRealmCommonSkeletonClass))
+#define UM_REALM_IS_COMMON_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UM_REALM_TYPE_COMMON_SKELETON))
+#define UM_REALM_IS_COMMON_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), UM_REALM_TYPE_COMMON_SKELETON))
+
+typedef struct _UmRealmCommonSkeleton UmRealmCommonSkeleton;
+typedef struct _UmRealmCommonSkeletonClass UmRealmCommonSkeletonClass;
+typedef struct _UmRealmCommonSkeletonPrivate UmRealmCommonSkeletonPrivate;
+
+struct _UmRealmCommonSkeleton
+{
+ /*< private >*/
+ GDBusInterfaceSkeleton parent_instance;
+ UmRealmCommonSkeletonPrivate *priv;
+};
+
+struct _UmRealmCommonSkeletonClass
+{
+ GDBusInterfaceSkeletonClass parent_class;
+};
+
+GType um_realm_common_skeleton_get_type (void) G_GNUC_CONST;
+
+UmRealmCommon *um_realm_common_skeleton_new (void);
+
+
+/* ------------------------------------------------------------------------ */
+/* Declarations for org.freedesktop.realmd.Kerberos */
+
+#define UM_REALM_TYPE_KERBEROS (um_realm_kerberos_get_type ())
+#define UM_REALM_KERBEROS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UM_REALM_TYPE_KERBEROS, UmRealmKerberos))
+#define UM_REALM_IS_KERBEROS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UM_REALM_TYPE_KERBEROS))
+#define UM_REALM_KERBEROS_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), UM_REALM_TYPE_KERBEROS,
UmRealmKerberosIface))
+
+struct _UmRealmKerberos;
+typedef struct _UmRealmKerberos UmRealmKerberos;
+typedef struct _UmRealmKerberosIface UmRealmKerberosIface;
+
+struct _UmRealmKerberosIface
+{
+ GTypeInterface parent_iface;
+
+ const gchar * (*get_domain_name) (UmRealmKerberos *object);
+
+ const gchar * (*get_realm_name) (UmRealmKerberos *object);
+
+};
+
+GType um_realm_kerberos_get_type (void) G_GNUC_CONST;
+
+GDBusInterfaceInfo *um_realm_kerberos_interface_info (void);
+guint um_realm_kerberos_override_properties (GObjectClass *klass, guint property_id_begin);
+
+
+/* D-Bus property accessors: */
+const gchar *um_realm_kerberos_get_realm_name (UmRealmKerberos *object);
+gchar *um_realm_kerberos_dup_realm_name (UmRealmKerberos *object);
+void um_realm_kerberos_set_realm_name (UmRealmKerberos *object, const gchar *value);
+
+const gchar *um_realm_kerberos_get_domain_name (UmRealmKerberos *object);
+gchar *um_realm_kerberos_dup_domain_name (UmRealmKerberos *object);
+void um_realm_kerberos_set_domain_name (UmRealmKerberos *object, const gchar *value);
+
+
+/* ---- */
+
+#define UM_REALM_TYPE_KERBEROS_PROXY (um_realm_kerberos_proxy_get_type ())
+#define UM_REALM_KERBEROS_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UM_REALM_TYPE_KERBEROS_PROXY,
UmRealmKerberosProxy))
+#define UM_REALM_KERBEROS_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), UM_REALM_TYPE_KERBEROS_PROXY,
UmRealmKerberosProxyClass))
+#define UM_REALM_KERBEROS_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), UM_REALM_TYPE_KERBEROS_PROXY,
UmRealmKerberosProxyClass))
+#define UM_REALM_IS_KERBEROS_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UM_REALM_TYPE_KERBEROS_PROXY))
+#define UM_REALM_IS_KERBEROS_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), UM_REALM_TYPE_KERBEROS_PROXY))
+
+typedef struct _UmRealmKerberosProxy UmRealmKerberosProxy;
+typedef struct _UmRealmKerberosProxyClass UmRealmKerberosProxyClass;
+typedef struct _UmRealmKerberosProxyPrivate UmRealmKerberosProxyPrivate;
+
+struct _UmRealmKerberosProxy
+{
+ /*< private >*/
+ GDBusProxy parent_instance;
+ UmRealmKerberosProxyPrivate *priv;
+};
+
+struct _UmRealmKerberosProxyClass
+{
+ GDBusProxyClass parent_class;
+};
+
+GType um_realm_kerberos_proxy_get_type (void) G_GNUC_CONST;
+
+void um_realm_kerberos_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+UmRealmKerberos *um_realm_kerberos_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error);
+UmRealmKerberos *um_realm_kerberos_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+void um_realm_kerberos_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+UmRealmKerberos *um_realm_kerberos_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error);
+UmRealmKerberos *um_realm_kerberos_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+
+/* ---- */
+
+#define UM_REALM_TYPE_KERBEROS_SKELETON (um_realm_kerberos_skeleton_get_type ())
+#define UM_REALM_KERBEROS_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UM_REALM_TYPE_KERBEROS_SKELETON,
UmRealmKerberosSkeleton))
+#define UM_REALM_KERBEROS_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), UM_REALM_TYPE_KERBEROS_SKELETON,
UmRealmKerberosSkeletonClass))
+#define UM_REALM_KERBEROS_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o),
UM_REALM_TYPE_KERBEROS_SKELETON, UmRealmKerberosSkeletonClass))
+#define UM_REALM_IS_KERBEROS_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UM_REALM_TYPE_KERBEROS_SKELETON))
+#define UM_REALM_IS_KERBEROS_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k),
UM_REALM_TYPE_KERBEROS_SKELETON))
+
+typedef struct _UmRealmKerberosSkeleton UmRealmKerberosSkeleton;
+typedef struct _UmRealmKerberosSkeletonClass UmRealmKerberosSkeletonClass;
+typedef struct _UmRealmKerberosSkeletonPrivate UmRealmKerberosSkeletonPrivate;
+
+struct _UmRealmKerberosSkeleton
+{
+ /*< private >*/
+ GDBusInterfaceSkeleton parent_instance;
+ UmRealmKerberosSkeletonPrivate *priv;
+};
+
+struct _UmRealmKerberosSkeletonClass
+{
+ GDBusInterfaceSkeletonClass parent_class;
+};
+
+GType um_realm_kerberos_skeleton_get_type (void) G_GNUC_CONST;
+
+UmRealmKerberos *um_realm_kerberos_skeleton_new (void);
+
+
+/* ------------------------------------------------------------------------ */
+/* Declarations for org.freedesktop.realmd.KerberosMembership */
+
+#define UM_REALM_TYPE_KERBEROS_MEMBERSHIP (um_realm_kerberos_membership_get_type ())
+#define UM_REALM_KERBEROS_MEMBERSHIP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UM_REALM_TYPE_KERBEROS_MEMBERSHIP,
UmRealmKerberosMembership))
+#define UM_REALM_IS_KERBEROS_MEMBERSHIP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o),
UM_REALM_TYPE_KERBEROS_MEMBERSHIP))
+#define UM_REALM_KERBEROS_MEMBERSHIP_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o),
UM_REALM_TYPE_KERBEROS_MEMBERSHIP, UmRealmKerberosMembershipIface))
+
+struct _UmRealmKerberosMembership;
+typedef struct _UmRealmKerberosMembership UmRealmKerberosMembership;
+typedef struct _UmRealmKerberosMembershipIface UmRealmKerberosMembershipIface;
+
+struct _UmRealmKerberosMembershipIface
+{
+ GTypeInterface parent_iface;
+
+
+ gboolean (*handle_join) (
+ UmRealmKerberosMembership *object,
+ GDBusMethodInvocation *invocation,
+ GVariant *arg_credentials,
+ GVariant *arg_options);
+
+ gboolean (*handle_leave) (
+ UmRealmKerberosMembership *object,
+ GDBusMethodInvocation *invocation,
+ GVariant *arg_credentials,
+ GVariant *arg_options);
+
+ const gchar * (*get_suggested_administrator) (UmRealmKerberosMembership *object);
+
+ GVariant * (*get_supported_join_credentials) (UmRealmKerberosMembership *object);
+
+ GVariant * (*get_supported_leave_credentials) (UmRealmKerberosMembership *object);
+
+};
+
+GType um_realm_kerberos_membership_get_type (void) G_GNUC_CONST;
+
+GDBusInterfaceInfo *um_realm_kerberos_membership_interface_info (void);
+guint um_realm_kerberos_membership_override_properties (GObjectClass *klass, guint property_id_begin);
+
+
+/* D-Bus method call completion functions: */
+void um_realm_kerberos_membership_complete_join (
+ UmRealmKerberosMembership *object,
+ GDBusMethodInvocation *invocation);
+
+void um_realm_kerberos_membership_complete_leave (
+ UmRealmKerberosMembership *object,
+ GDBusMethodInvocation *invocation);
+
+
+
+/* D-Bus method calls: */
+void um_realm_kerberos_membership_call_join (
+ UmRealmKerberosMembership *proxy,
+ GVariant *arg_credentials,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean um_realm_kerberos_membership_call_join_finish (
+ UmRealmKerberosMembership *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean um_realm_kerberos_membership_call_join_sync (
+ UmRealmKerberosMembership *proxy,
+ GVariant *arg_credentials,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GError **error);
+
+void um_realm_kerberos_membership_call_leave (
+ UmRealmKerberosMembership *proxy,
+ GVariant *arg_credentials,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean um_realm_kerberos_membership_call_leave_finish (
+ UmRealmKerberosMembership *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean um_realm_kerberos_membership_call_leave_sync (
+ UmRealmKerberosMembership *proxy,
+ GVariant *arg_credentials,
+ GVariant *arg_options,
+ GCancellable *cancellable,
+ GError **error);
+
+
+
+/* D-Bus property accessors: */
+const gchar *um_realm_kerberos_membership_get_suggested_administrator (UmRealmKerberosMembership *object);
+gchar *um_realm_kerberos_membership_dup_suggested_administrator (UmRealmKerberosMembership *object);
+void um_realm_kerberos_membership_set_suggested_administrator (UmRealmKerberosMembership *object, const
gchar *value);
+
+GVariant *um_realm_kerberos_membership_get_supported_join_credentials (UmRealmKerberosMembership *object);
+GVariant *um_realm_kerberos_membership_dup_supported_join_credentials (UmRealmKerberosMembership *object);
+void um_realm_kerberos_membership_set_supported_join_credentials (UmRealmKerberosMembership *object,
GVariant *value);
+
+GVariant *um_realm_kerberos_membership_get_supported_leave_credentials (UmRealmKerberosMembership *object);
+GVariant *um_realm_kerberos_membership_dup_supported_leave_credentials (UmRealmKerberosMembership *object);
+void um_realm_kerberos_membership_set_supported_leave_credentials (UmRealmKerberosMembership *object,
GVariant *value);
+
+
+/* ---- */
+
+#define UM_REALM_TYPE_KERBEROS_MEMBERSHIP_PROXY (um_realm_kerberos_membership_proxy_get_type ())
+#define UM_REALM_KERBEROS_MEMBERSHIP_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o),
UM_REALM_TYPE_KERBEROS_MEMBERSHIP_PROXY, UmRealmKerberosMembershipProxy))
+#define UM_REALM_KERBEROS_MEMBERSHIP_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k),
UM_REALM_TYPE_KERBEROS_MEMBERSHIP_PROXY, UmRealmKerberosMembershipProxyClass))
+#define UM_REALM_KERBEROS_MEMBERSHIP_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o),
UM_REALM_TYPE_KERBEROS_MEMBERSHIP_PROXY, UmRealmKerberosMembershipProxyClass))
+#define UM_REALM_IS_KERBEROS_MEMBERSHIP_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o),
UM_REALM_TYPE_KERBEROS_MEMBERSHIP_PROXY))
+#define UM_REALM_IS_KERBEROS_MEMBERSHIP_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k),
UM_REALM_TYPE_KERBEROS_MEMBERSHIP_PROXY))
+
+typedef struct _UmRealmKerberosMembershipProxy UmRealmKerberosMembershipProxy;
+typedef struct _UmRealmKerberosMembershipProxyClass UmRealmKerberosMembershipProxyClass;
+typedef struct _UmRealmKerberosMembershipProxyPrivate UmRealmKerberosMembershipProxyPrivate;
+
+struct _UmRealmKerberosMembershipProxy
+{
+ /*< private >*/
+ GDBusProxy parent_instance;
+ UmRealmKerberosMembershipProxyPrivate *priv;
+};
+
+struct _UmRealmKerberosMembershipProxyClass
+{
+ GDBusProxyClass parent_class;
+};
+
+GType um_realm_kerberos_membership_proxy_get_type (void) G_GNUC_CONST;
+
+void um_realm_kerberos_membership_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+UmRealmKerberosMembership *um_realm_kerberos_membership_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error);
+UmRealmKerberosMembership *um_realm_kerberos_membership_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+void um_realm_kerberos_membership_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+UmRealmKerberosMembership *um_realm_kerberos_membership_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error);
+UmRealmKerberosMembership *um_realm_kerberos_membership_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+
+/* ---- */
+
+#define UM_REALM_TYPE_KERBEROS_MEMBERSHIP_SKELETON (um_realm_kerberos_membership_skeleton_get_type ())
+#define UM_REALM_KERBEROS_MEMBERSHIP_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o),
UM_REALM_TYPE_KERBEROS_MEMBERSHIP_SKELETON, UmRealmKerberosMembershipSkeleton))
+#define UM_REALM_KERBEROS_MEMBERSHIP_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k),
UM_REALM_TYPE_KERBEROS_MEMBERSHIP_SKELETON, UmRealmKerberosMembershipSkeletonClass))
+#define UM_REALM_KERBEROS_MEMBERSHIP_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o),
UM_REALM_TYPE_KERBEROS_MEMBERSHIP_SKELETON, UmRealmKerberosMembershipSkeletonClass))
+#define UM_REALM_IS_KERBEROS_MEMBERSHIP_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o),
UM_REALM_TYPE_KERBEROS_MEMBERSHIP_SKELETON))
+#define UM_REALM_IS_KERBEROS_MEMBERSHIP_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k),
UM_REALM_TYPE_KERBEROS_MEMBERSHIP_SKELETON))
+
+typedef struct _UmRealmKerberosMembershipSkeleton UmRealmKerberosMembershipSkeleton;
+typedef struct _UmRealmKerberosMembershipSkeletonClass UmRealmKerberosMembershipSkeletonClass;
+typedef struct _UmRealmKerberosMembershipSkeletonPrivate UmRealmKerberosMembershipSkeletonPrivate;
+
+struct _UmRealmKerberosMembershipSkeleton
+{
+ /*< private >*/
+ GDBusInterfaceSkeleton parent_instance;
+ UmRealmKerberosMembershipSkeletonPrivate *priv;
+};
+
+struct _UmRealmKerberosMembershipSkeletonClass
+{
+ GDBusInterfaceSkeletonClass parent_class;
+};
+
+GType um_realm_kerberos_membership_skeleton_get_type (void) G_GNUC_CONST;
+
+UmRealmKerberosMembership *um_realm_kerberos_membership_skeleton_new (void);
+
+
+/* ---- */
+
+#define UM_REALM_TYPE_OBJECT (um_realm_object_get_type ())
+#define UM_REALM_OBJECT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UM_REALM_TYPE_OBJECT, UmRealmObject))
+#define UM_REALM_IS_OBJECT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UM_REALM_TYPE_OBJECT))
+#define UM_REALM_OBJECT_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), UM_REALM_TYPE_OBJECT,
UmRealmObject))
+
+struct _UmRealmObject;
+typedef struct _UmRealmObject UmRealmObject;
+typedef struct _UmRealmObjectIface UmRealmObjectIface;
+
+struct _UmRealmObjectIface
+{
+ GTypeInterface parent_iface;
+};
+
+GType um_realm_object_get_type (void) G_GNUC_CONST;
+
+UmRealmProvider *um_realm_object_get_provider (UmRealmObject *object);
+UmRealmService *um_realm_object_get_service (UmRealmObject *object);
+UmRealmCommon *um_realm_object_get_common (UmRealmObject *object);
+UmRealmKerberos *um_realm_object_get_kerberos (UmRealmObject *object);
+UmRealmKerberosMembership *um_realm_object_get_kerberos_membership (UmRealmObject *object);
+UmRealmProvider *um_realm_object_peek_provider (UmRealmObject *object);
+UmRealmService *um_realm_object_peek_service (UmRealmObject *object);
+UmRealmCommon *um_realm_object_peek_common (UmRealmObject *object);
+UmRealmKerberos *um_realm_object_peek_kerberos (UmRealmObject *object);
+UmRealmKerberosMembership *um_realm_object_peek_kerberos_membership (UmRealmObject *object);
+
+#define UM_REALM_TYPE_OBJECT_PROXY (um_realm_object_proxy_get_type ())
+#define UM_REALM_OBJECT_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UM_REALM_TYPE_OBJECT_PROXY,
UmRealmObjectProxy))
+#define UM_REALM_OBJECT_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), UM_REALM_TYPE_OBJECT_PROXY,
UmRealmObjectProxyClass))
+#define UM_REALM_OBJECT_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), UM_REALM_TYPE_OBJECT_PROXY,
UmRealmObjectProxyClass))
+#define UM_REALM_IS_OBJECT_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UM_REALM_TYPE_OBJECT_PROXY))
+#define UM_REALM_IS_OBJECT_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), UM_REALM_TYPE_OBJECT_PROXY))
+
+typedef struct _UmRealmObjectProxy UmRealmObjectProxy;
+typedef struct _UmRealmObjectProxyClass UmRealmObjectProxyClass;
+typedef struct _UmRealmObjectProxyPrivate UmRealmObjectProxyPrivate;
+
+struct _UmRealmObjectProxy
+{
+ /*< private >*/
+ GDBusObjectProxy parent_instance;
+ UmRealmObjectProxyPrivate *priv;
+};
+
+struct _UmRealmObjectProxyClass
+{
+ GDBusObjectProxyClass parent_class;
+};
+
+GType um_realm_object_proxy_get_type (void) G_GNUC_CONST;
+UmRealmObjectProxy *um_realm_object_proxy_new (GDBusConnection *connection, const gchar *object_path);
+
+#define UM_REALM_TYPE_OBJECT_SKELETON (um_realm_object_skeleton_get_type ())
+#define UM_REALM_OBJECT_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UM_REALM_TYPE_OBJECT_SKELETON,
UmRealmObjectSkeleton))
+#define UM_REALM_OBJECT_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), UM_REALM_TYPE_OBJECT_SKELETON,
UmRealmObjectSkeletonClass))
+#define UM_REALM_OBJECT_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o),
UM_REALM_TYPE_OBJECT_SKELETON, UmRealmObjectSkeletonClass))
+#define UM_REALM_IS_OBJECT_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UM_REALM_TYPE_OBJECT_SKELETON))
+#define UM_REALM_IS_OBJECT_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), UM_REALM_TYPE_OBJECT_SKELETON))
+
+typedef struct _UmRealmObjectSkeleton UmRealmObjectSkeleton;
+typedef struct _UmRealmObjectSkeletonClass UmRealmObjectSkeletonClass;
+typedef struct _UmRealmObjectSkeletonPrivate UmRealmObjectSkeletonPrivate;
+
+struct _UmRealmObjectSkeleton
+{
+ /*< private >*/
+ GDBusObjectSkeleton parent_instance;
+ UmRealmObjectSkeletonPrivate *priv;
+};
+
+struct _UmRealmObjectSkeletonClass
+{
+ GDBusObjectSkeletonClass parent_class;
+};
+
+GType um_realm_object_skeleton_get_type (void) G_GNUC_CONST;
+UmRealmObjectSkeleton *um_realm_object_skeleton_new (const gchar *object_path);
+void um_realm_object_skeleton_set_provider (UmRealmObjectSkeleton *object, UmRealmProvider *interface_);
+void um_realm_object_skeleton_set_service (UmRealmObjectSkeleton *object, UmRealmService *interface_);
+void um_realm_object_skeleton_set_common (UmRealmObjectSkeleton *object, UmRealmCommon *interface_);
+void um_realm_object_skeleton_set_kerberos (UmRealmObjectSkeleton *object, UmRealmKerberos *interface_);
+void um_realm_object_skeleton_set_kerberos_membership (UmRealmObjectSkeleton *object,
UmRealmKerberosMembership *interface_);
+
+/* ---- */
+
+#define UM_REALM_TYPE_OBJECT_MANAGER_CLIENT (um_realm_object_manager_client_get_type ())
+#define UM_REALM_OBJECT_MANAGER_CLIENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o),
UM_REALM_TYPE_OBJECT_MANAGER_CLIENT, UmRealmObjectManagerClient))
+#define UM_REALM_OBJECT_MANAGER_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k),
UM_REALM_TYPE_OBJECT_MANAGER_CLIENT, UmRealmObjectManagerClientClass))
+#define UM_REALM_OBJECT_MANAGER_CLIENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o),
UM_REALM_TYPE_OBJECT_MANAGER_CLIENT, UmRealmObjectManagerClientClass))
+#define UM_REALM_IS_OBJECT_MANAGER_CLIENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o),
UM_REALM_TYPE_OBJECT_MANAGER_CLIENT))
+#define UM_REALM_IS_OBJECT_MANAGER_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k),
UM_REALM_TYPE_OBJECT_MANAGER_CLIENT))
+
+typedef struct _UmRealmObjectManagerClient UmRealmObjectManagerClient;
+typedef struct _UmRealmObjectManagerClientClass UmRealmObjectManagerClientClass;
+typedef struct _UmRealmObjectManagerClientPrivate UmRealmObjectManagerClientPrivate;
+
+struct _UmRealmObjectManagerClient
+{
+ /*< private >*/
+ GDBusObjectManagerClient parent_instance;
+ UmRealmObjectManagerClientPrivate *priv;
+};
+
+struct _UmRealmObjectManagerClientClass
+{
+ GDBusObjectManagerClientClass parent_class;
+};
+
+GType um_realm_object_manager_client_get_type (void) G_GNUC_CONST;
+
+GType um_realm_object_manager_client_get_proxy_type (GDBusObjectManagerClient *manager, const gchar
*object_path, const gchar *interface_name, gpointer user_data);
+
+void um_realm_object_manager_client_new (
+ GDBusConnection *connection,
+ GDBusObjectManagerClientFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+GDBusObjectManager *um_realm_object_manager_client_new_finish (
+ GAsyncResult *res,
+ GError **error);
+GDBusObjectManager *um_realm_object_manager_client_new_sync (
+ GDBusConnection *connection,
+ GDBusObjectManagerClientFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+void um_realm_object_manager_client_new_for_bus (
+ GBusType bus_type,
+ GDBusObjectManagerClientFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+GDBusObjectManager *um_realm_object_manager_client_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error);
+GDBusObjectManager *um_realm_object_manager_client_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusObjectManagerClientFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+
+G_END_DECLS
+
+#endif /* __UM_REALM_GENERATED_H__ */
diff --git a/gnome-initial-setup/pages/password/um-utils.c b/gnome-initial-setup/pages/password/um-utils.c
new file mode 100644
index 0000000..0ee5920
--- /dev/null
+++ b/gnome-initial-setup/pages/password/um-utils.c
@@ -0,0 +1,385 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright 2009-2010 Red Hat, Inc,
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ *
+ * Written by: Matthias Clasen <mclasen redhat com>
+ */
+
+#include "config.h"
+
+#include <math.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <pwd.h>
+#include <utmp.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include "um-utils.h"
+
+void
+set_entry_validation_error (GtkEntry *entry,
+ const gchar *text)
+{
+ g_object_set (entry, "caps-lock-warning", FALSE, NULL);
+ gtk_entry_set_icon_from_stock (entry,
+ GTK_ENTRY_ICON_SECONDARY,
+ GTK_STOCK_CAPS_LOCK_WARNING);
+ gtk_entry_set_icon_tooltip_text (entry,
+ GTK_ENTRY_ICON_SECONDARY,
+ text);
+}
+
+void
+clear_entry_validation_error (GtkEntry *entry)
+{
+ gboolean warning;
+
+ g_object_get (entry, "caps-lock-warning", &warning, NULL);
+
+ if (warning)
+ return;
+
+ gtk_entry_set_icon_from_pixbuf (entry,
+ GTK_ENTRY_ICON_SECONDARY,
+ NULL);
+ g_object_set (entry, "caps-lock-warning", TRUE, NULL);
+}
+
+#define MAXNAMELEN (UT_NAMESIZE - 1)
+
+static gboolean
+is_username_used (const gchar *username)
+{
+ struct passwd *pwent;
+
+ if (username == NULL || username[0] == '\0') {
+ return FALSE;
+ }
+
+ pwent = getpwnam (username);
+
+ return pwent != NULL;
+}
+
+gboolean
+is_valid_name (const gchar *name)
+{
+ gboolean is_empty = TRUE;
+ const gchar *c;
+
+ /* Valid names must contain:
+ * 1) at least one character.
+ * 2) at least one non-"space" character.
+ */
+ for (c = name; *c; c++) {
+ gunichar unichar;
+
+ unichar = g_utf8_get_char_validated (c, -1);
+
+ /* Partial UTF-8 sequence or end of string */
+ if (unichar == (gunichar) -1 || unichar == (gunichar) -2)
+ break;
+
+ /* Check for non-space character */
+ if (!g_unichar_isspace (unichar)) {
+ is_empty = FALSE;
+ break;
+ }
+ }
+
+ return !is_empty;
+}
+
+gboolean
+is_valid_username (const gchar *username, gchar **tip)
+{
+ gboolean empty;
+ gboolean in_use;
+ gboolean too_long;
+ gboolean valid;
+ const gchar *c;
+
+ if (username == NULL || username[0] == '\0') {
+ empty = TRUE;
+ in_use = FALSE;
+ too_long = FALSE;
+ } else {
+ empty = FALSE;
+ in_use = is_username_used (username);
+ too_long = strlen (username) > MAXNAMELEN;
+ }
+ valid = TRUE;
+
+ if (!in_use && !empty && !too_long) {
+ /* First char must be a letter, and it must only composed
+ * of ASCII letters, digits, and a '.', '-', '_'
+ */
+ for (c = username; *c; c++) {
+ if (! ((*c >= 'a' && *c <= 'z') ||
+ (*c >= 'A' && *c <= 'Z') ||
+ (*c >= '0' && *c <= '9') ||
+ (*c == '_') || (*c == '.') ||
+ (*c == '-' && c != username)))
+ valid = FALSE;
+ }
+ }
+
+ valid = !empty && !in_use && !too_long && valid;
+
+ if (!empty && (in_use || too_long || !valid)) {
+ if (in_use) {
+ *tip = g_strdup_printf (_("A user with the username '%s' already exists"),
+ username);
+ }
+ else if (too_long) {
+ *tip = g_strdup_printf (_("The username is too long"));
+ }
+ else if (username[0] == '-') {
+ *tip = g_strdup (_("The username cannot start with a '-'"));
+ }
+ else {
+ *tip = g_strdup (_("The username must only consist of:\n"
+ " \xe2\x9e\xa3 letters from the English alphabet\n"
+ " \xe2\x9e\xa3 digits\n"
+ " \xe2\x9e\xa3 any of the characters '.', '-' and '_'"));
+ }
+ }
+ else {
+ *tip = NULL;
+ }
+
+ return valid;
+}
+
+void
+generate_username_choices (const gchar *name,
+ GtkListStore *store)
+{
+ gboolean in_use, same_as_initial;
+ char *lc_name, *ascii_name, *stripped_name;
+ char **words1;
+ char **words2 = NULL;
+ char **w1, **w2;
+ char *c;
+ char *unicode_fallback = "?";
+ GString *first_word, *last_word;
+ GString *item0, *item1, *item2, *item3, *item4;
+ int len;
+ int nwords1, nwords2, i;
+ GHashTable *items;
+ GtkTreeIter iter;
+
+ gtk_list_store_clear (store);
+
+ ascii_name = g_convert_with_fallback (name, -1, "ASCII//TRANSLIT", "UTF-8",
+ unicode_fallback, NULL, NULL, NULL);
+
+ lc_name = g_ascii_strdown (ascii_name, -1);
+
+ /* Remove all non ASCII alphanumeric chars from the name,
+ * apart from the few allowed symbols.
+ *
+ * We do remove '.', even though it is usually allowed,
+ * since it often comes in via an abbreviated middle name,
+ * and the dot looks just wrong in the proposals then.
+ */
+ stripped_name = g_strnfill (strlen (lc_name) + 1, '\0');
+ i = 0;
+ for (c = lc_name; *c; c++) {
+ if (!(g_ascii_isdigit (*c) || g_ascii_islower (*c) ||
+ *c == ' ' || *c == '-' || *c == '_' ||
+ /* used to track invalid words, removed below */
+ *c == '?') )
+ continue;
+
+ stripped_name[i] = *c;
+ i++;
+ }
+
+ if (strlen (stripped_name) == 0) {
+ g_free (ascii_name);
+ g_free (lc_name);
+ g_free (stripped_name);
+ return;
+ }
+
+ /* we split name on spaces, and then on dashes, so that we can treat
+ * words linked with dashes the same way, i.e. both fully shown, or
+ * both abbreviated
+ */
+ words1 = g_strsplit_set (stripped_name, " ", -1);
+ len = g_strv_length (words1);
+
+ /* The default item is a concatenation of all words without ? */
+ item0 = g_string_sized_new (strlen (stripped_name));
+
+ g_free (ascii_name);
+ g_free (lc_name);
+ g_free (stripped_name);
+
+ /* Concatenate the whole first word with the first letter of each
+ * word (item1), and the last word with the first letter of each
+ * word (item2). item3 and item4 are symmetrical respectively to
+ * item1 and item2.
+ *
+ * Constant 5 is the max reasonable number of words we may get when
+ * splitting on dashes, since we can't guess it at this point,
+ * and reallocating would be too bad.
+ */
+ item1 = g_string_sized_new (strlen (words1[0]) + len - 1 + 5);
+ item3 = g_string_sized_new (strlen (words1[0]) + len - 1 + 5);
+
+ item2 = g_string_sized_new (strlen (words1[len - 1]) + len - 1 + 5);
+ item4 = g_string_sized_new (strlen (words1[len - 1]) + len - 1 + 5);
+
+ /* again, guess at the max size of names */
+ first_word = g_string_sized_new (20);
+ last_word = g_string_sized_new (20);
+
+ nwords1 = 0;
+ nwords2 = 0;
+ for (w1 = words1; *w1; w1++) {
+ if (strlen (*w1) == 0)
+ continue;
+
+ /* skip words with string '?', most likely resulting
+ * from failed transliteration to ASCII
+ */
+ if (strstr (*w1, unicode_fallback) != NULL)
+ continue;
+
+ nwords1++; /* count real words, excluding empty string */
+
+ item0 = g_string_append (item0, *w1);
+
+ words2 = g_strsplit_set (*w1, "-", -1);
+ /* reset last word if a new non-empty word has been found */
+ if (strlen (*words2) > 0)
+ last_word = g_string_set_size (last_word, 0);
+
+ for (w2 = words2; *w2; w2++) {
+ if (strlen (*w2) == 0)
+ continue;
+
+ nwords2++;
+
+ /* part of the first "toplevel" real word */
+ if (nwords1 == 1) {
+ item1 = g_string_append (item1, *w2);
+ first_word = g_string_append (first_word, *w2);
+ }
+ else {
+ item1 = g_string_append_unichar (item1,
+ g_utf8_get_char (*w2));
+ item3 = g_string_append_unichar (item3,
+ g_utf8_get_char (*w2));
+ }
+
+ /* not part of the last "toplevel" word */
+ if (w1 != words1 + len - 1) {
+ item2 = g_string_append_unichar (item2,
+ g_utf8_get_char (*w2));
+ item4 = g_string_append_unichar (item4,
+ g_utf8_get_char (*w2));
+ }
+
+ /* always save current word so that we have it if last one reveals empty */
+ last_word = g_string_append (last_word, *w2);
+ }
+
+ g_strfreev (words2);
+ }
+ item2 = g_string_append (item2, last_word->str);
+ item3 = g_string_append (item3, first_word->str);
+ item4 = g_string_prepend (item4, last_word->str);
+
+ items = g_hash_table_new (g_str_hash, g_str_equal);
+
+ in_use = is_username_used (item0->str);
+ if (!in_use && !g_ascii_isdigit (item0->str[0])) {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, item0->str, -1);
+ g_hash_table_insert (items, item0->str, item0->str);
+ }
+
+ in_use = is_username_used (item1->str);
+ same_as_initial = (g_strcmp0 (item0->str, item1->str) == 0);
+ if (!same_as_initial && nwords2 > 0 && !in_use && !g_ascii_isdigit (item1->str[0])) {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, item1->str, -1);
+ g_hash_table_insert (items, item1->str, item1->str);
+ }
+
+ /* if there's only one word, would be the same as item1 */
+ if (nwords2 > 1) {
+ /* add other items */
+ in_use = is_username_used (item2->str);
+ if (!in_use && !g_ascii_isdigit (item2->str[0]) &&
+ !g_hash_table_lookup (items, item2->str)) {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, item2->str, -1);
+ g_hash_table_insert (items, item2->str, item2->str);
+ }
+
+ in_use = is_username_used (item3->str);
+ if (!in_use && !g_ascii_isdigit (item3->str[0]) &&
+ !g_hash_table_lookup (items, item3->str)) {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, item3->str, -1);
+ g_hash_table_insert (items, item3->str, item3->str);
+ }
+
+ in_use = is_username_used (item4->str);
+ if (!in_use && !g_ascii_isdigit (item4->str[0]) &&
+ !g_hash_table_lookup (items, item4->str)) {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, item4->str, -1);
+ g_hash_table_insert (items, item4->str, item4->str);
+ }
+
+ /* add the last word */
+ in_use = is_username_used (last_word->str);
+ if (!in_use && !g_ascii_isdigit (last_word->str[0]) &&
+ !g_hash_table_lookup (items, last_word->str)) {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, last_word->str, -1);
+ g_hash_table_insert (items, last_word->str, last_word->str);
+ }
+
+ /* ...and the first one */
+ in_use = is_username_used (first_word->str);
+ if (!in_use && !g_ascii_isdigit (first_word->str[0]) &&
+ !g_hash_table_lookup (items, first_word->str)) {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, first_word->str, -1);
+ g_hash_table_insert (items, first_word->str, first_word->str);
+ }
+ }
+
+ g_hash_table_destroy (items);
+ g_strfreev (words1);
+ g_string_free (first_word, TRUE);
+ g_string_free (last_word, TRUE);
+ g_string_free (item0, TRUE);
+ g_string_free (item1, TRUE);
+ g_string_free (item2, TRUE);
+ g_string_free (item3, TRUE);
+ g_string_free (item4, TRUE);
+}
diff --git a/gnome-initial-setup/pages/password/um-utils.h b/gnome-initial-setup/pages/password/um-utils.h
new file mode 100644
index 0000000..5befff5
--- /dev/null
+++ b/gnome-initial-setup/pages/password/um-utils.h
@@ -0,0 +1,43 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright 2009-2010 Red Hat, Inc,
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ *
+ * Written by: Matthias Clasen <mclasen redhat com>
+ */
+
+#ifndef __UM_UTILS_H__
+#define __UM_UTILS_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+void set_entry_validation_error (GtkEntry *entry,
+ const gchar *text);
+void clear_entry_validation_error (GtkEntry *entry);
+
+gboolean is_valid_name (const gchar *name);
+gboolean is_valid_username (const gchar *name,
+ gchar **tip);
+
+void generate_username_choices (const gchar *name,
+ GtkListStore *store);
+
+G_END_DECLS
+
+#endif
diff --git a/gnome-initial-setup/pages/region/Makefile.am b/gnome-initial-setup/pages/region/Makefile.am
new file mode 100644
index 0000000..95a971c
--- /dev/null
+++ b/gnome-initial-setup/pages/region/Makefile.am
@@ -0,0 +1,30 @@
+
+noinst_LTLIBRARIES = libgisregion.la
+
+AM_CPPFLAGS = \
+ -I"$(top_srcdir)" \
+ -I"$(top_srcdir)/gnome-initial-setup" \
+ -I"$(top_builddir)" \
+ -DDATADIR=\""$(datadir)"\" \
+ -DGNOMELOCALEDIR=\""$(datadir)/locale"\"
+
+BUILT_SOURCES =
+
+resource_files = $(shell glib-compile-resources --sourcedir=$(srcdir) --generate-dependencies
$(srcdir)/region.gresource.xml)
+region-resources.c: region.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
+region-resources.h: region.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
+BUILT_SOURCES += region-resources.c region-resources.h
+
+libgisregion_la_SOURCES = \
+ cc-common-language.c cc-common-language.h \
+ cc-region-chooser.c cc-region-chooser.h \
+ gis-region-page.c gis-region-page.h \
+ $(BUILT_SOURCES)
+
+libgisregion_la_CFLAGS = $(INITIAL_SETUP_CFLAGS)
+libgisregion_la_LIBADD = $(INITIAL_SETUP_LIBS)
+libgisregion_la_LDFLAGS = -export_dynamic -avoid-version -module -no-undefined
+
+EXTRA_DIST = region.gresource.xml $(resource_files)
diff --git a/gnome-initial-setup/pages/region/cc-common-language.h
b/gnome-initial-setup/pages/region/cc-common-language.h
new file mode 100644
index 0000000..7f32cab
--- /dev/null
+++ b/gnome-initial-setup/pages/region/cc-common-language.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright 2009-2010 Red Hat, Inc,
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ *
+ * Written by: Matthias Clasen <mclasen redhat com>
+ */
+
+#ifndef __CC_COMMON_LANGUAGE_H__
+#define __CC_COMMON_LANGUAGE_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+gboolean cc_common_language_has_font (const gchar *locale);
+gchar *cc_common_language_get_current_language (void);
+GHashTable *cc_common_language_get_initial_languages (void);
+
+G_END_DECLS
+
+#endif
diff --git a/gnome-initial-setup/pages/region/gis-region-page.ui
b/gnome-initial-setup/pages/region/gis-region-page.ui
new file mode 100644
index 0000000..abfc634
--- /dev/null
+++ b/gnome-initial-setup/pages/region/gis-region-page.ui
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="3.0"/>
+ <template class="GisRegionPage" parent="GisPage">
+ <child>
+ <object class="GtkBox" id="box">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">fill</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixel_size">96</property>
+ <property name="icon_name">preferences-desktop-locale-symbolic</property>
+ <property name="icon_size">1</property>
+ <property name="margin_top">54</property>
+ <style>
+ <class name="dim-label" />
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ <property name="margin_top">26</property>
+ <property name="label" translatable="yes">Region</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.8"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">start</property>
+ <property name="margin_top">14</property>
+ <property name="label" translatable="yes">Choose your country or region.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">50</property>
+ </object>
+ </child>
+ <child>
+ <object class="CcRegionChooser" id="region_chooser">
+ <property name="margin_top">26</property>
+ <property name="margin_bottom">32</property>
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/region/region-chooser.ui
b/gnome-initial-setup/pages/region/region-chooser.ui
new file mode 100644
index 0000000..f74616e
--- /dev/null
+++ b/gnome-initial-setup/pages/region/region-chooser.ui
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="3.0"/>
+ <template class="CcRegionChooser" parent="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">10</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolled_window">
+ <property name="visible">True</property>
+ <property name="hscrollbar-policy">never</property>
+ <property name="vscrollbar-policy">never</property>
+ <property name="shadow-type">in</property>
+ <child>
+ <object class="GtkViewport" id="viewport">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkListBox" id="region_list">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSearchEntry" id="filter_entry">
+ <property name="visible">False</property>
+ <property name="hexpand">True</property>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/region/region.gresource.xml
b/gnome-initial-setup/pages/region/region.gresource.xml
new file mode 100644
index 0000000..1ed8f38
--- /dev/null
+++ b/gnome-initial-setup/pages/region/region.gresource.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/initial-setup">
+ <file preprocess="xml-stripblanks" alias="gis-region-page.ui">gis-region-page.ui</file>
+ </gresource>
+ <gresource prefix="/org/gnome/control-center">
+ <file preprocess="xml-stripblanks" alias="region-chooser.ui">region-chooser.ui</file>
+ </gresource>
+</gresources>
diff --git a/gnome-initial-setup/pages/summary/Makefile.am b/gnome-initial-setup/pages/summary/Makefile.am
new file mode 100644
index 0000000..d716355
--- /dev/null
+++ b/gnome-initial-setup/pages/summary/Makefile.am
@@ -0,0 +1,26 @@
+
+noinst_LTLIBRARIES = libgissummary.la
+
+AM_CPPFLAGS = \
+ $(INITIAL_SETUP_CFLAGS) \
+ -DLOCALSTATEDIR="\"$(localstatedir)\"" \
+ -DUIDIR="\"$(uidir)\""
+
+BUILT_SOURCES =
+
+resource_files = $(shell glib-compile-resources --sourcedir=$(srcdir) --generate-dependencies
$(srcdir)/summary.gresource.xml)
+summary-resources.c: summary.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
+summary-resources.h: summary.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
+BUILT_SOURCES += summary-resources.c summary-resources.h
+
+libgissummary_la_SOURCES = \
+ gis-summary-page.c gis-summary-page.h \
+ $(BUILT_SOURCES)
+
+libgissummary_la_CFLAGS = $(INITIAL_SETUP_CFLAGS) -I "$(srcdir)/../.."
+libgissummary_la_LIBADD = $(INITIAL_SETUP_LIBS)
+libgissummary_la_LDFLAGS = -export_dynamic -avoid-version -module -no-undefined
+
+EXTRA_DIST = summary.gresource.xml $(resource_files)
diff --git a/gnome-initial-setup/pages/summary/cat.svg b/gnome-initial-setup/pages/summary/cat.svg
new file mode 100644
index 0000000..02edcb2
--- /dev/null
+++ b/gnome-initial-setup/pages/summary/cat.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="30"
+ height="80"
+ id="svg4766"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="cat.svg">
+ <defs
+ id="defs4768" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="5.9416229"
+ inkscape:cy="11.599396"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="2560"
+ inkscape:window-height="1374"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4771">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-972.3622)">
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ d="m 10.388434,972.7836 c 1.9469,1.3032 3.84603,2.7164 5.6046,4.3967 0.93153,-0.2111 1.94032,-0.3197
2.96995,-0.3197 1.65714,0 3.20213,0.5122 4.48683,1.3589 0.005,0 0.0133,0 0.0158,0 1.5013,-1.4321
3.37999,-2.4076 5.26926,-3.3734 -0.60978,2.6646 -0.991,5.6419 -2.09171,7.6102 0,0 0,0.012 0,0.016
0.18216,0.6544 0.26994,1.3496 0.23949,2.0465 -0.10718,2.4538 -1.8579,4.5879 -4.00756,5.8235 l
-1.03448,-3.6706 0.68294,3.9225 c 1.84523,9.5312 2.2309,18.8859 -0.44708,27.8509 2.36022,0.9615
2.26497,2.2923 1.3572,3.7572 l -20.4862194,0.1599 c -6.29399,-19.4152 6.90724,-20.7791 9.5645294,-33.8784
-1.32813,-1.6383 -2.1287,-3.7164 -2.04383,-5.6597 0.0697,-1.5983 0.72597,-2.8575 1.75642,-3.8051
-0.8322,-1.8579 -1.25885,-4.1224 -1.83629,-6.2353 l 1.1e-4,0 z"
+ id="path2818"
+ sodipodi:nodetypes="ccscscssscccccccsccc" />
+ </g>
+</svg>
diff --git a/gnome-initial-setup/pages/summary/girl.svg b/gnome-initial-setup/pages/summary/girl.svg
new file mode 100644
index 0000000..c3a1d63
--- /dev/null
+++ b/gnome-initial-setup/pages/summary/girl.svg
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="130"
+ height="210"
+ id="svg4664"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="girl.svg">
+ <defs
+ id="defs4666">
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect5346-0"
+ is_visible="true" />
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect5346-9-9"
+ is_visible="true" />
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect8154-32"
+ is_visible="true" />
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect5455-8"
+ is_visible="true" />
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect5455-3-5"
+ is_visible="true" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4844828"
+ inkscape:cx="-130.65773"
+ inkscape:cy="90.524167"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="2560"
+ inkscape:window-height="1374"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4717"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata4669">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-842.36218)">
+ <g
+ id="g4719"
+ transform="translate(-0.75708842,-27.67719)">
+ <g
+ transform="matrix(1.277397,0,0,1.2790326,-265.31599,211.70836)"
+ id="g9024"
+ style="display:inline;enable-background:new">
+ <path
+ sodipodi:type="arc"
+
style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ id="path4650-2-31"
+ sodipodi:cx="406.05606"
+ sodipodi:cy="406.59692"
+ sodipodi:rx="7.4246211"
+ sodipodi:ry="7.4246211"
+ d="m 413.48068,406.59692 c 0,4.10051 -3.32411,7.42462 -7.42462,7.42462 -4.1005,0
-7.42462,-3.32411 -7.42462,-7.42462 0,-4.1005 3.32412,-7.42462 7.42462,-7.42462 4.10051,0 7.42462,3.32412
7.42462,7.42462 z"
+ transform="matrix(1.5855008,0,0,1.5855008,-370.9922,-62.803883)" />
+ <path
+ style="fill:#bebebe;fill-opacity:1;stroke:none;display:inline;enable-background:new"
+ d="m 279.95812,598.56015 c 8.07802,-0.98855 13.17631,-7.19163 18.23698,-13.46062 l
4.26973,4.26973 c -4.43415,6.96546 -9.87419,12.83358 -18.52642,15.1975 z"
+ id="path7134"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#bebebe;fill-opacity:1;stroke:none;display:inline;enable-background:new"
+ d="m 300.30748,579.03343 c 0.49891,-1.32749 2.13644,-0.91003 1.84221,0.10234 l -0.97229,3.22386 c
1.78941,-0.57076 2.22887,-1.72611 3.25086,-3.32016 0.23122,-0.31607 1.1147,-1.11356 2.16568,-0.0626 l
1.75843,1.64444 c 0.77329,0.7733 0.26102,1.87799 0.0231,2.33746 -1.42774,2.72528 -2.7714,4.21135
-5.15094,5.84885 l -4.50321,-4.50321 z"
+ id="path7136"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ style="fill:#bebebe;fill-opacity:1;stroke:none;display:inline;enable-background:new"
+ d="m 262.02077,575.84087 c -2.06587,0.13334 -4.09524,0.79794 -5.83976,1.91249 -2.00235,1.27927
-3.62098,3.15105 -4.59791,5.31705 0.72418,-0.76911 1.67998,-1.31725 2.70953,-1.55388 0.77575,-0.1783
1.59124,-0.1814 2.36832,-0.009 -0.46632,0.56508 -0.75936,1.27122 -0.83016,2.00044 -0.0601,0.61922
0.039,1.25324 0.28521,1.82458 0.24622,0.57134 0.63904,1.07879 1.13044,1.46033 -0.0943,-1.32774
0.21103,-2.6813 0.86628,-3.83993 0.52265,-0.92416 1.26457,-1.72335 2.14739,-2.31315 -0.0828,0.83072
-0.0197,1.67577 0.18545,2.485 0.27904,1.1007 0.82276,2.13333 1.57239,2.98624 -0.26276,-1.76433
-0.13064,-3.58635 0.38391,-5.29431 0.323,-1.07214 0.79512,-2.09924 1.39853,-3.04248 l -1.77962,-1.93338"
+ id="path5344"
+ inkscape:path-effect="#path-effect5346-0"
+ inkscape:original-d="m 262.02077,575.84087 c 0,0 -3.99804,0.74847 -5.83976,1.91249 -1.84173,1.164
-4.59791,5.31705 -4.59791,5.31705 0,0 1.79274,-1.34165 2.70953,-1.55388 0.91678,-0.21225 2.36832,-0.009
2.36832,-0.009 0,0 -0.89047,1.09581 -0.83016,2.00044 0.0603,0.90464 1.41565,3.28491 1.41565,3.28491 0,0
0.33036,-2.81844 0.86628,-3.83993 0.53605,-1.02146 2.14739,-2.31315 2.14739,-2.31315 0,0 -0.10256,1.55994
0.18545,2.485 0.28796,0.92507 1.57239,2.98624 1.57239,2.98624 0,0 0.039,-3.91827 0.38391,-5.29431
0.34487,-1.37603 1.39853,-3.04248 1.39853,-3.04248 z"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czczczczczczcc" />
+ <path
+ style="fill:#bebebe;fill-opacity:1;stroke:none;display:inline;enable-background:new"
+ d="m 283.96032,574.98955 c 0.82703,-0.0501 1.65986,-0.004 2.47627,0.13737 2.35381,0.40729
4.559,1.62791 6.15387,3.40631 -0.95162,-0.46903 -2.04299,-0.64982 -3.09502,-0.5127 -0.79957,0.10421
-1.57497,0.38979 -2.25113,0.82908 0.63083,0.37302 1.14662,0.93767 1.46118,1.59959 0.27029,0.56876
0.39228,1.20721 0.35073,1.83555 -0.0415,0.62834 -0.24654,1.24518 -0.58937,1.77339 -0.3536,-1.28605
-1.10029,-2.46118 -2.11438,-3.32755 -0.80817,-0.69045 -1.78249,-1.18504 -2.81684,-1.4299 0.3572,0.7596
0.58164,1.58141 0.6601,2.41713 0.10746,1.1446 -0.0613,2.31417 -0.48793,3.38171 -0.34731,-1.75555
-1.0856,-3.43263 -2.1458,-4.87435 -0.24134,-0.32818 -0.49907,-0.64431 -0.77193,-0.94679 0.35725,-0.47816
0.66257,-0.99509 0.90887,-1.53878 0.24955,-0.55088 0.43848,-1.12919 0.56228,-1.72115 l 0.95719,0.36617 c
0.20187,-0.22792 0.37272,-0.48328 0.50635,-0.75685 0.0997,-0.20412 0.17874,-0.41833 0.23551,-0.63829 l
5e-5,6e-5"
+ id="path5344-2"
+ inkscape:path-effect="#path-effect5346-9-9"
+ inkscape:original-d="m 283.96032,574.98955 c 0.89062,-0.0332 1.7834,-0.008 2.47627,0.13737
0.69285,0.14587 6.15387,3.40631 6.15387,3.40631 0,0 -2.15331,-0.63591 -3.09502,-0.5127 -0.94172,0.12324
-2.25113,0.82908 -2.25113,0.82908 0,0 1.21403,0.72222 1.46118,1.59959 0.24714,0.87735 -0.23864,3.60894
-0.23864,3.60894 0,0 -1.2619,-2.55035 -2.11438,-3.32755 -0.85256,-0.77713 -2.81684,-1.4299 -2.81684,-1.4299
0,0 0.62224,1.43995 0.6601,2.41713 0.0379,0.9772 -0.48793,3.38171 -0.48793,3.38171 0,0 -1.93008,-4.55223
-2.1458,-4.87435 -0.21571,-0.32211 -0.48883,-0.64603 -0.77193,-0.94679 0,0 0.67209,-1.00212 0.90887,-1.53878
0.23673,-0.53669 0.56228,-1.72115 0.56228,-1.72115 l 0.95719,0.36617 c 0,0 0.38592,-0.52062 0.50635,-0.75685
0.12047,-0.23624 0.23551,-0.63829 0.23551,-0.63829 z"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czczczczczczczcczc" />
+ <path
+ style="fill:#bebebe;fill-opacity:1;stroke:none;display:inline;enable-background:new"
+ d="m 260.84291,580.00739 c 0.0281,-1.71788 0.41113,-3.42916 1.11793,-4.99516 0.96371,-2.13523
2.53404,-3.99264 4.47922,-5.29811 l -1.35621,1.91547 c 1.19975,-0.77117 2.47134,-1.43054 3.79291,-1.96678
3.59341,-1.45806 7.55894,-1.98797 11.40911,-1.52459 l -1.98569,1.96512 c 1.1524,0.0711 2.28764,0.40739
3.29287,0.97536 1.37282,0.77566 2.49526,1.9868 3.16447,3.41454 l -1.39586,5.33912 -22.51875,0.17503"
+ id="path8152"
+ inkscape:path-effect="#path-effect8154-32"
+ inkscape:original-d="m 260.84291,580.00739 c 0,0 0.40479,-3.08334 1.11793,-4.99516
0.71315,-1.91181 4.47922,-5.29811 4.47922,-5.29811 l -1.35621,1.91547 c 0,0 1.15685,-0.77252 3.79291,-1.96678
2.63606,-1.19427 11.40911,-1.52459 11.40911,-1.52459 l -1.98569,1.96512 c 0,0 1.62012,0.38128 3.29287,0.97536
1.67274,0.59408 3.16447,3.41454 3.16447,3.41454 l -1.39586,5.33912 z"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czcczcczccc" />
+ <path
+ style="fill:#bebebe;fill-opacity:1;stroke:none"
+ d="m 266.34218,596.70339 13.08148,0 c 0,0 5.34387,6.24857 6.37564,10.02191 3.09302,11.31161
6.52905,28.43482 6.52905,28.43482 l -36.74442,0.10355 c 0,0 -1.61612,-13.45799 10.75825,-38.56028 z"
+ id="path9005"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsccc" />
+ <rect
+ style="fill:#bebebe;fill-opacity:1;stroke:none"
+ id="rect9007"
+ width="10.429825"
+ height="12.374369"
+ x="267.93317"
+ y="589.80908"
+ rx="4.981976"
+ ry="0" />
+ <path
+ style="fill:#bebebe;fill-opacity:1;stroke:none"
+ d="m 281.39933,621.8766 c 0.95526,5.31878 1.46582,10.71735 1.5246,16.12091 0.0578,5.31249
-0.32107,10.62966 -1.13149,15.88028 l -6.35471,-0.96247 c 0.92244,-5.47663 1.21479,-11.05912
0.86942,-16.60214 -0.3193,-5.12472 -1.18333,-10.21532 -2.57284,-15.15839 l 7.66502,0.72181"
+ id="path5453"
+ inkscape:path-effect="#path-effect5455-8"
+ inkscape:original-d="m 281.39933,621.8766 c 0,0 1.46952,10.49035 1.5246,16.12091 0.0551,5.63052
-1.13149,15.88028 -1.13149,15.88028 l -6.35471,-0.96247 c 0,0 1.18149,-10.92725 0.86942,-16.60214
-0.31205,-5.67471 -2.57284,-15.15839 -2.57284,-15.15839 z"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czcczcc" />
+ <path
+ style="fill:#bebebe;fill-opacity:1;stroke:none"
+ d="m 270.95818,621.8766 c 0.95526,5.31878 1.46582,10.71735 1.5246,16.12091 0.0578,5.31249
-0.32108,10.62966 -1.13151,15.88028 l -6.3547,-0.96247 c 0.92244,-5.47663 1.21478,-11.05912 0.86942,-16.60214
-0.3193,-5.12472 -1.18333,-10.21532 -2.57283,-15.15839 l 7.66502,0.72181"
+ id="path5453-0"
+ inkscape:path-effect="#path-effect5455-3-5"
+ inkscape:original-d="m 270.95818,621.8766 c 0,0 1.46949,10.49035 1.5246,16.12091 0.0551,5.63052
-1.13151,15.88028 -1.13151,15.88028 l -6.3547,-0.96247 c 0,0 1.18147,-10.92725 0.86942,-16.60214
-0.31206,-5.67471 -2.57283,-15.15839 -2.57283,-15.15839 z"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czcczcc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path9022"
+ d="m 263.60036,621.15479 c -3.18291,-7.49005 2.68937,-16.24428 5.58812,-23.76143 l
-3.38194,-0.8254 c -3.81521,7.32283 -11.67712,15.46808 -9.39822,24.14312 z"
+ style="fill:#bebebe;fill-opacity:1;stroke:none;display:inline;enable-background:new" />
+ </g>
+ <path
+ sodipodi:nodetypes="scsss"
+ inkscape:connector-curvature="0"
+ id="path9062"
+ d="m 42.419188,886.94142 c 4.81609,12.79909 -5.75294,34.03688 -7.56115,38.09866 -7.26719,-3.47661
-22.64709,-5.87453 -30.8503797,-24.10009 -4.70055005,-10.44341 1.51392,-22.62391 12.1209797,-26.48951
10.60705,-3.86559 22.25702,1.77156 26.29055,12.49094 z"
+ style="fill:#bebebe;fill-opacity:1;stroke:none;display:inline;enable-background:new" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path9065"
+ d="m 34.494578,923.70146 c 9.48419,47.48165 29.7632,82.41334 29.7632,82.41334 l 0.21218,-0.077"
+
style="fill:none;stroke:#bebebe;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
/>
+ <path
+ sodipodi:nodetypes="ccsc"
+ inkscape:connector-curvature="0"
+ id="path9067"
+ d="m 34.508568,923.6991 -0.79034,5.42647 c 0,0 4.96791,-1.13051 4.74209,-1.35662 -0.22582,-0.22611
-3.95175,-4.06985 -3.95175,-4.06985 z"
+ style="fill:#bebebe;fill-opacity:1;stroke:none;display:inline;enable-background:new" />
+ </g>
+ </g>
+</svg>
diff --git a/gnome-initial-setup/pages/summary/gis-summary-page.css
b/gnome-initial-setup/pages/summary/gis-summary-page.css
new file mode 100644
index 0000000..2807dfa
--- /dev/null
+++ b/gnome-initial-setup/pages/summary/gis-summary-page.css
@@ -0,0 +1,9 @@
+
+.gis-summary-page {
+ background:
+ url("grass.svg") repeat-x bottom center,
+ url("girl.svg") no-repeat 15% bottom,
+ url("cat.svg") no-repeat 30% bottom,
+ url("large-balloon.svg") no-repeat 71% 25%,
+ url("small-balloons.svg") no-repeat 35% 35%;
+}
diff --git a/gnome-initial-setup/pages/summary/gis-summary-page.ui
b/gnome-initial-setup/pages/summary/gis-summary-page.ui
new file mode 100644
index 0000000..1fb7818
--- /dev/null
+++ b/gnome-initial-setup/pages/summary/gis-summary-page.ui
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <template class="GisSummaryPage" parent="GisPage">
+ <property name="margin-left">0</property>
+ <property name="margin-top">0</property>
+ <property name="margin-bottom">0</property>
+ <property name="margin-right">0</property>
+ <child>
+ <object class="GtkFrame" id="bg_frame">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="shadow-type">none</property>
+ <style>
+ <class name="gis-summary-page" />
+ </style>
+ <child>
+ <object class="GtkBox" id="box">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="spacing">20</property>
+ <property name="margin-top">75</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="title">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">You're all set!</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.8"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="tagline">
+ <property name="visible">True</property>
+ <property name="justify">center</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="start_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <style>
+ <class name="suggested-action"/>
+ </style>
+ <child>
+ <object class="GtkLabel" id="start_button_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xpad">4</property>
+ <property name="ypad">4</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/summary/grass.svg b/gnome-initial-setup/pages/summary/grass.svg
new file mode 100644
index 0000000..1c381d6
--- /dev/null
+++ b/gnome-initial-setup/pages/summary/grass.svg
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1024"
+ height="200"
+ id="svg4517"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="New document 1">
+ <defs
+ id="defs4519" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.98994949"
+ inkscape:cx="398.69704"
+ inkscape:cy="114.55308"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1366"
+ inkscape:window-height="702"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4522">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-852.36215)">
+ <g
+ style="display:inline;enable-background:new"
+ id="g8989"
+ transform="matrix(1.2873808,0,0,1.2890292,-161.19402,174.18093)">
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 125.29376,654.33386 c -0.60185,-1.63834 2.28453,5.77414 1.84437,-11.48938 0.19328,10.80483
3.26736,5.74036 1.77509,10.96032 l 5.24185,-10.41534 c -1.775,9.38684 -1.76159,11.11352 -0.52893,9.75874
1.71654,-5.5074 3.09034,-3.83322 2.96846,-9.65202 l 1.61793,9.1827 c 1.72909,-2.70648 1.84642,4.18558
3.57551,-8.12055 l 1.95759,8.46019 2.76653,-8.84306 c 0.51865,5.53309 -1.79204,2.84065 3.00739,8.37374
-0.15558,-4.84507 2.02861,-1.98084 1.85401,-8.68868 l 1.04364,8.6825 3.79782,-7.76855 1.49443,7.68827 c
2.90601,-4.56441 2.56365,-3.21498 3.0012,-8.60222 l 0.8028,8.57752 1.98844,-11.09705 c -1.03303,8.72524
0.7159,0.64537 2.27253,11.09705 3.37445,-4.02403 4.35675,-3.28559 4.96495,-8.2317 l 0.33964,8.22553
2.57512,-11.06617 c -1.05464,11.98836 0.99217,-0.92837 1.5747,11.05999 1.38327,-2.08486 2.08109,-3.50337
3.46436,-8.21935 l 0.45079,7.41038 2.43926,-9.33708 c -0.51378,8.1163 0.76437,3.49492 2.52571,9.46676
2.21893,-2.59396 4.00132,-1.18116 5.3046,-9.26915 -0.0642,6
.35298 -0.94283,7.22115 -0.1482,11.85661 l 0,3.65579 -63.97159,0 0,-3.65579 0,0 z"
+ id="path12566-6-9"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 213.03274,654.33386 c -0.60185,-1.63834 2.28453,5.77414 1.84437,-11.48938 0.19328,10.80483
3.26736,5.74036 1.77509,10.96032 l 5.24185,-10.41534 c -1.775,9.38684 -1.76159,11.11352 -0.52893,9.75874
1.71654,-5.5074 3.09034,-3.83322 2.96846,-9.65202 l 1.61793,9.1827 c 1.72909,-2.70648 1.84642,4.18558
3.57551,-8.12055 l 1.95759,8.46019 2.76653,-8.84306 c 0.51865,5.53309 -1.79204,2.84065 3.00739,8.37374
-0.15558,-4.84507 2.02861,-1.98084 1.85401,-8.68868 l 1.04364,8.6825 3.79782,-7.76855 1.49443,7.68827 c
2.90601,-4.56441 2.56365,-3.21498 3.0012,-8.60222 l 0.8028,8.57752 1.98844,-11.09705 c -1.03303,8.72524
0.7159,0.64537 2.27253,11.09705 3.37445,-4.02403 4.35675,-3.28559 4.96495,-8.2317 l 0.33964,8.22553
2.57512,-11.06617 c -1.05465,11.98836 0.99217,-0.92837 1.5747,11.05999 1.38327,-2.08486 2.08109,-3.50337
3.46436,-8.21935 l 0.45079,7.41038 2.43925,-9.33708 c -0.51377,8.1163 0.76438,3.49492 2.52572,9.46676
2.21893,-2.59396 4.00132,-1.18116 5.3046,-9.26915 -0.0642,6
.35298 -0.94283,7.22115 -0.1482,11.85661 l 0,3.65579 -63.97159,0 0,-3.65579 0,0 z"
+ id="path12568-2-2"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccccc"
+ id="path12570-3-0"
+ d="m 336.41568,654.33386 c -0.60185,-1.63834 2.28453,5.77414 1.84437,-11.48938 0.19328,10.80483
3.26736,5.74036 1.77509,10.96032 l 5.24185,-10.41534 c -1.775,9.38684 -1.76159,11.11352 -0.52893,9.75874
1.71654,-5.5074 3.09034,-3.83322 2.96846,-9.65202 l 1.61793,9.1827 c 1.72909,-2.70648 1.84642,4.18558
3.57551,-8.12055 l 1.95759,8.46019 2.76653,-8.84306 c 0.51865,5.53309 -1.79204,2.84065 3.00738,8.37374
-0.15557,-4.84507 2.02862,-1.98084 1.85402,-8.68868 l 1.04364,8.6825 3.79782,-7.76855 1.49443,7.68827 c
2.906,-4.56441 2.56365,-3.21498 3.0012,-8.60222 l 0.8028,8.57752 1.98844,-11.09705 c -1.03303,8.72524
0.7159,0.64537 2.27253,11.09705 3.37445,-4.02403 4.35675,-3.28559 4.96495,-8.2317 l 0.33964,8.22553
2.57512,-11.06617 c -1.05465,11.98836 0.99217,-0.92837 1.5747,11.05999 1.38327,-2.08486 2.08109,-3.50337
3.46435,-8.21935 l 0.4508,7.41038 2.43925,-9.33708 c -0.51377,8.1163 0.76437,3.49492 2.52572,9.46676
2.21893,-2.59396 4.00132,-1.18116 5.30459,-9.26915 -0.0641,6.3
5298 -0.94282,7.22115 -0.14819,11.85661 l 0,3.65579 -63.97159,0 0,-3.65579 0,0 z"
+ style="fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccccc"
+ id="path12574-7-5"
+ d="m 399.47807,654.33386 c -0.60185,-1.63834 2.28453,5.77414 1.84437,-11.48938 0.19328,10.80483
3.26736,5.74036 1.77509,10.96032 l 5.24185,-10.41534 c -1.775,9.38684 -1.76159,11.11352 -0.52893,9.75874
1.71654,-5.5074 3.09034,-3.83322 2.96846,-9.65202 l 1.61793,9.1827 c 1.72909,-2.70648 1.84642,4.18558
3.57551,-8.12055 l 1.95759,8.46019 2.76653,-8.84306 c 0.51865,5.53309 -1.79204,2.84065 3.00739,8.37374
-0.15558,-4.84507 2.02861,-1.98084 1.85401,-8.68868 l 1.04364,8.6825 3.79782,-7.76855 1.49443,7.68827 c
2.90601,-4.56441 2.56365,-3.21498 3.0012,-8.60222 l 0.8028,8.57752 1.98844,-11.09705 c -1.03303,8.72524
0.7159,0.64537 2.27253,11.09705 3.37445,-4.02403 4.35675,-3.28559 4.96495,-8.2317 l 0.33964,8.22553
2.57512,-11.06617 c -1.05464,11.98836 0.99217,-0.92837 1.5747,11.05999 1.38327,-2.08486 2.08109,-3.50337
3.46436,-8.21935 l 0.45079,7.41038 2.43926,-9.33708 c -0.51378,8.1163 0.76437,3.49492 2.52571,9.46676
2.21893,-2.59396 4.00132,-1.18116 5.3046,-9.26915 -0.0642,6
.35298 -0.94283,7.22115 -0.1482,11.85661 l 0,3.65579 -63.97159,0 0,-3.65579 0,0 z"
+ style="fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccsscccccccccccccccccccccc"
+ id="path12576-5-9"
+ d="m 271.28067,655.30003 c 2.15623,-5.42477 5.83895,-15.05466 5.39879,-27.75568 1.16267,8.90019
1.08386,22.51744 -0.40841,26.35784 l 3.64244,-6.99031 c -1.775,6.90603 -1.5331,8.51258 -0.30044,7.51585
3.54443,-3.71568 3.54731,-9.8804 2.51148,-13.99327 l 2.07491,12.97558 c 1.72909,-1.9912 2.0749,-10.5368
3.80399,-19.59059 l 1.7291,19.33616 2.76654,-13.23 c 0.51865,4.07076 -0.87809,9.96944 1.17948,13.58323
1.30926,-0.78012 1.59579,-10.31699 1.88641,-8.42324 0.86518,5.63748 1.91235,9.97245 2.43564,7.69483
0.22087,-0.96132 1.24249,-7.32468 1.19251,-8.73712 l 2.64305,7.58576 3.11236,-18.82731 c -0.0607,8.5783
0.52308,21.67399 -0.34582,19.59059 l 1.38328,2.03538 c 2.906,-3.3581 3.02062,-8.24885 3.45817,-12.21232 l
0.34582,10.17694 5.18727,-20.09944 c -1.03304,6.41928 -2.9399,12.40998 -1.38327,20.09944 3.37445,-2.96054
5.2707,-6.28359 5.8789,-9.92251 l -0.34582,9.41366 6.91637,-26.96886 c -1.05464,8.82 -3.34908,17.64001
-2.76655,26.46001 1.38327,-1.53386 2.76655,-5.4352 4.1
4982,-8.90481 l -0.69164,8.14154 4.49563,-16.28308 c -0.51377,5.97127 -3.21454,12.2107 1.38328,17.5552
2.21894,-1.90842 4.22981,-4.73533 5.53309,-10.68578 -0.0642,4.67398 -0.94283,10.69195 -0.1482,14.10231 l
0,2.68962 -66.71818,0 0,-2.68962 0,0 z"
+ style="fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 186.87272,654.95069 c 1.87231,-5.42478 5.07012,-15.05467 4.68792,-27.75569 1.00957,8.9002
0.94114,22.51744 -0.35464,26.35784 l 3.16283,-6.99031 c -1.54128,6.90604 -1.33123,8.51258 -0.26088,7.51585
3.07773,-3.71567 3.08023,-9.8804 2.18079,-13.99327 l 1.8017,12.97558 c 1.50141,-1.9912 1.8017,-10.53679
3.30311,-19.59059 l 1.50143,19.33616 2.40226,-13.23 c 0.45035,4.07077 -0.56408,8.14155 3.6034,12.21231
2.24985,-1.54387 3.15443,-4.98744 3.00283,-9.92251 l 1.50141,9.41366 2.70256,-18.82731 c -0.0526,8.57831
0.4542,21.674 -0.30029,19.59059 l 1.20114,2.03538 -0.42188,3.91127 -29.71369,-0.006 0,-3.03213 z"
+ id="path12580-7-0"
+ sodipodi:nodetypes="cccccccccccccccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccccc"
+ id="path12584-7-3"
+ d="m 461.51157,654.33386 c -0.60185,-1.63834 2.28453,5.77414 1.84436,-11.48938 0.19328,10.80482
3.26737,5.74036 1.7751,10.96031 l 5.24185,-10.41534 c -1.775,9.38684 -1.76159,11.11353 -0.52893,9.75874
1.71654,-5.5074 3.09034,-3.83321 2.96845,-9.65201 l 1.61794,9.18269 c 1.72909,-2.70648 1.84642,4.18558
3.57551,-8.12054 l 1.95758,8.46018 2.76654,-8.84305 c 0.51865,5.53308 -1.79204,2.84065 3.00738,8.37373
-0.15557,-4.84506 2.02862,-1.98083 1.85402,-8.68868 l 1.04363,8.6825 3.79782,-7.76854 1.49443,7.68826 c
2.90601,-4.56441 2.56366,-3.21497 3.00121,-8.60222 l 0.80279,8.57753 1.98845,-11.09705 c -1.03304,8.72524
0.7159,0.64536 2.27252,11.09705 3.37445,-4.02403 4.35675,-3.2856 4.96496,-8.23171 l 0.33964,8.22553
2.57511,-11.06617 c -1.05464,11.98836 0.99217,-0.92836 1.57471,11.05999 1.38327,-2.08486 2.08108,-3.50337
3.46435,-8.21935 l 0.4508,7.41039 2.43925,-9.33708 c -0.51378,8.11629 0.76437,3.49492 2.52571,9.46676
2.21894,-2.59397 4.00133,-1.18117 5.3046,-9.26916 -0.064
2,6.35298 -0.94283,7.22116 -0.1482,11.85662 l 0,3.65579 -63.97158,0 0,-3.65579 0,0 z"
+ style="fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 586.7224,654.33386 c -0.60185,-1.63834 2.28453,5.77414 1.84437,-11.48938 0.19328,10.80482
3.26736,5.74036 1.77509,10.96031 l 5.24185,-10.41534 c -1.775,9.38684 -1.76159,11.11353 -0.52893,9.75874
1.71654,-5.5074 3.09034,-3.83321 2.96846,-9.65201 l 1.61793,9.18269 c 1.72909,-2.70648 1.84642,4.18558
3.57551,-8.12054 l 1.95759,8.46018 2.76653,-8.84305 c 0.51865,5.53308 -1.79204,2.84065 3.00739,8.37373
-0.15558,-4.84506 2.02861,-1.98083 1.85401,-8.68868 l 1.04364,8.6825 3.79782,-7.76854 1.49443,7.68826 c
2.90601,-4.56441 2.56365,-3.21497 3.0012,-8.60222 l 0.8028,8.57753 1.98844,-11.09705 c -1.03303,8.72524
0.7159,0.64536 2.27253,11.09705 3.37445,-4.02403 4.35675,-3.2856 4.96495,-8.23171 l 0.33964,8.22553
2.57512,-11.06617 c -1.05464,11.98836 0.99217,-0.92836 1.5747,11.05999 1.38327,-2.08486 2.08109,-3.50337
3.46436,-8.21935 l 0.45079,7.41039 2.43926,-9.33708 c -0.51378,8.11629 0.76437,3.49492 2.52571,9.46676
2.21893,-2.59397 4.00132,-1.18117 5.3046,-9.26916 -0.0642,
6.35298 -0.94283,7.22116 -0.1482,11.85662 l 0,3.65579 -63.97159,0 0,-3.65579 0,0 z"
+ id="path12588-5-7"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 674.46138,654.33386 c -0.60185,-1.63834 2.28453,5.77414 1.84437,-11.48938 0.19328,10.80482
3.26736,5.74036 1.77509,10.96031 l 5.24185,-10.41534 c -1.775,9.38684 -1.76159,11.11353 -0.52893,9.75874
1.71654,-5.5074 3.09034,-3.83321 2.96846,-9.65201 l 1.61793,9.18269 c 1.72909,-2.70648 1.84642,4.18558
3.57551,-8.12054 l 1.95759,8.46018 2.76653,-8.84305 c 0.51865,5.53308 -1.79204,2.84065 3.00739,8.37373
-0.15558,-4.84506 2.02861,-1.98083 1.85401,-8.68868 l 1.04364,8.6825 3.79782,-7.76854 1.49443,7.68826 c
2.90601,-4.56441 2.56365,-3.21497 3.0012,-8.60222 l 0.8028,8.57753 1.98844,-11.09705 c -1.03303,8.72524
0.7159,0.64536 2.27253,11.09705 3.37445,-4.02403 4.35675,-3.2856 4.96495,-8.23171 l 0.33964,8.22553
2.57512,-11.06617 c -1.05465,11.98836 0.99217,-0.92836 1.5747,11.05999 1.38327,-2.08486 2.08109,-3.50337
3.46436,-8.21935 l 0.45079,7.41039 2.43925,-9.33708 c -0.51377,8.11629 0.76438,3.49492 2.52572,9.46676
2.21893,-2.59397 4.00132,-1.18117 5.3046,-9.26916 -0.0642
,6.35298 -0.94283,7.22116 -0.1482,11.85662 l 0,3.65579 -63.97159,0 0,-3.65579 0,0 z"
+ id="path12590-2-8"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccsscccccccccccccccccccccc"
+ id="path12598-3-5"
+ d="m 732.70931,655.30308 c 2.15623,-5.4395 5.83895,-15.09556 5.39879,-27.83108 1.16267,8.92437
1.08386,22.57861 -0.40841,26.42943 l 3.64244,-7.00929 c -1.775,6.92479 -1.5331,8.5357 -0.30044,7.53627
3.54443,-3.72578 3.54731,-9.90724 2.51148,-14.03128 l 2.07491,13.01082 c 1.72909,-1.99661 2.0749,-10.56541
3.80399,-19.6438 l 1.7291,19.38869 2.76654,-13.26595 c 0.51865,4.08182 -0.87809,9.99652 1.17948,13.62014
1.30926,-0.78225 1.59579,-10.34502 1.88641,-8.44613 0.86518,5.65279 1.91235,9.99954 2.43564,7.71573
0.22087,-0.96393 1.24249,-7.34458 1.19251,-8.76086 l 2.64305,7.60638 3.11236,-18.87846 c -0.0607,8.60161
0.52308,21.73287 -0.34582,19.64381 l 1.38328,2.04091 c 2.906,-3.36722 3.02062,-8.27126 3.45817,-12.2455 l
0.34582,10.20459 5.18727,-20.15404 c -1.03304,6.43672 -2.9399,12.44369 -1.38327,20.15404 3.37445,-2.96858
5.2707,-6.30066 5.8789,-9.94947 l -0.34582,9.43923 6.91637,-27.04211 c -1.05464,8.84396 -3.34908,17.68793
-2.76655,26.53188 1.38327,-1.53803 2.76655,-5.4
4996 4.14982,-8.929 l -0.69164,8.16366 4.49563,-16.32731 c -0.51377,5.98749 -3.21454,12.24387
1.38328,17.60288 2.21894,-1.9136 4.22981,-4.74819 5.53309,-10.7148 -0.0642,4.68667 -0.94283,10.72099
-0.1482,14.14062 l 0,2.69692 -66.71818,0 0,-2.69692 0,0 z"
+ style="fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccc"
+ id="path12600-8-4"
+ d="m 580.2208,647.21798 c 1.77499,6.7152 1.5331,8.27736 0.30044,7.30816 -3.54444,-3.613
-3.54731,-9.60737 -2.51148,-13.60659 l -2.07491,12.61703 c -1.72909,-1.93617 -2.07491,-10.24564
-3.804,-19.04925 l -1.72909,18.80185 -2.76654,-12.86443 c -0.51865,3.95829 0.6496,7.91658 -4.14982,11.87486
-2.59102,-1.50121 -3.63278,-4.84963 -3.45818,-9.64832 l -1.72909,9.15354 -3.11236,-18.30707 c 0.0607,8.34126
-0.52308,21.07509 0.34582,19.04925 l -1.38328,1.97913 c -2.90601,-3.2653 -3.02062,-8.0209 -3.45818,-11.87485
l -0.34582,9.89572 -5.18726,-19.54404 c 1.03303,6.2419 2.93989,12.06706 1.38327,19.54404 -3.37445,-2.87873
-5.2707,-6.10995 -5.87891,-9.64833 l 0.34582,9.15354 -6.91636,-26.22364 c 1.05464,8.57629 3.34908,17.15257
2.76655,25.72885 -1.38327,-1.49148 -2.76655,-5.28501 -4.14982,-8.65875 l 0.69164,7.91658 -4.49564,-15.83315 c
0.51378,5.80628 3.21455,11.8733 -1.38327,17.07011 -2.21894,-1.85568 -4.22982,-4.60447 -5.53309,-10.3905
0.0642,4.54482 0.94283,10.3965 0.1482,13.7
1263 l 0,2.6153 66.71818,0 -8.63282,-10.77167 0,0 z"
+ style="fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 648.30136,654.95068 c 1.87231,-5.42477 5.07012,-15.05466 4.68792,-27.75568 1.00957,8.90019
0.94114,22.51744 -0.35464,26.35784 l 3.16283,-6.99031 c -1.54128,6.90604 -1.33123,8.51259 -0.26088,7.51584
3.07773,-3.71567 3.08023,-9.88039 2.18079,-13.99327 l 1.8017,12.97558 c 1.50141,-1.9912 1.8017,-10.53679
3.30311,-19.59058 l 1.50143,19.33616 2.40226,-13.23001 c 0.45035,4.07077 -0.56408,8.14155 3.6034,12.21232
2.24985,-1.54388 3.15443,-4.98745 3.00283,-9.92251 l 1.50141,9.41366 2.70256,-18.82731 c -0.0526,8.5783
0.4542,21.67399 -0.30029,19.59058 l 1.20114,2.03538 -0.42188,3.91128 -29.71369,0.01 0,-3.04899 z"
+ id="path12602-7-6"
+ sodipodi:nodetypes="cccccccccccccccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccccc"
+ id="path12562-6-8-0"
+ d="m 799.16586,654.33386 c -0.60185,-1.63834 2.28453,5.77414 1.84436,-11.48938 0.19328,10.80483
3.26737,5.74036 1.7751,10.96032 l 5.24185,-10.41534 c -1.775,9.38684 -1.76159,11.11352 -0.52893,9.75874
1.71654,-5.5074 3.09034,-3.83322 2.96845,-9.65202 l 1.61794,9.1827 c 1.72909,-2.70648 1.84642,4.18558
3.57551,-8.12055 l 1.95758,8.46019 2.76654,-8.84306 c 0.51865,5.53309 -1.79204,2.84065 3.00738,8.37374
-0.15557,-4.84507 2.02862,-1.98084 1.85402,-8.68868 l 1.04363,8.6825 3.79782,-7.76855 1.49443,7.68827 c
2.90601,-4.56441 2.56366,-3.21498 3.00121,-8.60222 l 0.80279,8.57752 1.98845,-11.09705 c -1.03304,8.72524
0.7159,0.64537 2.27252,11.09705 3.37445,-4.02403 4.35675,-3.28559 4.96496,-8.2317 l 0.33964,8.22553
2.57511,-11.06617 c -1.05464,11.98836 0.99217,-0.92837 1.57471,11.05999 1.38327,-2.08486 2.08108,-3.50337
3.46435,-8.21935 l 0.4508,7.41038 2.43925,-9.33708 c -0.51378,8.1163 0.76437,3.49492 2.52571,9.46676
2.21894,-2.59396 4.00133,-1.18116 5.3046,-9.26915 -0.0642,
6.35298 -0.94283,7.22115 -0.1482,11.85661 l 0,3.65579 -63.97158,0 0,-3.65579 0,0 z"
+ style="fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccc"
+ id="path12578-5-0-8"
+ d="m 917.87509,647.21799 c 1.77499,6.7152 1.5331,8.27736 0.30044,7.30816 -3.54444,-3.613
-3.54731,-9.60737 -2.51148,-13.6066 l -2.07491,12.61703 c -1.72909,-1.93617 -2.07491,-10.24564
-3.804,-19.04925 l -1.72909,18.80186 -2.76654,-12.86443 c -0.51865,3.95829 0.6496,7.91658 -4.14982,11.87486
-2.59102,-1.50122 -3.63278,-4.84964 -3.45818,-9.64833 l -1.72909,9.15354 -3.11236,-18.30706 c 0.0607,8.34126
-0.52308,21.07508 0.34582,19.04924 l -1.38328,1.97914 c -2.90601,-3.26531 -3.02062,-8.02091
-3.45818,-11.87486 l -0.34582,9.89572 -5.18726,-19.54404 c 1.03303,6.24191 2.93989,12.06707 1.38327,19.54404
-3.37445,-2.87872 -5.2707,-6.10995 -5.87891,-9.64832 l 0.34582,9.15354 -6.91636,-26.22365 c 1.05464,8.5763
3.34908,17.15257 2.76655,25.72886 -1.38327,-1.49148 -2.76655,-5.28502 -4.14982,-8.65875 l 0.69164,7.91658
-4.49564,-15.83315 c 0.51378,5.80627 3.21455,11.87329 -1.38327,17.07011 -2.21894,-1.85569 -4.22982,-4.60448
-5.53309,-10.39051 0.0642,4.54483 0.94283,10.39651 0.1482
,13.71264 l 0,2.61529 66.71818,0 -8.63282,-10.77166 0,0 z"
+ style="fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+ </g>
+ <rect
+ style="fill:#bebebe;fill-opacity:1;stroke:none;display:inline;enable-background:new"
+ id="rect4515"
+ width="1025"
+ height="31"
+ x="0"
+ y="1021.3621" />
+ </g>
+</svg>
diff --git a/gnome-initial-setup/pages/summary/large-balloon.svg
b/gnome-initial-setup/pages/summary/large-balloon.svg
new file mode 100644
index 0000000..076af9b
--- /dev/null
+++ b/gnome-initial-setup/pages/summary/large-balloon.svg
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="144"
+ height="186"
+ id="svg4870"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="large-balloon.svg">
+ <defs
+ id="defs4872" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.98994949"
+ inkscape:cx="35.81049"
+ inkscape:cy="240.33431"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="2560"
+ inkscape:window-height="1374"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4875">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-866.36218)">
+ <g
+ transform="translate(-618.39394,661.36218)"
+
style="display:inline;enable-background:new;fill:#bebebe;color:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;overflow:visible"
+ id="g9045">
+ <path
+ sodipodi:type="arc"
+
style="fill:#bebebe;fill-opacity:1;stroke:none;color:#000000;fill-rule:nonzero;stroke-width:1.20759149;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ id="path13111"
+ sodipodi:cx="623"
+ sodipodi:cy="374.36218"
+ sodipodi:rx="85"
+ sodipodi:ry="85"
+ d="m 708,374.36218 c 0,46.94421 -38.0558,85 -85,85 -46.9442,0 -85,-38.05579 -85,-85 0,-46.9442
38.0558,-85 85,-85 46.9442,0 85,38.0558 85,85 z"
+ transform="matrix(0.82331105,0.08887963,-0.08887963,0.82331105,210.74433,-85.194557)" />
+ <path
+
style="fill:#bebebe;fill-opacity:1;stroke:none;color:#000000;fill-rule:nonzero;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 706.44887,355.0887 -2.80325,19.03792 c 0.10272,4.2178 -0.53554,8.3556 -1.82915,12.42267
-7.36341,1.59955 -14.42308,1.75426 -21.3033,1.05521 -2.39651,-4.4565 -2.42366,-8.89435 -2.53238,-13.33284 l
-4.11019,-21.64044 2.41458,1.12428 3.62132,20.43257 c 7.78421,-0.60372 13.75944,-0.59796 21.93301,-0.45457 l
2.57054,-18.08664 z"
+ id="path13125"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ <path
+
style="fill:#bebebe;fill-opacity:1;stroke:none;color:#000000;fill-rule:nonzero;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 706.39842,355.7821 c -10.88166,1.4705 -21.54737,0.94065 -32.01428,-1.43083 -4.35164,-6.16648
-10.15708,-10.02111 -17.23251,-13.95459 l 32.1828,-5.89593 34.77963,5.73274 c -10.67094,6.45162
-15.28626,9.24092 -17.71564,15.54861 z"
+ id="path13127"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ sodipodi:type="arc"
+
style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.21257112;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ id="path13141"
+ sodipodi:cx="406.05606"
+ sodipodi:cy="406.59692"
+ sodipodi:rx="7.4246211"
+ sodipodi:ry="7.4246211"
+ d="m 413.48068,406.59692 c 0,4.10051 -3.32411,7.42462 -7.42462,7.42462 -4.1005,0 -7.42462,-3.32411
-7.42462,-7.42462 0,-4.1005 3.32412,-7.42462 7.42462,-7.42462 4.10051,0 7.42462,3.32412 7.42462,7.42462 z"
+ transform="matrix(0.45029769,-0.03876117,0.03876117,0.45029769,490.59344,198.12421)" />
+ <rect
+ transform="matrix(0.99631567,-0.08576185,0.08576185,0.99631567,0,0)"
+
style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ id="rect13143"
+ width="10.365982"
+ height="10.365982"
+ x="650.10034"
+ y="427.056"
+ rx="3.2057731"
+ ry="3.2057731" />
+ <path
+ sodipodi:nodetypes="csascc"
+ inkscape:connector-curvature="0"
+ id="path7899"
+ d="m 685.8052,372.37376 c 0,0 -2.85216,-1.15791 -3.78999,-2.29994 -1.04354,-1.27076
-3.07802,-3.75259 -1.69014,-4.6344 1.21501,-0.77198 1.84018,2.27417 3.04431,3.06301 1.07272,0.70275
3.58486,1.39645 3.58486,1.39645 z"
+
style="fill:#bebebe;fill-opacity:1;stroke:none;display:inline;enable-background:new;color:#000000;fill-rule:nonzero;stroke-width:1;marker:none;visibility:visible;overflow:visible"
/>
+ </g>
+ </g>
+</svg>
diff --git a/gnome-initial-setup/pages/summary/small-balloons.svg
b/gnome-initial-setup/pages/summary/small-balloons.svg
new file mode 100644
index 0000000..c06ea08
--- /dev/null
+++ b/gnome-initial-setup/pages/summary/small-balloons.svg
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="150"
+ height="80"
+ id="svg4800"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="New document 11">
+ <defs
+ id="defs4802" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.979899"
+ inkscape:cx="112.30969"
+ inkscape:cy="105.28461"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1366"
+ inkscape:window-height="702"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4805">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-972.36218)">
+ <g
+ id="g4837"
+ transform="translate(23.571447,42.857141)">
+ <g
+ style="fill:#bebebe;fill-opacity:1;display:inline;enable-background:new"
+ id="g13248"
+ transform="matrix(-0.86497926,-0.0418031,-0.0418031,0.86497926,1426.7059,489.14008)">
+ <g
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/tmp/foundation_back_balloons.png"
+ id="g13250"
+ style="fill:#bebebe;fill-opacity:1"
+ transform="matrix(0.22234969,0.03876506,-0.03876506,0.22234969,1196.4853,427.96283)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#bebebe;fill-opacity:1;stroke:none"
+ id="path13252"
+ sodipodi:cx="623"
+ sodipodi:cy="374.36218"
+ sodipodi:rx="85"
+ sodipodi:ry="85"
+ d="m 708,374.36218 c 0,46.94421 -38.0558,85 -85,85 -46.9442,0 -85,-38.05579 -85,-85 0,-46.9442
38.0558,-85 85,-85 46.9442,0 85,38.0558 85,85 z"
+ transform="translate(817,157)" />
+ <path
+ style="fill:#bebebe;fill-opacity:1;stroke:none"
+ d="m 1469.2163,621.36218 -0.8981,23.22056 c 0.67,5.05064 0.44,10.10128 -0.586,15.15193
-8.6333,2.87482 -17.0892,3.97558 -25.4403,4.02805 -3.4549,-5.03993 -4.0627,-10.36456 -4.7685,-15.67939 l
-7.7396,-25.44913 5.8597,0.5461 6.9961,24.0623 c 9.2676,-1.73376 11.2945,-1.60383 21.1264,-2.49106 l
0.742,-22.04828 z"
+ id="path13254"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ <path
+ style="fill:#bebebe;fill-opacity:1;stroke:none"
+ d="m 1469.2456,622.20123 c -12.8741,3.17589 -25.7482,3.92213 -38.6223,2.43153 -6.0239,-6.83956
-13.4936,-10.71504 -22.4983,-14.52058 l 37.875,-11.25 42.5,2.375 c -11.9755,9.12898 -17.1552,13.07606
-19.2544,20.96405 z"
+ id="path13256"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ </g>
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/tmp/foundation_back_balloons.png"
+ d="m 1495.2215,627.94342 c 0,0.96411 -0.3364,1.74567 -0.7513,1.74567 -0.4149,0 -0.7513,-0.78156
-0.7513,-1.74567 0,-0.96411 0.3364,-1.74567 0.7513,-1.74567 0.4149,0 0.7513,0.78156 0.7513,1.74567 z"
+ sodipodi:ry="1.7456698"
+ sodipodi:rx="0.75130099"
+ sodipodi:cy="627.94342"
+ sodipodi:cx="1494.4702"
+ id="path13258"
+ style="fill:#bebebe;fill-opacity:1;stroke:none"
+ sodipodi:type="arc" />
+ </g>
+ <g
+ style="fill:#bebebe;fill-opacity:1;display:inline;enable-background:new"
+ id="g13260"
+ transform="matrix(-1.0081958,-0.06691419,-0.06691419,1.0081958,1546.7644,471.4231)">
+ <g
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/tmp/foundation_back_balloons.png"
+ id="g13262"
+ style="fill:#bebebe;fill-opacity:1"
+ transform="matrix(0.22234969,0.03876506,-0.03876506,0.22234969,1196.4853,427.96283)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#bebebe;fill-opacity:1;stroke:none"
+ id="path13264"
+ sodipodi:cx="623"
+ sodipodi:cy="374.36218"
+ sodipodi:rx="85"
+ sodipodi:ry="85"
+ d="m 708,374.36218 c 0,46.94421 -38.0558,85 -85,85 -46.9442,0 -85,-38.05579 -85,-85 0,-46.9442
38.0558,-85 85,-85 46.9442,0 85,38.0558 85,85 z"
+ transform="translate(817,157)" />
+ <path
+ style="fill:#bebebe;fill-opacity:1;stroke:none"
+ d="m 1469.2163,621.36218 -0.8981,23.22056 c 0.67,5.05064 0.44,10.10128 -0.586,15.15193
-8.6333,2.87482 -17.0892,3.97558 -25.4403,4.02805 -3.4549,-5.03993 -4.0627,-10.36456 -4.7685,-15.67939 l
-7.7396,-25.44913 5.1759,0.58934 6.9961,24.0623 c 9.2676,-1.73376 12.6621,-1.69031 22.494,-2.57754 l
0.742,-22.04828 z"
+ id="path13266"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ <path
+ style="fill:#bebebe;fill-opacity:1;stroke:none"
+ d="m 1469.2456,622.20123 c -12.8741,3.17589 -25.7482,3.92213 -38.6223,2.43153 -6.0239,-6.83956
-13.4936,-10.71504 -22.4983,-14.52058 l 37.875,-11.25 42.5,2.375 c -11.9755,9.12898 -17.1552,13.07606
-19.2544,20.96405 z"
+ id="path13268"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ </g>
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/tmp/foundation_back_balloons.png"
+ d="m 1495.2215,627.94342 c 0,0.96411 -0.3364,1.74567 -0.7513,1.74567 -0.4149,0 -0.7513,-0.78156
-0.7513,-1.74567 0,-0.96411 0.3364,-1.74567 0.7513,-1.74567 0.4149,0 0.7513,0.78156 0.7513,1.74567 z"
+ sodipodi:ry="1.7456698"
+ sodipodi:rx="0.75130099"
+ sodipodi:cy="627.94342"
+ sodipodi:cx="1494.4702"
+ id="path13270"
+ style="fill:#bebebe;fill-opacity:1;stroke:none"
+ sodipodi:type="arc" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/gnome-initial-setup/pages/summary/summary.gresource.xml
b/gnome-initial-setup/pages/summary/summary.gresource.xml
new file mode 100644
index 0000000..a660290
--- /dev/null
+++ b/gnome-initial-setup/pages/summary/summary.gresource.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/initial-setup">
+ <file preprocess="xml-stripblanks" alias="gis-summary-page.ui">gis-summary-page.ui</file>
+ <file alias="gis-summary-page.css">gis-summary-page.css</file>
+ <file alias="grass.svg">grass.svg</file>
+ <file alias="girl.svg">girl.svg</file>
+ <file alias="cat.svg">cat.svg</file>
+ <file alias="large-balloon.svg">large-balloon.svg</file>
+ <file alias="small-balloons.svg">small-balloons.svg</file>
+ </gresource>
+</gresources>
+
diff --git a/gnome-initial-setup/pages/timezone/Makefile.am b/gnome-initial-setup/pages/timezone/Makefile.am
new file mode 100644
index 0000000..f34b56d
--- /dev/null
+++ b/gnome-initial-setup/pages/timezone/Makefile.am
@@ -0,0 +1,46 @@
+
+noinst_LTLIBRARIES = libgistimezone.la
+
+BUILT_SOURCES =
+
+# Used for backward file
+AM_CPPFLAGS = \
+ -DGNOMECC_DATA_DIR="\"$(datadir)/gnome-control-center\""
+
+timedated.c: timedated.h
+timedated.h: $(srcdir)/timedated1-interface.xml
+ $(AM_V_GEN) gdbus-codegen \
+ --interface-prefix org.freedesktop. \
+ --generate-c-code timedated $<
+BUILT_SOURCES += timedated.c timedated.h
+
+resource_files = $(shell glib-compile-resources --sourcedir=$(srcdir) --generate-dependencies
$(srcdir)/datetime.gresource.xml)
+cc-datetime-resources.c: datetime.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
+cc-datetime-resources.h: datetime.gresource.xml $(resource_files)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
+BUILT_SOURCES += cc-datetime-resources.c cc-datetime-resources.h
+
+resource_files_timezone = $(shell glib-compile-resources --sourcedir=$(srcdir) --generate-dependencies
$(srcdir)/timezone.gresource.xml)
+timezone-resources.c: timezone.gresource.xml $(resource_files_timezone)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
+timezone-resources.h: timezone.gresource.xml $(resource_files_timezone)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
+BUILT_SOURCES += timezone-resources.c timezone-resources.h
+
+libgistimezone_la_SOURCES = \
+ cc-timezone-map.c cc-timezone-map.h \
+ gis-bubble-widget.c gis-bubble-widget.h \
+ gis-timezone-page.c gis-timezone-page.h \
+ $(BUILT_SOURCES)
+
+libgistimezone_la_CFLAGS = $(INITIAL_SETUP_CFLAGS) -I "$(srcdir)/../.."
+libgistimezone_la_LIBADD = $(INITIAL_SETUP_LIBS)
+libgistimezone_la_LDFLAGS = -export_dynamic -avoid-version -module -no-undefined
+
+EXTRA_DIST = \
+ timedated1-interface.xml \
+ $(resource_files) \
+ $(resource_files_timezone) \
+ datetime.gresource.xml \
+ timezone.gresource.xml
diff --git a/gnome-initial-setup/pages/timezone/data/bg.png b/gnome-initial-setup/pages/timezone/data/bg.png
new file mode 100644
index 0000000..4180ee8
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/bg.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/bg_dim.png
b/gnome-initial-setup/pages/timezone/data/bg_dim.png
new file mode 100644
index 0000000..3d34b94
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/bg_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/pin.png b/gnome-initial-setup/pages/timezone/data/pin.png
new file mode 100644
index 0000000..40dd4ea
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/pin.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-1.png
b/gnome-initial-setup/pages/timezone/data/timezone_-1.png
new file mode 100644
index 0000000..fb00d83
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-1.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-10.png
b/gnome-initial-setup/pages/timezone/data/timezone_-10.png
new file mode 100644
index 0000000..472eb88
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-10.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-10_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_-10_dim.png
new file mode 100644
index 0000000..7dd94f4
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-10_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-11.png
b/gnome-initial-setup/pages/timezone/data/timezone_-11.png
new file mode 100644
index 0000000..1da3536
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-11.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-11_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_-11_dim.png
new file mode 100644
index 0000000..3ed7bb4
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-11_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-1_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_-1_dim.png
new file mode 100644
index 0000000..5a1fd9f
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-1_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-2.png
b/gnome-initial-setup/pages/timezone/data/timezone_-2.png
new file mode 100644
index 0000000..30a1ec7
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-2.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-2_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_-2_dim.png
new file mode 100644
index 0000000..da78e75
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-2_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-3.5.png
b/gnome-initial-setup/pages/timezone/data/timezone_-3.5.png
new file mode 100644
index 0000000..c1df00b
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-3.5.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-3.5_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_-3.5_dim.png
new file mode 100644
index 0000000..a72375c
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-3.5_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-3.png
b/gnome-initial-setup/pages/timezone/data/timezone_-3.png
new file mode 100644
index 0000000..c22dbb6
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-3.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-3_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_-3_dim.png
new file mode 100644
index 0000000..be9e495
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-3_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-4.5.png
b/gnome-initial-setup/pages/timezone/data/timezone_-4.5.png
new file mode 100644
index 0000000..9e3c134
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-4.5.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-4.5_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_-4.5_dim.png
new file mode 100644
index 0000000..02d0f3b
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-4.5_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-4.png
b/gnome-initial-setup/pages/timezone/data/timezone_-4.png
new file mode 100644
index 0000000..4b5a431
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-4.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-4_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_-4_dim.png
new file mode 100644
index 0000000..809ddf0
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-4_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-5.5.png
b/gnome-initial-setup/pages/timezone/data/timezone_-5.5.png
new file mode 100644
index 0000000..b1c788d
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-5.5.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-5.5_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_-5.5_dim.png
new file mode 100644
index 0000000..cde398b
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-5.5_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-5.png
b/gnome-initial-setup/pages/timezone/data/timezone_-5.png
new file mode 100644
index 0000000..06c15e6
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-5.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-5_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_-5_dim.png
new file mode 100644
index 0000000..85a0325
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-5_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-6.png
b/gnome-initial-setup/pages/timezone/data/timezone_-6.png
new file mode 100644
index 0000000..8505fb1
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-6.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-6_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_-6_dim.png
new file mode 100644
index 0000000..e6de4c6
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-6_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-7.png
b/gnome-initial-setup/pages/timezone/data/timezone_-7.png
new file mode 100644
index 0000000..fec235d
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-7.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-7_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_-7_dim.png
new file mode 100644
index 0000000..aad26c0
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-7_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-8.png
b/gnome-initial-setup/pages/timezone/data/timezone_-8.png
new file mode 100644
index 0000000..bdad7bf
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-8.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-8_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_-8_dim.png
new file mode 100644
index 0000000..7caeec7
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-8_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-9.5.png
b/gnome-initial-setup/pages/timezone/data/timezone_-9.5.png
new file mode 100644
index 0000000..b1c788d
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-9.5.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-9.5_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_-9.5_dim.png
new file mode 100644
index 0000000..9b1b71c
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-9.5_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-9.png
b/gnome-initial-setup/pages/timezone/data/timezone_-9.png
new file mode 100644
index 0000000..04cb3cb
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-9.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_-9_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_-9_dim.png
new file mode 100644
index 0000000..578b1bd
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_-9_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_0.png
b/gnome-initial-setup/pages/timezone/data/timezone_0.png
new file mode 100644
index 0000000..e59b773
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_0.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_0_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_0_dim.png
new file mode 100644
index 0000000..13e7ac9
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_0_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_1.png
b/gnome-initial-setup/pages/timezone/data/timezone_1.png
new file mode 100644
index 0000000..2053b7e
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_1.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_10.5.png
b/gnome-initial-setup/pages/timezone/data/timezone_10.5.png
new file mode 100644
index 0000000..6ec7f9f
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_10.5.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_10.5_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_10.5_dim.png
new file mode 100644
index 0000000..359911f
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_10.5_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_10.png
b/gnome-initial-setup/pages/timezone/data/timezone_10.png
new file mode 100644
index 0000000..475dcf4
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_10.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_10_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_10_dim.png
new file mode 100644
index 0000000..9521033
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_10_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_11.5.png
b/gnome-initial-setup/pages/timezone/data/timezone_11.5.png
new file mode 100644
index 0000000..afdedd7
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_11.5.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_11.5_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_11.5_dim.png
new file mode 100644
index 0000000..00cc5b8
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_11.5_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_11.png
b/gnome-initial-setup/pages/timezone/data/timezone_11.png
new file mode 100644
index 0000000..6168aa2
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_11.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_11_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_11_dim.png
new file mode 100644
index 0000000..5a1df4e
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_11_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_12.75.png
b/gnome-initial-setup/pages/timezone/data/timezone_12.75.png
new file mode 100644
index 0000000..4f74a85
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_12.75.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_12.75_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_12.75_dim.png
new file mode 100644
index 0000000..cc7dbde
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_12.75_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_12.png
b/gnome-initial-setup/pages/timezone/data/timezone_12.png
new file mode 100644
index 0000000..d0b3531
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_12.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_12_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_12_dim.png
new file mode 100644
index 0000000..71514a8
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_12_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_13.png
b/gnome-initial-setup/pages/timezone/data/timezone_13.png
new file mode 100644
index 0000000..fe2f134
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_13.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_13_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_13_dim.png
new file mode 100644
index 0000000..90e689d
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_13_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_14.png
b/gnome-initial-setup/pages/timezone/data/timezone_14.png
new file mode 100644
index 0000000..e91d4eb
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_14.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_14_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_14_dim.png
new file mode 100644
index 0000000..e4f0a0a
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_14_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_1_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_1_dim.png
new file mode 100644
index 0000000..b36ff22
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_1_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_2.png
b/gnome-initial-setup/pages/timezone/data/timezone_2.png
new file mode 100644
index 0000000..ec1e874
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_2.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_2_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_2_dim.png
new file mode 100644
index 0000000..fba1021
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_2_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_3.5.png
b/gnome-initial-setup/pages/timezone/data/timezone_3.5.png
new file mode 100644
index 0000000..2dc7399
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_3.5.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_3.5_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_3.5_dim.png
new file mode 100644
index 0000000..76eab2e
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_3.5_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_3.png
b/gnome-initial-setup/pages/timezone/data/timezone_3.png
new file mode 100644
index 0000000..eda59dc
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_3.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_3_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_3_dim.png
new file mode 100644
index 0000000..d718bbc
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_3_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_4.5.png
b/gnome-initial-setup/pages/timezone/data/timezone_4.5.png
new file mode 100644
index 0000000..e09ed90
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_4.5.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_4.5_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_4.5_dim.png
new file mode 100644
index 0000000..74461fe
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_4.5_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_4.png
b/gnome-initial-setup/pages/timezone/data/timezone_4.png
new file mode 100644
index 0000000..483dc53
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_4.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_4_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_4_dim.png
new file mode 100644
index 0000000..ce18078
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_4_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_5.5.png
b/gnome-initial-setup/pages/timezone/data/timezone_5.5.png
new file mode 100644
index 0000000..f904cc2
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_5.5.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_5.5_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_5.5_dim.png
new file mode 100644
index 0000000..c598242
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_5.5_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_5.75.png
b/gnome-initial-setup/pages/timezone/data/timezone_5.75.png
new file mode 100644
index 0000000..827ce1a
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_5.75.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_5.75_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_5.75_dim.png
new file mode 100644
index 0000000..1b972ff
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_5.75_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_5.png
b/gnome-initial-setup/pages/timezone/data/timezone_5.png
new file mode 100644
index 0000000..1bb6d20
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_5.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_5_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_5_dim.png
new file mode 100644
index 0000000..9165f64
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_5_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_6.5.png
b/gnome-initial-setup/pages/timezone/data/timezone_6.5.png
new file mode 100644
index 0000000..d307bf3
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_6.5.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_6.5_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_6.5_dim.png
new file mode 100644
index 0000000..7d99a0f
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_6.5_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_6.png
b/gnome-initial-setup/pages/timezone/data/timezone_6.png
new file mode 100644
index 0000000..460f9cf
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_6.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_6_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_6_dim.png
new file mode 100644
index 0000000..afcd2b3
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_6_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_7.png
b/gnome-initial-setup/pages/timezone/data/timezone_7.png
new file mode 100644
index 0000000..239115a
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_7.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_7_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_7_dim.png
new file mode 100644
index 0000000..e59f0db
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_7_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_8.75.png
b/gnome-initial-setup/pages/timezone/data/timezone_8.75.png
new file mode 100644
index 0000000..2a2917f
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_8.75.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_8.75_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_8.75_dim.png
new file mode 100644
index 0000000..fb9caf4
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_8.75_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_8.png
b/gnome-initial-setup/pages/timezone/data/timezone_8.png
new file mode 100644
index 0000000..d210222
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_8.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_8_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_8_dim.png
new file mode 100644
index 0000000..9612511
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_8_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_9.5.png
b/gnome-initial-setup/pages/timezone/data/timezone_9.5.png
new file mode 100644
index 0000000..1c3290c
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_9.5.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_9.5_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_9.5_dim.png
new file mode 100644
index 0000000..6a9b9ed
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_9.5_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_9.png
b/gnome-initial-setup/pages/timezone/data/timezone_9.png
new file mode 100644
index 0000000..65d2e46
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_9.png differ
diff --git a/gnome-initial-setup/pages/timezone/data/timezone_9_dim.png
b/gnome-initial-setup/pages/timezone/data/timezone_9_dim.png
new file mode 100644
index 0000000..8cbb2e7
Binary files /dev/null and b/gnome-initial-setup/pages/timezone/data/timezone_9_dim.png differ
diff --git a/gnome-initial-setup/pages/timezone/datetime.gresource.xml
b/gnome-initial-setup/pages/timezone/datetime.gresource.xml
new file mode 100644
index 0000000..fa316ed
--- /dev/null
+++ b/gnome-initial-setup/pages/timezone/datetime.gresource.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/control-center/datetime">
+ <file alias="bg.png">data/bg.png</file>
+ <file alias="bg_dim.png">data/bg_dim.png</file>
+ <file alias="pin.png">data/pin.png</file>
+ <file alias="timezone_0.png">data/timezone_0.png</file>
+ <file alias="timezone_0_dim.png">data/timezone_0_dim.png</file>
+ <file alias="timezone_-10.png">data/timezone_-10.png</file>
+ <file alias="timezone_-10_dim.png">data/timezone_-10_dim.png</file>
+ <file alias="timezone_10.png">data/timezone_10.png</file>
+ <file alias="timezone_10_dim.png">data/timezone_10_dim.png</file>
+ <file alias="timezone_10.5.png">data/timezone_10.5.png</file>
+ <file alias="timezone_10.5_dim.png">data/timezone_10.5_dim.png</file>
+ <file alias="timezone_-1.png">data/timezone_-1.png</file>
+ <file alias="timezone_-1_dim.png">data/timezone_-1_dim.png</file>
+ <file alias="timezone_1.png">data/timezone_1.png</file>
+ <file alias="timezone_1_dim.png">data/timezone_1_dim.png</file>
+ <file alias="timezone_-11.png">data/timezone_-11.png</file>
+ <file alias="timezone_-11_dim.png">data/timezone_-11_dim.png</file>
+ <file alias="timezone_11.png">data/timezone_11.png</file>
+ <file alias="timezone_11_dim.png">data/timezone_11_dim.png</file>
+ <file alias="timezone_11.5.png">data/timezone_11.5.png</file>
+ <file alias="timezone_11.5_dim.png">data/timezone_11.5_dim.png</file>
+ <file alias="timezone_12.png">data/timezone_12.png</file>
+ <file alias="timezone_12_dim.png">data/timezone_12_dim.png</file>
+ <file alias="timezone_12.75.png">data/timezone_12.75.png</file>
+ <file alias="timezone_12.75_dim.png">data/timezone_12.75_dim.png</file>
+ <file alias="timezone_13.png">data/timezone_13.png</file>
+ <file alias="timezone_13_dim.png">data/timezone_13_dim.png</file>
+ <file alias="timezone_14.png">data/timezone_14.png</file>
+ <file alias="timezone_14_dim.png">data/timezone_14_dim.png</file>
+ <file alias="timezone_-2.png">data/timezone_-2.png</file>
+ <file alias="timezone_-2_dim.png">data/timezone_-2_dim.png</file>
+ <file alias="timezone_2.png">data/timezone_2.png</file>
+ <file alias="timezone_2_dim.png">data/timezone_2_dim.png</file>
+ <file alias="timezone_-3.png">data/timezone_-3.png</file>
+ <file alias="timezone_-3_dim.png">data/timezone_-3_dim.png</file>
+ <file alias="timezone_3.png">data/timezone_3.png</file>
+ <file alias="timezone_3_dim.png">data/timezone_3_dim.png</file>
+ <file alias="timezone_-3.5.png">data/timezone_-3.5.png</file>
+ <file alias="timezone_-3.5_dim.png">data/timezone_-3.5_dim.png</file>
+ <file alias="timezone_3.5.png">data/timezone_3.5.png</file>
+ <file alias="timezone_3.5_dim.png">data/timezone_3.5_dim.png</file>
+ <file alias="timezone_-4.png">data/timezone_-4.png</file>
+ <file alias="timezone_-4_dim.png">data/timezone_-4_dim.png</file>
+ <file alias="timezone_4.png">data/timezone_4.png</file>
+ <file alias="timezone_4_dim.png">data/timezone_4_dim.png</file>
+ <file alias="timezone_-4.5.png">data/timezone_-4.5.png</file>
+ <file alias="timezone_-4.5_dim.png">data/timezone_-4.5_dim.png</file>
+ <file alias="timezone_4.5.png">data/timezone_4.5.png</file>
+ <file alias="timezone_4.5_dim.png">data/timezone_4.5_dim.png</file>
+ <file alias="timezone_-5.png">data/timezone_-5.png</file>
+ <file alias="timezone_-5_dim.png">data/timezone_-5_dim.png</file>
+ <file alias="timezone_5.png">data/timezone_5.png</file>
+ <file alias="timezone_5_dim.png">data/timezone_5_dim.png</file>
+ <file alias="timezone_-5.5.png">data/timezone_-5.5.png</file>
+ <file alias="timezone_-5.5_dim.png">data/timezone_-5.5_dim.png</file>
+ <file alias="timezone_5.5.png">data/timezone_5.5.png</file>
+ <file alias="timezone_5.5_dim.png">data/timezone_5.5_dim.png</file>
+ <file alias="timezone_5.75.png">data/timezone_5.75.png</file>
+ <file alias="timezone_5.75_dim.png">data/timezone_5.75_dim.png</file>
+ <file alias="timezone_-6.png">data/timezone_-6.png</file>
+ <file alias="timezone_-6_dim.png">data/timezone_-6_dim.png</file>
+ <file alias="timezone_6.png">data/timezone_6.png</file>
+ <file alias="timezone_6_dim.png">data/timezone_6_dim.png</file>
+ <file alias="timezone_6.5.png">data/timezone_6.5.png</file>
+ <file alias="timezone_6.5_dim.png">data/timezone_6.5_dim.png</file>
+ <file alias="timezone_-7.png">data/timezone_-7.png</file>
+ <file alias="timezone_-7_dim.png">data/timezone_-7_dim.png</file>
+ <file alias="timezone_7.png">data/timezone_7.png</file>
+ <file alias="timezone_7_dim.png">data/timezone_7_dim.png</file>
+ <file alias="timezone_-8.png">data/timezone_-8.png</file>
+ <file alias="timezone_-8_dim.png">data/timezone_-8_dim.png</file>
+ <file alias="timezone_8.png">data/timezone_8.png</file>
+ <file alias="timezone_8_dim.png">data/timezone_8_dim.png</file>
+ <file alias="timezone_8.75.png">data/timezone_8.75.png</file>
+ <file alias="timezone_8.75_dim.png">data/timezone_8.75_dim.png</file>
+ <file alias="timezone_-9.png">data/timezone_-9.png</file>
+ <file alias="timezone_-9_dim.png">data/timezone_-9_dim.png</file>
+ <file alias="timezone_9.png">data/timezone_9.png</file>
+ <file alias="timezone_9_dim.png">data/timezone_9_dim.png</file>
+ <file alias="timezone_-9.5.png">data/timezone_-9.5.png</file>
+ <file alias="timezone_-9.5_dim.png">data/timezone_-9.5_dim.png</file>
+ <file alias="timezone_9.5.png">data/timezone_9.5.png</file>
+ <file alias="timezone_9.5_dim.png">data/timezone_9.5_dim.png</file>
+ </gresource>
+</gresources>
diff --git a/gnome-initial-setup/pages/timezone/gis-bubble-widget.css
b/gnome-initial-setup/pages/timezone/gis-bubble-widget.css
new file mode 100644
index 0000000..85de577
--- /dev/null
+++ b/gnome-initial-setup/pages/timezone/gis-bubble-widget.css
@@ -0,0 +1,8 @@
+
+.gis-bubble-widget {
+ border-radius: 20px;
+ background-color: rgba(0, 0, 0, 0.6);
+ color: white;
+ font-weight: bold;
+ padding: 2em;
+}
diff --git a/gnome-initial-setup/pages/timezone/gis-bubble-widget.ui
b/gnome-initial-setup/pages/timezone/gis-bubble-widget.ui
new file mode 100644
index 0000000..bbb6249
--- /dev/null
+++ b/gnome-initial-setup/pages/timezone/gis-bubble-widget.ui
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="3.0"/>
+ <template class="GisBubbleWidget" parent="GtkBin">
+ <child>
+ <object class="GtkAspectFrame" id="aspect_frame">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkBox" id="box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="width-request">128</property>
+ <property name="height-request">128</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <child>
+ <object class="GtkImage" id="icon">
+ <property name="visible">True</property>
+ <property name="vexpand">True</property>
+ <property name="pixel-size">64</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="vexpand">True</property>
+ <property name="wrap">True</property>
+ <property name="justify">center</property>
+ </object>
+ </child>
+ </object>
+ <style>
+ <class name="gis-bubble-widget" />
+ </style>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/timezone/gis-timezone-page.ui
b/gnome-initial-setup/pages/timezone/gis-timezone-page.ui
new file mode 100644
index 0000000..723b3e2
--- /dev/null
+++ b/gnome-initial-setup/pages/timezone/gis-timezone-page.ui
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.0 on Tue Oct 22 19:34:41 2013 -->
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <template class="GisTimezonePage" parent="GisPage">
+ <child>
+ <object class="GtkBox" id="box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="margin_left">80</property>
+ <property name="margin_right">80</property>
+ <child>
+ <object class="GtkLabel" id="title">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">54</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ <property name="label" translatable="yes">Time Zone</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.8"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="page_box">
+ <property name="visible">True</property>
+ <property name="margin_top">26</property>
+ <property name="vexpand">True</property>
+ <property name="valign">center</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">8</property>
+ <child>
+ <object class="GWeatherLocationEntry" id="search_entry">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFrame" id="map_frame">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">18</property>
+ <property name="margin_bottom">32</property>
+ <property name="hexpand">True</property>
+ <property name="label_xalign">0</property>
+ <child>
+ <object class="GtkOverlay" id="map_overlay">
+ <property name="visible">True</property>
+ <child>
+ <object class="CcTimezoneMap" id="map">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ </object>
+ </child>
+ <child type="overlay">
+ <object class="GisBubbleWidget" id="search_overlay">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Please search for a nearby city</property>
+ <property name="icon-name">edit-find-symbolic</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-initial-setup/pages/timezone/timedated1-interface.xml
b/gnome-initial-setup/pages/timezone/timedated1-interface.xml
new file mode 100644
index 0000000..b035d10
--- /dev/null
+++ b/gnome-initial-setup/pages/timezone/timedated1-interface.xml
@@ -0,0 +1,27 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node>
+ <interface name="org.freedesktop.timedate1">
+ <property name="Timezone" type="s" access="read"/>
+ <property name="LocalRTC" type="b" access="read"/>
+ <property name="NTP" type="b" access="read"/>
+ <method name="SetTime">
+ <arg name="usec_utc" type="x" direction="in"/>
+ <arg name="relative" type="b" direction="in"/>
+ <arg name="user_interaction" type="b" direction="in"/>
+ </method>
+ <method name="SetTimezone">
+ <arg name="timezone" type="s" direction="in"/>
+ <arg name="user_interaction" type="b" direction="in"/>
+ </method>
+ <method name="SetLocalRTC">
+ <arg name="local_rtc" type="b" direction="in"/>
+ <arg name="fix_system" type="b" direction="in"/>
+ <arg name="user_interaction" type="b" direction="in"/>
+ </method>
+ <method name="SetNTP">
+ <arg name="use_ntp" type="b" direction="in"/>
+ <arg name="user_interaction" type="b" direction="in"/>
+ </method>
+ </interface>
+</node>
diff --git a/gnome-initial-setup/pages/timezone/timezone.gresource.xml
b/gnome-initial-setup/pages/timezone/timezone.gresource.xml
new file mode 100644
index 0000000..cf36818
--- /dev/null
+++ b/gnome-initial-setup/pages/timezone/timezone.gresource.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/initial-setup">
+ <file preprocess="xml-stripblanks" alias="gis-timezone-page.ui">gis-timezone-page.ui</file>
+ <file preprocess="xml-stripblanks" alias="gis-bubble-widget.ui">gis-bubble-widget.ui</file>
+ <file alias="gis-bubble-widget.css">gis-bubble-widget.css</file>
+ </gresource>
+</gresources>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]