[Swfdec] 70 commits - configure.ac libswfdec-gtk/Makefile.am libswfdec-gtk/swfdec-gtk.h libswfdec-gtk/swfdec_gtk_loader.c libswfdec-gtk/swfdec_gtk_player.c libswfdec-gtk/swfdec_gtk_socket.c libswfdec-gtk/swfdec_gtk_socket.h libswfdec-gtk/swfdec_playback_alsa.c libswfdec-gtk/swfdec_playback_oss.c libswfdec-gtk/swfdec_playback_pa.c libswfdec/Makefile.am libswfdec/swfdec_amf.c libswfdec/swfdec_as_context.c libswfdec/swfdec_as_context.h libswfdec/swfdec_as_frame.c libswfdec/swfdec_as_frame_internal.h libswfdec/swfdec_as_function.c libswfdec/swfdec_as_function.h libswfdec/swfdec_as_internal.h libswfdec/swfdec_as_interpret.c libswfdec/swfdec_as_object.c libswfdec/swfdec_as_strings.c libswfdec/swfdec_event.c libswfdec/swfdec_event.h libswfdec/swfdec_file_loader.c libswfdec/swfdec_flash_security.c libswfdec/swfdec_flash_security.h libswfdec/swfdec_function_list.c libswfdec/swfdec_function_list.h libswfdec/swfdec.h libswfdec/swfdec_initialize.as libswfdec/swfdec_initialize.h libswfdec/swfdec_internal.h libswfdec/swfdec_interval.c libswfdec/swfdec_interval.h libswfdec/swfdec_loader.c libswfdec/swfdec_loader.h libswfdec/swfdec_loader_internal.h libswfdec/swfdec_loadertarget.c libswfdec/swfdec_loadertarget.h libswfdec/swfdec_load_object_as.c libswfdec/swfdec_load_object.c libswfdec/swfdec_load_object.h libswfdec/swfdec_movie.c libswfdec/swfdec_movie_clip_loader.c libswfdec/swfdec_movie.h libswfdec/swfdec_net_stream_as.c libswfdec/swfdec_net_stream.c libswfdec/swfdec_net_stream.h libswfdec/swfdec_player_as.c libswfdec/swfdec_player.c libswfdec/swfdec_player_internal.h libswfdec/swfdec_policy_file.c libswfdec/swfdec_policy_file.h libswfdec/swfdec_policy_loader.c libswfdec/swfdec_policy_loader.h libswfdec/swfdec_resource.c libswfdec/swfdec_resource.h libswfdec/swfdec_resource_request.c libswfdec/swfdec_resource_request.h libswfdec/swfdec_ringbuffer.c libswfdec/swfdec_ringbuffer.h libswfdec/swfdec_sandbox.c libswfdec/swfdec_sandbox.h libswfdec/swfdec_security_allow.c libswfdec/swfdec_security_allow.h libswfdec/swfdec_security.c libswfdec/swfdec_security.h libswfdec/swfdec_socket.c libswfdec/swfdec_socket.h libswfdec/swfdec_sprite_movie_as.c libswfdec/swfdec_sprite_movie.c libswfdec/swfdec_stream.c libswfdec/swfdec_stream.h libswfdec/swfdec_stream_target.c libswfdec/swfdec_stream_target.h libswfdec/swfdec_system_security.c libswfdec/swfdec_text_field_movie.c libswfdec/swfdec_url.c libswfdec/swfdec_url.h libswfdec/swfdec_video_movie_as.c libswfdec/swfdec_video_movie.c libswfdec/swfdec_xml_socket.c libswfdec/swfdec_xml_socket.h player/Makefile.am player/swfdec_slow_loader.c player/swfdec_slow_loader.h player/swfplay.c test/custom test/rtmp test/sound test/swfdec_test.c test/trace tools/crashfinder.c tools/dump.c vivified/core

Benjamin Otte company at kemper.freedesktop.org
Mon Jan 21 14:14:09 PST 2008


 configure.ac                           |   29 
 dev/null                               |binary
 libswfdec-gtk/Makefile.am              |    6 
 libswfdec-gtk/swfdec-gtk.h             |    1 
 libswfdec-gtk/swfdec_gtk_loader.c      |   45 
 libswfdec-gtk/swfdec_gtk_player.c      |    5 
 libswfdec-gtk/swfdec_gtk_socket.c      |  220 ++
 libswfdec-gtk/swfdec_gtk_socket.h      |   42 
 libswfdec-gtk/swfdec_playback_alsa.c   |   28 
 libswfdec-gtk/swfdec_playback_oss.c    |   12 
 libswfdec-gtk/swfdec_playback_pa.c     |   16 
 libswfdec/Makefile.am                  |   31 
 libswfdec/swfdec.h                     |    2 
 libswfdec/swfdec_amf.c                 |    2 
 libswfdec/swfdec_as_context.c          |   47 
 libswfdec/swfdec_as_context.h          |    6 
 libswfdec/swfdec_as_frame.c            |   29 
 libswfdec/swfdec_as_frame_internal.h   |    4 
 libswfdec/swfdec_as_function.c         |   28 
 libswfdec/swfdec_as_function.h         |    2 
 libswfdec/swfdec_as_internal.h         |   20 
 libswfdec/swfdec_as_interpret.c        |   35 
 libswfdec/swfdec_as_object.c           |  100 -
 libswfdec/swfdec_as_strings.c          |    2 
 libswfdec/swfdec_event.c               |    5 
 libswfdec/swfdec_event.h               |    2 
 libswfdec/swfdec_file_loader.c         |   29 
 libswfdec/swfdec_flash_security.c      |  313 ---
 libswfdec/swfdec_flash_security.h      |   74 
 libswfdec/swfdec_function_list.c       |  132 +
 libswfdec/swfdec_function_list.h       |   50 
 libswfdec/swfdec_initialize.as         |    5 
 libswfdec/swfdec_initialize.h          | 3266 ++++++++++++++++-----------------
 libswfdec/swfdec_internal.h            |   12 
 libswfdec/swfdec_interval.c            |   11 
 libswfdec/swfdec_interval.h            |    2 
 libswfdec/swfdec_load_object.c         |  224 +-
 libswfdec/swfdec_load_object.h         |   24 
 libswfdec/swfdec_load_object_as.c      |   53 
 libswfdec/swfdec_loader.c              |  322 ---
 libswfdec/swfdec_loader.h              |   24 
 libswfdec/swfdec_loader_internal.h     |   30 
 libswfdec/swfdec_loadertarget.c        |  137 -
 libswfdec/swfdec_loadertarget.h        |   66 
 libswfdec/swfdec_movie.c               |   65 
 libswfdec/swfdec_movie.h               |    4 
 libswfdec/swfdec_movie_clip_loader.c   |    7 
 libswfdec/swfdec_net_stream.c          |  160 +
 libswfdec/swfdec_net_stream.h          |    3 
 libswfdec/swfdec_net_stream_as.c       |    4 
 libswfdec/swfdec_player.c              |  159 -
 libswfdec/swfdec_player_as.c           |    2 
 libswfdec/swfdec_player_internal.h     |   42 
 libswfdec/swfdec_policy_file.c         |  350 +++
 libswfdec/swfdec_policy_file.h         |   65 
 libswfdec/swfdec_policy_loader.c       |  255 --
 libswfdec/swfdec_policy_loader.h       |   63 
 libswfdec/swfdec_resource.c            |  355 ++-
 libswfdec/swfdec_resource.h            |   12 
 libswfdec/swfdec_resource_request.c    |  311 ---
 libswfdec/swfdec_resource_request.h    |   96 
 libswfdec/swfdec_ringbuffer.c          |   18 
 libswfdec/swfdec_ringbuffer.h          |   18 
 libswfdec/swfdec_sandbox.c             |  303 +++
 libswfdec/swfdec_sandbox.h             |   83 
 libswfdec/swfdec_security.c            |   86 
 libswfdec/swfdec_security.h            |   68 
 libswfdec/swfdec_security_allow.c      |   80 
 libswfdec/swfdec_security_allow.h      |   53 
 libswfdec/swfdec_socket.c              |   99 +
 libswfdec/swfdec_socket.h              |   58 
 libswfdec/swfdec_sprite_movie.c        |   15 
 libswfdec/swfdec_sprite_movie_as.c     |   15 
 libswfdec/swfdec_stream.c              |  399 ++++
 libswfdec/swfdec_stream.h              |   68 
 libswfdec/swfdec_stream_target.c       |  136 +
 libswfdec/swfdec_stream_target.h       |   67 
 libswfdec/swfdec_system_security.c     |    3 
 libswfdec/swfdec_text_field_movie.c    |   19 
 libswfdec/swfdec_url.c                 |  236 ++
 libswfdec/swfdec_url.h                 |   13 
 libswfdec/swfdec_video_movie.c         |    5 
 libswfdec/swfdec_video_movie_as.c      |   13 
 libswfdec/swfdec_xml_socket.c          |  198 +-
 libswfdec/swfdec_xml_socket.h          |   56 
 player/Makefile.am                     |    4 
 player/swfdec_slow_loader.c            |  153 -
 player/swfdec_slow_loader.h            |   60 
 player/swfplay.c                       |   13 
 test/custom/Makefile.am                |    2 
 test/custom/button-hittest-5.swf       |binary
 test/custom/button-hittest-5.swf.trace |    9 
 test/custom/button-hittest-6.swf       |binary
 test/custom/button-hittest-6.swf.trace |    9 
 test/custom/button-hittest-7.swf       |binary
 test/custom/button-hittest-7.swf.trace |    9 
 test/custom/button-hittest-8.swf       |binary
 test/custom/button-hittest-8.swf.trace |    9 
 test/custom/button-hittest.c           |   85 
 test/custom/button-hittest.stas        |   64 
 test/custom/button-hittest.sts         |binary
 test/rtmp/.gitignore                   |   10 
 test/rtmp/Makefile.am                  |    8 
 test/rtmp/rtmp_server.c                |   98 
 test/sound/sound.c                     |    6 
 test/swfdec_test.c                     |    4 
 test/trace/Makefile.am                 |   13 
 test/trace/button-hittest-5.swf.act    |   17 
 test/trace/button-hittest-5.swf.trace  |    9 
 test/trace/button-hittest-6.swf.act    |   17 
 test/trace/button-hittest-6.swf.trace  |    9 
 test/trace/button-hittest-7.swf.act    |   17 
 test/trace/button-hittest-7.swf.trace  |    9 
 test/trace/button-hittest-8.swf.act    |   17 
 test/trace/button-hittest-8.swf.trace  |    9 
 test/trace/button-hittest.c            |   85 
 tools/crashfinder.c                    |    7 
 tools/dump.c                           |    5 
 vivified/core/vivi_application.c       |    2 
 119 files changed, 5509 insertions(+), 4805 deletions(-)

New commits:
commit ea80c5463857eb5d4d7d4a201131637da833fecf
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 23:13:16 2008 +0100

    move last mouse test into the custom dir
    
    (why wasn't it there before?)

diff --git a/test/custom/Makefile.am b/test/custom/Makefile.am
index 0e937d8..f596de7 100644
--- a/test/custom/Makefile.am
+++ b/test/custom/Makefile.am
@@ -32,6 +32,8 @@ EXTRA_DIST = \
 	button-hittest-8.swf \
 	button-hittest-8.swf.trace \
 	button-hittest.c \
+	button-hittest.stas \
+	button-hittest.sts \
 	definebutton-5.swf \
 	definebutton-5.swf.trace \
 	definebutton-6.swf \
diff --git a/test/custom/button-hittest-5.swf b/test/custom/button-hittest-5.swf
new file mode 100644
index 0000000..18ace29
Binary files /dev/null and b/test/custom/button-hittest-5.swf differ
diff --git a/test/custom/button-hittest-5.swf.trace b/test/custom/button-hittest-5.swf.trace
new file mode 100644
index 0000000..c91a351
--- /dev/null
+++ b/test/custom/button-hittest-5.swf.trace
@@ -0,0 +1,9 @@
+button Idle => OverUp: _level0
+button OverUp => OverDown: _level0
+button OverDown => OutDown: _level0
+button OutDown => OverDown: _level0
+button OverDown => OverUp: _level0
+button OverUp => OverDown: _level0
+button OverDown => OutDown: _level0
+button OutDown => Idle: _level0
+button Idle => OverUp: _level0
diff --git a/test/custom/button-hittest-6.swf b/test/custom/button-hittest-6.swf
new file mode 100644
index 0000000..b2bf0ec
Binary files /dev/null and b/test/custom/button-hittest-6.swf differ
diff --git a/test/custom/button-hittest-6.swf.trace b/test/custom/button-hittest-6.swf.trace
new file mode 100644
index 0000000..ed871dc
--- /dev/null
+++ b/test/custom/button-hittest-6.swf.trace
@@ -0,0 +1,9 @@
+button Idle => OverUp: _level0.instance1
+button OverUp => OverDown: _level0.instance1
+button OverDown => OutDown: _level0.instance1
+button OutDown => OverDown: _level0.instance1
+button OverDown => OverUp: _level0.instance1
+button OverUp => OverDown: _level0.instance1
+button OverDown => OutDown: _level0.instance1
+button OutDown => Idle: _level0.instance1
+button Idle => OverUp: _level0
diff --git a/test/custom/button-hittest-7.swf b/test/custom/button-hittest-7.swf
new file mode 100644
index 0000000..9646812
Binary files /dev/null and b/test/custom/button-hittest-7.swf differ
diff --git a/test/custom/button-hittest-7.swf.trace b/test/custom/button-hittest-7.swf.trace
new file mode 100644
index 0000000..ed871dc
--- /dev/null
+++ b/test/custom/button-hittest-7.swf.trace
@@ -0,0 +1,9 @@
+button Idle => OverUp: _level0.instance1
+button OverUp => OverDown: _level0.instance1
+button OverDown => OutDown: _level0.instance1
+button OutDown => OverDown: _level0.instance1
+button OverDown => OverUp: _level0.instance1
+button OverUp => OverDown: _level0.instance1
+button OverDown => OutDown: _level0.instance1
+button OutDown => Idle: _level0.instance1
+button Idle => OverUp: _level0
diff --git a/test/custom/button-hittest-8.swf b/test/custom/button-hittest-8.swf
new file mode 100644
index 0000000..af501e5
Binary files /dev/null and b/test/custom/button-hittest-8.swf differ
diff --git a/test/custom/button-hittest-8.swf.trace b/test/custom/button-hittest-8.swf.trace
new file mode 100644
index 0000000..ed871dc
--- /dev/null
+++ b/test/custom/button-hittest-8.swf.trace
@@ -0,0 +1,9 @@
+button Idle => OverUp: _level0.instance1
+button OverUp => OverDown: _level0.instance1
+button OverDown => OutDown: _level0.instance1
+button OutDown => OverDown: _level0.instance1
+button OverDown => OverUp: _level0.instance1
+button OverUp => OverDown: _level0.instance1
+button OverDown => OutDown: _level0.instance1
+button OutDown => Idle: _level0.instance1
+button Idle => OverUp: _level0
diff --git a/test/custom/button-hittest.c b/test/custom/button-hittest.c
new file mode 100644
index 0000000..9cb574e
--- /dev/null
+++ b/test/custom/button-hittest.c
@@ -0,0 +1,85 @@
+/* gcc `pkg-config --libs --cflags libming` button-hittest.c -o button-hittest && ./button-hittest
+ */
+
+#include <ming.h>
+
+static const char *button_events[] = { "Idle => OverUp", "OverUp => Idle", "OverUp => OverDown", "OverDown => OverUp", "OverDown => OutDown", "OutDown => OverDown", "OutDown => Idle", "Idle => OutDown", "OverDown => Idle" };
+
+static void
+add_button_events (SWFButton button)
+{
+  char script[100];
+  unsigned int i;
+
+  for (i = 0; i < sizeof (button_events) / sizeof (button_events[0]); i++) {
+    sprintf (script, "trace (\"button %s: \" + this);", button_events[i]);
+    SWFButton_addAction (button, newSWFAction (script), (1 << i));
+  }
+}
+
+static SWFCharacter
+get_rectangle (int r, int g, int b)
+{
+  SWFShape shape;
+  SWFFillStyle fill;
+
+  shape = newSWFShape ();
+  fill = SWFShape_addSolidFillStyle (shape, r, g, b, 255);
+  SWFShape_setRightFillStyle (shape, fill);
+  SWFShape_drawLineTo (shape, 100, 0);
+  SWFShape_drawLineTo (shape, 100, 100);
+  SWFShape_drawLineTo (shape, 0, 100);
+  SWFShape_drawLineTo (shape, 0, 0);
+
+  return (SWFCharacter) shape;
+}
+
+static void
+do_movie (int version)
+{
+  char name[100];
+  SWFMovie movie;
+  SWFDisplayItem item;
+  SWFButton button, button2;
+  SWFButtonRecord rec;
+
+  movie = newSWFMovieWithVersion (version);
+  SWFMovie_setRate (movie, 10);
+  SWFMovie_setDimension (movie, 200, 150);
+
+  button = newSWFButton ();
+  add_button_events (button);
+  rec = SWFButton_addCharacter (button, get_rectangle (255, 0, 0), SWFBUTTON_HIT);
+  SWFButtonRecord_setDepth (rec, 42);
+  SWFButtonRecord_moveTo (rec, 40, 40);
+  SWFButtonRecord_scaleTo (rec, 0.5, 0.5);
+
+  button2 = newSWFButton ();
+  SWFButton_setMenu (button2, 1);
+  add_button_events (button2);
+  rec = SWFButton_addCharacter (button2, get_rectangle (0, 255, 0), SWFBUTTON_HIT);
+  SWFButtonRecord_scaleTo (rec, 2, 1.5);
+  rec = SWFButton_addCharacter (button2, (SWFCharacter) button, SWFBUTTON_UP | SWFBUTTON_OVER | SWFBUTTON_DOWN);
+
+  item = SWFMovie_add (movie, button2);
+
+  SWFMovie_nextFrame (movie);
+
+  sprintf (name, "button-hittest-%d.swf", version);
+  SWFMovie_save (movie, name);
+}
+
+int
+main (int argc, char **argv)
+{
+  int i;
+
+  if (Ming_init ())
+    return 1;
+
+  for (i = 8; i >= 5; i--) {
+    do_movie (i);
+  }
+
+  return 0;
+}
diff --git a/test/custom/button-hittest.stas b/test/custom/button-hittest.stas
new file mode 100644
index 0000000..865329d
--- /dev/null
+++ b/test/custom/button-hittest.stas
@@ -0,0 +1,64 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+run_test = function (t, file) {
+  var e;
+  print ("Testing " + file);
+  try {
+    t.reset (file);
+    t.trace (file + ".trace");
+    t.advance (1000);
+    t.mouse_move (50, 50);
+    t.advance (1000);
+    t.mouse_press (50, 50);
+    t.advance (1000);
+    t.mouse_move (140, 140);
+    t.advance (1000);
+    t.mouse_move (50, 50);
+    t.advance (1000);
+    t.mouse_release (50, 50);
+    t.advance (1000);
+    t.mouse_press (50, 50);
+    t.advance (1000);
+    t.mouse_move (140, 140);
+    t.advance (1000);
+    t.mouse_release (140, 140);
+    t.advance (1000);
+    t.trace ();
+  } catch (e) {
+    if (e) {
+      error (e);
+      return false;
+    }
+  };
+  Native.print ("  OK\n");
+  return true;
+};
+
+filenames.sort ();
+t = new Test ();
+fail = [];
+for (var i = 0; i < filenames.length; i++) {
+  if (!run_test (t, filenames[i]))
+    fail.push (filenames[i]);
+};
+if (fail.length > 0) {
+  error (fail.join ("\n       "));
+  throw (fail.length + " failures");
+}
diff --git a/test/custom/button-hittest.sts b/test/custom/button-hittest.sts
new file mode 100644
index 0000000..378773f
Binary files /dev/null and b/test/custom/button-hittest.sts differ
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 84a7c48..a706bd0 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -315,19 +315,6 @@ EXTRA_DIST = \
 	boolean-properties-7.swf.trace \
 	boolean-properties-8.swf \
 	boolean-properties-8.swf.trace \
-	button-hittest-5.swf \
-	button-hittest-5.swf.act \
-	button-hittest-5.swf.trace \
-	button-hittest-6.swf \
-	button-hittest-6.swf.act \
-	button-hittest-6.swf.trace \
-	button-hittest-7.swf \
-	button-hittest-7.swf.act \
-	button-hittest-7.swf.trace \
-	button-hittest-8.swf \
-	button-hittest-8.swf.act \
-	button-hittest-8.swf.trace \
-	button-hittest.c \
 	button-properties.as \
 	button-properties-5.swf \
 	button-properties-5.swf.trace \
diff --git a/test/trace/button-hittest-5.swf b/test/trace/button-hittest-5.swf
deleted file mode 100644
index 18ace29..0000000
Binary files a/test/trace/button-hittest-5.swf and /dev/null differ
diff --git a/test/trace/button-hittest-5.swf.act b/test/trace/button-hittest-5.swf.act
deleted file mode 100644
index 352902b..0000000
--- a/test/trace/button-hittest-5.swf.act
+++ /dev/null
@@ -1,17 +0,0 @@
-wait 1000
-move 50, 50
-wait 1000
-down
-wait 1000
-move 140, 140
-wait 1000
-move 50, 50
-wait 1000
-up
-wait 1000
-down
-wait 1000
-move 140, 140
-wait 1000
-up
-wait 1000
diff --git a/test/trace/button-hittest-5.swf.trace b/test/trace/button-hittest-5.swf.trace
deleted file mode 100644
index c91a351..0000000
--- a/test/trace/button-hittest-5.swf.trace
+++ /dev/null
@@ -1,9 +0,0 @@
-button Idle => OverUp: _level0
-button OverUp => OverDown: _level0
-button OverDown => OutDown: _level0
-button OutDown => OverDown: _level0
-button OverDown => OverUp: _level0
-button OverUp => OverDown: _level0
-button OverDown => OutDown: _level0
-button OutDown => Idle: _level0
-button Idle => OverUp: _level0
diff --git a/test/trace/button-hittest-6.swf b/test/trace/button-hittest-6.swf
deleted file mode 100644
index b2bf0ec..0000000
Binary files a/test/trace/button-hittest-6.swf and /dev/null differ
diff --git a/test/trace/button-hittest-6.swf.act b/test/trace/button-hittest-6.swf.act
deleted file mode 100644
index 352902b..0000000
--- a/test/trace/button-hittest-6.swf.act
+++ /dev/null
@@ -1,17 +0,0 @@
-wait 1000
-move 50, 50
-wait 1000
-down
-wait 1000
-move 140, 140
-wait 1000
-move 50, 50
-wait 1000
-up
-wait 1000
-down
-wait 1000
-move 140, 140
-wait 1000
-up
-wait 1000
diff --git a/test/trace/button-hittest-6.swf.trace b/test/trace/button-hittest-6.swf.trace
deleted file mode 100644
index ed871dc..0000000
--- a/test/trace/button-hittest-6.swf.trace
+++ /dev/null
@@ -1,9 +0,0 @@
-button Idle => OverUp: _level0.instance1
-button OverUp => OverDown: _level0.instance1
-button OverDown => OutDown: _level0.instance1
-button OutDown => OverDown: _level0.instance1
-button OverDown => OverUp: _level0.instance1
-button OverUp => OverDown: _level0.instance1
-button OverDown => OutDown: _level0.instance1
-button OutDown => Idle: _level0.instance1
-button Idle => OverUp: _level0
diff --git a/test/trace/button-hittest-7.swf b/test/trace/button-hittest-7.swf
deleted file mode 100644
index 9646812..0000000
Binary files a/test/trace/button-hittest-7.swf and /dev/null differ
diff --git a/test/trace/button-hittest-7.swf.act b/test/trace/button-hittest-7.swf.act
deleted file mode 100644
index 352902b..0000000
--- a/test/trace/button-hittest-7.swf.act
+++ /dev/null
@@ -1,17 +0,0 @@
-wait 1000
-move 50, 50
-wait 1000
-down
-wait 1000
-move 140, 140
-wait 1000
-move 50, 50
-wait 1000
-up
-wait 1000
-down
-wait 1000
-move 140, 140
-wait 1000
-up
-wait 1000
diff --git a/test/trace/button-hittest-7.swf.trace b/test/trace/button-hittest-7.swf.trace
deleted file mode 100644
index ed871dc..0000000
--- a/test/trace/button-hittest-7.swf.trace
+++ /dev/null
@@ -1,9 +0,0 @@
-button Idle => OverUp: _level0.instance1
-button OverUp => OverDown: _level0.instance1
-button OverDown => OutDown: _level0.instance1
-button OutDown => OverDown: _level0.instance1
-button OverDown => OverUp: _level0.instance1
-button OverUp => OverDown: _level0.instance1
-button OverDown => OutDown: _level0.instance1
-button OutDown => Idle: _level0.instance1
-button Idle => OverUp: _level0
diff --git a/test/trace/button-hittest-8.swf b/test/trace/button-hittest-8.swf
deleted file mode 100644
index af501e5..0000000
Binary files a/test/trace/button-hittest-8.swf and /dev/null differ
diff --git a/test/trace/button-hittest-8.swf.act b/test/trace/button-hittest-8.swf.act
deleted file mode 100644
index 352902b..0000000
--- a/test/trace/button-hittest-8.swf.act
+++ /dev/null
@@ -1,17 +0,0 @@
-wait 1000
-move 50, 50
-wait 1000
-down
-wait 1000
-move 140, 140
-wait 1000
-move 50, 50
-wait 1000
-up
-wait 1000
-down
-wait 1000
-move 140, 140
-wait 1000
-up
-wait 1000
diff --git a/test/trace/button-hittest-8.swf.trace b/test/trace/button-hittest-8.swf.trace
deleted file mode 100644
index ed871dc..0000000
--- a/test/trace/button-hittest-8.swf.trace
+++ /dev/null
@@ -1,9 +0,0 @@
-button Idle => OverUp: _level0.instance1
-button OverUp => OverDown: _level0.instance1
-button OverDown => OutDown: _level0.instance1
-button OutDown => OverDown: _level0.instance1
-button OverDown => OverUp: _level0.instance1
-button OverUp => OverDown: _level0.instance1
-button OverDown => OutDown: _level0.instance1
-button OutDown => Idle: _level0.instance1
-button Idle => OverUp: _level0
diff --git a/test/trace/button-hittest.c b/test/trace/button-hittest.c
deleted file mode 100644
index 9cb574e..0000000
--- a/test/trace/button-hittest.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* gcc `pkg-config --libs --cflags libming` button-hittest.c -o button-hittest && ./button-hittest
- */
-
-#include <ming.h>
-
-static const char *button_events[] = { "Idle => OverUp", "OverUp => Idle", "OverUp => OverDown", "OverDown => OverUp", "OverDown => OutDown", "OutDown => OverDown", "OutDown => Idle", "Idle => OutDown", "OverDown => Idle" };
-
-static void
-add_button_events (SWFButton button)
-{
-  char script[100];
-  unsigned int i;
-
-  for (i = 0; i < sizeof (button_events) / sizeof (button_events[0]); i++) {
-    sprintf (script, "trace (\"button %s: \" + this);", button_events[i]);
-    SWFButton_addAction (button, newSWFAction (script), (1 << i));
-  }
-}
-
-static SWFCharacter
-get_rectangle (int r, int g, int b)
-{
-  SWFShape shape;
-  SWFFillStyle fill;
-
-  shape = newSWFShape ();
-  fill = SWFShape_addSolidFillStyle (shape, r, g, b, 255);
-  SWFShape_setRightFillStyle (shape, fill);
-  SWFShape_drawLineTo (shape, 100, 0);
-  SWFShape_drawLineTo (shape, 100, 100);
-  SWFShape_drawLineTo (shape, 0, 100);
-  SWFShape_drawLineTo (shape, 0, 0);
-
-  return (SWFCharacter) shape;
-}
-
-static void
-do_movie (int version)
-{
-  char name[100];
-  SWFMovie movie;
-  SWFDisplayItem item;
-  SWFButton button, button2;
-  SWFButtonRecord rec;
-
-  movie = newSWFMovieWithVersion (version);
-  SWFMovie_setRate (movie, 10);
-  SWFMovie_setDimension (movie, 200, 150);
-
-  button = newSWFButton ();
-  add_button_events (button);
-  rec = SWFButton_addCharacter (button, get_rectangle (255, 0, 0), SWFBUTTON_HIT);
-  SWFButtonRecord_setDepth (rec, 42);
-  SWFButtonRecord_moveTo (rec, 40, 40);
-  SWFButtonRecord_scaleTo (rec, 0.5, 0.5);
-
-  button2 = newSWFButton ();
-  SWFButton_setMenu (button2, 1);
-  add_button_events (button2);
-  rec = SWFButton_addCharacter (button2, get_rectangle (0, 255, 0), SWFBUTTON_HIT);
-  SWFButtonRecord_scaleTo (rec, 2, 1.5);
-  rec = SWFButton_addCharacter (button2, (SWFCharacter) button, SWFBUTTON_UP | SWFBUTTON_OVER | SWFBUTTON_DOWN);
-
-  item = SWFMovie_add (movie, button2);
-
-  SWFMovie_nextFrame (movie);
-
-  sprintf (name, "button-hittest-%d.swf", version);
-  SWFMovie_save (movie, name);
-}
-
-int
-main (int argc, char **argv)
-{
-  int i;
-
-  if (Ming_init ())
-    return 1;
-
-  for (i = 8; i >= 5; i--) {
-    do_movie (i);
-  }
-
-  return 0;
-}
commit 18dc0b56ffe036cc334ceeadbc124b9260b8751d
Merge: 2da50c6... 235dfab...
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 22:51:32 2008 +0100

    Merge branch 'master' into rtmp
    
    Conflicts:
    
    	libswfdec/swfdec_as_interpret.c
    	libswfdec/swfdec_flash_security.c
    	libswfdec/swfdec_flash_security.h
    	libswfdec/swfdec_load_object.c
    	libswfdec/swfdec_player.c
    	libswfdec/swfdec_player_internal.h
    	libswfdec/swfdec_policy_file.c
    	libswfdec/swfdec_policy_file.h
    	libswfdec/swfdec_resource.c
    	libswfdec/swfdec_resource_request.c
    	libswfdec/swfdec_security.c
    	libswfdec/swfdec_security.h
    	libswfdec/swfdec_security_allow.c

commit 235dfab205081dce3fb63f46f85d5479ef84f622
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Jan 16 16:34:23 2008 +0100

    add public API functions

diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 86be3a5..008924a 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -870,6 +870,9 @@ swfdec_player_dispose (GObject *object)
   g_hash_table_destroy (priv->registered_classes);
   g_hash_table_destroy (priv->scripting_callbacks);
 
+  g_list_foreach (priv->loading_policy_files, (GFunc) g_object_unref, NULL);
+  g_list_free (priv->loading_policy_files);
+  priv->loading_policy_files = NULL;
   g_slist_foreach (priv->policy_files, (GFunc) g_object_unref, NULL);
   g_slist_free (priv->policy_files);
   priv->policy_files = NULL;
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index 72833e2..a574a9f 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -41,6 +41,7 @@ typedef enum {
 
 typedef void (* SwfdecActionFunc) (gpointer object, gpointer data);
 typedef gboolean (* SwfdecAudioRemoveFunc) (SwfdecAudio *audio, gpointer data);
+typedef void (* SwfdecPolicyFunc) (SwfdecPlayer *player, gboolean allow, gpointer data);
 
 typedef struct _SwfdecTimeout SwfdecTimeout;
 struct _SwfdecTimeout {
@@ -133,7 +134,8 @@ struct _SwfdecPlayerPrivate
   SwfdecRingBuffer *	actions[SWFDEC_PLAYER_N_ACTION_QUEUES]; /* all actions we've queued up so far */
 
   /* security */
-  GSList *		policy_files;		/* list of SwfdecPolicyLoader objects, most recent first */
+  GList *		loading_policy_files;	/* list of loading SwfdecPlayerLoader - newest first */
+  GSList *		policy_files;		/* list of SwfdecPolicyLoader that finished loading */
 };
 
 void		swfdec_player_initialize	(SwfdecPlayer *		player,
@@ -221,6 +223,15 @@ void		swfdec_player_global_to_stage	(SwfdecPlayer *		player,
 						 double *		x,
 						 double *		y);
 void		swfdec_player_update_scale	(SwfdecPlayer *		player);
+
+/* in swfdec_policy_file.c */
+gboolean	swfdec_player_allow_now		(SwfdecPlayer *		player,
+						 const SwfdecURL *	url);
+void	      	swfdec_player_allow_or_load	(SwfdecPlayer *		player,
+						 const SwfdecURL *	url,
+						 const SwfdecURL *	load_url,
+						 SwfdecPolicyFunc	func,
+						 gpointer		data);
 /* in swfdec_as_interpret.c */
 SwfdecMovie *	swfdec_player_get_movie_from_value 
 						(SwfdecPlayer *		player,
diff --git a/libswfdec/swfdec_policy_file.c b/libswfdec/swfdec_policy_file.c
index d0f3e90..e275119 100644
--- a/libswfdec/swfdec_policy_file.c
+++ b/libswfdec/swfdec_policy_file.c
@@ -34,6 +34,20 @@
 #include "swfdec_xml.h"
 #include "swfdec_xml_node.h"
 
+typedef struct _SwfdecPolicyFileRequest SwfdecPolicyFileRequest;
+struct _SwfdecPolicyFileRequest {
+  SwfdecURL *	  	url;		/* URL we are supposed to check */
+  SwfdecPolicyFunc	func;		/* function to call when we know if access is (not) allowed */
+  gpointer		data;		/* data to pass to func */
+};
+
+static void
+swfdec_policy_file_request_free (SwfdecPolicyFileRequest *request)
+{
+  swfdec_url_free (request->url);
+  g_slice_free (SwfdecPolicyFileRequest, request);
+}
+
 /*** PARSING THE FILE ***/
 
 static void
@@ -108,13 +122,46 @@ swfdec_policy_file_target_get_player (SwfdecLoaderTarget *target)
 }
 
 static void
+swfdec_policy_file_finished_loading (SwfdecPolicyFile *file, const char *text)
+{
+  SwfdecPlayerPrivate *priv;
+  SwfdecPolicyFile *next;
+  GList *link;
+
+  swfdec_loader_set_target (file->stream, NULL);
+  file->stream = NULL;
+
+  if (text)
+    swfdec_policy_file_parse (file, text);
+
+  priv = file->player->priv;
+  link = g_list_find (priv->loading_policy_files, file);
+  next = link->next ? link->next->data : NULL;
+  priv->loading_policy_files = g_list_delete_link (priv->loading_policy_files, link);
+  priv->policy_files = g_slist_prepend (priv->policy_files, file);
+  if (next) {
+    next->requests = g_slist_concat (next->requests, file->requests);
+  } else {
+    GSList *walk;
+
+    for (walk = file->requests; walk; walk = walk->next) {
+      SwfdecPolicyFileRequest *request = walk->data;
+      gboolean allow = swfdec_player_allow_now (file->player, request->url);
+      request->func (file->player, allow, request->data);
+      swfdec_policy_file_request_free (request);
+    }
+    g_slist_free (file->requests);
+  }
+  file->requests = NULL;
+}
+
+static void
 swfdec_policy_file_target_error (SwfdecLoaderTarget *target,
     SwfdecLoader *loader)
 {
   SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (target);
 
-  swfdec_loader_set_target (loader, NULL);
-  file->stream = NULL;
+  swfdec_policy_file_finished_loading (file, NULL);
 }
 
 static void
@@ -131,10 +178,8 @@ swfdec_policy_file_target_eof (SwfdecLoaderTarget *target,
   if (text == NULL) {
     SWFDEC_ERROR ("couldn't get text from crossdomain policy file %s", 
 	swfdec_url_get_url (file->load_url));
-    return;
   }
-
-  swfdec_policy_file_parse (file, text);
+  swfdec_policy_file_finished_loading (file, text);
   g_free (text);
 }
 
@@ -160,6 +205,11 @@ swfdec_policy_file_dispose (GObject *object)
     swfdec_loader_set_target (file->stream, NULL);
     g_object_unref (file->stream);
     file->stream = NULL;
+    g_slist_foreach (file->requests, (GFunc) swfdec_policy_file_request_free, NULL);
+    g_slist_free (file->requests);
+    file->requests = NULL;
+  } else {
+    g_assert (file->requests == NULL);
   }
   swfdec_url_free (file->load_url);
   swfdec_url_free (file->url);
@@ -199,7 +249,8 @@ swfdec_policy_file_new (SwfdecPlayer *player, const SwfdecURL *url)
 	SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);
     swfdec_loader_set_target (file->stream, SWFDEC_LOADER_TARGET (file));
   }
-  player->priv->policy_files = g_slist_prepend (player->priv->policy_files, file);
+  player->priv->loading_policy_files = 
+    g_list_prepend (player->priv->loading_policy_files, file);
 
   return file;
 }
@@ -243,15 +294,53 @@ swfdec_policy_file_allow (SwfdecPolicyFile *file, const SwfdecURL *url)
   return FALSE;
 }
 
-void
-swfdec_player_load_policy_file (SwfdecPlayer *player, const SwfdecURL *url)
+/*** PLAYER API ***/
+
+gboolean
+swfdec_player_allow_now (SwfdecPlayer *player, const SwfdecURL *url)
 {
-  SWFDEC_FIXME ("implement");
+  GSList *walk;
+
+  g_return_val_if_fail (SWFDEC_IS_PLAYER (player), FALSE);
+  g_return_val_if_fail (url != NULL, FALSE);
+
+  for (walk = player->priv->policy_files; walk; walk = walk->next) {
+    if (swfdec_policy_file_allow (walk->data, url))
+      return TRUE;
+  }
+  return FALSE;
 }
 
 void
-swfdec_player_check_policy_files (SwfdecPlayer *player, 
-    SwfdecPolicyFileFunc func, gpointer data)
+swfdec_player_allow_or_load (SwfdecPlayer *player, const SwfdecURL *url, 
+    const SwfdecURL *load_url, SwfdecPolicyFunc func, gpointer data)
 {
-  SWFDEC_FIXME ("implement");
+  SwfdecPlayerPrivate *priv;
+  SwfdecPolicyFileRequest *request;
+  SwfdecPolicyFile *file;
+
+  g_return_if_fail (SWFDEC_IS_PLAYER (player));
+  g_return_if_fail (url != NULL);
+  g_return_if_fail (func);
+
+  if (swfdec_player_allow_now (player, url)) {
+    func (player, TRUE, data);
+    return;
+  }
+  if (load_url)
+    swfdec_policy_file_new (player, load_url);
+
+  priv = player->priv;
+  if (priv->loading_policy_files == NULL) {
+    func (player, FALSE, data);
+    return;
+  }
+  request = g_slice_new (SwfdecPolicyFileRequest);
+  request->url = swfdec_url_copy (url);
+  request->func = func;
+  request->data = data;
+
+  file = priv->loading_policy_files->data;
+  file->requests = g_slist_append (file->requests, request);
 }
+
diff --git a/libswfdec/swfdec_policy_file.h b/libswfdec/swfdec_policy_file.h
index 5342983..9a89f81 100644
--- a/libswfdec/swfdec_policy_file.h
+++ b/libswfdec/swfdec_policy_file.h
@@ -28,7 +28,6 @@ G_BEGIN_DECLS
 
 typedef struct _SwfdecPolicyFile SwfdecPolicyFile;
 typedef struct _SwfdecPolicyFileClass SwfdecPolicyFileClass;
-typedef void (* SwfdecPolicyFileFunc) (SwfdecPlayer *player, gboolean allow, gpointer data);
 
 #define SWFDEC_TYPE_POLICY_FILE                    (swfdec_policy_file_get_type())
 #define SWFDEC_IS_POLICY_FILE(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_POLICY_FILE))
@@ -45,6 +44,8 @@ struct _SwfdecPolicyFile {
   SwfdecURL *		url;		/* parent url we check with */
   SwfdecLoader *	stream;		/* stream we are loading or NULL if done loading */
   GSList *		allowed_hosts;	/* list of GPatternSpec of the allowed hosts */
+
+  GSList *		requests;	/* requests waiting for this file to finish loading */
 };
 
 struct _SwfdecPolicyFileClass {
@@ -59,12 +60,6 @@ gboolean	swfdec_policy_file_is_loading	(SwfdecPolicyFile *	file);
 gboolean	swfdec_policy_file_allow	(SwfdecPolicyFile *	file,
 						 const SwfdecURL *	url);
 
-void		swfdec_player_load_policy_file	(SwfdecPlayer *		player,
-						 const SwfdecURL *	url);
-void		swfdec_player_check_policy_files(SwfdecPlayer *		player,
-						 SwfdecPolicyFileFunc	func,
-						 gpointer		data);
-
 
 G_END_DECLS
 #endif
commit d4877028c3d5b810309fc751328bfbc33eac16af
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Jan 16 11:10:53 2008 +0100

    add initial (compiling) bunch of code that changes policy files handling
    
    Everythng compiles, nothing works

diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index 9320e97..985eb28 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -113,7 +113,7 @@ libswfdec_source_files = \
 	swfdec_player_as.c \
 	swfdec_player_scripting.c \
 	swfdec_print_job.c \
-	swfdec_policy_loader.c \
+	swfdec_policy_file.c \
 	swfdec_rect.c \
 	swfdec_rectangle.c \
 	swfdec_resource.c \
@@ -261,7 +261,7 @@ noinst_HEADERS = \
 	swfdec_path.h \
 	swfdec_pattern.h \
 	swfdec_player_internal.h \
-	swfdec_policy_loader.h \
+	swfdec_policy_file.h \
 	swfdec_rect.h \
 	swfdec_resource.h \
 	swfdec_resource_request.h \
diff --git a/libswfdec/swfdec_flash_security.c b/libswfdec/swfdec_flash_security.c
index 21fe688..ae7fce0 100644
--- a/libswfdec/swfdec_flash_security.c
+++ b/libswfdec/swfdec_flash_security.c
@@ -23,7 +23,6 @@
 
 #include <string.h>
 #include "swfdec_flash_security.h"
-#include "swfdec_policy_loader.h"
 #include "swfdec_debug.h"
 #include "swfdec_security_allow.h"
 
@@ -47,227 +46,10 @@ swfdec_flash_security_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
   }
 }
 
-static gboolean
-swfdec_flash_security_match_domain (const SwfdecURL *guard, const SwfdecURL *key)
-{
-  return g_ascii_strcasecmp (swfdec_url_get_host (guard), swfdec_url_get_host (key)) == 0;
-}
-
-typedef struct {
-  SwfdecURL *		url;
-  SwfdecURLAllowFunc	callback;
-  gpointer		user_data;
-} SwfdecAllowURLPending;
-
-static void
-swfdec_flash_security_call_pending (SwfdecFlashSecurity *sec, const char *host,
-    gboolean allow)
-{
-  GSList *iter, *prev, *next;
-  SwfdecAllowURLPending *pending;
-
-  g_return_if_fail (SWFDEC_IS_FLASH_SECURITY (sec));
-  g_return_if_fail (host != NULL);
-
-  prev = NULL;
-  for (iter = sec->allow_url_pending; iter != NULL; iter = next) {
-    next = iter->next;
-    pending = iter->data;
-
-    if (!g_ascii_strcasecmp (swfdec_url_get_host (pending->url), host)) {
-      pending->callback (pending->url, allow, pending->user_data);
-      swfdec_url_free (pending->url);
-      g_free (pending);
-      g_slist_free_1 (iter);
-
-      if (prev != NULL) {
-	prev->next = iter->next;
-	iter = prev;
-	iter->next = next;
-      } else {
-	iter = NULL;
-	sec->allow_url_pending = next;
-      }
-    }
-
-    prev = iter;
-  }
-}
-
-static void
-swfdec_flash_security_policy_loader_done (SwfdecPolicyLoader *policy_loader,
-    gboolean allow)
-{
-  SwfdecFlashSecurity *sec = policy_loader->sec;
-  char *host = g_strdup (policy_loader->host);
-
-  if (allow) {
-    sec->crossdomain_allowed = g_slist_prepend (sec->crossdomain_allowed, host);
-  } else {
-    sec->crossdomain_denied = g_slist_prepend (sec->crossdomain_denied, host);
-  }
-
-  sec->policy_loaders = g_slist_remove (sec->policy_loaders, policy_loader);
-
-  swfdec_flash_security_call_pending (sec, host, allow);
-
-  swfdec_policy_loader_free (policy_loader);
-}
-
-static void
-swfdec_flash_security_get_cross_domain_policy (SwfdecFlashSecurity *sec,
-    const char *host)
-{
-  GSList *iter;
-  SwfdecPolicyLoader *policy_loader;
-
-  g_return_if_fail (SWFDEC_IS_FLASH_SECURITY (sec));
-  g_return_if_fail (host != NULL);
-
-  for (iter = sec->policy_loaders; iter != NULL; iter = iter->next) {
-    policy_loader = iter->data;
-
-    if (!g_ascii_strcasecmp (policy_loader->host, host))
-      return;
-  }
-
-  policy_loader = swfdec_policy_loader_new (sec, host,
-      swfdec_flash_security_policy_loader_done);
-  if (policy_loader == NULL) {
-    sec->crossdomain_denied = g_slist_prepend (sec->crossdomain_denied,
-	g_strdup (host));
-    swfdec_flash_security_call_pending (sec, host, FALSE);
-    return;
-  }
-
-  sec->policy_loaders = g_slist_prepend (sec->policy_loaders, policy_loader);
-}
-
-static void
-swfdec_flash_security_allow_cross_domain (SwfdecFlashSecurity *sec,
-    const SwfdecURL *url, SwfdecURLAllowFunc callback, gpointer user_data)
-{
-  SwfdecAllowURLPending *pending;
-  const char *host;
-
-  g_assert (SWFDEC_IS_FLASH_SECURITY (sec));
-  g_assert (url != NULL);
-  g_assert (callback != NULL);
-
-  host = swfdec_url_get_host (url);
-
-  if (g_slist_find_custom (sec->crossdomain_allowed, host,
-	(GCompareFunc)g_ascii_strcasecmp)) {
-    callback (url, 1, user_data);
-    return;
-  }
-
-  if (g_slist_find_custom (sec->crossdomain_denied, host,
-	(GCompareFunc)g_ascii_strcasecmp)) {
-    callback (url, 0, user_data);
-    return;
-  }
-
-  pending = g_new (SwfdecAllowURLPending, 1);
-  pending->url = swfdec_url_copy (url);
-  pending->callback = callback;
-  pending->user_data = user_data;
-
-  sec->allow_url_pending = g_slist_prepend (sec->allow_url_pending, pending);
-
-  swfdec_flash_security_get_cross_domain_policy (sec, host);
-}
-
-static void
-swfdec_flash_security_allow_url (SwfdecSecurity *guard, const SwfdecURL *url,
-    SwfdecURLAllowFunc callback, gpointer user_data)
-{
-  SwfdecFlashSecurity *sec = SWFDEC_FLASH_SECURITY (guard);
-  int status;
-
-  switch (sec->sandbox) {
-    case SWFDEC_SANDBOX_NONE:
-      status = 0;
-      break;
-    case SWFDEC_SANDBOX_REMOTE:
-      if (swfdec_url_is_local (url)) {
-	status = 0;
-      } else if (swfdec_flash_security_match_domain (sec->url, url)) {
-	status = 1;
-      } else {
-	swfdec_flash_security_allow_cross_domain (sec, url, callback,
-	    user_data);
-	return;
-      }
-      break;
-    case SWFDEC_SANDBOX_LOCAL_FILE:
-      if (swfdec_url_is_local (url)) {
-	status = 1;
-      } else {
-	status = 0;
-      }
-      break;
-    case SWFDEC_SANDBOX_LOCAL_NETWORK:
-      if (swfdec_url_is_local (url)) {
-	status = 0;
-      } else {
-	swfdec_flash_security_allow_cross_domain (sec, url, callback,
-	    user_data);
-	return;
-      }
-      break;
-    case SWFDEC_SANDBOX_LOCAL_TRUSTED:
-      status = 1;
-      break;
-    default:
-      g_assert_not_reached ();
-      status = 0;
-      break;
-  }
-
-  callback (url, status, user_data);
-}
-
-void
-swfdec_flash_security_free_pending (SwfdecFlashSecurity *sec)
-{
-  GSList *iter;
-
-  for (iter = sec->allow_url_pending; iter != NULL; iter = iter->next) {
-    SwfdecAllowURLPending *pending = iter->data;
-    pending->callback (pending->url, -1, pending->user_data);
-    swfdec_url_free (pending->url);
-    g_free (pending);
-  }
-  g_slist_free (sec->allow_url_pending);
-  sec->allow_url_pending = NULL;
-}
-
 static void
 swfdec_flash_security_dispose (GObject *object)
 {
   SwfdecFlashSecurity *sec = SWFDEC_FLASH_SECURITY (object);
-  GSList *iter;
-
-  g_assert (sec->allow_url_pending == NULL);
-
-  for (iter = sec->policy_loaders; iter != NULL; iter = iter->next) {
-    swfdec_policy_loader_free (iter->data);
-  }
-  g_slist_free (sec->policy_loaders);
-  sec->policy_loaders = NULL;
-
-  for (iter = sec->crossdomain_allowed; iter != NULL; iter = iter->next) {
-    g_free (iter->data);
-  }
-  g_slist_free (sec->crossdomain_allowed);
-  sec->crossdomain_allowed = NULL;
-
-  for (iter = sec->crossdomain_denied; iter != NULL; iter = iter->next) {
-    g_free (iter->data);
-  }
-  g_slist_free (sec->crossdomain_denied);
-  sec->crossdomain_denied = NULL;
 
   if (sec->url) {
     swfdec_url_free (sec->url);
@@ -287,7 +69,6 @@ swfdec_flash_security_class_init (SwfdecFlashSecurityClass *klass)
   object_class->dispose = swfdec_flash_security_dispose;
 
   security_class->allow = swfdec_flash_security_allow;
-  security_class->allow_url = swfdec_flash_security_allow_url;
 }
 
 static void
diff --git a/libswfdec/swfdec_flash_security.h b/libswfdec/swfdec_flash_security.h
index fcb2aaf..8ee888d 100644
--- a/libswfdec/swfdec_flash_security.h
+++ b/libswfdec/swfdec_flash_security.h
@@ -50,12 +50,6 @@ struct _SwfdecFlashSecurity
   SwfdecPlayer		*player;
   SwfdecSandboxType	sandbox;	/* sandbox we are operating in */
   SwfdecURL *		url;		/* url this security was loaded from */
-
-  GSList *		policy_loaders;
-  GSList *		crossdomain_allowed;
-  GSList *		crossdomain_denied;
-
-  GSList *		allow_url_pending;
 };
 
 struct _SwfdecFlashSecurityClass
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 847a6fb..86be3a5 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -870,6 +870,10 @@ swfdec_player_dispose (GObject *object)
   g_hash_table_destroy (priv->registered_classes);
   g_hash_table_destroy (priv->scripting_callbacks);
 
+  g_slist_foreach (priv->policy_files, (GFunc) g_object_unref, NULL);
+  g_slist_free (priv->policy_files);
+  priv->policy_files = NULL;
+
   while (priv->roots)
     swfdec_movie_destroy (priv->roots->data);
   if (priv->resource) {
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index 06d8eea..72833e2 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -131,6 +131,9 @@ struct _SwfdecPlayerPrivate
   /* iterating */
   GList *		movies;			/* list of all movies that want to be iterated */
   SwfdecRingBuffer *	actions[SWFDEC_PLAYER_N_ACTION_QUEUES]; /* all actions we've queued up so far */
+
+  /* security */
+  GSList *		policy_files;		/* list of SwfdecPolicyLoader objects, most recent first */
 };
 
 void		swfdec_player_initialize	(SwfdecPlayer *		player,
diff --git a/libswfdec/swfdec_policy_file.c b/libswfdec/swfdec_policy_file.c
new file mode 100644
index 0000000..d0f3e90
--- /dev/null
+++ b/libswfdec/swfdec_policy_file.c
@@ -0,0 +1,257 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *               2007 Pekka Lampila <pekka.lampila at iki.fi>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include "swfdec_policy_file.h"
+#include "swfdec_flash_security.h"
+#include "swfdec_resource.h"
+#include "swfdec_as_strings.h"
+#include "swfdec_debug.h"
+#include "swfdec_loader_internal.h"
+#include "swfdec_player_internal.h"
+#include "swfdec_xml.h"
+#include "swfdec_xml_node.h"
+
+/*** PARSING THE FILE ***/
+
+static void
+swfdec_policy_file_parse (SwfdecPolicyFile *file, const char *text)
+{
+  SwfdecXml *xml;
+  gint32 i, j;
+
+  g_return_if_fail (SWFDEC_IS_POLICY_FILE (file));
+  g_return_if_fail (text != NULL);
+
+  xml = swfdec_xml_new_no_properties (SWFDEC_AS_CONTEXT (file->player), text, TRUE);
+
+  if (xml == NULL) {
+    SWFDEC_ERROR ("failed to create an XML object for crossdomain policy");
+    return;
+  }
+
+  if (SWFDEC_XML_NODE (xml)->type != SWFDEC_XML_NODE_ELEMENT) {
+    SWFDEC_LOG ("empty crossdomain policy file");
+    return;
+  }
+
+  for (i = 0; i < swfdec_xml_node_num_children (SWFDEC_XML_NODE (xml)); i++) {
+    SwfdecXmlNode *node_cdp =
+      swfdec_xml_node_get_child (SWFDEC_XML_NODE (xml), i);
+
+    if (node_cdp->type != SWFDEC_XML_NODE_ELEMENT)
+      continue;
+
+    if (g_ascii_strcasecmp (node_cdp->name, "cross-domain-policy") != 0)
+      continue;
+
+    for (j = 0; j < swfdec_xml_node_num_children (node_cdp); j++) {
+      SwfdecXmlNode *node_aaf = swfdec_xml_node_get_child (node_cdp, j);
+      const char *value;
+      GPatternSpec *pattern;
+      char *value_lower;
+
+      if (node_aaf->type != SWFDEC_XML_NODE_ELEMENT)
+	continue;
+
+      if (g_ascii_strcasecmp (node_aaf->name, "allow-access-from") != 0)
+	continue;
+
+      // FIXME: secure attribute?
+
+      value = swfdec_xml_node_get_attribute (node_aaf, SWFDEC_AS_STR_domain);
+      if (value == NULL)
+	continue;
+
+      if (strchr (value, '?') != NULL) {
+	SWFDEC_WARNING ("'?' in allowed domain attribute for %s", value);
+	continue;
+      }
+
+      value_lower = g_ascii_strdown (value, -1);
+      pattern = g_pattern_spec_new (value_lower);
+      g_free (value_lower);
+
+      file->allowed_hosts = g_slist_prepend (file->allowed_hosts, pattern);
+    }
+  }
+}
+
+/*** SWFDEC_LOADER_TARGET ***/
+
+static SwfdecPlayer *
+swfdec_policy_file_target_get_player (SwfdecLoaderTarget *target)
+{
+  return SWFDEC_POLICY_FILE (target)->player;
+}
+
+static void
+swfdec_policy_file_target_error (SwfdecLoaderTarget *target,
+    SwfdecLoader *loader)
+{
+  SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (target);
+
+  swfdec_loader_set_target (loader, NULL);
+  file->stream = NULL;
+}
+
+static void
+swfdec_policy_file_target_eof (SwfdecLoaderTarget *target,
+    SwfdecLoader *loader)
+{
+  SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (target);
+  char *text;
+
+  swfdec_loader_set_target (loader, NULL);
+  file->stream = NULL;
+  text = swfdec_loader_get_text (loader, 8);
+
+  if (text == NULL) {
+    SWFDEC_ERROR ("couldn't get text from crossdomain policy file %s", 
+	swfdec_url_get_url (file->load_url));
+    return;
+  }
+
+  swfdec_policy_file_parse (file, text);
+  g_free (text);
+}
+
+static void
+swfdec_policy_file_loader_target_init (SwfdecLoaderTargetInterface *iface)
+{
+  iface->get_player = swfdec_policy_file_target_get_player;
+  iface->eof = swfdec_policy_file_target_eof;
+  iface->error = swfdec_policy_file_target_error;
+}
+
+/*** SWFDEC_POLICY_FILE ***/
+
+G_DEFINE_TYPE_WITH_CODE (SwfdecPolicyFile, swfdec_policy_file, G_TYPE_OBJECT,
+    G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_policy_file_loader_target_init))
+
+static void
+swfdec_policy_file_dispose (GObject *object)
+{
+  SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (object);
+
+  if (file->stream) {
+    swfdec_loader_set_target (file->stream, NULL);
+    g_object_unref (file->stream);
+    file->stream = NULL;
+  }
+  swfdec_url_free (file->load_url);
+  swfdec_url_free (file->url);
+
+  G_OBJECT_CLASS (swfdec_policy_file_parent_class)->dispose (object);
+}
+
+static void
+swfdec_policy_file_class_init (SwfdecPolicyFileClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->dispose = swfdec_policy_file_dispose;
+}
+
+static void
+swfdec_policy_file_init (SwfdecPolicyFile *policy_file)
+{
+}
+
+SwfdecPolicyFile *
+swfdec_policy_file_new (SwfdecPlayer *player, const SwfdecURL *url)
+{
+  SwfdecPolicyFile *file;
+
+  g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
+  g_return_val_if_fail (url != NULL, NULL);
+
+  file = g_object_new (SWFDEC_TYPE_POLICY_FILE, NULL);
+  file->player = player;
+  file->load_url = swfdec_url_copy (url);
+  file->url = swfdec_url_new_parent (url);
+  if (swfdec_url_has_protocol (url, "xmlsocket")) {
+    SWFDEC_FIXME ("implement xmlsocket: protocol");
+  } else {
+    file->stream = swfdec_loader_load (player->priv->resource->loader, url, 
+	SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);
+    swfdec_loader_set_target (file->stream, SWFDEC_LOADER_TARGET (file));
+  }
+  player->priv->policy_files = g_slist_prepend (player->priv->policy_files, file);
+
+  return file;
+}
+
+gboolean
+swfdec_policy_file_is_loading (SwfdecPolicyFile *file)
+{
+  g_return_val_if_fail (SWFDEC_IS_POLICY_FILE (file), FALSE);
+
+  return file->stream != NULL;
+}
+
+gboolean
+swfdec_policy_file_allow (SwfdecPolicyFile *file, const SwfdecURL *url)
+{
+  GSList *walk;
+  gsize len;
+  char *emantsoh;
+  const char *hostname;
+
+  g_return_val_if_fail (SWFDEC_IS_POLICY_FILE (file), FALSE);
+  g_return_val_if_fail (url != NULL, FALSE);
+
+  hostname = swfdec_url_get_host (url);
+  /* This is a hack that simplifies the following code. As the pattern can not
+   * contain any ?, the only pattern that matches the string "?" is the pattern
+   * "*" 
+   */
+  if (hostname == NULL)
+    hostname = "?";
+  len = strlen (hostname);
+  emantsoh = g_utf8_strreverse (emantsoh, len);
+  for (walk = file->allowed_hosts; walk; walk = walk->next) {
+    GPatternSpec *pattern = walk->data;
+    if (g_pattern_match (pattern, len, hostname, emantsoh)) {
+      g_free (emantsoh);
+      return TRUE;
+    }
+  }
+  g_free (emantsoh);
+  return FALSE;
+}
+
+void
+swfdec_player_load_policy_file (SwfdecPlayer *player, const SwfdecURL *url)
+{
+  SWFDEC_FIXME ("implement");
+}
+
+void
+swfdec_player_check_policy_files (SwfdecPlayer *player, 
+    SwfdecPolicyFileFunc func, gpointer data)
+{
+  SWFDEC_FIXME ("implement");
+}
diff --git a/libswfdec/swfdec_policy_file.h b/libswfdec/swfdec_policy_file.h
new file mode 100644
index 0000000..5342983
--- /dev/null
+++ b/libswfdec/swfdec_policy_file.h
@@ -0,0 +1,70 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *               2007 Pekka Lampila <pekka.lampila at iki.fi>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifndef _SWFDEC_FLASH_SECURITY_POLICY_H_
+#define _SWFDEC_FLASH_SECURITY_POLICY_H_
+
+#include <libswfdec/swfdec.h>
+#include <libswfdec/swfdec_player.h>
+
+G_BEGIN_DECLS
+
+typedef struct _SwfdecPolicyFile SwfdecPolicyFile;
+typedef struct _SwfdecPolicyFileClass SwfdecPolicyFileClass;
+typedef void (* SwfdecPolicyFileFunc) (SwfdecPlayer *player, gboolean allow, gpointer data);
+
+#define SWFDEC_TYPE_POLICY_FILE                    (swfdec_policy_file_get_type())
+#define SWFDEC_IS_POLICY_FILE(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_POLICY_FILE))
+#define SWFDEC_IS_POLICY_FILE_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_POLICY_FILE))
+#define SWFDEC_POLICY_FILE(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_POLICY_FILE, SwfdecPolicyFile))
+#define SWFDEC_POLICY_FILE_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_POLICY_FILE, SwfdecPolicyFileClass))
+#define SWFDEC_POLICY_FILE_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_POLICY_FILE, SwfdecPolicyFileClass))
+
+struct _SwfdecPolicyFile {
+  GObject		object;
+
+  SwfdecPlayer *	player;		/* player we're loaded from */
+  SwfdecURL *		load_url;	/* url we're loaded from */
+  SwfdecURL *		url;		/* parent url we check with */
+  SwfdecLoader *	stream;		/* stream we are loading or NULL if done loading */
+  GSList *		allowed_hosts;	/* list of GPatternSpec of the allowed hosts */
+};
+
+struct _SwfdecPolicyFileClass {
+  GObjectClass		object_class;
+};
+
+GType		swfdec_policy_file_get_type	(void);
+
+SwfdecPolicyFile *swfdec_policy_file_new	(SwfdecPlayer *		player,
+						 const SwfdecURL *	url);
+gboolean	swfdec_policy_file_is_loading	(SwfdecPolicyFile *	file);
+gboolean	swfdec_policy_file_allow	(SwfdecPolicyFile *	file,
+						 const SwfdecURL *	url);
+
+void		swfdec_player_load_policy_file	(SwfdecPlayer *		player,
+						 const SwfdecURL *	url);
+void		swfdec_player_check_policy_files(SwfdecPlayer *		player,
+						 SwfdecPolicyFileFunc	func,
+						 gpointer		data);
+
+
+G_END_DECLS
+#endif
diff --git a/libswfdec/swfdec_policy_loader.c b/libswfdec/swfdec_policy_loader.c
deleted file mode 100644
index 6d04c75..0000000
--- a/libswfdec/swfdec_policy_loader.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *               2007 Pekka Lampila <pekka.lampila at iki.fi>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "swfdec_policy_loader.h"
-#include "swfdec_flash_security.h"
-#include "swfdec_resource.h"
-#include "swfdec_as_strings.h"
-#include "swfdec_debug.h"
-#include "swfdec_loader_internal.h"
-#include "swfdec_player_internal.h"
-#include "swfdec_xml.h"
-#include "swfdec_xml_node.h"
-
-/*** SWFDEC_LOADER_TARGET ***/
-
-static SwfdecPlayer *
-swfdec_policy_loader_target_get_player (SwfdecLoaderTarget *target)
-{
-  return SWFDEC_POLICY_LOADER (target)->sec->player;
-}
-
-static void
-swfdec_policy_loader_target_error (SwfdecLoaderTarget *target,
-    SwfdecLoader *loader)
-{
-  SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (target);
-
-  policy_loader->func (policy_loader, FALSE);
-}
-
-static gboolean
-swfdec_policy_loader_check (SwfdecAsContext *context, const char *text,
-    const char *host)
-{
-  SwfdecXml *xml;
-  gint32 i, j;
-  char *host_lower;
-
-  g_return_val_if_fail (SWFDEC_IS_AS_CONTEXT (context), FALSE);
-  g_return_val_if_fail (text != NULL, FALSE);
-
-  xml = swfdec_xml_new_no_properties (context, text, TRUE);
-
-  if (xml == NULL) {
-    SWFDEC_ERROR ("failed to create an XML object for crossdomain policy");
-    return FALSE;
-  }
-
-  if (SWFDEC_XML_NODE (xml)->type != SWFDEC_XML_NODE_ELEMENT) {
-    SWFDEC_LOG ("empty crossdomain policy file");
-    return FALSE;
-  }
-
-  if (host != NULL) {
-    host_lower = g_ascii_strdown (host, -1);
-  } else {
-    host_lower = NULL;
-  }
-
-  for (i = 0; i < swfdec_xml_node_num_children (SWFDEC_XML_NODE (xml)); i++) {
-    SwfdecXmlNode *node_cdp =
-      swfdec_xml_node_get_child (SWFDEC_XML_NODE (xml), i);
-
-    if (node_cdp->type != SWFDEC_XML_NODE_ELEMENT)
-      continue;
-
-    if (g_ascii_strcasecmp (node_cdp->name, "cross-domain-policy") != 0)
-      continue;
-
-    for (j = 0; j < swfdec_xml_node_num_children (node_cdp); j++) {
-      SwfdecXmlNode *node_aaf = swfdec_xml_node_get_child (node_cdp, j);
-      const char *value;
-      GPatternSpec *pattern;
-      char *value_lower;
-
-      if (node_aaf->type != SWFDEC_XML_NODE_ELEMENT)
-	continue;
-
-      if (g_ascii_strcasecmp (node_aaf->name, "allow-access-from") != 0)
-	continue;
-
-      // FIXME: secure attribute?
-
-      value = swfdec_xml_node_get_attribute (node_aaf, SWFDEC_AS_STR_domain);
-      if (value == NULL)
-	continue;
-
-      if (host != NULL) {
-	// GPatternSpec uses ? as a wildcard character, but we won't
-	// And there can't be a host that has ? character
-	if (strchr (value, '?') != NULL)
-	  continue;
-
-	value_lower = g_ascii_strdown (value, -1);
-	pattern = g_pattern_spec_new (value_lower);
-	g_free (value_lower);
-
-	if (g_pattern_match_string (pattern, host_lower)) {
-	  g_free (host_lower);
-	  g_pattern_spec_free (pattern);
-	  return TRUE;
-	}
-
-	g_pattern_spec_free (pattern);
-      } else {
-	// in case we don't have a host name, only match asterisks
-	if (value[strspn (value, "*")] == '\0')
-	  return TRUE;
-      }
-    }
-  }
-
-  g_free (host_lower);
-
-  return FALSE;
-}
-
-static void
-swfdec_policy_loader_target_eof (SwfdecLoaderTarget *target,
-    SwfdecLoader *loader)
-{
-  SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (target);
-  gboolean allow;
-  char *text;
-
-  text = swfdec_loader_get_text (policy_loader->loader, 8);
-
-  if (text == NULL) {
-    SWFDEC_ERROR ("couldn't get text from crossdomain policy");
-    allow = FALSE;
-  } else {
-    allow = swfdec_policy_loader_check (
-	SWFDEC_AS_CONTEXT (policy_loader->sec->player), text,
-	swfdec_url_get_host (policy_loader->sec->url));
-  }
-
-  g_free (text);
-
-  SWFDEC_LOG ("crossdomain policy %s access from %s to %s",
-      (allow ? "allows" : "doesn't allow"),
-      swfdec_url_get_host (policy_loader->sec->url), policy_loader->host);
-
-  policy_loader->func (policy_loader, allow);
-}
-
-static void
-swfdec_policy_loader_loader_target_init (SwfdecLoaderTargetInterface *iface)
-{
-  iface->get_player = swfdec_policy_loader_target_get_player;
-  iface->eof = swfdec_policy_loader_target_eof;
-  iface->error = swfdec_policy_loader_target_error;
-}
-
-/*** SWFDEC_POLICY_LOADER ***/
-
-G_DEFINE_TYPE_WITH_CODE (SwfdecPolicyLoader, swfdec_policy_loader, G_TYPE_OBJECT,
-    G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_policy_loader_loader_target_init))
-
-static void
-swfdec_policy_loader_dispose (GObject *object)
-{
-  SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (object);
-
-  g_assert (policy_loader->loader);
-  swfdec_loader_set_target (policy_loader->loader, NULL);
-  g_object_unref (policy_loader->loader);
-  policy_loader->loader = NULL;
-
-  g_assert (policy_loader->host);
-  g_free (policy_loader->host);
-
-  G_OBJECT_CLASS (swfdec_policy_loader_parent_class)->dispose (object);
-}
-
-static void
-swfdec_policy_loader_class_init (SwfdecPolicyLoaderClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-  object_class->dispose = swfdec_policy_loader_dispose;
-}
-
-static void
-swfdec_policy_loader_init (SwfdecPolicyLoader *policy_loader)
-{
-}
-
-SwfdecPolicyLoader *
-swfdec_policy_loader_new (SwfdecFlashSecurity *sec, const char *host,
-    SwfdecPolicyLoaderFunc func)
-{
-  SwfdecPolicyLoader *policy_loader;
-  SwfdecURL *url;
-  char *url_str;
-
-  g_return_val_if_fail (SWFDEC_IS_FLASH_SECURITY (sec), NULL);
-  g_return_val_if_fail (host != NULL, NULL);
-  g_return_val_if_fail (func != NULL, NULL);
-
-  policy_loader = SWFDEC_POLICY_LOADER (g_object_new (
-	SWFDEC_TYPE_POLICY_LOADER, NULL));
-
-  url_str = g_strdup_printf ("http://%s/crossdomain.xml", host);
-  url = swfdec_url_new (url_str);
-  g_free (url_str);
-  policy_loader->loader = swfdec_loader_load (sec->player->priv->resource->loader,
-      url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);
-  swfdec_url_free (url);
-
-  if (!policy_loader->loader) {
-    g_free (policy_loader);
-    return NULL;
-  }
-
-  policy_loader->sec = sec;
-  policy_loader->host = g_strdup (host);
-  policy_loader->func = func;
-
-  swfdec_loader_set_target (policy_loader->loader,
-      SWFDEC_LOADER_TARGET (policy_loader));
-  swfdec_loader_set_data_type (policy_loader->loader, SWFDEC_LOADER_DATA_TEXT);
-
-  return policy_loader;
-}
-
-void
-swfdec_policy_loader_free (SwfdecPolicyLoader *policy_loader)
-{
-  g_return_if_fail (SWFDEC_IS_POLICY_LOADER (policy_loader));
-
-  g_object_unref (policy_loader);
-}
diff --git a/libswfdec/swfdec_policy_loader.h b/libswfdec/swfdec_policy_loader.h
deleted file mode 100644
index 525f48e..0000000
--- a/libswfdec/swfdec_policy_loader.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *               2007 Pekka Lampila <pekka.lampila at iki.fi>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifndef _SWFDEC_FLASH_SECURITY_POLICY_H_
-#define _SWFDEC_FLASH_SECURITY_POLICY_H_
-
-#include <libswfdec/swfdec.h>
-#include <libswfdec/swfdec_as_object.h>
-#include <libswfdec/swfdec_flash_security.h>
-
-G_BEGIN_DECLS
-
-typedef struct _SwfdecPolicyLoader SwfdecPolicyLoader;
-typedef struct _SwfdecPolicyLoaderClass SwfdecPolicyLoaderClass;
-typedef void (* SwfdecPolicyLoaderFunc) (SwfdecPolicyLoader *policy_loader, gboolean allow);
-
-#define SWFDEC_TYPE_POLICY_LOADER                    (swfdec_policy_loader_get_type())
-#define SWFDEC_IS_POLICY_LOADER(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_POLICY_LOADER))
-#define SWFDEC_IS_POLICY_LOADER_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_POLICY_LOADER))
-#define SWFDEC_POLICY_LOADER(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_POLICY_LOADER, SwfdecPolicyLoader))
-#define SWFDEC_POLICY_LOADER_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_POLICY_LOADER, SwfdecPolicyLoaderClass))
-#define SWFDEC_POLICY_LOADER_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_POLICY_LOADER, SwfdecPolicyLoaderClass))
-
-struct _SwfdecPolicyLoader {
-  GObject		object;
-
-  SwfdecLoader *	loader;
-
-  SwfdecFlashSecurity *	sec;
-  char *		host;
-  SwfdecPolicyLoaderFunc func;
-};
-
-struct _SwfdecPolicyLoaderClass {
-  GObjectClass		object_class;
-};
-
-GType		swfdec_policy_loader_get_type	(void);
-
-SwfdecPolicyLoader *swfdec_policy_loader_new	(SwfdecFlashSecurity *	sec,
-						 const char *		host,
-						 SwfdecPolicyLoaderFunc	func);
-void		swfdec_policy_loader_free	(SwfdecPolicyLoader *	policy_loader);
-
-G_END_DECLS
-#endif
diff --git a/libswfdec/swfdec_resource_request.c b/libswfdec/swfdec_resource_request.c
index 8c3ddbf..e367993 100644
--- a/libswfdec/swfdec_resource_request.c
+++ b/libswfdec/swfdec_resource_request.c
@@ -114,8 +114,7 @@ swfdec_player_request_resource_now (SwfdecPlayer *player,
   /* create absolute url first */
   absolute = swfdec_url_new_relative (swfdec_loader_get_url (player->priv->resource->loader), url);
 
-  swfdec_security_allow_url (security, absolute,
-      swfdec_player_request_resource_allow_callback, data);
+  swfdec_player_request_resource_allow_callback (absolute, TRUE, data);
 
   swfdec_url_free (absolute);
 }
diff --git a/libswfdec/swfdec_security.c b/libswfdec/swfdec_security.c
index a41f510..ae431a0 100644
--- a/libswfdec/swfdec_security.c
+++ b/libswfdec/swfdec_security.c
@@ -61,26 +61,3 @@ swfdec_security_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
   return klass->allow (guard, key);
 }
 
-/**
- * swfdec_security_allow_url:
- * @guard: security that is in effect
- * @url: URL that should be accessed
- *
- * Asks @guard to check if the given @url may be accessed.
- *
- * Returns: %TRUE if @url may be accessed.
- **/
-void
-swfdec_security_allow_url (SwfdecSecurity *guard, const SwfdecURL *url,
-    SwfdecURLAllowFunc callback, gpointer user_data)
-{
-  SwfdecSecurityClass *klass;
-
-  g_assert (SWFDEC_IS_SECURITY (guard));
-  g_assert (url != NULL);
-
-  klass = SWFDEC_SECURITY_GET_CLASS (guard);
-  g_assert (klass->allow_url);
-  klass->allow_url (guard, url, callback, user_data);
-}
-
diff --git a/libswfdec/swfdec_security.h b/libswfdec/swfdec_security.h
index 2933b44..cdc0717 100644
--- a/libswfdec/swfdec_security.h
+++ b/libswfdec/swfdec_security.h
@@ -47,21 +47,13 @@ struct _SwfdecSecurityClass
   GObjectClass		object_class;
 
   gboolean		(* allow)			(SwfdecSecurity *	guard,
-							 SwfdecSecurity *	from);
-  void			(* allow_url)			(SwfdecSecurity *	guard,
-							 const SwfdecURL *	url,
-							 SwfdecURLAllowFunc	callback,
-							 gpointer		user_data);
+							 SwfdecSecurity *	key);
 };
 
 GType			swfdec_security_get_type	(void);
 
 gboolean		swfdec_security_allow		(SwfdecSecurity *	guard,
 							 SwfdecSecurity *	key);
-void			swfdec_security_allow_url	(SwfdecSecurity *	guard,
-							 const SwfdecURL *	url,
-							 SwfdecURLAllowFunc	callback,
-							 gpointer		user_data);
 
 
 G_END_DECLS
diff --git a/libswfdec/swfdec_security_allow.c b/libswfdec/swfdec_security_allow.c
index e60a949..fb678b4 100644
--- a/libswfdec/swfdec_security_allow.c
+++ b/libswfdec/swfdec_security_allow.c
@@ -35,19 +35,11 @@ swfdec_security_allow_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
 }
 
 static void
-swfdec_security_allow_allow_url (SwfdecSecurity *guard, const SwfdecURL *url,
-    SwfdecURLAllowFunc callback, gpointer user_data)
-{
-  callback (url, TRUE, user_data);
-}
-
-static void
 swfdec_security_allow_class_init (SwfdecSecurityAllowClass *klass)
 {
   SwfdecSecurityClass *security_class = SWFDEC_SECURITY_CLASS (klass);
 
   security_class->allow = swfdec_security_allow_allow;
-  security_class->allow_url = swfdec_security_allow_allow_url;
 }
 
 static void
commit 3970e970c31adc781eb40cd5499b5b592dd1e390
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Jan 15 10:52:03 2008 +0100

    add more functions to SwfdecURL (untested)
    
    These functions are needed by policy file handling

diff --git a/libswfdec/swfdec_url.c b/libswfdec/swfdec_url.c
index 3d57c54..6cdb54f 100644
--- a/libswfdec/swfdec_url.c
+++ b/libswfdec/swfdec_url.c
@@ -50,9 +50,9 @@
 
 struct _SwfdecURL {
   char *	url;			/* the complete url */
-  char *	protocol;		/* http, file, rtmp, ... */
-  char *	host;			/* can be NULL for files */
-  guint		port;			/* can be NULL */
+  char *	protocol;		/* lowercase, http, file, rtmp, ... */
+  char *	host;			/* lowercase, can be NULL for files */
+  guint		port;			/* can be 0 */
   char *	path;	  		/* can be NULL for root path */
   char *	query;			/* can be NULL */
 };
@@ -111,16 +111,16 @@ swfdec_url_new (const char *string)
   string = s + 3;
   s = strchr (string, '/');
   if (s == NULL) {
-    url->host = g_strdup (string);
+    url->host = g_ascii_strdown (string, -1);
     return url;
   }
   if (s != string) {
     char *colon = swfdec_memrchr (string, ':', s - string);
     if (colon) {
       url->port = strtoul (colon + 1, &colon, 10);
-      url->host = g_strndup (string, colon - string);
+      url->host = g_ascii_strdown (string, colon - string);
     } else {
-      url->host = g_strndup (string, s - string);
+      url->host = g_ascii_strdown (string, s - string);
     }
   }
   string = s + 1;
@@ -137,6 +137,63 @@ swfdec_url_new (const char *string)
 }
 
 /**
+ * swfdec_url_new_components:
+ * @protocol: protocol to use
+ * @hostname: hostname or IP address or %NULL
+ * @port: port number or 0. Must be 0 if no hostname is given
+ * @path: a path or %NULL
+ * @query: the query string or %NULL
+ *
+ * Creates a new URL from the given components.
+ *
+ * Returns: a new url pointing to the url from the given components
+ **/
+SwfdecURL *
+swfdec_url_new_components (const char *protocol, const char *hostname, 
+    guint port, const char *path, const char *query)
+{
+  GString *url;
+  SwfdecURL *result;
+
+  g_return_val_if_fail (protocol != NULL, NULL);
+  g_return_val_if_fail (hostname != NULL || port == 0, NULL);
+  g_return_val_if_fail (port < 65536, NULL);
+
+  url = g_string_new (protocol);
+  g_string_append (url, "://");
+  if (hostname) {
+    g_string_append (url, hostname);
+    if (port) {
+      g_string_append_printf (url, ":%u", port);
+    }
+  }
+  g_string_append (url, "/");
+  if (path)
+    g_string_append (url, path);
+  if (query) {
+    g_string_append (url, "?");
+    g_string_append (url, query);
+  }
+  result = swfdec_url_new (url->str);
+  g_string_free (url, TRUE);
+  return result;
+}
+
+/**
+ * swfdec_url_new_parent:
+ * @url: a #SwfdecURL
+ *
+ * Creates a new url that is the parent of @url.
+ *
+ * Returns: a new url pointing to the parent of @url.
+ **/
+SwfdecURL *
+swfdec_url_new_parent (const SwfdecURL *url)
+{
+  return swfdec_url_new_relative (url, "");
+}
+
+/**
  * swfdec_url_new_relative:
  * @url: a #SwfdecURL
  * @string: a relative or absolute URL path
@@ -206,6 +263,7 @@ swfdec_url_copy (const SwfdecURL *url)
   copy->url = g_strdup (url->url);
   copy->protocol = g_strdup (url->protocol);
   copy->host = g_strdup (url->host);
+  copy->port = url->port;
   copy->path = g_strdup (url->path);
   copy->query = g_strdup (url->query);
 
@@ -288,7 +346,7 @@ swfdec_url_has_protocol (const SwfdecURL *url, const char *protocol)
  * swfdec_url_get_host:
  * @url: a #SwfdecURL
  *
- * Gets the host for @url. 
+ * Gets the host for @url as a lower case string.
  *
  * Returns: the host or %NULL if none (typically for file URLs).
  **/
@@ -354,6 +412,47 @@ swfdec_url_get_query (const SwfdecURL *url)
 }
 
 /**
+ * swfdec_url_is_parent:
+ * @parent: the supposed parent url
+ * @child: the supposed child url
+ *
+ * Checks if the given @parent url is a parent url of the given @child url. The
+ * algorithm used is the same as checking policy files if hey apply. If @parent
+ * equals @child, %TRUE is returned. This function does not compare query 
+ * strings.
+ *
+ * Returns: %TRUE if @parent is a parent of @child, %FALSE otherwise.
+ **/
+gboolean
+swfdec_url_is_parent (const SwfdecURL *parent, const SwfdecURL *child)
+{
+  gsize len;
+
+  g_return_val_if_fail (parent != NULL, FALSE);
+  g_return_val_if_fail (child != NULL, FALSE);
+
+  if (!g_str_equal (parent->protocol, child->protocol))
+    return FALSE;
+  if (parent->host == NULL) {
+    if (child->host != NULL)
+      return FALSE;
+  } else {
+    if (child->host == NULL || !g_str_equal (parent->host, child->host))
+      return FALSE;
+  }
+  if (parent->port != child->port)
+    return FALSE;
+  if (parent->path == NULL)
+    return TRUE;
+  if (child->path == NULL)
+    return TRUE;
+  len = strlen (parent->path);
+  if (strncmp (parent->path, child->path, len) != 0)
+    return FALSE;
+  return child->path[len] == '\0' || child->path[len] == '/';
+}
+
+/**
  * swfdec_url_is_local:
  * @url: the url to check
  *
diff --git a/libswfdec/swfdec_url.h b/libswfdec/swfdec_url.h
index 3ac0b88..5eaa306 100644
--- a/libswfdec/swfdec_url.h
+++ b/libswfdec/swfdec_url.h
@@ -30,6 +30,12 @@ typedef struct _SwfdecURL SwfdecURL;
 GType			swfdec_url_get_type		(void) G_GNUC_CONST;
 
 SwfdecURL *		swfdec_url_new			(const char *		string);
+SwfdecURL *		swfdec_url_new_components	(const char *		protocol,
+							 const char *		hostname, 
+							 guint			port,
+							 const char *		path,
+							 const char *		query);
+SwfdecURL *		swfdec_url_new_parent	      	(const SwfdecURL *	url);
 SwfdecURL *		swfdec_url_new_relative	      	(const SwfdecURL *	url,
 							 const char *		string);
 SwfdecURL *		swfdec_url_copy			(const SwfdecURL *      url);
@@ -45,6 +51,8 @@ const char *		swfdec_url_get_query		(const SwfdecURL *      url);
 gboolean		swfdec_url_has_protocol		(const SwfdecURL *	url,
 							 const char *		protocol);
 
+gboolean		swfdec_url_is_parent		(const SwfdecURL *	parent,
+							 const SwfdecURL *	child);
 gboolean		swfdec_url_is_local		(const SwfdecURL *	url);
 							 
 
commit f27d3aa9ac4b7ed3c9803cb71e98fe41cc56526b
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Jan 15 10:51:40 2008 +0100

    g_object_notify next-event after a call to advance()

diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index f60b7e8..847a6fb 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -1392,6 +1392,7 @@ swfdec_player_do_advance (SwfdecPlayer *player, gulong msecs, guint audio_sample
   }
   g_assert (audio_samples == 0);
   
+  g_object_notify (G_OBJECT (player), "next-event");
   swfdec_player_unlock (player);
 }
 
@@ -1571,7 +1572,7 @@ swfdec_player_class_init (SwfdecPlayerClass *klass)
       g_param_spec_enum ("mouse-cursor", "mouse cursor", "how the mouse pointer should be presented",
 	  SWFDEC_TYPE_MOUSE_CURSOR, SWFDEC_MOUSE_CURSOR_NONE, G_PARAM_READABLE));
   g_object_class_install_property (object_class, PROP_NEXT_EVENT,
-      g_param_spec_long ("next-event", "next event", "how many milliseconds until the next event or 0 when no event pending",
+      g_param_spec_long ("next-event", "next event", "how many milliseconds until the next event or -1 when no event pending",
 	  -1, G_MAXLONG, -1, G_PARAM_READABLE));
   g_object_class_install_property (object_class, PROP_CACHE_SIZE,
       g_param_spec_uint ("cache-size", "cache size", "maximum cache size in bytes",
commit 1438104e4de0a19f29eed726da5aceea172abfba
Author: Benjamin Otte <otte at gnome.org>
Date:   Sat Jan 12 00:23:51 2008 +0100

    parse ports seperately

diff --git a/libswfdec/swfdec_url.c b/libswfdec/swfdec_url.c
index fe9ca0a..3d57c54 100644
--- a/libswfdec/swfdec_url.c
+++ b/libswfdec/swfdec_url.c
@@ -20,7 +20,10 @@
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
+
+#include <stdlib.h>
 #include <string.h>
+
 #include "swfdec_url.h"
 #include "swfdec_debug.h"
 
@@ -49,6 +52,7 @@ struct _SwfdecURL {
   char *	url;			/* the complete url */
   char *	protocol;		/* http, file, rtmp, ... */
   char *	host;			/* can be NULL for files */
+  guint		port;			/* can be NULL */
   char *	path;	  		/* can be NULL for root path */
   char *	query;			/* can be NULL */
 };
@@ -65,6 +69,19 @@ swfdec_url_get_type (void)
   return type;
 }
 
+static void *
+swfdec_memrchr (const void *s, int c, size_t n)
+{
+  void *cur, *next;
+
+  cur = memchr (s, c, n);
+  if (cur == NULL)
+    return NULL;
+  while ((next = memchr (cur, c, n)))
+    cur = next;
+  return cur;
+}
+
 /**
  * swfdec_url_new:
  * @string: a full-qualified URL encoded in UTF-8
@@ -81,6 +98,7 @@ swfdec_url_new (const char *string)
 
   g_return_val_if_fail (string != NULL, NULL);
 
+  /* FIXME: error checking? */
   SWFDEC_DEBUG ("new url: %s", string);
   url = g_slice_new0 (SwfdecURL);
   url->url = g_strdup (string);
@@ -96,8 +114,15 @@ swfdec_url_new (const char *string)
     url->host = g_strdup (string);
     return url;
   }
-  if (s != string)
-    url->host = g_strndup (string, s - string);
+  if (s != string) {
+    char *colon = swfdec_memrchr (string, ':', s - string);
+    if (colon) {
+      url->port = strtoul (colon + 1, &colon, 10);
+      url->host = g_strndup (string, colon - string);
+    } else {
+      url->host = g_strndup (string, s - string);
+    }
+  }
   string = s + 1;
   s = strchr (string, '?');
   if (s == NULL) {
@@ -263,8 +288,7 @@ swfdec_url_has_protocol (const SwfdecURL *url, const char *protocol)
  * swfdec_url_get_host:
  * @url: a #SwfdecURL
  *
- * Gets the host for @url. If the host includes a portnumber, it will be present
- * in the returned string.
+ * Gets the host for @url. 
  *
  * Returns: the host or %NULL if none (typically for file URLs).
  **/
@@ -277,6 +301,23 @@ swfdec_url_get_host (const SwfdecURL *url)
 }
 
 /**
+ * swfdec_url_get_port:
+ * @url: a #SwfdecURL
+ *
+ * Gets the port number specified by the given @url. If the @url does not 
+ * specify a port number, 0 will be returned.
+ *
+ * Returns: the specified port or 0 if none was given.
+ **/
+guint
+swfdec_url_get_port (const SwfdecURL *url)
+{
+  g_return_val_if_fail (url != NULL, 0);
+
+  return url->port;
+}
+
+/**
  * swfdec_url_get_path:
  * @url: a #SwfdecURL
  *
diff --git a/libswfdec/swfdec_url.h b/libswfdec/swfdec_url.h
index 7a94039..3ac0b88 100644
--- a/libswfdec/swfdec_url.h
+++ b/libswfdec/swfdec_url.h
@@ -38,6 +38,7 @@ void			swfdec_url_free			(SwfdecURL *		url);
 const char *		swfdec_url_get_url		(const SwfdecURL *      url);
 const char *		swfdec_url_get_protocol		(const SwfdecURL *      url);
 const char *		swfdec_url_get_host		(const SwfdecURL *      url);
+guint			swfdec_url_get_port		(const SwfdecURL *	url);
 const char *		swfdec_url_get_path		(const SwfdecURL *      url);
 const char *		swfdec_url_get_query		(const SwfdecURL *      url);
 
commit b94436fdcfb7954e66a90593e8d631a5e4cb3c73
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Jan 11 13:56:38 2008 +0100

    get rid of swfdec_movie_load_variables() API and call it directly

diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index 24ed902..24a822c 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -39,6 +39,7 @@
 #include <math.h>
 #include <string.h>
 #include "swfdec_decoder.h"
+#include "swfdec_load_object.h"
 #include "swfdec_movie.h"
 #include "swfdec_player_internal.h"
 #include "swfdec_sprite.h"
@@ -1161,6 +1162,18 @@ swfdec_action_get_url (SwfdecAsContext *cx, guint action, const guint8 *data, gu
 }
 
 static void
+swfdec_as_interpret_load_variables_on_finish (SwfdecAsObject *target,
+    const char *text)
+{
+  if (text != NULL)
+    swfdec_as_object_decode (target, text);
+
+  // only call onData for sprite movies
+  // FIXME: is it called even when loading fails?
+  swfdec_movie_queue_script (SWFDEC_MOVIE (target), SWFDEC_EVENT_DATA);
+}
+
+static void
 swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, guint len)
 {
   const char *target, *url;
@@ -1193,8 +1206,10 @@ swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, g
     SwfdecMovie *movie;
     
     movie = swfdec_player_get_movie_from_string (SWFDEC_PLAYER (cx), target);
-    if (movie != NULL)
-      swfdec_movie_load_variables (movie, url, method, NULL);
+    if (movie != NULL) {
+      swfdec_load_object_new (SWFDEC_AS_OBJECT (movie), url, method, NULL, NULL,
+	  swfdec_as_interpret_load_variables_on_finish);
+    }
   } else if (internal) {
     swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, method, NULL, NULL);
   } else {
diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c
index 547155b..90147a3 100644
--- a/libswfdec/swfdec_movie.c
+++ b/libswfdec/swfdec_movie.c
@@ -1724,35 +1724,6 @@ swfdec_movie_duplicate (SwfdecMovie *movie, const char *name, int depth)
   return copy;
 }
 
-static void
-swfdec_movie_load_variables_on_finish (SwfdecAsObject *target,
-    const char *text)
-{
-  if (text != NULL)
-    swfdec_as_object_decode (target, text);
-
-  // only call onData for sprite movies
-  // FIXME: is it called even when loading fails?
-  if (target->context->version >= 6 && SWFDEC_IS_SPRITE_MOVIE (target))
-    swfdec_as_object_call (target, SWFDEC_AS_STR_onData, 0, NULL, NULL);
-}
-
-void
-swfdec_movie_load_variables (SwfdecMovie *movie, const char *url,
-    SwfdecLoaderRequest request, SwfdecBuffer *data)
-{
-  g_return_if_fail (SWFDEC_IS_MOVIE (movie));
-  g_return_if_fail (url != NULL);
-
-  if (request != SWFDEC_LOADER_REQUEST_DEFAULT) {
-    SWFDEC_FIXME ("loadVariables: Different request-modes not supported");
-    return;
-  }
-
-  swfdec_load_object_new (SWFDEC_AS_OBJECT (movie), url, request, data, NULL,
-      swfdec_movie_load_variables_on_finish);
-}
-
 char *
 swfdec_movie_get_path (SwfdecMovie *movie, gboolean dot)
 {
diff --git a/libswfdec/swfdec_movie.h b/libswfdec/swfdec_movie.h
index 6b5b001..623707f 100644
--- a/libswfdec/swfdec_movie.h
+++ b/libswfdec/swfdec_movie.h
@@ -278,10 +278,6 @@ void		swfdec_movie_execute		(SwfdecMovie *		movie,
 						 SwfdecEventType	condition);
 void		swfdec_movie_queue_script	(SwfdecMovie *		movie,
   						 SwfdecEventType	condition);
-void		swfdec_movie_load_variables	(SwfdecMovie *		movie,
-						 const char *		url,
-						 SwfdecLoaderRequest	request,
-						 SwfdecBuffer *		data);
 
 int		swfdec_movie_compare_depths	(gconstpointer		a,
 						 gconstpointer		b);
commit 5accd77d61fd2147c49b5563414876248dc89a1c
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Jan 10 19:51:13 2008 +0100

    use a function list for the player's rooted objects

diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index 5b659f2..eb72a56 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -67,8 +67,8 @@ swfdec_load_object_loader_target_error (SwfdecLoaderTarget *target,
   load_object->finish (load_object->target, NULL);
 
   /* unroot */
-  swfdec_player_unroot_object (SWFDEC_PLAYER (
-	SWFDEC_AS_OBJECT (load_object)->context), G_OBJECT (load_object));
+  swfdec_player_unroot (SWFDEC_PLAYER (
+	SWFDEC_AS_OBJECT (load_object)->context), load_object);
 }
 
 static void
@@ -96,8 +96,8 @@ swfdec_load_object_loader_target_eof (SwfdecLoaderTarget *target,
   }
 
   /* unroot */
-  swfdec_player_unroot_object (SWFDEC_PLAYER (
-	SWFDEC_AS_OBJECT (load_object)->context), G_OBJECT (load_object));
+  swfdec_player_unroot (SWFDEC_PLAYER (
+	SWFDEC_AS_OBJECT (load_object)->context), load_object);
 }
 
 static void
@@ -222,8 +222,7 @@ swfdec_load_object_new (SwfdecAsObject *target, const char *url,
   if (!swfdec_load_object_load (load_object, url, request, data))
     return NULL;
 
-  swfdec_player_root_object (SWFDEC_PLAYER (target->context),
-      G_OBJECT (load_object));
+  swfdec_player_root (SWFDEC_PLAYER (target->context), load_object, (GFunc) swfdec_as_object_mark);
 
   return SWFDEC_AS_OBJECT (load_object);
 }
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 215d604..f60b7e8 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -878,9 +878,8 @@ swfdec_player_dispose (GObject *object)
     g_object_unref (priv->resource);
     priv->resource = NULL;
   }
-  while (priv->rooted_objects)
-    swfdec_player_unroot_object (player, priv->rooted_objects->data);
 
+  swfdec_function_list_clear (&priv->rooted);
   /* we do this here so references to GC'd objects get freed */
   G_OBJECT_CLASS (swfdec_player_parent_class)->dispose (object);
 
@@ -1508,16 +1507,6 @@ swfdec_player_mark_string_object (gpointer key, gpointer value, gpointer data)
 }
 
 static void
-swfdec_player_mark_rooted_object (gpointer object, gpointer unused)
-{
-  if (SWFDEC_IS_RESOURCE (object)) {
-    swfdec_resource_mark (object);
-  } else if (SWFDEC_IS_AS_OBJECT (object)) {
-    swfdec_as_object_mark (object);
-  }
-}
-
-static void
 swfdec_player_mark (SwfdecAsContext *context)
 {
   SwfdecPlayer *player = SWFDEC_PLAYER (context);
@@ -1529,7 +1518,7 @@ swfdec_player_mark (SwfdecAsContext *context)
   swfdec_as_object_mark (priv->Video);
   g_list_foreach (priv->roots, (GFunc) swfdec_as_object_mark, NULL);
   g_list_foreach (priv->intervals, (GFunc) swfdec_as_object_mark, NULL);
-  g_list_foreach (priv->rooted_objects, swfdec_player_mark_rooted_object, NULL);
+  swfdec_function_list_execute (&priv->rooted, player);
 
   SWFDEC_AS_CONTEXT_CLASS (swfdec_player_parent_class)->mark (context);
 }
@@ -2090,38 +2079,6 @@ swfdec_player_set_export_class (SwfdecPlayer *player, const char *name, SwfdecAs
   }
 }
 
-/* FIXME:
- * I don't like the idea of rooting arbitrary objects very much. And so far, 
- * this API is only necessary for the objects used for loading data. So it seems
- * like a good idea to revisit the refcounting and GCing of resources.
- */
-void
-swfdec_player_root_object (SwfdecPlayer *player, GObject *object)
-{
-  SwfdecPlayerPrivate *priv;
-
-  g_return_if_fail (SWFDEC_IS_PLAYER (player));
-  g_return_if_fail (G_IS_OBJECT (object));
-
-  priv = player->priv;
-  g_object_ref (object);
-  priv->rooted_objects = g_list_prepend (priv->rooted_objects, object);
-}
-
-void
-swfdec_player_unroot_object (SwfdecPlayer *player, GObject *object)
-{
-  SwfdecPlayerPrivate *priv = player->priv;
-  GList *entry;
-
-  g_return_if_fail (SWFDEC_IS_PLAYER (player));
-  g_return_if_fail (G_IS_OBJECT (object));
-  entry = g_list_find (priv->rooted_objects, object);
-  g_return_if_fail (entry != NULL);
-  g_object_unref (object);
-  priv->rooted_objects = g_list_delete_link (priv->rooted_objects, entry);
-}
-
 /** PUBLIC API ***/
 
 /**
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index f3fbb60..06d8eea 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -23,6 +23,7 @@
 #include <libswfdec/swfdec_player.h>
 #include <libswfdec/swfdec_audio.h>
 #include <libswfdec/swfdec_event.h>
+#include <libswfdec/swfdec_function_list.h>
 #include <libswfdec/swfdec_player_scripting.h>
 #include <libswfdec/swfdec_rect.h>
 #include <libswfdec/swfdec_ringbuffer.h>
@@ -61,7 +62,6 @@ struct _SwfdecPlayerPrivate
   guint			width;			/* width of movie */
   guint			height;			/* height of movie */
   GList *		roots;			/* all the root movies */
-  GList *		rooted_objects;		/* all the objects we keep track of */
   GSList *		resource_requests;	/* all external requested URIs - see swfdec_resource_request.[ch] */
   SwfdecCache *		cache;			/* player cache */
   gboolean		bgcolor_set;		/* TRUE if the background color has been set */
@@ -86,6 +86,7 @@ struct _SwfdecPlayerPrivate
 
   guint			unnamed_count;		/* variable used for naming unnamed movies */
   /* ActionScript */
+  SwfdecFunctionList	rooted;	  		/* all the objects we keep track of */
   guint			interval_id;		/* id returned from setInterval call */
   GList *		intervals;		/* all currently running intervals */
   GHashTable *		registered_classes;	/* name => SwfdecAsObject constructor */
@@ -149,10 +150,10 @@ void		swfdec_player_unlock		(SwfdecPlayer *		player);
 void		swfdec_player_unlock_soft	(SwfdecPlayer *		player);
 void		swfdec_player_perform_actions	(SwfdecPlayer *		player);
 
-void		swfdec_player_root_object	(SwfdecPlayer *		player,
-						 GObject *		object);
-void		swfdec_player_unroot_object	(SwfdecPlayer *		player,
-						 GObject *		object);
+#define swfdec_player_root(player, data, mark_func) \
+    swfdec_function_list_add (&(player)->priv->rooted, (mark_func), (data), NULL)
+#define swfdec_player_unroot(player, data) \
+    swfdec_function_list_remove (&(player)->priv->rooted, (data))
 SwfdecAsObject *swfdec_player_get_export_class	(SwfdecPlayer *		player,
 						 const char *		name);
 void		swfdec_player_set_export_class	(SwfdecPlayer *		player,
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index cac371a..f4fcf3c 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -210,7 +210,7 @@ swfdec_resource_create_movie (SwfdecResource *resource)
       SWFDEC_WARNING ("%s does not reference a movie, not loading %s", resource->target,
 	  swfdec_url_get_url (swfdec_loader_get_url (resource->loader)));
       swfdec_loader_close (resource->loader);
-      swfdec_player_unroot_object (player, G_OBJECT (resource));
+      swfdec_player_unroot (player, resource);
       return FALSE;
     }
     movie = swfdec_player_get_movie_at_level (player, level);
@@ -220,7 +220,7 @@ swfdec_resource_create_movie (SwfdecResource *resource)
   } else {
     movie = swfdec_resource_replace_movie (movie, resource);
   }
-  swfdec_player_unroot_object (player, G_OBJECT (resource));
+  swfdec_player_unroot (player, resource);
   return TRUE;
 }
 
@@ -544,7 +544,7 @@ swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url,
     resource->target = path;
     if (loader)
       resource->clip_loader = g_object_ref (loader);
-    swfdec_player_root_object (player, G_OBJECT (resource));
+    swfdec_player_root (player, resource, (GFunc) swfdec_resource_mark);
     swfdec_player_request_resource (player, SWFDEC_AS_CONTEXT (player)->frame->security, 
 	url, request, buffer, swfdec_resource_do_load, resource, g_object_unref);
   }
commit d9e056c222d464336c6925a87d7510c9f4a65375
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Jan 10 19:41:36 2008 +0100

    add a SwfdecFunctionList struct
    
    This is supposed to make collecting callbacks easier, as there's a lot of those
    around.
    I'm not sure this API works out, but we can at least try it.

diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index 4f2d438..9320e97 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -80,6 +80,7 @@ libswfdec_source_files = \
 	swfdec_flash_security.c \
 	swfdec_flv_decoder.c \
 	swfdec_font.c \
+	swfdec_function_list.c \
 	swfdec_glow_filter.c \
 	swfdec_gradient_filter.c \
 	swfdec_gradient_pattern.c \
@@ -238,6 +239,7 @@ noinst_HEADERS = \
 	swfdec_flash_security.h \
 	swfdec_flv_decoder.h \
 	swfdec_font.h \
+	swfdec_function_list.h \
 	swfdec_gradient_pattern.h \
 	swfdec_graphic.h \
 	swfdec_graphic_movie.h \
diff --git a/libswfdec/swfdec_function_list.c b/libswfdec/swfdec_function_list.c
new file mode 100644
index 0000000..0b29b59
--- /dev/null
+++ b/libswfdec/swfdec_function_list.c
@@ -0,0 +1,132 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include "swfdec_function_list.h"
+
+typedef struct _SwfdecFunctionListEntry SwfdecFunctionListEntry;
+struct _SwfdecFunctionListEntry {
+  GFunc			func;
+  gpointer		data;
+  GDestroyNotify	destroy;
+};
+
+void
+swfdec_function_list_clear (SwfdecFunctionList *list)
+{
+  GList *walk;
+
+  g_return_if_fail (list != NULL);
+
+  for (walk = list->list; walk; walk = walk->next) {
+    SwfdecFunctionListEntry *entry = walk->data;
+    if (entry->destroy)
+      entry->destroy (entry->data);
+    g_slice_free (SwfdecFunctionListEntry, entry);
+  }
+  g_list_free (list->list);
+  list->list = NULL;
+}
+
+void
+swfdec_function_list_add (SwfdecFunctionList *list, GFunc func,
+    gpointer data, GDestroyNotify destroy)
+{
+  SwfdecFunctionListEntry *entry;
+
+  g_return_if_fail (list != NULL);
+  g_return_if_fail (func);
+
+  entry = g_slice_new (SwfdecFunctionListEntry);
+  entry->func = func;
+  entry->data = data;
+  entry->destroy = destroy;
+
+  list->list = g_list_append (list->list, entry);
+}
+
+static int
+swfdec_function_list_entry_compare (gconstpointer a, gconstpointer b)
+{
+  a = ((const SwfdecFunctionListEntry *) a)->data;
+  b = ((const SwfdecFunctionListEntry *) b)->data;
+
+  if (a < b)
+    return -1;
+  if (a > b)
+    return 1;
+  return 0;
+}
+
+void
+swfdec_function_list_remove (SwfdecFunctionList *list, gpointer data)
+{
+  SwfdecFunctionListEntry entry = { NULL, data, NULL };
+  SwfdecFunctionListEntry *e;
+  GList *node;
+
+  g_return_if_fail (list != NULL);
+
+  node = g_list_find_custom (list->list, &entry,
+      swfdec_function_list_entry_compare);
+  e = node->data;
+  if (e->destroy)
+    e->destroy (data);
+  g_slice_free (SwfdecFunctionListEntry, e);
+  list->list = g_list_delete_link (list->list, node);
+}
+
+void
+swfdec_function_list_execute (SwfdecFunctionList *list, gpointer data)
+{
+  SwfdecFunctionListEntry *entry;
+  GList *walk;
+
+  g_return_if_fail (list != NULL);
+
+  for (walk = list->list; walk; walk = walk->next) {
+    entry = walk->data;
+    entry->func (entry->data, data);
+  }
+}
+
+void
+swfdec_function_list_execute_and_clear (SwfdecFunctionList *list, gpointer data)
+{
+  SwfdecFunctionListEntry *entry;
+  GList *old, *walk;
+
+  g_return_if_fail (list != NULL);
+
+  old = list->list;
+  list->list = NULL;
+  for (walk = old; walk; walk = walk->next) {
+    entry = walk->data;
+    entry->func (entry->data, data);
+    if (entry->destroy)
+      entry->destroy (entry->data);
+    g_slice_free (SwfdecFunctionListEntry, entry);
+  }
+  g_list_free (old);
+}
+
diff --git a/libswfdec/swfdec_function_list.h b/libswfdec/swfdec_function_list.h
new file mode 100644
index 0000000..f7e8691
--- /dev/null
+++ b/libswfdec/swfdec_function_list.h
@@ -0,0 +1,50 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifndef __SWFDEC_FUNCTION_LIST_H__
+#define __SWFDEC_FUNCTION_LIST_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+
+typedef struct _SwfdecFunctionList SwfdecFunctionList;
+struct _SwfdecFunctionList {
+  GList *	list;
+};
+
+void		  	swfdec_function_list_clear	(SwfdecFunctionList *	list);
+
+void			swfdec_function_list_add	(SwfdecFunctionList *	list,
+							 GFunc			func,
+							 gpointer		data,
+							 GDestroyNotify 	destroy);
+void			swfdec_function_list_remove	(SwfdecFunctionList *	list,
+							 gpointer		data);
+
+void			swfdec_function_list_execute	(SwfdecFunctionList *	list,
+							 gpointer		data);
+void			swfdec_function_list_execute_and_clear
+							(SwfdecFunctionList *   list,
+							 gpointer		data);
+
+G_END_DECLS
+
+#endif
commit 5803c29fe96a360fdc31678c5a325a58a1926da0
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Jan 10 18:33:44 2008 +0100

    add copyright headers

diff --git a/libswfdec/swfdec_ringbuffer.c b/libswfdec/swfdec_ringbuffer.c
index acc8ba1..6d3dd04 100644
--- a/libswfdec/swfdec_ringbuffer.c
+++ b/libswfdec/swfdec_ringbuffer.c
@@ -1,3 +1,21 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/libswfdec/swfdec_ringbuffer.h b/libswfdec/swfdec_ringbuffer.h
index d7aad1b..3f02851 100644
--- a/libswfdec/swfdec_ringbuffer.h
+++ b/libswfdec/swfdec_ringbuffer.h
@@ -1,3 +1,21 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
 
 #ifndef __SWFDEC_RING_BUFFER_H__
 #define __SWFDEC_RING_BUFFER_H__
commit 2da50c68beb947d61ac817961db4ca7923ed6f75
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 22:41:16 2008 +0100

    This file has been missing all the time

diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index 4990956..dc62604 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -284,7 +284,8 @@ noinst_HEADERS = \
 	swfdec_video.h \
 	swfdec_video_movie.h \
 	swfdec_xml_node.h \
-	swfdec_xml.h
+	swfdec_xml.h \
+	swfdec_xml_socket.h
 
 EXTRA_DIST = \
 	compiler.c \
diff --git a/libswfdec/swfdec_xml_socket.h b/libswfdec/swfdec_xml_socket.h
new file mode 100644
index 0000000..95f19c2
--- /dev/null
+++ b/libswfdec/swfdec_xml_socket.h
@@ -0,0 +1,56 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifndef _SWFDEC_XML_SOCKET_H_
+#define _SWFDEC_XML_SOCKET_H_
+
+#include <libswfdec/swfdec.h>
+#include <libswfdec/swfdec_as_object.h>
+
+G_BEGIN_DECLS
+
+
+typedef struct _SwfdecXmlSocket SwfdecXmlSocket;
+typedef struct _SwfdecXmlSocketClass SwfdecXmlSocketClass;
+
+#define SWFDEC_TYPE_XML_SOCKET                    (swfdec_xml_socket_get_type())
+#define SWFDEC_IS_XML_SOCKET(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_XML_SOCKET))
+#define SWFDEC_IS_XML_SOCKET_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_XML_SOCKET))
+#define SWFDEC_XML_SOCKET(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_XML_SOCKET, SwfdecXmlSocket))
+#define SWFDEC_XML_SOCKET_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_XML_SOCKET, SwfdecXmlSocketClass))
+#define SWFDEC_XML_SOCKET_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_XML_SOCKET, SwfdecXmlSocketClass))
+
+struct _SwfdecXmlSocket {
+  SwfdecAsObject	object;
+
+  SwfdecSocket *	socket;		/* the socket in use */
+  gboolean		open;		/* the socket has been opened already */
+  SwfdecBufferQueue *	queue;		/* everything that belongs to the same string */
+  SwfdecAsObject *	target;		/* target object we call out to */
+};
+
+struct _SwfdecXmlSocketClass {
+  SwfdecAsObjectClass	object_class;
+};
+
+GType		swfdec_xml_socket_get_type	(void);
+
+
+G_END_DECLS
+#endif
commit 1f66627e35c49d677b036e8efb0fe1dba09bb7e0
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 22:40:01 2008 +0100

    emit player events in every sandbox
    
    FIXME: figure out correct order

diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 12ec552..b41c3e6 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -936,17 +936,22 @@ swfdec_player_dispose (GObject *object)
 static void
 swfdec_player_broadcast (SwfdecPlayer *player, const char *object_name, const char *signal)
 {
+  GSList *walk;
   SwfdecAsValue val;
   SwfdecAsObject *obj;
 
   SWFDEC_DEBUG ("broadcasting message %s.%s", object_name, signal);
-  obj = SWFDEC_AS_CONTEXT (player)->global;
-  swfdec_as_object_get_variable (obj, object_name, &val);
-  if (!SWFDEC_AS_VALUE_IS_OBJECT (&val))
-    return;
-  obj = SWFDEC_AS_VALUE_GET_OBJECT (&val);
-  SWFDEC_AS_VALUE_SET_STRING (&val, signal);
-  swfdec_as_object_call (obj, SWFDEC_AS_STR_broadcastMessage, 1, &val, NULL);
+  for (walk = player->priv->sandboxes; walk; walk = walk->next) {
+    SwfdecSandbox *sandbox = walk->data;
+    swfdec_as_object_get_variable (SWFDEC_AS_OBJECT (sandbox), object_name, &val);
+    if (!SWFDEC_AS_VALUE_IS_OBJECT (&val))
+      return;
+    obj = SWFDEC_AS_VALUE_GET_OBJECT (&val);
+    SWFDEC_AS_VALUE_SET_STRING (&val, signal);
+    swfdec_sandbox_use (sandbox);
+    swfdec_as_object_call (obj, SWFDEC_AS_STR_broadcastMessage, 1, &val, NULL);
+    swfdec_sandbox_unuse (sandbox);
+  }
 }
 
 static void
commit ae135374042a5e5a53c6533324b7e389da92b13d
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 22:32:18 2008 +0100

    make sandbox lookup work with as versions and make sandboxes not leak

diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index d5345ac..12ec552 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -911,8 +911,7 @@ swfdec_player_dispose (GObject *object)
   }
   g_assert (priv->movies == NULL);
   g_assert (priv->audio == NULL);
-  g_assert (g_hash_table_size (priv->sandboxes) == 0);
-  g_hash_table_destroy (priv->sandboxes);
+  g_slist_free (priv->sandboxes);
   if (priv->external_timeout.callback)
     swfdec_player_remove_timeout (player, &priv->external_timeout);
   if (priv->rate) {
@@ -1524,6 +1523,7 @@ swfdec_player_mark (SwfdecAsContext *context)
   g_hash_table_foreach (priv->scripting_callbacks, swfdec_player_mark_string_object, NULL);
   g_list_foreach (priv->roots, (GFunc) swfdec_as_object_mark, NULL);
   g_list_foreach (priv->intervals, (GFunc) swfdec_as_object_mark, NULL);
+  g_slist_foreach (priv->sandboxes, (GFunc) swfdec_as_object_mark, NULL);
   swfdec_function_list_execute (&priv->rooted, player);
   swfdec_as_object_mark (SWFDEC_AS_OBJECT (priv->resource));
 
@@ -1791,8 +1791,6 @@ swfdec_player_init (SwfdecPlayer *player)
   priv->iterate_timeout.callback = swfdec_player_iterate;
   priv->stage_width = -1;
   priv->stage_height = -1;
-
-  priv->sandboxes = g_hash_table_new (swfdec_url_hash, swfdec_url_equal);
 }
 
 void
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index 8c9e819..889a1ee 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -133,7 +133,7 @@ struct _SwfdecPlayerPrivate
   SwfdecRingBuffer *	actions[SWFDEC_PLAYER_N_ACTION_QUEUES]; /* all actions we've queued up so far */
 
   /* security */
-  GHashTable *		sandboxes;		/* SwfdecURL => SwfdecSandbox mapping */
+  GSList *		sandboxes;		/* all existing sandboxes */
   GList *		loading_policy_files;	/* list of loading SwfdecPlayerLoader - newest first */
   GSList *		policy_files;		/* list of SwfdecPolicyLoader that finished loading */
 };
diff --git a/libswfdec/swfdec_sandbox.c b/libswfdec/swfdec_sandbox.c
index f10b102..e3c967f 100644
--- a/libswfdec/swfdec_sandbox.c
+++ b/libswfdec/swfdec_sandbox.c
@@ -62,10 +62,23 @@ swfdec_sandbox_mark (SwfdecAsObject *object)
 }
 
 static void
+swfdec_sandbox_dispose (GObject *object)
+{
+  SwfdecSandbox *sandbox = SWFDEC_SANDBOX (object);
+
+  swfdec_url_free (sandbox->url);
+
+  G_OBJECT_CLASS (swfdec_sandbox_parent_class)->dispose (object);
+}
+
+static void
 swfdec_sandbox_class_init (SwfdecSandboxClass *klass)
 {
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
   SwfdecAsObjectClass *asobject_class = SWFDEC_AS_OBJECT_CLASS (klass);
 
+  object_class->dispose = swfdec_sandbox_dispose;
+
   asobject_class->mark = swfdec_sandbox_mark;
 }
 
@@ -168,6 +181,7 @@ swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url,
   SwfdecSandbox *sandbox;
   SwfdecURL *real;
   guint as_version;
+  GSList *walk;
 
   g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
   g_return_val_if_fail (url != NULL, NULL);
@@ -175,11 +189,16 @@ swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url,
   priv = player->priv;
   real = swfdec_url_new_components (swfdec_url_get_protocol (url),
       swfdec_url_get_host (url), swfdec_url_get_port (url), NULL, NULL);
-
   as_version = flash_version < 7 ? 1 : 2;
-  /* FIXME: look up by as version */
-  sandbox = g_hash_table_lookup (priv->sandboxes, real);
-  if (sandbox) {
+
+  for (walk = priv->sandboxes; walk; walk = walk->next) {
+    sandbox = walk->data;
+    if (sandbox->as_version == as_version &&
+	swfdec_url_equal (sandbox->url, real))
+      break;
+  }
+
+  if (walk) {
     swfdec_url_free (real);
 
     if (!swfdec_sandbox_set_allow_network (sandbox, allow_network))
@@ -194,6 +213,7 @@ swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url,
     swfdec_as_object_add (SWFDEC_AS_OBJECT (sandbox), context, size);
     sandbox->url = real;
     sandbox->as_version = as_version;
+    priv->sandboxes = g_slist_prepend (priv->sandboxes, sandbox);
   
     if (!swfdec_sandbox_set_allow_network (sandbox, allow_network))
       return NULL;
commit 5a6e7a8c1729771557e24638bb44ad318a3ee5e0
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 21:54:45 2008 +0100

    save the movie before running user code

diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 231b27a..d5345ac 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -473,9 +473,10 @@ swfdec_player_do_action (SwfdecPlayer *player)
     } while (action->movie == NULL); /* skip removed actions */
     if (action) {
       if (action->script) {
-	swfdec_sandbox_use (action->movie->resource->sandbox);
+	SwfdecSandbox *sandbox = action->movie->resource->sandbox;
+	swfdec_sandbox_use (sandbox);
 	swfdec_as_object_run (SWFDEC_AS_OBJECT (action->movie), action->script);
-	swfdec_sandbox_unuse (action->movie->resource->sandbox);
+	swfdec_sandbox_unuse (sandbox);
       } else {
 	swfdec_movie_execute (action->movie, action->event);
       }
commit fc3baf5a0b0031ea9f62e320d3b3106f00d66702
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 21:54:22 2008 +0100

    set the sandbox before parsing the amf stream and when emitting the signal

diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c
index 1502a28..9df71e0 100644
--- a/libswfdec/swfdec_net_stream.c
+++ b/libswfdec/swfdec_net_stream.c
@@ -151,6 +151,7 @@ swfdec_net_stream_video_goto (SwfdecNetStream *stream, guint timestamp)
       SWFDEC_LOG ("processing event from timestamp %u", process_events_from);
       process_events_from++; /* increase so we get the next event next time */
       swfdec_bits_init (&bits, event);
+      swfdec_sandbox_use (stream->sandbox);
       if (swfdec_amf_parse (SWFDEC_AS_OBJECT (stream)->context, &bits, 2, 
 	    SWFDEC_AMF_STRING, &name, SWFDEC_AMF_MIXED_ARRAY, &value) != 2) {
 	SWFDEC_ERROR ("could not parse data tag");
@@ -158,6 +159,7 @@ swfdec_net_stream_video_goto (SwfdecNetStream *stream, guint timestamp)
 	swfdec_as_object_call (SWFDEC_AS_OBJECT (stream), 
 	    SWFDEC_AS_VALUE_GET_STRING (&name), 1, &value, NULL);
       }
+      swfdec_sandbox_unuse (stream->sandbox);
     }
   }
 }
commit 25711468e585af3ae35a22e7ca495f096124ac49
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 21:54:04 2008 +0100

    add check that requires context (currently necessary)

diff --git a/libswfdec/swfdec_amf.c b/libswfdec/swfdec_amf.c
index 4baab41..688df0a 100644
--- a/libswfdec/swfdec_amf.c
+++ b/libswfdec/swfdec_amf.c
@@ -183,6 +183,7 @@ swfdec_amf_parse_one (SwfdecAsContext *context, SwfdecBits *bits,
   guint type;
 
   g_return_val_if_fail (SWFDEC_IS_AS_CONTEXT (context), 0);
+  g_return_val_if_fail (context->global != NULL, 0);
   g_return_val_if_fail (bits != NULL, FALSE);
   g_return_val_if_fail (rval != NULL, FALSE);
   g_return_val_if_fail (expected_type < SWFDEC_AMF_N_TYPES, FALSE);
@@ -208,6 +209,7 @@ swfdec_amf_parse (SwfdecAsContext *context, SwfdecBits *bits, guint n_items, ...
   guint i;
 
   g_return_val_if_fail (SWFDEC_IS_AS_CONTEXT (context), 0);
+  g_return_val_if_fail (context->global != NULL, 0);
   g_return_val_if_fail (bits != NULL, 0);
 
   va_start (args, n_items);
commit fb9079df6b7d92e5efee09d58b0ae3d526e2a375
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 21:13:57 2008 +0100

    save the version, too - we need it when parsing the data

diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index 642e256..33c4e4b 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -86,7 +86,7 @@ swfdec_load_object_stream_target_close (SwfdecStreamTarget *target,
 
   // get text
   text =
-    swfdec_loader_get_text (loader, load_object->target->context->version);
+    swfdec_loader_get_text (loader, load_object->version);
 
   /* break reference to the loader */
   swfdec_stream_set_target (stream, NULL);
@@ -248,5 +248,6 @@ swfdec_load_object_create (SwfdecAsObject *target, const char *url,
   /* get the current security */
   g_assert (SWFDEC_AS_CONTEXT (player)->frame);
   load->sandbox = SWFDEC_SANDBOX (SWFDEC_AS_CONTEXT (player)->global);
+  load->version = SWFDEC_AS_CONTEXT (player)->version;
   swfdec_player_request_resource (player, swfdec_load_object_request, load, NULL);
 }
diff --git a/libswfdec/swfdec_load_object.h b/libswfdec/swfdec_load_object.h
index 3436562..51b3baa 100644
--- a/libswfdec/swfdec_load_object.h
+++ b/libswfdec/swfdec_load_object.h
@@ -52,6 +52,7 @@ struct _SwfdecLoadObject {
   SwfdecLoader *		loader;		/* loader when loading or NULL */
 
   SwfdecSandbox *		sandbox;	/* sandbox that inited the loading */
+  guint				version;	/* version used when initiating the load - for parsing the data */
   SwfdecAsObject *		target;		/* target object */
   SwfdecLoadObjectProgress	progress;	/* progress callback */
   SwfdecLoadObjectFinish	finish;		/* finish callback */
commit 8df2f695cb639c92dd976c3d6f43041909c090bd
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 20:42:37 2008 +0100

    require the Flash version for initialization

diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index e3e90a8..26b9511 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -78,7 +78,7 @@ swfdec_resource_stream_target_image (SwfdecResource *instance)
     SwfdecSwfDecoder *dec = SWFDEC_SWF_DECODER (instance->decoder);
 
     instance->sandbox = swfdec_sandbox_get_for_url (player,
-	swfdec_loader_get_url (instance->loader),
+	swfdec_loader_get_url (instance->loader), instance->version,
 	SWFDEC_SWF_DECODER (instance->decoder)->use_network);
     if (instance->sandbox) {
       movie->sprite = dec->main_sprite;
diff --git a/libswfdec/swfdec_sandbox.c b/libswfdec/swfdec_sandbox.c
index bdc7bf1..f10b102 100644
--- a/libswfdec/swfdec_sandbox.c
+++ b/libswfdec/swfdec_sandbox.c
@@ -76,7 +76,7 @@ swfdec_sandbox_init (SwfdecSandbox *sandbox)
 }
 
 static void
-swfdec_sandbox_initialize (SwfdecSandbox *sandbox)
+swfdec_sandbox_initialize (SwfdecSandbox *sandbox, guint version)
 {
   SwfdecAsContext *context = SWFDEC_AS_OBJECT (sandbox)->context;
   SwfdecPlayer *player = SWFDEC_PLAYER (context);
@@ -93,7 +93,7 @@ swfdec_sandbox_initialize (SwfdecSandbox *sandbox)
   swfdec_net_stream_init_context (player);
 
   swfdec_as_context_run_init_script (context, swfdec_initialize, 
-      sizeof (swfdec_initialize), 8);
+      sizeof (swfdec_initialize), version);
 
   sandbox->Function = context->Function;
   sandbox->Function_prototype = context->Function_prototype;
@@ -140,8 +140,6 @@ swfdec_sandbox_set_allow_network (SwfdecSandbox *sandbox, gboolean network)
     sandbox->type = SWFDEC_SANDBOX_REMOTE;
   }
 
-  swfdec_sandbox_initialize (sandbox);
-
   return TRUE;
 }
 
@@ -149,7 +147,7 @@ swfdec_sandbox_set_allow_network (SwfdecSandbox *sandbox, gboolean network)
  * swfdec_sandbox_get_for_url:
  * @player: a #SwfdecPlayer
  * @url: the URL this player refers to
- * @allow_network: %TRUE to allow network access, false for local access
+ * @flash_version: The Flash version for looking up the sandbox
  * @allow_network: %TRUE to allow network access, %FALSE to only allow local 
  *                 file access. See the documentation of the use_network flag 
  *                 of the SWF FileAttributes tag for what that means.
@@ -164,11 +162,12 @@ swfdec_sandbox_set_allow_network (SwfdecSandbox *sandbox, gboolean network)
  **/
 SwfdecSandbox *
 swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url,
-    gboolean allow_network)
+    guint flash_version, gboolean allow_network)
 {
   SwfdecPlayerPrivate *priv;
   SwfdecSandbox *sandbox;
   SwfdecURL *real;
+  guint as_version;
 
   g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
   g_return_val_if_fail (url != NULL, NULL);
@@ -177,9 +176,14 @@ swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url,
   real = swfdec_url_new_components (swfdec_url_get_protocol (url),
       swfdec_url_get_host (url), swfdec_url_get_port (url), NULL, NULL);
 
+  as_version = flash_version < 7 ? 1 : 2;
+  /* FIXME: look up by as version */
   sandbox = g_hash_table_lookup (priv->sandboxes, real);
   if (sandbox) {
     swfdec_url_free (real);
+
+    if (!swfdec_sandbox_set_allow_network (sandbox, allow_network))
+      return NULL;
   } else {
     SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player);
     guint size = sizeof (SwfdecSandbox);
@@ -189,10 +193,14 @@ swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url,
     sandbox = g_object_new (SWFDEC_TYPE_SANDBOX, NULL);
     swfdec_as_object_add (SWFDEC_AS_OBJECT (sandbox), context, size);
     sandbox->url = real;
+    sandbox->as_version = as_version;
+  
+    if (!swfdec_sandbox_set_allow_network (sandbox, allow_network))
+      return NULL;
+
+    swfdec_sandbox_initialize (sandbox, flash_version);
   }
 
-  if (!swfdec_sandbox_set_allow_network (sandbox, allow_network))
-    return NULL;
 
   return sandbox;
 }
diff --git a/libswfdec/swfdec_sandbox.h b/libswfdec/swfdec_sandbox.h
index 1ae30fd..6fda9b7 100644
--- a/libswfdec/swfdec_sandbox.h
+++ b/libswfdec/swfdec_sandbox.h
@@ -50,6 +50,7 @@ struct _SwfdecSandbox
 
   SwfdecSandboxType	type;			/* type of this sandbox */
   SwfdecURL *		url;			/* URL this sandbox acts for */
+  guint			as_version;		/* Actionscript version */
 
   /* global cached objects from context */
   SwfdecAsObject *	Function;		/* Function */
@@ -71,6 +72,7 @@ GType			swfdec_sandbox_get_type		(void);
 
 SwfdecSandbox *		swfdec_sandbox_get_for_url	(SwfdecPlayer *	  	player,
 							 const SwfdecURL *	url,
+							 guint			flash_version,
 							 gboolean		allow_network);
 
 void			swfdec_sandbox_use		(SwfdecSandbox *	sandbox);
commit 8e7acb562663dffcb6e52bb9075e19fa7f9bb532
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 14:39:49 2008 +0100

    fix NEtStream to remember its sandbox

diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c
index 01566ad..1502a28 100644
--- a/libswfdec/swfdec_net_stream.c
+++ b/libswfdec/swfdec_net_stream.c
@@ -41,9 +41,12 @@ swfdec_net_stream_onstatus (SwfdecNetStream *stream, const char *code, const cha
   SwfdecAsValue val;
   SwfdecAsObject *object;
 
+  swfdec_sandbox_use (stream->sandbox);
   object = swfdec_as_object_new (SWFDEC_AS_OBJECT (stream)->context);
-  if (!object)
+  if (!object) {
+    swfdec_sandbox_unuse (stream->sandbox);
     return;
+  }
   SWFDEC_INFO ("emitting onStatus for %s %s", level, code);
   SWFDEC_AS_VALUE_SET_STRING (&val, code);
   swfdec_as_object_set_variable (object, SWFDEC_AS_STR_code, &val);
@@ -52,6 +55,7 @@ swfdec_net_stream_onstatus (SwfdecNetStream *stream, const char *code, const cha
 
   SWFDEC_AS_VALUE_SET_OBJECT (&val, object);
   swfdec_as_object_call (SWFDEC_AS_OBJECT (stream), SWFDEC_AS_STR_onStatus, 1, &val, NULL);
+  swfdec_sandbox_unuse (stream->sandbox);
 }
 
 static cairo_surface_t *
@@ -425,6 +429,8 @@ swfdec_net_stream_mark (SwfdecAsObject *object)
 
   if (stream->conn)
     swfdec_as_object_mark (SWFDEC_AS_OBJECT (stream->conn));
+  if (stream->sandbox)
+    swfdec_as_object_mark (SWFDEC_AS_OBJECT (stream->sandbox));
 
   SWFDEC_AS_OBJECT_CLASS (swfdec_net_stream_parent_class)->mark (object);
 }
@@ -483,27 +489,29 @@ swfdec_net_stream_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean all
   } else {
     SWFDEC_WARNING ("SECURITY: no access to %s from NetStream",
 	swfdec_url_get_url (url));
+    stream->sandbox = NULL;
   }
 }
 
 void
-swfdec_net_stream_set_url (SwfdecNetStream *stream, const char *url_string)
+swfdec_net_stream_set_url (SwfdecNetStream *stream, SwfdecSandbox *sandbox, const char *url_string)
 {
   SwfdecPlayer *player;
   SwfdecAsContext *cx;
   SwfdecURL *url;
 
   g_return_if_fail (SWFDEC_IS_NET_STREAM (stream));
+  g_return_if_fail (SWFDEC_IS_SANDBOX (sandbox));
   g_return_if_fail (url != NULL);
 
   cx = SWFDEC_AS_OBJECT (stream)->context;
   player = SWFDEC_PLAYER (cx);
-  g_assert (cx->frame);
   url = swfdec_url_new_relative (swfdec_loader_get_url (player->priv->resource->loader), url_string);
+  stream->sandbox = sandbox;
   if (swfdec_url_is_local (url)) {
     swfdec_net_stream_load (player, url, TRUE, stream);
   } else {
-    switch (SWFDEC_SANDBOX (cx->global)->type) {
+    switch (sandbox->type) {
       case SWFDEC_SANDBOX_REMOTE:
 	swfdec_net_stream_load (player, url, TRUE, stream);
 	break;
@@ -535,10 +543,11 @@ void
 swfdec_net_stream_set_loader (SwfdecNetStream *stream, SwfdecLoader *loader)
 {
   g_return_if_fail (SWFDEC_IS_NET_STREAM (stream));
+  g_return_if_fail (loader == NULL || SWFDEC_IS_SANDBOX (stream->sandbox));
   g_return_if_fail (loader == NULL || SWFDEC_IS_LOADER (loader));
 
   if (stream->loader) {
-    SwfdecStream *lstream = SWFDEC_STREAM (loader);
+    SwfdecStream *lstream = SWFDEC_STREAM (stream->loader);
     swfdec_stream_close (lstream);
     swfdec_stream_set_target (lstream, NULL);
     g_object_unref (lstream);
diff --git a/libswfdec/swfdec_net_stream.h b/libswfdec/swfdec_net_stream.h
index 253f8ce..60a74cd 100644
--- a/libswfdec/swfdec_net_stream.h
+++ b/libswfdec/swfdec_net_stream.h
@@ -26,6 +26,7 @@
 #include <libswfdec/swfdec_net_connection.h>
 #include <libswfdec/swfdec_flv_decoder.h>
 #include <libswfdec/swfdec_player_internal.h>
+#include <libswfdec/swfdec_sandbox.h>
 #include <libswfdec/swfdec_video_movie.h>
 
 G_BEGIN_DECLS
@@ -46,6 +47,7 @@ struct _SwfdecNetStream
 
   SwfdecNetConnection *	conn;		/* connection used for opening streams */
   SwfdecLoader *	loader;		/* input stream */
+  SwfdecSandbox *	sandbox;	/* sandbox to emit events in */
   SwfdecFlvDecoder *	flvdecoder;	/* flv decoder */
   gboolean		playing;	/* TRUE if this stream is playing */
   gboolean		buffering;	/* TRUE if we're waiting for more input data */
@@ -78,6 +80,7 @@ GType			swfdec_net_stream_get_type	(void);
 SwfdecNetStream *	swfdec_net_stream_new		(SwfdecNetConnection *	conn);
 
 void			swfdec_net_stream_set_url	(SwfdecNetStream *	stream,
+							 SwfdecSandbox *	sandbox,
 							 const char *		url);
 void			swfdec_net_stream_set_loader	(SwfdecNetStream *	stream,
 							 SwfdecLoader *		loader);
diff --git a/libswfdec/swfdec_net_stream_as.c b/libswfdec/swfdec_net_stream_as.c
index 470b035..1dce4ba 100644
--- a/libswfdec/swfdec_net_stream_as.c
+++ b/libswfdec/swfdec_net_stream_as.c
@@ -50,7 +50,7 @@ swfdec_net_stream_play (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, Sw
   const char *url;
 
   url = swfdec_as_value_to_string (cx, &argv[0]);
-  swfdec_net_stream_set_url (stream, url);
+  swfdec_net_stream_set_url (stream, SWFDEC_SANDBOX (cx->global), url);
   swfdec_net_stream_set_playing (stream, TRUE);
 }
 
commit ffd24a1c0e77f9d98fcbd2aa9c71f5c3cf5e8824
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 13:05:30 2008 +0100

    fix SEGV

diff --git a/libswfdec/swfdec_xml_socket.c b/libswfdec/swfdec_xml_socket.c
index 2978a2f..886a042 100644
--- a/libswfdec/swfdec_xml_socket.c
+++ b/libswfdec/swfdec_xml_socket.c
@@ -219,7 +219,7 @@ swfdec_xml_socket_connect (SwfdecAsContext *cx, SwfdecAsObject *object,
   const char *host;
   int port;
 
-  SWFDEC_AS_CHECK (0, NULL, "si", host, port);
+  SWFDEC_AS_CHECK (0, NULL, "si", &host, &port);
 
   if (SWFDEC_IS_MOVIE (object) || object == NULL)
     return;
commit ab84805cd92e42f3a9aff3905085cc56b04e30f7
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 12:56:13 2008 +0100

    sandbox will not be NULL anymore here

diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index 7f6920c..e3e90a8 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -77,7 +77,6 @@ swfdec_resource_stream_target_image (SwfdecResource *instance)
   if (SWFDEC_IS_SWF_DECODER (instance->decoder)) {
     SwfdecSwfDecoder *dec = SWFDEC_SWF_DECODER (instance->decoder);
 
-    g_assert (instance->sandbox == NULL);
     instance->sandbox = swfdec_sandbox_get_for_url (player,
 	swfdec_loader_get_url (instance->loader),
 	SWFDEC_SWF_DECODER (instance->decoder)->use_network);
commit 76bbefc2cd2679db09b7a1461d0289dcf53e26a7
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 12:55:28 2008 +0100

    new resources inherit their parent's sandbox, until they're grown up

diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c
index 44ae483..278a067 100644
--- a/libswfdec/swfdec_movie.c
+++ b/libswfdec/swfdec_movie.c
@@ -469,10 +469,6 @@ swfdec_movie_execute (SwfdecMovie *movie, SwfdecEventType condition)
 
   g_return_if_fail (SWFDEC_IS_MOVIE (movie));
 
-  /* when resource is not an SWF file */
-  if (movie->resource->sandbox == NULL)
-    return;
-
   if (SWFDEC_IS_BUTTON_MOVIE (movie)) {
     /* these conditions don't exist for buttons */
     if (condition == SWFDEC_EVENT_CONSTRUCT || condition < SWFDEC_EVENT_PRESS)
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index ec2eaa1..7f6920c 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -542,6 +542,7 @@ swfdec_resource_do_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean al
     resource->clip_loader = load->loader;
     resource->clip_loader_sandbox = load->sandbox;
   }
+  resource->sandbox = load->sandbox;
 
   if (!allowed) {
     SWFDEC_WARNING ("SECURITY: no access to %s from %s",
diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h
index de7409f..fba2f95 100644
--- a/libswfdec/swfdec_resource.h
+++ b/libswfdec/swfdec_resource.h
@@ -48,7 +48,7 @@ struct _SwfdecResource
   SwfdecAsObject      	object;
 
   guint			version;	/* version of this resource */
-  SwfdecSandbox *	sandbox;	/* sandbox this resource belongs to or NULL if not initialized yet */
+  SwfdecSandbox *	sandbox;	/* sandbox this resource belongs to (only NULL for a short time on very first loader) */
   SwfdecSpriteMovie * 	movie;		/* the movie responsible for creating this instance */
 
   SwfdecLoader *	loader;		/* the loader providing data for the decoder */
commit 34887b70ad9a823a6f179564c137d685aef3886f
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 12:44:44 2008 +0100

    use MAXUINT as a version identifier

diff --git a/libswfdec/swfdec_as_context.c b/libswfdec/swfdec_as_context.c
index e5778ef..ccce123 100644
--- a/libswfdec/swfdec_as_context.c
+++ b/libswfdec/swfdec_as_context.c
@@ -558,6 +558,8 @@ swfdec_as_context_init (SwfdecAsContext *context)
 {
   const char *s;
 
+  context->version = G_MAXUINT;
+
   context->strings = g_hash_table_new (g_str_hash, g_str_equal);
   context->objects = g_hash_table_new (g_direct_hash, g_direct_equal);
 
commit 74ecb9317bf463061fb5a86ffa893f8901b6745c
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 12:44:20 2008 +0100

    set the prototype for all movies

diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index 74f6193..ec2eaa1 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -86,8 +86,8 @@ swfdec_resource_stream_target_image (SwfdecResource *instance)
       g_assert (movie->sprite->parse_frame > 0);
       movie->n_frames = movie->sprite->n_frames;
       swfdec_movie_invalidate_last (SWFDEC_MOVIE (movie));
+      swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), instance->sandbox->MovieClip);
       if (swfdec_resource_is_root (instance)) {
-	swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), instance->sandbox->MovieClip);
 	swfdec_movie_initialize (SWFDEC_MOVIE (movie));
 	swfdec_player_perform_actions (player);
       }
commit 41bca6f2ebc547a0550353e4989294300a8cf7cf
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 12:43:40 2008 +0100

    track the sandbox for MovieClipLoader events

diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index 8a9e92e..74f6193 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -148,8 +148,11 @@ swfdec_resource_emit_signal (SwfdecResource *resource, const char *name, gboolea
   }
   if (n_args)
     memcpy (&vals[skip], args, sizeof (SwfdecAsValue) * n_args);
+  /* FIXME: what's the correct sandbox here? */
+  swfdec_sandbox_use (resource->clip_loader_sandbox);
   swfdec_as_object_call (SWFDEC_AS_OBJECT (resource->clip_loader), SWFDEC_AS_STR_broadcastMessage, 
       n_args + skip, vals, NULL);
+  swfdec_sandbox_unuse (resource->clip_loader_sandbox);
 }
 
 static void
@@ -372,10 +375,14 @@ swfdec_resource_mark (SwfdecAsObject *object)
 {
   SwfdecResource *resource = SWFDEC_RESOURCE (object);
 
-  if (resource->clip_loader)
+  if (resource->clip_loader) {
     swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->clip_loader));
+    swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->clip_loader_sandbox));
+  }
   if (resource->sandbox)
     swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->sandbox));
+
+  SWFDEC_AS_OBJECT_CLASS (swfdec_resource_parent_class)->mark (object);
 }
 
 static void
@@ -392,10 +399,6 @@ swfdec_resource_dispose (GObject *object)
     g_object_unref (resource->decoder);
     resource->decoder = NULL;
   }
-  if (resource->clip_loader) {
-    g_object_unref (resource->clip_loader);
-    resource->clip_loader = NULL;
-  }
   g_free (resource->target);
   g_free (resource->variables);
   g_hash_table_destroy (resource->exports);
@@ -535,9 +538,10 @@ swfdec_resource_do_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean al
   swfdec_as_object_add (SWFDEC_AS_OBJECT (resource), SWFDEC_AS_CONTEXT (player), sizeof (SwfdecResource));
   resource->version = 8;
   resource->target = g_strdup (load->target);
-  if (load->loader)
-    resource->clip_loader = g_object_ref (load->loader);
-  swfdec_player_root (player, resource, (GFunc) swfdec_as_object_mark);
+  if (load->loader) {
+    resource->clip_loader = load->loader;
+    resource->clip_loader_sandbox = load->sandbox;
+  }
 
   if (!allowed) {
     SWFDEC_WARNING ("SECURITY: no access to %s from %s",
@@ -547,6 +551,7 @@ swfdec_resource_do_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean al
     return;
   }
 
+  swfdec_player_root (player, resource, (GFunc) swfdec_as_object_mark);
   loader = swfdec_loader_load (player->priv->resource->loader, 
       url, load->request, load->buffer);
   swfdec_resource_set_loader (resource, loader);
@@ -673,9 +678,7 @@ swfdec_resource_emit_on_load_init (SwfdecResource *resource)
   swfdec_resource_emit_signal (resource, SWFDEC_AS_STR_onLoadInit, FALSE, NULL, 0);
   resource->state = SWFDEC_RESOURCE_DONE;
   /* free now unneeded resources */
-  if (resource->clip_loader) {
-    g_object_unref (resource->clip_loader);
-    resource->clip_loader = NULL;
-  }
+  resource->clip_loader = NULL;
+  resource->clip_loader_sandbox = NULL;
   return TRUE;
 }
diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h
index f72da77..de7409f 100644
--- a/libswfdec/swfdec_resource.h
+++ b/libswfdec/swfdec_resource.h
@@ -62,6 +62,7 @@ struct _SwfdecResource
   SwfdecResourceState	state;		/* state we're in (for determining callbacks */
   char *		target;		/* target path we use for signalling */
   SwfdecMovieClipLoader *clip_loader;	/* loader that gets notified about load events */
+  SwfdecSandbox *	clip_loader_sandbox; /* sandbox used for events on the clip loader */
 };
 
 struct _SwfdecResourceClass
commit 839304eb0c7977ebbc153986b3c945f898b5f5e2
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 10:15:56 2008 +0100

    use a sandbox when emitting onScroller

diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c
index 214b345..8f8af44 100644
--- a/libswfdec/swfdec_text_field_movie.c
+++ b/libswfdec/swfdec_text_field_movie.c
@@ -1198,11 +1198,15 @@ swfdec_text_field_movie_iterate (SwfdecMovie *movie)
   if (text->scroll_changed) {
     SwfdecAsValue argv[2];
 
+    SWFDEC_FIXME ("I'm pretty sure this is swfdec_player_add_action()'d");
     SWFDEC_AS_VALUE_SET_STRING (&argv[0], SWFDEC_AS_STR_onScroller);
     SWFDEC_AS_VALUE_SET_OBJECT (&argv[1], SWFDEC_AS_OBJECT (movie));
+    swfdec_sandbox_use (movie->resource->sandbox);
     swfdec_as_object_call (SWFDEC_AS_OBJECT (movie),
 	SWFDEC_AS_STR_broadcastMessage, 2, argv, NULL);
+    swfdec_sandbox_unuse (movie->resource->sandbox);
 
+    /* FIXME: unset this before or after emitting the event? */
     text->scroll_changed = FALSE;
   }
 }
commit 742745f38bb27b173dee7a0bbbbdd96a4f784d46
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 10:15:39 2008 +0100

    don't execute events for movies without sandbox
    
    This happens for movies that have loaded images

diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c
index 278a067..44ae483 100644
--- a/libswfdec/swfdec_movie.c
+++ b/libswfdec/swfdec_movie.c
@@ -469,6 +469,10 @@ swfdec_movie_execute (SwfdecMovie *movie, SwfdecEventType condition)
 
   g_return_if_fail (SWFDEC_IS_MOVIE (movie));
 
+  /* when resource is not an SWF file */
+  if (movie->resource->sandbox == NULL)
+    return;
+
   if (SWFDEC_IS_BUTTON_MOVIE (movie)) {
     /* these conditions don't exist for buttons */
     if (condition == SWFDEC_EVENT_CONSTRUCT || condition < SWFDEC_EVENT_PRESS)
commit 1abaa70c4a2f39d46d6c121c9db6e72d97830e1e
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 09:44:17 2008 +0100

    add extra check to catch a common error case

diff --git a/libswfdec/swfdec_as_object.c b/libswfdec/swfdec_as_object.c
index 4b8ae76..3004f63 100644
--- a/libswfdec/swfdec_as_object.c
+++ b/libswfdec/swfdec_as_object.c
@@ -1230,6 +1230,7 @@ swfdec_as_object_call (SwfdecAsObject *object, const char *name, guint argc,
   g_return_if_fail (SWFDEC_IS_AS_OBJECT (object));
   g_return_if_fail (name != NULL);
   g_return_if_fail (argc == 0 || argv != NULL);
+  g_return_if_fail (object->context->global != NULL); /* for SwfdecPlayer */
 
   if (return_value)
     SWFDEC_AS_VALUE_SET_UNDEFINED (return_value);
commit e8a740b5dea82de346194e110a7b94bc5792e65d
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 09:38:56 2008 +0100

    we're not a SwfdecAsObject anymore

diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index f9acafe..642e256 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -36,7 +36,7 @@
 static SwfdecPlayer *
 swfdec_load_object_stream_target_get_player (SwfdecStreamTarget *target)
 {
-  return SWFDEC_PLAYER (SWFDEC_AS_OBJECT (target)->context);
+  return SWFDEC_PLAYER (SWFDEC_LOAD_OBJECT (target)->target->context);
 }
 
 static void
@@ -47,8 +47,10 @@ swfdec_load_object_stream_target_parse (SwfdecStreamTarget *target,
   SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (target);
 
   if (load_object->progress != NULL) {
+    swfdec_sandbox_use (load_object->sandbox);
     load_object->progress (load_object->target,
 	swfdec_loader_get_loaded (loader), swfdec_loader_get_size (loader));
+    swfdec_sandbox_unuse (load_object->sandbox);
   }
 }
 
@@ -65,11 +67,13 @@ swfdec_load_object_stream_target_error (SwfdecStreamTarget *target,
   g_object_unref (loader);
 
   /* call finish */
+  swfdec_sandbox_use (load_object->sandbox);
   load_object->finish (load_object->target, NULL);
+  swfdec_sandbox_unuse (load_object->sandbox);
 
   /* unroot */
   swfdec_player_unroot (SWFDEC_PLAYER (
-	SWFDEC_AS_OBJECT (load_object)->context), load_object);
+	SWFDEC_AS_OBJECT (load_object->sandbox)->context), load_object);
 }
 
 static void
@@ -90,16 +94,18 @@ swfdec_load_object_stream_target_close (SwfdecStreamTarget *target,
   g_object_unref (loader);
 
   /* call finish */
+  swfdec_sandbox_use (load_object->sandbox);
   if (text != NULL) {
     load_object->finish (load_object->target, 
 	swfdec_as_context_give_string (load_object->target->context, text));
   } else {
     load_object->finish (load_object->target, SWFDEC_AS_STR_EMPTY);
   }
+  swfdec_sandbox_unuse (load_object->sandbox);
 
   /* unroot */
   swfdec_player_unroot (SWFDEC_PLAYER (
-	SWFDEC_AS_OBJECT (load_object)->context), load_object);
+	SWFDEC_AS_OBJECT (load_object->sandbox)->context), load_object);
 }
 
 static void
commit 2a5f9385c6a93a583d7f7a15d109fc44ffb7b161
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 09:38:46 2008 +0100

    replace the movie with the right resource

diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index d5a1856..8a9e92e 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -216,7 +216,7 @@ swfdec_resource_create_movie (SwfdecResource *resource)
     movie = swfdec_player_create_movie_at_level (player, resource, level);
   } else {
     /* FIXME: is this correct? */
-    movie = swfdec_resource_replace_movie (movie, SWFDEC_MOVIE (movie)->resource);
+    movie = swfdec_resource_replace_movie (movie, resource);
   }
   swfdec_player_unroot (player, resource);
   return TRUE;
commit 9d3d043fd6a007b52bed48f754c357221ba45ce0
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 09:28:49 2008 +0100

    add swfdc_sandbox_try_use() and use it

diff --git a/libswfdec/swfdec_sandbox.c b/libswfdec/swfdec_sandbox.c
index 4802fa9..bdc7bf1 100644
--- a/libswfdec/swfdec_sandbox.c
+++ b/libswfdec/swfdec_sandbox.c
@@ -226,6 +226,32 @@ swfdec_sandbox_use (SwfdecSandbox *sandbox)
 }
 
 /**
+ * swfdec_sandbox_try_use:
+ * @sandbox: the sandbox to use
+ *
+ * Makes sure a sandbox is in use. If no sandbox is in use currently, use the
+ * given @sandbox. This function is intended for cases where code can be called
+ * from both inside scripts with a sandbox already set or outside with no 
+ * sandbox in use.
+ *
+ * Returns: %TRUE if the new sandbox will be used. You need to call 
+ *          swfdec_sandbox_unuse() afterwards. %FALSE if a sandbox is already in
+ *          use.
+ **/
+gboolean
+swfdec_sandbox_try_use (SwfdecSandbox *sandbox)
+{
+  g_return_val_if_fail (SWFDEC_IS_SANDBOX (sandbox), FALSE);
+  g_return_val_if_fail (sandbox->type != SWFDEC_SANDBOX_NONE, FALSE);
+
+  if (SWFDEC_AS_OBJECT (sandbox)->context->global)
+    return FALSE;
+
+  swfdec_sandbox_use (sandbox);
+  return TRUE;
+}
+
+/**
  * swfdec_sandbox_unuse:
  * @sandbox: a #SwfdecSandbox
  *
diff --git a/libswfdec/swfdec_sandbox.h b/libswfdec/swfdec_sandbox.h
index 3079f75..1ae30fd 100644
--- a/libswfdec/swfdec_sandbox.h
+++ b/libswfdec/swfdec_sandbox.h
@@ -74,6 +74,7 @@ SwfdecSandbox *		swfdec_sandbox_get_for_url	(SwfdecPlayer *	  	player,
 							 gboolean		allow_network);
 
 void			swfdec_sandbox_use		(SwfdecSandbox *	sandbox);
+gboolean		swfdec_sandbox_try_use		(SwfdecSandbox *	sandbox);
 void			swfdec_sandbox_unuse		(SwfdecSandbox *	sandbox);
 
 G_END_DECLS
diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c
index bc8cdb6..214b345 100644
--- a/libswfdec/swfdec_text_field_movie.c
+++ b/libswfdec/swfdec_text_field_movie.c
@@ -30,10 +30,12 @@
 #include "swfdec_as_context.h"
 #include "swfdec_as_strings.h"
 #include "swfdec_as_interpret.h"
-#include "swfdec_text_format.h"
-#include "swfdec_xml.h"
 #include "swfdec_debug.h"
 #include "swfdec_player_internal.h"
+#include "swfdec_resource.h"
+#include "swfdec_sandbox.h"
+#include "swfdec_text_format.h"
+#include "swfdec_xml.h"
 
 G_DEFINE_TYPE (SwfdecTextFieldMovie, swfdec_text_field_movie, SWFDEC_TYPE_MOVIE)
 
@@ -1118,6 +1120,9 @@ swfdec_text_field_movie_init_movie (SwfdecMovie *movie)
   SwfdecTextFieldMovie *text = SWFDEC_TEXT_FIELD_MOVIE (movie);
   SwfdecAsContext *cx;
   SwfdecAsValue val;
+  gboolean needs_unuse;
+
+  needs_unuse = swfdec_sandbox_try_use (movie->resource->sandbox);
 
   cx = SWFDEC_AS_OBJECT (movie)->context;
 
@@ -1138,7 +1143,7 @@ swfdec_text_field_movie_init_movie (SwfdecMovie *movie)
   text->format_new =
     SWFDEC_TEXT_FORMAT (swfdec_text_format_new_no_properties (cx));
   if (!text->format_new)
-    return;
+    goto out;
 
   swfdec_text_format_set_defaults (text->format_new);
   text->format_new->color = text->text->color;
@@ -1171,6 +1176,10 @@ swfdec_text_field_movie_init_movie (SwfdecMovie *movie)
     swfdec_text_field_movie_set_listen_variable (text,
 	swfdec_as_context_get_string (cx, text->text->variable));
   }
+
+out:
+  if (needs_unuse)
+    swfdec_sandbox_unuse (movie->resource->sandbox);
 }
 
 static void
commit 7bc307ee9736b60007952628ebd475147c7196b8
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 09:28:33 2008 +0100

    parse exports names with the version of their Flash file

diff --git a/libswfdec/swfdec_sprite_movie.c b/libswfdec/swfdec_sprite_movie.c
index 2eaafe6..e014ece 100644
--- a/libswfdec/swfdec_sprite_movie.c
+++ b/libswfdec/swfdec_sprite_movie.c
@@ -418,12 +418,14 @@ swfdec_sprite_movie_perform_one_action (SwfdecSpriteMovie *movie, guint tag, Swf
 	count = swfdec_bits_get_u16 (&bits);
 	SWFDEC_LOG ("exporting %u assets", count);
 	for (i = 0; i < count && swfdec_bits_left (&bits); i++) {
+	  SwfdecSwfDecoder *s = SWFDEC_SWF_DECODER (resource->decoder);
 	  guint id;
 	  SwfdecCharacter *object;
 	  char *name;
+
 	  id = swfdec_bits_get_u16 (&bits);
-	  object = swfdec_swf_decoder_get_character (SWFDEC_SWF_DECODER (resource->decoder), id);
-	  name = swfdec_bits_get_string (&bits, SWFDEC_AS_CONTEXT (player)->version);
+	  object = swfdec_swf_decoder_get_character (s, id);
+	  name = swfdec_bits_get_string (&bits, s->version);
 	  if (object == NULL) {
 	    SWFDEC_ERROR ("cannot export id %u as %s, id wasn't found", id, name);
 	  } else if (name == NULL) {
commit b8f07a87e1ab3ee64523a62442c5b40dab460c35
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Jan 21 08:42:26 2008 +0100

    loads of fixes to get further in the testsuite.
    
    We're at letter "C" now.

diff --git a/libswfdec/swfdec_as_context.c b/libswfdec/swfdec_as_context.c
index f572239..e5778ef 100644
--- a/libswfdec/swfdec_as_context.c
+++ b/libswfdec/swfdec_as_context.c
@@ -362,12 +362,16 @@ swfdec_as_context_mark_roots (gpointer key, gpointer value, gpointer data)
 static void
 swfdec_as_context_do_mark (SwfdecAsContext *context)
 {
-  swfdec_as_object_mark (context->global);
-  swfdec_as_value_mark (&context->exception_value);
-  swfdec_as_object_mark (context->Function);
-  swfdec_as_object_mark (context->Function_prototype);
-  swfdec_as_object_mark (context->Object);
-  swfdec_as_object_mark (context->Object_prototype);
+  /* This if is needed for SwfdecPlayer */
+  if (context->global) {
+    swfdec_as_object_mark (context->global);
+    swfdec_as_object_mark (context->Function);
+    swfdec_as_object_mark (context->Function_prototype);
+    swfdec_as_object_mark (context->Object);
+    swfdec_as_object_mark (context->Object_prototype);
+  }
+  if (context->exception)
+    swfdec_as_value_mark (&context->exception_value);
   g_hash_table_foreach (context->objects, swfdec_as_context_mark_roots, NULL);
 }
 
@@ -1388,7 +1392,8 @@ swfdec_as_context_startup (SwfdecAsContext *context)
   g_return_if_fail (SWFDEC_IS_AS_CONTEXT (context));
   g_return_if_fail (context->state == SWFDEC_AS_CONTEXT_NEW);
 
-  if (!swfdec_as_stack_push_segment (context))
+  if (context->cur == NULL &&
+      !swfdec_as_stack_push_segment (context))
     return;
   if (context->global == NULL)
     context->global = swfdec_as_object_new_empty (context);
diff --git a/libswfdec/swfdec_as_object.c b/libswfdec/swfdec_as_object.c
index babcd27..4b8ae76 100644
--- a/libswfdec/swfdec_as_object.c
+++ b/libswfdec/swfdec_as_object.c
@@ -1339,25 +1339,23 @@ void
 swfdec_as_object_set_constructor (SwfdecAsObject *object, SwfdecAsObject *construct)
 {
   SwfdecAsValue val;
-  SwfdecAsObject *proto;
 
   g_return_if_fail (SWFDEC_IS_AS_OBJECT (object));
   g_return_if_fail (SWFDEC_IS_AS_OBJECT (construct));
 
+  SWFDEC_AS_VALUE_SET_OBJECT (&val, construct);
+  swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR_constructor, 
+      &val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
   swfdec_as_object_get_variable (SWFDEC_AS_OBJECT (construct),
       SWFDEC_AS_STR_prototype, &val);
   if (SWFDEC_AS_VALUE_IS_OBJECT (&val)) {
-    proto = SWFDEC_AS_VALUE_GET_OBJECT (&val);
+    SwfdecAsObject *proto = SWFDEC_AS_VALUE_GET_OBJECT (&val);
+    SWFDEC_AS_VALUE_SET_OBJECT (&val, proto);
+    swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR___proto__, 
+	&val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
   } else {
-    SWFDEC_WARNING ("constructor has no prototype, using Object.prototype");
-    proto = object->context->Object_prototype;
+    SWFDEC_WARNING ("constructor has no prototype, not setting any");
   }
-  SWFDEC_AS_VALUE_SET_OBJECT (&val, construct);
-  swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR_constructor, 
-      &val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
-  SWFDEC_AS_VALUE_SET_OBJECT (&val, proto);
-  swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR___proto__, 
-      &val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
 }
 
 /**
diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c
index 2f45345..278a067 100644
--- a/libswfdec/swfdec_movie.c
+++ b/libswfdec/swfdec_movie.c
@@ -423,7 +423,7 @@ swfdec_movie_set_constructor (SwfdecSpriteMovie *movie)
     }
   }
   if (constructor == NULL)
-    constructor = SWFDEC_PLAYER (context)->priv->MovieClip;
+    constructor = mov->resource->sandbox->MovieClip;
 
   swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), constructor);
 }
@@ -498,14 +498,14 @@ swfdec_movie_execute (SwfdecMovie *movie, SwfdecEventType condition)
     swfdec_event_list_execute (movie->events, thisp, condition, 0);
   }
   /* FIXME: how do we compute the version correctly here? */
-  if (swfdec_movie_get_version (movie) <= 5)
-    return;
-  name = swfdec_event_type_get_name (condition);
-  if (name != NULL) {
-    swfdec_as_object_call (SWFDEC_AS_OBJECT (movie), name, 0, NULL, NULL);
+  if (swfdec_movie_get_version (movie) > 5) {
+    name = swfdec_event_type_get_name (condition);
+    if (name != NULL) {
+      swfdec_as_object_call (SWFDEC_AS_OBJECT (movie), name, 0, NULL, NULL);
+    }
+    if (condition == SWFDEC_EVENT_CONSTRUCT)
+      swfdec_as_object_call (thisp, SWFDEC_AS_STR_constructor, 0, NULL, NULL);
   }
-  if (condition == SWFDEC_EVENT_CONSTRUCT)
-    swfdec_as_object_call (thisp, SWFDEC_AS_STR_constructor, 0, NULL, NULL);
   swfdec_sandbox_unuse (movie->resource->sandbox);
 }
 
@@ -1014,10 +1014,6 @@ swfdec_movie_dispose (GObject *object)
   g_assert (movie->list == NULL);
 
   SWFDEC_LOG ("disposing movie %s (depth %d)", movie->name, movie->depth);
-  if (movie->resource) {
-    g_object_unref (movie->resource);
-    movie->resource = NULL;
-  }
   if (movie->events) {
     swfdec_event_list_free (movie->events);
     movie->events = NULL;
@@ -1579,7 +1575,7 @@ swfdec_movie_new (SwfdecPlayer *player, int depth, SwfdecMovie *parent, SwfdecRe
   g_object_ref (movie);
   /* set essential properties */
   movie->parent = parent;
-  movie->resource = g_object_ref (resource);
+  movie->resource = resource;
   if (parent) {
     parent->list = g_list_insert_sorted (parent->list, movie, swfdec_movie_compare_depths);
     SWFDEC_DEBUG ("inserting %s %s (depth %d) into %s %p", G_OBJECT_TYPE_NAME (movie), movie->name,
@@ -1686,6 +1682,7 @@ swfdec_movie_set_static_properties (SwfdecMovie *movie, const cairo_matrix_t *tr
  * Creates a duplicate of @movie. The duplicate will not be initialized or
  * queued up for any events. You have to do this manually. In particular calling
  * swfdec_movie_initialize() on the returned movie must be done.
+ * This function must be called from within a script.
  *
  * Returns: a newly created movie or %NULL on error
  **/
@@ -1693,6 +1690,7 @@ SwfdecMovie *
 swfdec_movie_duplicate (SwfdecMovie *movie, const char *name, int depth)
 {
   SwfdecMovie *parent, *copy;
+  SwfdecSandbox *sandbox;
 
   g_return_val_if_fail (SWFDEC_IS_MOVIE (movie), NULL);
   g_return_val_if_fail (name != NULL, NULL);
@@ -1714,12 +1712,15 @@ swfdec_movie_duplicate (SwfdecMovie *movie, const char *name, int depth)
   swfdec_movie_set_static_properties (copy, &movie->original_transform,
       &movie->original_ctrans, movie->original_ratio, movie->clip_depth, 
       movie->blend_mode, movie->events);
+  sandbox = SWFDEC_SANDBOX (SWFDEC_AS_OBJECT (movie)->context->global);
+  swfdec_sandbox_unuse (sandbox);
   if (SWFDEC_IS_SPRITE_MOVIE (copy)) {
     swfdec_movie_queue_script (copy, SWFDEC_EVENT_INITIALIZE);
     swfdec_movie_queue_script (copy, SWFDEC_EVENT_LOAD);
     swfdec_movie_execute (copy, SWFDEC_EVENT_CONSTRUCT);
   }
   swfdec_movie_initialize (copy);
+  swfdec_sandbox_use (sandbox);
   return copy;
 }
 
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 3393514..231b27a 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -882,10 +882,6 @@ swfdec_player_dispose (GObject *object)
 
   while (priv->roots)
     swfdec_movie_destroy (priv->roots->data);
-  if (priv->resource) {
-    g_object_unref (priv->resource);
-    priv->resource = NULL;
-  }
 
   swfdec_function_list_clear (&priv->rooted);
   /* we do this here so references to GC'd objects get freed */
@@ -1525,11 +1521,10 @@ swfdec_player_mark (SwfdecAsContext *context)
 
   g_hash_table_foreach (priv->registered_classes, swfdec_player_mark_string_object, NULL);
   g_hash_table_foreach (priv->scripting_callbacks, swfdec_player_mark_string_object, NULL);
-  swfdec_as_object_mark (priv->MovieClip);
-  swfdec_as_object_mark (priv->Video);
   g_list_foreach (priv->roots, (GFunc) swfdec_as_object_mark, NULL);
   g_list_foreach (priv->intervals, (GFunc) swfdec_as_object_mark, NULL);
   swfdec_function_list_execute (&priv->rooted, player);
+  swfdec_as_object_mark (SWFDEC_AS_OBJECT (priv->resource));
 
   SWFDEC_AS_CONTEXT_CLASS (swfdec_player_parent_class)->mark (context);
 }
@@ -2046,7 +2041,7 @@ swfdec_player_get_export_class (SwfdecPlayer *player, const char *name)
     SWFDEC_LOG ("found registered class %p for %s", ret, name);
     return ret;
   }
-  return priv->MovieClip;
+  return NULL;
 }
 
 /**
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index fe08454..8c9e819 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -92,8 +92,6 @@ struct _SwfdecPlayerPrivate
   guint			interval_id;		/* id returned from setInterval call */
   GList *		intervals;		/* all currently running intervals */
   GHashTable *		registered_classes;	/* name => SwfdecAsObject constructor */
-  SwfdecAsObject *	MovieClip;		/* MovieClip object */
-  SwfdecAsObject *	Video;			/* Video object */
 
   /* rendering */
   SwfdecRectangle     	invalid_extents;      	/* extents of area that needs a redraw in global coordinates */
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index 30baaa4..d5a1856 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -68,6 +68,7 @@ swfdec_resource_stream_target_get_player (SwfdecStreamTarget *target)
 static void
 swfdec_resource_stream_target_image (SwfdecResource *instance)
 {
+  SwfdecPlayer *player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (instance)->context);
   SwfdecSpriteMovie *movie = instance->movie;
 
   if (movie->sprite != NULL)
@@ -76,15 +77,17 @@ swfdec_resource_stream_target_image (SwfdecResource *instance)
   if (SWFDEC_IS_SWF_DECODER (instance->decoder)) {
     SwfdecSwfDecoder *dec = SWFDEC_SWF_DECODER (instance->decoder);
 
-    if (swfdec_sandbox_set_allow_network (instance->sandbox, 
-	  SWFDEC_SWF_DECODER (instance->decoder)->use_network)) {
+    g_assert (instance->sandbox == NULL);
+    instance->sandbox = swfdec_sandbox_get_for_url (player,
+	swfdec_loader_get_url (instance->loader),
+	SWFDEC_SWF_DECODER (instance->decoder)->use_network);
+    if (instance->sandbox) {
       movie->sprite = dec->main_sprite;
       g_assert (movie->sprite->parse_frame > 0);
       movie->n_frames = movie->sprite->n_frames;
       swfdec_movie_invalidate_last (SWFDEC_MOVIE (movie));
       if (swfdec_resource_is_root (instance)) {
-	SwfdecPlayer *player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (instance)->context);
-	swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), player->priv->MovieClip);
+	swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), instance->sandbox->MovieClip);
 	swfdec_movie_initialize (SWFDEC_MOVIE (movie));
 	swfdec_player_perform_actions (player);
       }
@@ -371,7 +374,8 @@ swfdec_resource_mark (SwfdecAsObject *object)
 
   if (resource->clip_loader)
     swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->clip_loader));
-  swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->sandbox));
+  if (resource->sandbox)
+    swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->sandbox));
 }
 
 static void
@@ -540,11 +544,10 @@ swfdec_resource_do_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean al
 	load->url, swfdec_url_get_url (load->sandbox->url));
     /* FIXME: is replacing correct? */
     swfdec_resource_emit_error (resource, SWFDEC_AS_STR_IllegalRequest);
-    g_object_unref (resource);
     return;
   }
 
-  loader = swfdec_loader_load (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (load->sandbox))->priv->resource->loader, 
+  loader = swfdec_loader_load (player->priv->resource->loader, 
       url, load->request, load->buffer);
   swfdec_resource_set_loader (resource, loader);
   g_object_unref (loader);
diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h
index c7d9544..f72da77 100644
--- a/libswfdec/swfdec_resource.h
+++ b/libswfdec/swfdec_resource.h
@@ -48,7 +48,7 @@ struct _SwfdecResource
   SwfdecAsObject      	object;
 
   guint			version;	/* version of this resource */
-  SwfdecSandbox *	sandbox;	/* sandbox this resource belongs to */
+  SwfdecSandbox *	sandbox;	/* sandbox this resource belongs to or NULL if not initialized yet */
   SwfdecSpriteMovie * 	movie;		/* the movie responsible for creating this instance */
 
   SwfdecLoader *	loader;		/* the loader providing data for the decoder */
diff --git a/libswfdec/swfdec_sandbox.c b/libswfdec/swfdec_sandbox.c
index 41b4301..4802fa9 100644
--- a/libswfdec/swfdec_sandbox.c
+++ b/libswfdec/swfdec_sandbox.c
@@ -44,58 +44,35 @@
  * it as the global object.
  */
 
-G_DEFINE_TYPE (SwfdecSandbox, swfdec_sandbox, G_TYPE_OBJECT)
+G_DEFINE_TYPE (SwfdecSandbox, swfdec_sandbox, SWFDEC_TYPE_AS_OBJECT)
 
 static void
-swfdec_sandbox_class_init (SwfdecSandboxClass *klass)
+swfdec_sandbox_mark (SwfdecAsObject *object)
 {
+  SwfdecSandbox *sandbox = SWFDEC_SANDBOX (object);
+
+  swfdec_as_object_mark (sandbox->Function);
+  swfdec_as_object_mark (sandbox->Function_prototype);
+  swfdec_as_object_mark (sandbox->Object);
+  swfdec_as_object_mark (sandbox->Object_prototype);
+  swfdec_as_object_mark (sandbox->MovieClip);
+  swfdec_as_object_mark (sandbox->Video);
+
+  SWFDEC_AS_OBJECT_CLASS (swfdec_sandbox_parent_class)->mark (object);
 }
 
 static void
-swfdec_sandbox_init (SwfdecSandbox *sandbox)
+swfdec_sandbox_class_init (SwfdecSandboxClass *klass)
 {
-  sandbox->type = SWFDEC_SANDBOX_NONE;
+  SwfdecAsObjectClass *asobject_class = SWFDEC_AS_OBJECT_CLASS (klass);
+
+  asobject_class->mark = swfdec_sandbox_mark;
 }
 
-/**
- * swfdec_sandbox_get_for_url:
- * @player: a #SwfdecPlayer
- * @url: the URL this player refers to
- *
- * Checks if a sandbox is already in use for a given URL and if so, returns it.
- * Otherwise a new sandbox is created, initialized and returned.
- * Note that the given url must be a HTTP, HTTPS or a FILE url.
- *
- * Returns: the sandbox corresponding to the given URL.
- **/
-SwfdecSandbox *
-swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url)
+static void
+swfdec_sandbox_init (SwfdecSandbox *sandbox)
 {
-  SwfdecPlayerPrivate *priv;
-  SwfdecSandbox *sandbox;
-  SwfdecURL *real;
-
-  g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
-  g_return_val_if_fail (url != NULL, NULL);
-
-  priv = player->priv;
-  real = swfdec_url_new_components (swfdec_url_get_protocol (url),
-      swfdec_url_get_host (url), swfdec_url_get_port (url), NULL, NULL);
-
-  sandbox = g_hash_table_lookup (priv->sandboxes, real);
-  if (sandbox) {
-    swfdec_url_free (real);
-  } else {
-    SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player);
-    guint size = sizeof (SwfdecSandbox);
-    if (!swfdec_as_context_use_mem (context, size))
-      size = 0;
-
-    sandbox = g_object_new (SWFDEC_TYPE_SANDBOX, NULL);
-    swfdec_as_object_add (SWFDEC_AS_OBJECT (sandbox), context, size);
-    sandbox->url = real;
-  }
-  return sandbox;
+  sandbox->type = SWFDEC_SANDBOX_NONE;
 }
 
 static void
@@ -118,6 +95,11 @@ swfdec_sandbox_initialize (SwfdecSandbox *sandbox)
   swfdec_as_context_run_init_script (context, swfdec_initialize, 
       sizeof (swfdec_initialize), 8);
 
+  sandbox->Function = context->Function;
+  sandbox->Function_prototype = context->Function_prototype;
+  sandbox->Object = context->Object;
+  sandbox->Object_prototype = context->Object_prototype;
+
   if (context->state == SWFDEC_AS_CONTEXT_NEW)
     context->state = SWFDEC_AS_CONTEXT_RUNNING;
   swfdec_sandbox_unuse (sandbox);
@@ -125,18 +107,13 @@ swfdec_sandbox_initialize (SwfdecSandbox *sandbox)
 /**
  * swfdec_sandbox_set_allow_network:
  * @sandbox: a #SwfdecSandbox
- * @network: %TRUE to allow network access, %FALSE to only allow local file 
- *           access. See the documentation of the use_network flag of the SWF
- *           FileAttributes tag for what that means.
- *
- * This function finishes initialization of the @sandbox, if it is not yet 
  * finished, by giving the sandbox network or local file access. This function
  * should be called on all return values of swfdec_sandbox_get_for_url().
  *
  * Returns: %TRUE if the sandbox initialization could be finished as requested,
  *          %FALSE if not and it shouldn't be used.
  **/
-gboolean
+static gboolean
 swfdec_sandbox_set_allow_network (SwfdecSandbox *sandbox, gboolean network)
 {
   g_return_val_if_fail (SWFDEC_IS_SANDBOX (sandbox), FALSE);
@@ -169,6 +146,58 @@ swfdec_sandbox_set_allow_network (SwfdecSandbox *sandbox, gboolean network)
 }
 
 /**
+ * swfdec_sandbox_get_for_url:
+ * @player: a #SwfdecPlayer
+ * @url: the URL this player refers to
+ * @allow_network: %TRUE to allow network access, false for local access
+ * @allow_network: %TRUE to allow network access, %FALSE to only allow local 
+ *                 file access. See the documentation of the use_network flag 
+ *                 of the SWF FileAttributes tag for what that means.
+ *
+ *
+ * Checks if a sandbox is already in use for a given URL and if so, returns it.
+ * Otherwise a new sandbox is created, initialized and returned.
+ * Note that the given url must be a HTTP, HTTPS or a FILE url.
+ *
+ * Returns: the sandbox corresponding to the given URL or %NULL if no such 
+ *          sandbox is allowed.
+ **/
+SwfdecSandbox *
+swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url,
+    gboolean allow_network)
+{
+  SwfdecPlayerPrivate *priv;
+  SwfdecSandbox *sandbox;
+  SwfdecURL *real;
+
+  g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
+  g_return_val_if_fail (url != NULL, NULL);
+
+  priv = player->priv;
+  real = swfdec_url_new_components (swfdec_url_get_protocol (url),
+      swfdec_url_get_host (url), swfdec_url_get_port (url), NULL, NULL);
+
+  sandbox = g_hash_table_lookup (priv->sandboxes, real);
+  if (sandbox) {
+    swfdec_url_free (real);
+  } else {
+    SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player);
+    guint size = sizeof (SwfdecSandbox);
+    if (!swfdec_as_context_use_mem (context, size))
+      size = 0;
+
+    sandbox = g_object_new (SWFDEC_TYPE_SANDBOX, NULL);
+    swfdec_as_object_add (SWFDEC_AS_OBJECT (sandbox), context, size);
+    sandbox->url = real;
+  }
+
+  if (!swfdec_sandbox_set_allow_network (sandbox, allow_network))
+    return NULL;
+
+  return sandbox;
+}
+
+/**
  * swfdec_sandbox_use:
  * @sandbox: the sandbox to use when executing scripts
  *
@@ -179,11 +208,21 @@ swfdec_sandbox_set_allow_network (SwfdecSandbox *sandbox, gboolean network)
 void
 swfdec_sandbox_use (SwfdecSandbox *sandbox)
 {
+  SwfdecAsContext *context;
+  SwfdecPlayerPrivate *priv;
+
   g_return_if_fail (SWFDEC_IS_SANDBOX (sandbox));
-  g_return_if_fail (sandbox->type == SWFDEC_SANDBOX_NONE);
+  g_return_if_fail (sandbox->type != SWFDEC_SANDBOX_NONE);
   g_return_if_fail (SWFDEC_AS_OBJECT (sandbox)->context->global == NULL);
 
-  SWFDEC_AS_OBJECT (sandbox)->context->global = SWFDEC_AS_OBJECT (sandbox);
+  context = SWFDEC_AS_OBJECT (sandbox)->context;
+  priv = SWFDEC_PLAYER (context)->priv;
+  context->global = SWFDEC_AS_OBJECT (sandbox);
+
+  context->Function = sandbox->Function;
+  context->Function_prototype = sandbox->Function_prototype;
+  context->Object = sandbox->Object;
+  context->Object_prototype = sandbox->Object_prototype;
 }
 
 /**
@@ -195,10 +234,16 @@ swfdec_sandbox_use (SwfdecSandbox *sandbox)
 void
 swfdec_sandbox_unuse (SwfdecSandbox *sandbox)
 {
+  SwfdecAsContext *context;
+
   g_return_if_fail (SWFDEC_IS_SANDBOX (sandbox));
-  g_return_if_fail (sandbox->type == SWFDEC_SANDBOX_NONE);
   g_return_if_fail (SWFDEC_AS_OBJECT (sandbox)->context->global == SWFDEC_AS_OBJECT (sandbox));
 
-  SWFDEC_AS_OBJECT (sandbox)->context->global = NULL;
+  context = SWFDEC_AS_OBJECT (sandbox)->context;
+  context->global = NULL;
+  context->Function = NULL;
+  context->Function_prototype = NULL;
+  context->Object = NULL;
+  context->Object_prototype = NULL;
 }
 
diff --git a/libswfdec/swfdec_sandbox.h b/libswfdec/swfdec_sandbox.h
index eaf27de..3079f75 100644
--- a/libswfdec/swfdec_sandbox.h
+++ b/libswfdec/swfdec_sandbox.h
@@ -48,8 +48,18 @@ struct _SwfdecSandbox
 {
   SwfdecAsObject      	object;
 
-  SwfdecSandboxType	type;		/* type of this sandbox */
-  SwfdecURL *		url;		/* URL this sandbox acts for */
+  SwfdecSandboxType	type;			/* type of this sandbox */
+  SwfdecURL *		url;			/* URL this sandbox acts for */
+
+  /* global cached objects from context */
+  SwfdecAsObject *	Function;		/* Function */
+  SwfdecAsObject *	Function_prototype;	/* Function.prototype */
+  SwfdecAsObject *	Object;			/* Object */
+  SwfdecAsObject *	Object_prototype;	/* Object.prototype */
+
+  /* global player objects */
+  SwfdecAsObject *	MovieClip;		/* MovieClip object */
+  SwfdecAsObject *	Video;			/* Video object */
 };
 
 struct _SwfdecSandboxClass
@@ -60,10 +70,8 @@ struct _SwfdecSandboxClass
 GType			swfdec_sandbox_get_type		(void);
 
 SwfdecSandbox *		swfdec_sandbox_get_for_url	(SwfdecPlayer *	  	player,
-							 const SwfdecURL *	url);
-
-gboolean		swfdec_sandbox_set_allow_network(SwfdecSandbox *	sandbox,
-							 gboolean		network);
+							 const SwfdecURL *	url,
+							 gboolean		allow_network);
 
 void			swfdec_sandbox_use		(SwfdecSandbox *	sandbox);
 void			swfdec_sandbox_unuse		(SwfdecSandbox *	sandbox);
diff --git a/libswfdec/swfdec_sprite_movie.c b/libswfdec/swfdec_sprite_movie.c
index 791f985..2eaafe6 100644
--- a/libswfdec/swfdec_sprite_movie.c
+++ b/libswfdec/swfdec_sprite_movie.c
@@ -460,7 +460,8 @@ swfdec_sprite_movie_perform_one_action (SwfdecSpriteMovie *movie, guint tag, Swf
 	  return TRUE;
 	}
 	name = g_strdup_printf ("InitAction %u", id);
-	sprite->init_action = swfdec_script_new_from_bits (&bits, name, SWFDEC_AS_CONTEXT (player)->version);
+	sprite->init_action = swfdec_script_new_from_bits (&bits, name, 
+	    swfdec_movie_get_version (mov));
 	g_free (name);
 	if (sprite->init_action) {
 	  swfdec_player_add_action_script (player, mov, sprite->init_action, 0);
@@ -639,10 +640,10 @@ swfdec_sprite_movie_init_movie (SwfdecMovie *mov)
 static void
 swfdec_sprite_movie_add (SwfdecAsObject *object)
 {
-  SwfdecPlayer *player = SWFDEC_PLAYER (object->context);
+  SwfdecMovie *movie = SWFDEC_MOVIE (object);
 
-  if (player->priv->MovieClip)
-    swfdec_as_object_set_constructor (object, player->priv->MovieClip);
+  if (movie->resource->sandbox)
+    swfdec_as_object_set_constructor (object, movie->resource->sandbox->MovieClip);
 
   SWFDEC_AS_OBJECT_CLASS (swfdec_sprite_movie_parent_class)->add (object);
 }
diff --git a/libswfdec/swfdec_sprite_movie_as.c b/libswfdec/swfdec_sprite_movie_as.c
index 987a97e..03f2a21 100644
--- a/libswfdec/swfdec_sprite_movie_as.c
+++ b/libswfdec/swfdec_sprite_movie_as.c
@@ -671,10 +671,13 @@ swfdec_sprite_movie_init_from_object (SwfdecMovie *movie,
   }
 
   if (SWFDEC_IS_SPRITE_MOVIE (movie)) {
+    SwfdecSandbox *sandbox = movie->resource->sandbox;
     swfdec_movie_queue_script (movie, SWFDEC_EVENT_INITIALIZE);
     swfdec_movie_queue_script (movie, SWFDEC_EVENT_LOAD);
+    swfdec_sandbox_unuse (sandbox);
     swfdec_movie_initialize (movie);
     swfdec_movie_execute (movie, SWFDEC_EVENT_CONSTRUCT);
+    swfdec_sandbox_use (sandbox);
   } else {
     swfdec_movie_initialize (movie);
   }
@@ -869,20 +872,20 @@ swfdec_sprite_movie_setMask (SwfdecAsContext *cx, SwfdecAsObject *object,
 void
 swfdec_sprite_movie_init_context (SwfdecPlayer *player)
 {
-  SwfdecPlayerPrivate *priv = player->priv;
   SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player);
   SwfdecAsValue val;
-  SwfdecAsObject *proto;
+  SwfdecAsObject *proto, *movie;
 
-  priv->MovieClip = SWFDEC_AS_OBJECT (swfdec_as_object_add_function (context->global, 
+  movie = SWFDEC_AS_OBJECT (swfdec_as_object_add_function (context->global, 
       SWFDEC_AS_STR_MovieClip, 0, NULL, 0));
-  if (priv->MovieClip == NULL)
+  if (movie == NULL)
     return;
+  SWFDEC_SANDBOX (context->global)->MovieClip = movie;
   proto = swfdec_as_object_new (context);
   if (!proto)
     return;
   SWFDEC_AS_VALUE_SET_OBJECT (&val, proto);
-  swfdec_as_object_set_variable_and_flags (priv->MovieClip,
+  swfdec_as_object_set_variable_and_flags (movie,
       SWFDEC_AS_STR_prototype, &val, SWFDEC_AS_VARIABLE_HIDDEN |
       SWFDEC_AS_VARIABLE_PERMANENT);
 };
diff --git a/libswfdec/swfdec_video_movie.c b/libswfdec/swfdec_video_movie.c
index 046befb..b77379a 100644
--- a/libswfdec/swfdec_video_movie.c
+++ b/libswfdec/swfdec_video_movie.c
@@ -23,6 +23,7 @@
 
 #include "swfdec_video_movie.h"
 #include "swfdec_player_internal.h"
+#include "swfdec_resource.h"
 
 G_DEFINE_TYPE (SwfdecVideoMovie, swfdec_video_movie, SWFDEC_TYPE_MOVIE)
 
@@ -129,9 +130,7 @@ swfdec_video_movie_invalidate (SwfdecMovie *movie, const cairo_matrix_t *matrix,
 static void
 swfdec_video_movie_init_movie (SwfdecMovie *movie)
 {
-  SwfdecPlayer *player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (movie)->context);
-
-  swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), player->priv->Video);
+  swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), movie->resource->sandbox->Video);
 }
 
 static void
diff --git a/libswfdec/swfdec_video_movie_as.c b/libswfdec/swfdec_video_movie_as.c
index 91f9c7e..ecc7a28 100644
--- a/libswfdec/swfdec_video_movie_as.c
+++ b/libswfdec/swfdec_video_movie_as.c
@@ -22,12 +22,13 @@
 #endif
 
 #include "swfdec_video.h"
+#include "swfdec_as_internal.h"
 #include "swfdec_as_strings.h"
 #include "swfdec_debug.h"
 #include "swfdec_internal.h"
 #include "swfdec_net_stream.h"
 #include "swfdec_player_internal.h"
-#include "swfdec_as_internal.h"
+#include "swfdec_sandbox.h"
 
 SWFDEC_AS_NATIVE (667, 1, swfdec_video_attach_video)
 void
@@ -74,7 +75,7 @@ swfdec_video_movie_init_context (SwfdecPlayer *player)
       SWFDEC_AS_STR_Video, 0, NULL, 0));
   if (video == NULL)
     return;
-  player->priv->Video = video;
+  SWFDEC_SANDBOX (context->global)->Video = video;
   proto = swfdec_as_object_new_empty (context);
   if (proto == NULL)
     return;
commit 16378e17f47f0ceeca203471040abc69359a7a7b
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Jan 20 17:13:11 2008 +0100

    set dump to a default value - no uninitialized variables please

diff --git a/test/swfdec_test.c b/test/swfdec_test.c
index 3974f4b..957b35b 100644
--- a/test/swfdec_test.c
+++ b/test/swfdec_test.c
@@ -77,7 +77,7 @@ main (int argc, char **argv)
   SwfdecScript *script;
   SwfdecAsValue val;
   int i, ret;
-  gboolean dump;
+  gboolean dump = FALSE;
 
   GOptionEntry options[] = {
     { "dump", 'd', 0, G_OPTION_ARG_NONE, &dump, "dump images on failure", FALSE },
commit 1d351e5cd7105c00a2bea80671e99622c5fe7e76
Author: Benjamin Otte <otte at gnome.org>
Date:   Sat Jan 19 22:14:19 2008 +0100

    and add the swfdec_sandbox.[ch] files

diff --git a/libswfdec/swfdec_sandbox.c b/libswfdec/swfdec_sandbox.c
new file mode 100644
index 0000000..41b4301
--- /dev/null
+++ b/libswfdec/swfdec_sandbox.c
@@ -0,0 +1,204 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "swfdec_sandbox.h"
+#include "swfdec_as_internal.h"
+#include "swfdec_debug.h"
+#include "swfdec_initialize.h"
+#include "swfdec_internal.h"
+#include "swfdec_player_internal.h"
+
+/*** GTK-DOC ***/
+
+/**
+ * SECTION:SwfdecSandbox
+ * @title: SwfdecSandbox
+ * @short_description: global object used for security
+ *
+ * The SwfdecSandbox object is a garbage-collected script object that does two
+ * things. The simple thing is its use as the global object while code is 
+ * executed in a #SwfdecPlayer. So you can always assume that the global object
+ * is a #SwfdecSandbox. The second task it fulfills is acting as the security
+ * mechanism used by native functions to determine if a given action should be
+ * allowed or not. This is easy, because script functions can always refer to
+ * it as the global object.
+ */
+
+G_DEFINE_TYPE (SwfdecSandbox, swfdec_sandbox, G_TYPE_OBJECT)
+
+static void
+swfdec_sandbox_class_init (SwfdecSandboxClass *klass)
+{
+}
+
+static void
+swfdec_sandbox_init (SwfdecSandbox *sandbox)
+{
+  sandbox->type = SWFDEC_SANDBOX_NONE;
+}
+
+/**
+ * swfdec_sandbox_get_for_url:
+ * @player: a #SwfdecPlayer
+ * @url: the URL this player refers to
+ *
+ * Checks if a sandbox is already in use for a given URL and if so, returns it.
+ * Otherwise a new sandbox is created, initialized and returned.
+ * Note that the given url must be a HTTP, HTTPS or a FILE url.
+ *
+ * Returns: the sandbox corresponding to the given URL.
+ **/
+SwfdecSandbox *
+swfdec_sandbox_get_for_url (SwfdecPlayer *player, const SwfdecURL *url)
+{
+  SwfdecPlayerPrivate *priv;
+  SwfdecSandbox *sandbox;
+  SwfdecURL *real;
+
+  g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
+  g_return_val_if_fail (url != NULL, NULL);
+
+  priv = player->priv;
+  real = swfdec_url_new_components (swfdec_url_get_protocol (url),
+      swfdec_url_get_host (url), swfdec_url_get_port (url), NULL, NULL);
+
+  sandbox = g_hash_table_lookup (priv->sandboxes, real);
+  if (sandbox) {
+    swfdec_url_free (real);
+  } else {
+    SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player);
+    guint size = sizeof (SwfdecSandbox);
+    if (!swfdec_as_context_use_mem (context, size))
+      size = 0;
+
+    sandbox = g_object_new (SWFDEC_TYPE_SANDBOX, NULL);
+    swfdec_as_object_add (SWFDEC_AS_OBJECT (sandbox), context, size);
+    sandbox->url = real;
+  }
+  return sandbox;
+}
+
+static void
+swfdec_sandbox_initialize (SwfdecSandbox *sandbox)
+{
+  SwfdecAsContext *context = SWFDEC_AS_OBJECT (sandbox)->context;
+  SwfdecPlayer *player = SWFDEC_PLAYER (context);
+
+  swfdec_sandbox_use (sandbox);
+  if (context->state == SWFDEC_AS_CONTEXT_RUNNING)
+    context->state = SWFDEC_AS_CONTEXT_NEW;
+  swfdec_as_context_startup (context);
+  /* reset state for initialization */
+  /* FIXME: have a better way to do this */
+  context->state = SWFDEC_AS_CONTEXT_NEW;
+  swfdec_sprite_movie_init_context (player);
+  swfdec_video_movie_init_context (player);
+  swfdec_net_stream_init_context (player);
+
+  swfdec_as_context_run_init_script (context, swfdec_initialize, 
+      sizeof (swfdec_initialize), 8);
+
+  if (context->state == SWFDEC_AS_CONTEXT_NEW)
+    context->state = SWFDEC_AS_CONTEXT_RUNNING;
+  swfdec_sandbox_unuse (sandbox);
+}
+/**
+ * swfdec_sandbox_set_allow_network:
+ * @sandbox: a #SwfdecSandbox
+ * @network: %TRUE to allow network access, %FALSE to only allow local file 
+ *           access. See the documentation of the use_network flag of the SWF
+ *           FileAttributes tag for what that means.
+ *
+ * This function finishes initialization of the @sandbox, if it is not yet 
+ * finished, by giving the sandbox network or local file access. This function
+ * should be called on all return values of swfdec_sandbox_get_for_url().
+ *
+ * Returns: %TRUE if the sandbox initialization could be finished as requested,
+ *          %FALSE if not and it shouldn't be used.
+ **/
+gboolean
+swfdec_sandbox_set_allow_network (SwfdecSandbox *sandbox, gboolean network)
+{
+  g_return_val_if_fail (SWFDEC_IS_SANDBOX (sandbox), FALSE);
+
+  switch (sandbox->type) {
+    case SWFDEC_SANDBOX_REMOTE:
+      return TRUE;
+    case SWFDEC_SANDBOX_LOCAL_FILE:
+      return !network;
+    case SWFDEC_SANDBOX_LOCAL_NETWORK:
+      return network;
+    case SWFDEC_SANDBOX_LOCAL_TRUSTED:
+      return TRUE;
+    case SWFDEC_SANDBOX_NONE:
+      break;
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+
+  if (swfdec_url_is_local (sandbox->url)) {
+    sandbox->type = network ? SWFDEC_SANDBOX_LOCAL_NETWORK : SWFDEC_SANDBOX_LOCAL_FILE;
+  } else {
+    sandbox->type = SWFDEC_SANDBOX_REMOTE;
+  }
+
+  swfdec_sandbox_initialize (sandbox);
+
+  return TRUE;
+}
+
+/**
+ * swfdec_sandbox_use:
+ * @sandbox: the sandbox to use when executing scripts
+ *
+ * Sets @sandbox to be used for scripts that are going to be executed next. No
+ * sandbox may be set yet. You must unset the sandbox with 
+ * swfdec_sandbox_unuse() after calling your script.
+ **/
+void
+swfdec_sandbox_use (SwfdecSandbox *sandbox)
+{
+  g_return_if_fail (SWFDEC_IS_SANDBOX (sandbox));
+  g_return_if_fail (sandbox->type == SWFDEC_SANDBOX_NONE);
+  g_return_if_fail (SWFDEC_AS_OBJECT (sandbox)->context->global == NULL);
+
+  SWFDEC_AS_OBJECT (sandbox)->context->global = SWFDEC_AS_OBJECT (sandbox);
+}
+
+/**
+ * swfdec_sandbox_unuse:
+ * @sandbox: a #SwfdecSandbox
+ *
+ * Unsets the sandbox as the current sandbox for executing scripts.
+ **/
+void
+swfdec_sandbox_unuse (SwfdecSandbox *sandbox)
+{
+  g_return_if_fail (SWFDEC_IS_SANDBOX (sandbox));
+  g_return_if_fail (sandbox->type == SWFDEC_SANDBOX_NONE);
+  g_return_if_fail (SWFDEC_AS_OBJECT (sandbox)->context->global == SWFDEC_AS_OBJECT (sandbox));
+
+  SWFDEC_AS_OBJECT (sandbox)->context->global = NULL;
+}
+
diff --git a/libswfdec/swfdec_sandbox.h b/libswfdec/swfdec_sandbox.h
new file mode 100644
index 0000000..eaf27de
--- /dev/null
+++ b/libswfdec/swfdec_sandbox.h
@@ -0,0 +1,72 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifndef _SWFDEC_SANDBOX_H_
+#define _SWFDEC_SANDBOX_H_
+
+#include <libswfdec/swfdec_as_object.h>
+#include <libswfdec/swfdec_url.h>
+#include <libswfdec/swfdec_player.h>
+
+G_BEGIN_DECLS
+
+typedef struct _SwfdecSandbox SwfdecSandbox;
+typedef struct _SwfdecSandboxClass SwfdecSandboxClass;
+
+typedef enum {
+  SWFDEC_SANDBOX_NONE,
+  SWFDEC_SANDBOX_REMOTE,
+  SWFDEC_SANDBOX_LOCAL_FILE,
+  SWFDEC_SANDBOX_LOCAL_NETWORK,
+  SWFDEC_SANDBOX_LOCAL_TRUSTED
+} SwfdecSandboxType;
+
+#define SWFDEC_TYPE_SANDBOX                    (swfdec_sandbox_get_type())
+#define SWFDEC_IS_SANDBOX(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_SANDBOX))
+#define SWFDEC_IS_SANDBOX_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_SANDBOX))
+#define SWFDEC_SANDBOX(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_SANDBOX, SwfdecSandbox))
+#define SWFDEC_SANDBOX_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_SANDBOX, SwfdecSandboxClass))
+#define SWFDEC_SANDBOX_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_SANDBOX, SwfdecSandboxClass))
+
+struct _SwfdecSandbox
+{
+  SwfdecAsObject      	object;
+
+  SwfdecSandboxType	type;		/* type of this sandbox */
+  SwfdecURL *		url;		/* URL this sandbox acts for */
+};
+
+struct _SwfdecSandboxClass
+{
+  SwfdecAsObjectClass 	object_class;
+};
+
+GType			swfdec_sandbox_get_type		(void);
+
+SwfdecSandbox *		swfdec_sandbox_get_for_url	(SwfdecPlayer *	  	player,
+							 const SwfdecURL *	url);
+
+gboolean		swfdec_sandbox_set_allow_network(SwfdecSandbox *	sandbox,
+							 gboolean		network);
+
+void			swfdec_sandbox_use		(SwfdecSandbox *	sandbox);
+void			swfdec_sandbox_unuse		(SwfdecSandbox *	sandbox);
+
+G_END_DECLS
+#endif
commit 38281800817046a652cd2688d11e2933edef36a9
Author: Benjamin Otte <otte at gnome.org>
Date:   Sat Jan 19 22:14:02 2008 +0100

    regen swfdec_initialize.h
    
    forgot that before

diff --git a/libswfdec/swfdec_initialize.h b/libswfdec/swfdec_initialize.h
index 466c667..ba99e38 100644
--- a/libswfdec/swfdec_initialize.h
+++ b/libswfdec/swfdec_initialize.h
@@ -2,7 +2,7 @@
 
 /* compiled from swfdec_initialize.as */
 static const unsigned char swfdec_initialize[] = {
-  0x88, 0x35, 0x21, 0x08,  0x02, 0x41, 0x53, 0x53,  0x65, 0x74, 0x50, 0x72,  0x6F, 0x70, 0x46, 0x6C,
+  0x88, 0x4F, 0x21, 0x0A,  0x02, 0x41, 0x53, 0x53,  0x65, 0x74, 0x50, 0x72,  0x6F, 0x70, 0x46, 0x6C,
   0x61, 0x67, 0x73, 0x00,  0x41, 0x53, 0x6E, 0x61,  0x74, 0x69, 0x76, 0x65,  0x00, 0x41, 0x53, 0x53,
   0x65, 0x74, 0x4E, 0x61,  0x74, 0x69, 0x76, 0x65,  0x00, 0x41, 0x53, 0x53,  0x65, 0x74, 0x4E, 0x61,
   0x74, 0x69, 0x76, 0x65,  0x41, 0x63, 0x63, 0x65,  0x73, 0x73, 0x6F, 0x72,  0x00, 0x66, 0x6C, 0x61,
@@ -252,1919 +252,1925 @@ static const unsigned char swfdec_initialize[] = {
   0x2C, 0x37, 0x70, 0x61,  0x72, 0x73, 0x65, 0x43,  0x53, 0x53, 0x49, 0x6E,  0x74, 0x65, 0x72, 0x6E,
   0x61, 0x6C, 0x2C, 0x37,  0x70, 0x61, 0x72, 0x73,  0x65, 0x43, 0x53, 0x53,  0x46, 0x6F, 0x6E, 0x74,
   0x46, 0x61, 0x6D, 0x69,  0x6C, 0x79, 0x2C, 0x37,  0x70, 0x61, 0x72, 0x73,  0x65, 0x43, 0x6F, 0x6C,
-  0x6F, 0x72, 0x00, 0x41,  0x63, 0x63, 0x65, 0x73,  0x73, 0x69, 0x62, 0x69,  0x6C, 0x69, 0x74, 0x79,
-  0x00, 0x36, 0x69, 0x73,  0x41, 0x63, 0x74, 0x69,  0x76, 0x65, 0x2C, 0x36,  0x73, 0x65, 0x6E, 0x64,
-  0x45, 0x76, 0x65, 0x6E,  0x74, 0x2C, 0x36, 0x75,  0x70, 0x64, 0x61, 0x74,  0x65, 0x50, 0x72, 0x6F,
-  0x70, 0x65, 0x72, 0x74,  0x69, 0x65, 0x73, 0x00,  0x43, 0x61, 0x6D, 0x65,  0x72, 0x61, 0x00, 0x67,
-  0x65, 0x74, 0x5F, 0x66,  0x75, 0x6E, 0x63, 0x00,  0x69, 0x6E, 0x64, 0x65,  0x78, 0x00, 0x36, 0x73,
-  0x65, 0x74, 0x4D, 0x6F,  0x64, 0x65, 0x2C, 0x36,  0x73, 0x65, 0x74, 0x51,  0x75, 0x61, 0x6C, 0x69,
-  0x74, 0x79, 0x2C, 0x36,  0x73, 0x65, 0x74, 0x4B,  0x65, 0x79, 0x46, 0x72,  0x61, 0x6D, 0x65, 0x49,
-  0x6E, 0x74, 0x65, 0x72,  0x76, 0x61, 0x6C, 0x2C,  0x36, 0x73, 0x65, 0x74,  0x4D, 0x6F, 0x74, 0x69,
-  0x6F, 0x6E, 0x4C, 0x65,  0x76, 0x65, 0x6C, 0x2C,  0x36, 0x73, 0x65, 0x74,  0x4C, 0x6F, 0x6F, 0x70,
-  0x62, 0x61, 0x63, 0x6B,  0x2C, 0x36, 0x73, 0x65,  0x74, 0x43, 0x75, 0x72,  0x73, 0x6F, 0x72, 0x00,
-  0x6F, 0x6E, 0x53, 0x65,  0x6C, 0x65, 0x63, 0x74,  0x00, 0x63, 0x61, 0x6C,  0x6C, 0x62, 0x61, 0x63,
-  0x6B, 0x00, 0x63, 0x75,  0x73, 0x74, 0x6F, 0x6D,  0x49, 0x74, 0x65, 0x6D,  0x73, 0x00, 0x41, 0x72,
-  0x72, 0x61, 0x79, 0x00,  0x62, 0x75, 0x69, 0x6C,  0x74, 0x49, 0x6E, 0x49,  0x74, 0x65, 0x6D, 0x73,
-  0x00, 0x66, 0x6F, 0x72,  0x77, 0x61, 0x72, 0x64,  0x5F, 0x62, 0x61, 0x63,  0x6B, 0x00, 0x6C, 0x6F,
-  0x6F, 0x70, 0x00, 0x70,  0x6C, 0x61, 0x79, 0x00,  0x70, 0x72, 0x69, 0x6E,  0x74, 0x00, 0x71, 0x75,
-  0x61, 0x6C, 0x69, 0x74,  0x79, 0x00, 0x72, 0x65,  0x77, 0x69, 0x6E, 0x64,  0x00, 0x73, 0x61, 0x76,
-  0x65, 0x00, 0x7A, 0x6F,  0x6F, 0x6D, 0x00, 0x43,  0x6F, 0x6E, 0x74, 0x65,  0x78, 0x74, 0x4D, 0x65,
-  0x6E, 0x75, 0x00, 0x63,  0x6F, 0x70, 0x79, 0x00,  0x68, 0x69, 0x64, 0x65,  0x42, 0x75, 0x69, 0x6C,
-  0x74, 0x49, 0x6E, 0x49,  0x74, 0x65, 0x6D, 0x73,  0x00, 0x63, 0x61, 0x70,  0x74, 0x69, 0x6F, 0x6E,
-  0x00, 0x73, 0x65, 0x70,  0x61, 0x72, 0x61, 0x74,  0x6F, 0x72, 0x42, 0x65,  0x66, 0x6F, 0x72, 0x65,
-  0x00, 0x76, 0x69, 0x73,  0x69, 0x62, 0x6C, 0x65,  0x00, 0x43, 0x6F, 0x6E,  0x74, 0x65, 0x78, 0x74,
-  0x4D, 0x65, 0x6E, 0x75,  0x49, 0x74, 0x65, 0x6D,  0x00, 0x6E, 0x65, 0x74,  0x00, 0x46, 0x69, 0x6C,
-  0x65, 0x52, 0x65, 0x66,  0x65, 0x72, 0x65, 0x6E,  0x63, 0x65, 0x00, 0x63,  0x00, 0x38, 0x62, 0x72,
-  0x6F, 0x77, 0x73, 0x65,  0x2C, 0x38, 0x75, 0x70,  0x6C, 0x6F, 0x61, 0x64,  0x2C, 0x38, 0x64, 0x6F,
-  0x77, 0x6E, 0x6C, 0x6F,  0x61, 0x64, 0x2C, 0x38,  0x63, 0x61, 0x6E, 0x63,  0x65, 0x6C, 0x00, 0x46,
-  0x69, 0x6C, 0x65, 0x52,  0x65, 0x66, 0x65, 0x72,  0x65, 0x6E, 0x63, 0x65,  0x4C, 0x69, 0x73, 0x74,
-  0x00, 0x66, 0x69, 0x6C,  0x65, 0x4C, 0x69, 0x73,  0x74, 0x00, 0x38, 0x62,  0x72, 0x6F, 0x77, 0x73,
-  0x65, 0x00, 0x4C, 0x6F,  0x63, 0x61, 0x6C, 0x43,  0x6F, 0x6E, 0x6E, 0x65,  0x63, 0x74, 0x69, 0x6F,
-  0x6E, 0x00, 0x36, 0x63,  0x6F, 0x6E, 0x6E, 0x65,  0x63, 0x74, 0x2C, 0x36,  0x73, 0x65, 0x6E, 0x64,
-  0x2C, 0x36, 0x63, 0x6C,  0x6F, 0x73, 0x65, 0x2C,  0x36, 0x64, 0x6F, 0x6D,  0x61, 0x69, 0x6E, 0x00,
-  0x4D, 0x69, 0x63, 0x72,  0x6F, 0x70, 0x68, 0x6F,  0x6E, 0x65, 0x00, 0x36,  0x73, 0x65, 0x74, 0x53,
-  0x69, 0x6C, 0x65, 0x6E,  0x63, 0x65, 0x4C, 0x65,  0x76, 0x65, 0x6C, 0x2C,  0x36, 0x73, 0x65, 0x74,
-  0x52, 0x61, 0x74, 0x65,  0x2C, 0x36, 0x73, 0x65,  0x74, 0x47, 0x61, 0x69,  0x6E, 0x2C, 0x36, 0x73,
-  0x65, 0x74, 0x55, 0x73,  0x65, 0x45, 0x63, 0x68,  0x6F, 0x53, 0x75, 0x70,  0x70, 0x72, 0x65, 0x73,
-  0x73, 0x69, 0x6F, 0x6E,  0x00, 0x50, 0x72, 0x69,  0x6E, 0x74, 0x4A, 0x6F,  0x62, 0x00, 0x37, 0x73,
-  0x74, 0x61, 0x72, 0x74,  0x2C, 0x37, 0x61, 0x64,  0x64, 0x50, 0x61, 0x67,  0x65, 0x2C, 0x37, 0x73,
-  0x65, 0x6E, 0x64, 0x00,  0x53, 0x65, 0x6C, 0x65,  0x63, 0x74, 0x69, 0x6F,  0x6E, 0x00, 0x67, 0x65,
-  0x74, 0x42, 0x65, 0x67,  0x69, 0x6E, 0x49, 0x6E,  0x64, 0x65, 0x78, 0x2C,  0x67, 0x65, 0x74, 0x45,
-  0x6E, 0x64, 0x49, 0x6E,  0x64, 0x65, 0x78, 0x2C,  0x67, 0x65, 0x74, 0x43,  0x61, 0x72, 0x65, 0x74,
-  0x49, 0x6E, 0x64, 0x65,  0x78, 0x2C, 0x67, 0x65,  0x74, 0x46, 0x6F, 0x63,  0x75, 0x73, 0x2C, 0x73,
-  0x65, 0x74, 0x46, 0x6F,  0x63, 0x75, 0x73, 0x2C,  0x73, 0x65, 0x74, 0x53,  0x65, 0x6C, 0x65, 0x63,
-  0x74, 0x69, 0x6F, 0x6E,  0x00, 0x74, 0x65, 0x78,  0x74, 0x00, 0x54, 0x65,  0x78, 0x74, 0x52, 0x65,
-  0x6E, 0x64, 0x65, 0x72,  0x65, 0x72, 0x00, 0x38,  0x73, 0x65, 0x74, 0x41,  0x64, 0x76, 0x61, 0x6E,
-  0x63, 0x65, 0x64, 0x41,  0x6E, 0x74, 0x69, 0x61,  0x6C, 0x69, 0x61, 0x73,  0x69, 0x6E, 0x67, 0x54,
-  0x61, 0x62, 0x6C, 0x65,  0x00, 0x38, 0x6D, 0x61,  0x78, 0x4C, 0x65, 0x76,  0x65, 0x6C, 0x00, 0x38,
-  0x64, 0x69, 0x73, 0x70,  0x6C, 0x61, 0x79, 0x4D,  0x6F, 0x64, 0x65, 0x00,  0x74, 0x65, 0x78, 0x74,
-  0x52, 0x65, 0x6E, 0x64,  0x65, 0x72, 0x65, 0x72,  0x00, 0x58, 0x4D, 0x4C,  0x53, 0x6F, 0x63, 0x6B,
-  0x65, 0x74, 0x00, 0x6F,  0x6E, 0x58, 0x4D, 0x4C,  0x00, 0x63, 0x6F, 0x6E,  0x6E, 0x65, 0x63, 0x74,
-  0x2C, 0x73, 0x65, 0x6E,  0x64, 0x2C, 0x63, 0x6C,  0x6F, 0x73, 0x65, 0x00,  0x67, 0x65, 0x6F, 0x6D,
-  0x00, 0x50, 0x6F, 0x69,  0x6E, 0x74, 0x00, 0x61,  0x72, 0x67, 0x75, 0x6D,  0x65, 0x6E, 0x74, 0x73,
-  0x00, 0x79, 0x00, 0x64,  0x69, 0x73, 0x74, 0x61,  0x6E, 0x63, 0x65, 0x00,  0x61, 0x00, 0x62, 0x00,
-  0x73, 0x75, 0x62, 0x74,  0x72, 0x61, 0x63, 0x74,  0x00, 0x69, 0x6E, 0x74,  0x65, 0x72, 0x70, 0x6F,
-  0x6C, 0x61, 0x74, 0x65,  0x00, 0x76, 0x61, 0x6C,  0x75, 0x65, 0x00, 0x70,  0x6F, 0x6C, 0x61, 0x72,
-  0x00, 0x4D, 0x61, 0x74,  0x68, 0x00, 0x61, 0x6E,  0x67, 0x6C, 0x65, 0x00,  0x63, 0x6F, 0x73, 0x00,
-  0x73, 0x69, 0x6E, 0x00,  0x73, 0x71, 0x72, 0x74,  0x00, 0x61, 0x64, 0x64,  0x00, 0x6F, 0x74, 0x68,
-  0x65, 0x72, 0x00, 0x63,  0x6C, 0x6F, 0x6E, 0x65,  0x00, 0x65, 0x71, 0x75,  0x61, 0x6C, 0x73, 0x00,
-  0x6E, 0x6F, 0x72, 0x6D,  0x61, 0x6C, 0x69, 0x7A,  0x65, 0x00, 0x66, 0x61,  0x63, 0x74, 0x6F, 0x72,
-  0x00, 0x6F, 0x66, 0x66,  0x73, 0x65, 0x74, 0x00,  0x28, 0x78, 0x3D, 0x00,  0x2C, 0x20, 0x79, 0x3D,
-  0x00, 0x29, 0x00, 0x52,  0x65, 0x63, 0x74, 0x61,  0x6E, 0x67, 0x6C, 0x65,  0x00, 0x73, 0x65, 0x74,
-  0x45, 0x6D, 0x70, 0x74,  0x79, 0x00, 0x77, 0x69,  0x64, 0x74, 0x68, 0x00,  0x68, 0x65, 0x69, 0x67,
-  0x68, 0x74, 0x00, 0x2C,  0x20, 0x77, 0x3D, 0x00,  0x2C, 0x20, 0x68, 0x3D,  0x00, 0x72, 0x65, 0x63,
-  0x74, 0x00, 0x63, 0x6F,  0x6E, 0x74, 0x61, 0x69,  0x6E, 0x73, 0x00, 0x63,  0x6F, 0x6E, 0x74, 0x61,
-  0x69, 0x6E, 0x73, 0x50,  0x6F, 0x69, 0x6E, 0x74,  0x00, 0x70, 0x6F, 0x69,  0x6E, 0x74, 0x00, 0x63,
-  0x6F, 0x6E, 0x74, 0x61,  0x69, 0x6E, 0x73, 0x52,  0x65, 0x63, 0x74, 0x61,  0x6E, 0x67, 0x6C, 0x65,
-  0x00, 0x74, 0x72, 0x00,  0x74, 0x62, 0x00, 0x72,  0x72, 0x00, 0x72, 0x62,  0x00, 0x69, 0x73, 0x45,
-  0x6D, 0x70, 0x74, 0x79,  0x00, 0x69, 0x6E, 0x74,  0x65, 0x72, 0x73, 0x65,  0x63, 0x74, 0x69, 0x6F,
-  0x6E, 0x00, 0x69, 0x6E,  0x74, 0x73, 0x00, 0x6D,  0x61, 0x78, 0x00, 0x6D,  0x69, 0x6E, 0x00, 0x69,
-  0x6E, 0x74, 0x65, 0x72,  0x73, 0x65, 0x63, 0x74,  0x73, 0x00, 0x75, 0x6E,  0x69, 0x6F, 0x6E, 0x00,
-  0x64, 0x78, 0x00, 0x64,  0x79, 0x00, 0x6F, 0x66,  0x66, 0x73, 0x65, 0x74,  0x50, 0x6F, 0x69, 0x6E,
-  0x74, 0x00, 0x64, 0x00,  0x69, 0x6E, 0x66, 0x6C,  0x61, 0x74, 0x65, 0x00,  0x69, 0x6E, 0x66, 0x6C,
-  0x61, 0x74, 0x65, 0x50,  0x6F, 0x69, 0x6E, 0x74,  0x00, 0x6C, 0x65, 0x66,  0x74, 0x00, 0x72, 0x69,
-  0x67, 0x68, 0x74, 0x00,  0x74, 0x6F, 0x70, 0x00,  0x62, 0x6F, 0x74, 0x74,  0x6F, 0x6D, 0x00, 0x74,
-  0x6F, 0x70, 0x4C, 0x65,  0x66, 0x74, 0x00, 0x62,  0x6F, 0x74, 0x74, 0x6F,  0x6D, 0x52, 0x69, 0x67,
-  0x68, 0x74, 0x00, 0x4D,  0x61, 0x74, 0x72, 0x69,  0x78, 0x00, 0x49, 0x6D,  0x70, 0x6C, 0x65, 0x6D,
-  0x65, 0x6E, 0x74, 0x20,  0x4D, 0x61, 0x74, 0x72,  0x69, 0x78, 0x00, 0x49,  0x6D, 0x70, 0x6C, 0x65,
-  0x6D, 0x65, 0x6E, 0x74,  0x20, 0x4D, 0x61, 0x74,  0x72, 0x69, 0x78, 0x2E,  0x63, 0x6C, 0x6F, 0x6E,
-  0x65, 0x00, 0x63, 0x6F,  0x6E, 0x63, 0x61, 0x74,  0x00, 0x49, 0x6D, 0x70,  0x6C, 0x65, 0x6D, 0x65,
-  0x6E, 0x74, 0x20, 0x4D,  0x61, 0x74, 0x72, 0x69,  0x78, 0x2E, 0x63, 0x6F,  0x6E, 0x63, 0x61, 0x74,
-  0x00, 0x63, 0x72, 0x65,  0x61, 0x74, 0x65, 0x42,  0x6F, 0x78, 0x00, 0x49,  0x6D, 0x70, 0x6C, 0x65,
-  0x6D, 0x65, 0x6E, 0x74,  0x20, 0x4D, 0x61, 0x74,  0x72, 0x69, 0x78, 0x2E,  0x63, 0x72, 0x65, 0x61,
-  0x74, 0x65, 0x42, 0x6F,  0x78, 0x00, 0x63, 0x72,  0x65, 0x61, 0x74, 0x65,  0x47, 0x72, 0x61, 0x64,
-  0x69, 0x65, 0x6E, 0x74,  0x42, 0x6F, 0x78, 0x00,  0x49, 0x6D, 0x70, 0x6C,  0x65, 0x6D, 0x65, 0x6E,
-  0x74, 0x20, 0x4D, 0x61,  0x74, 0x72, 0x69, 0x78,  0x2E, 0x63, 0x72, 0x65,  0x61, 0x74, 0x65, 0x47,
-  0x72, 0x61, 0x64, 0x69,  0x65, 0x6E, 0x74, 0x42,  0x6F, 0x78, 0x00, 0x64,  0x65, 0x6C, 0x74, 0x61,
-  0x54, 0x72, 0x61, 0x6E,  0x73, 0x66, 0x6F, 0x72,  0x6D, 0x50, 0x6F, 0x69,  0x6E, 0x74, 0x00, 0x49,
-  0x6D, 0x70, 0x6C, 0x65,  0x6D, 0x65, 0x6E, 0x74,  0x20, 0x4D, 0x61, 0x74,  0x72, 0x69, 0x78, 0x2E,
-  0x64, 0x65, 0x6C, 0x74,  0x61, 0x54, 0x72, 0x61,  0x6E, 0x73, 0x66, 0x6F,  0x72, 0x6D, 0x50, 0x6F,
-  0x69, 0x6E, 0x74, 0x00,  0x69, 0x64, 0x65, 0x6E,  0x74, 0x69, 0x74, 0x79,  0x00, 0x49, 0x6D, 0x70,
-  0x6C, 0x65, 0x6D, 0x65,  0x6E, 0x74, 0x20, 0x4D,  0x61, 0x74, 0x72, 0x69,  0x78, 0x2E, 0x69, 0x64,
-  0x65, 0x6E, 0x74, 0x69,  0x74, 0x79, 0x00, 0x69,  0x6E, 0x76, 0x65, 0x72,  0x74, 0x00, 0x49, 0x6D,
-  0x70, 0x6C, 0x65, 0x6D,  0x65, 0x6E, 0x74, 0x20,  0x4D, 0x61, 0x74, 0x72,  0x69, 0x78, 0x2E, 0x69,
-  0x6E, 0x76, 0x65, 0x72,  0x74, 0x00, 0x72, 0x6F,  0x74, 0x61, 0x74, 0x65,  0x00, 0x49, 0x6D, 0x70,
-  0x6C, 0x65, 0x6D, 0x65,  0x6E, 0x74, 0x20, 0x4D,  0x61, 0x74, 0x72, 0x69,  0x78, 0x2E, 0x72, 0x6F,
-  0x74, 0x61, 0x74, 0x65,  0x00, 0x73, 0x63, 0x61,  0x6C, 0x65, 0x00, 0x49,  0x6D, 0x70, 0x6C, 0x65,
-  0x6D, 0x65, 0x6E, 0x74,  0x20, 0x4D, 0x61, 0x74,  0x72, 0x69, 0x78, 0x2E,  0x73, 0x63, 0x61, 0x6C,
-  0x65, 0x00, 0x74, 0x72,  0x61, 0x6E, 0x73, 0x66,  0x6F, 0x72, 0x6D, 0x50,  0x6F, 0x69, 0x6E, 0x74,
-  0x00, 0x49, 0x6D, 0x70,  0x6C, 0x65, 0x6D, 0x65,  0x6E, 0x74, 0x20, 0x4D,  0x61, 0x74, 0x72, 0x69,
-  0x78, 0x2E, 0x74, 0x72,  0x61, 0x6E, 0x73, 0x66,  0x6F, 0x72, 0x6D, 0x50,  0x6F, 0x69, 0x6E, 0x74,
-  0x00, 0x74, 0x72, 0x61,  0x6E, 0x73, 0x6C, 0x61,  0x74, 0x65, 0x00, 0x49,  0x6D, 0x70, 0x6C, 0x65,
+  0x6F, 0x72, 0x00, 0x56,  0x69, 0x64, 0x65, 0x6F,  0x00, 0x36, 0x61, 0x74,  0x74, 0x61, 0x63, 0x68,
+  0x56, 0x69, 0x64, 0x65,  0x6F, 0x2C, 0x36, 0x63,  0x6C, 0x65, 0x61, 0x72,  0x00, 0x41, 0x63, 0x63,
+  0x65, 0x73, 0x73, 0x69,  0x62, 0x69, 0x6C, 0x69,  0x74, 0x79, 0x00, 0x36,  0x69, 0x73, 0x41, 0x63,
+  0x74, 0x69, 0x76, 0x65,  0x2C, 0x36, 0x73, 0x65,  0x6E, 0x64, 0x45, 0x76,  0x65, 0x6E, 0x74, 0x2C,
+  0x36, 0x75, 0x70, 0x64,  0x61, 0x74, 0x65, 0x50,  0x72, 0x6F, 0x70, 0x65,  0x72, 0x74, 0x69, 0x65,
+  0x73, 0x00, 0x43, 0x61,  0x6D, 0x65, 0x72, 0x61,  0x00, 0x67, 0x65, 0x74,  0x5F, 0x66, 0x75, 0x6E,
+  0x63, 0x00, 0x69, 0x6E,  0x64, 0x65, 0x78, 0x00,  0x36, 0x73, 0x65, 0x74,  0x4D, 0x6F, 0x64, 0x65,
+  0x2C, 0x36, 0x73, 0x65,  0x74, 0x51, 0x75, 0x61,  0x6C, 0x69, 0x74, 0x79,  0x2C, 0x36, 0x73, 0x65,
+  0x74, 0x4B, 0x65, 0x79,  0x46, 0x72, 0x61, 0x6D,  0x65, 0x49, 0x6E, 0x74,  0x65, 0x72, 0x76, 0x61,
+  0x6C, 0x2C, 0x36, 0x73,  0x65, 0x74, 0x4D, 0x6F,  0x74, 0x69, 0x6F, 0x6E,  0x4C, 0x65, 0x76, 0x65,
+  0x6C, 0x2C, 0x36, 0x73,  0x65, 0x74, 0x4C, 0x6F,  0x6F, 0x70, 0x62, 0x61,  0x63, 0x6B, 0x2C, 0x36,
+  0x73, 0x65, 0x74, 0x43,  0x75, 0x72, 0x73, 0x6F,  0x72, 0x00, 0x6F, 0x6E,  0x53, 0x65, 0x6C, 0x65,
+  0x63, 0x74, 0x00, 0x63,  0x61, 0x6C, 0x6C, 0x62,  0x61, 0x63, 0x6B, 0x00,  0x63, 0x75, 0x73, 0x74,
+  0x6F, 0x6D, 0x49, 0x74,  0x65, 0x6D, 0x73, 0x00,  0x41, 0x72, 0x72, 0x61,  0x79, 0x00, 0x62, 0x75,
+  0x69, 0x6C, 0x74, 0x49,  0x6E, 0x49, 0x74, 0x65,  0x6D, 0x73, 0x00, 0x66,  0x6F, 0x72, 0x77, 0x61,
+  0x72, 0x64, 0x5F, 0x62,  0x61, 0x63, 0x6B, 0x00,  0x6C, 0x6F, 0x6F, 0x70,  0x00, 0x70, 0x6C, 0x61,
+  0x79, 0x00, 0x70, 0x72,  0x69, 0x6E, 0x74, 0x00,  0x71, 0x75, 0x61, 0x6C,  0x69, 0x74, 0x79, 0x00,
+  0x72, 0x65, 0x77, 0x69,  0x6E, 0x64, 0x00, 0x73,  0x61, 0x76, 0x65, 0x00,  0x7A, 0x6F, 0x6F, 0x6D,
+  0x00, 0x43, 0x6F, 0x6E,  0x74, 0x65, 0x78, 0x74,  0x4D, 0x65, 0x6E, 0x75,  0x00, 0x63, 0x6F, 0x70,
+  0x79, 0x00, 0x68, 0x69,  0x64, 0x65, 0x42, 0x75,  0x69, 0x6C, 0x74, 0x49,  0x6E, 0x49, 0x74, 0x65,
+  0x6D, 0x73, 0x00, 0x63,  0x61, 0x70, 0x74, 0x69,  0x6F, 0x6E, 0x00, 0x73,  0x65, 0x70, 0x61, 0x72,
+  0x61, 0x74, 0x6F, 0x72,  0x42, 0x65, 0x66, 0x6F,  0x72, 0x65, 0x00, 0x76,  0x69, 0x73, 0x69, 0x62,
+  0x6C, 0x65, 0x00, 0x43,  0x6F, 0x6E, 0x74, 0x65,  0x78, 0x74, 0x4D, 0x65,  0x6E, 0x75, 0x49, 0x74,
+  0x65, 0x6D, 0x00, 0x6E,  0x65, 0x74, 0x00, 0x46,  0x69, 0x6C, 0x65, 0x52,  0x65, 0x66, 0x65, 0x72,
+  0x65, 0x6E, 0x63, 0x65,  0x00, 0x63, 0x00, 0x38,  0x62, 0x72, 0x6F, 0x77,  0x73, 0x65, 0x2C, 0x38,
+  0x75, 0x70, 0x6C, 0x6F,  0x61, 0x64, 0x2C, 0x38,  0x64, 0x6F, 0x77, 0x6E,  0x6C, 0x6F, 0x61, 0x64,
+  0x2C, 0x38, 0x63, 0x61,  0x6E, 0x63, 0x65, 0x6C,  0x00, 0x46, 0x69, 0x6C,  0x65, 0x52, 0x65, 0x66,
+  0x65, 0x72, 0x65, 0x6E,  0x63, 0x65, 0x4C, 0x69,  0x73, 0x74, 0x00, 0x66,  0x69, 0x6C, 0x65, 0x4C,
+  0x69, 0x73, 0x74, 0x00,  0x38, 0x62, 0x72, 0x6F,  0x77, 0x73, 0x65, 0x00,  0x4C, 0x6F, 0x63, 0x61,
+  0x6C, 0x43, 0x6F, 0x6E,  0x6E, 0x65, 0x63, 0x74,  0x69, 0x6F, 0x6E, 0x00,  0x36, 0x63, 0x6F, 0x6E,
+  0x6E, 0x65, 0x63, 0x74,  0x2C, 0x36, 0x73, 0x65,  0x6E, 0x64, 0x2C, 0x36,  0x63, 0x6C, 0x6F, 0x73,
+  0x65, 0x2C, 0x36, 0x64,  0x6F, 0x6D, 0x61, 0x69,  0x6E, 0x00, 0x4D, 0x69,  0x63, 0x72, 0x6F, 0x70,
+  0x68, 0x6F, 0x6E, 0x65,  0x00, 0x36, 0x73, 0x65,  0x74, 0x53, 0x69, 0x6C,  0x65, 0x6E, 0x63, 0x65,
+  0x4C, 0x65, 0x76, 0x65,  0x6C, 0x2C, 0x36, 0x73,  0x65, 0x74, 0x52, 0x61,  0x74, 0x65, 0x2C, 0x36,
+  0x73, 0x65, 0x74, 0x47,  0x61, 0x69, 0x6E, 0x2C,  0x36, 0x73, 0x65, 0x74,  0x55, 0x73, 0x65, 0x45,
+  0x63, 0x68, 0x6F, 0x53,  0x75, 0x70, 0x70, 0x72,  0x65, 0x73, 0x73, 0x69,  0x6F, 0x6E, 0x00, 0x50,
+  0x72, 0x69, 0x6E, 0x74,  0x4A, 0x6F, 0x62, 0x00,  0x37, 0x73, 0x74, 0x61,  0x72, 0x74, 0x2C, 0x37,
+  0x61, 0x64, 0x64, 0x50,  0x61, 0x67, 0x65, 0x2C,  0x37, 0x73, 0x65, 0x6E,  0x64, 0x00, 0x53, 0x65,
+  0x6C, 0x65, 0x63, 0x74,  0x69, 0x6F, 0x6E, 0x00,  0x67, 0x65, 0x74, 0x42,  0x65, 0x67, 0x69, 0x6E,
+  0x49, 0x6E, 0x64, 0x65,  0x78, 0x2C, 0x67, 0x65,  0x74, 0x45, 0x6E, 0x64,  0x49, 0x6E, 0x64, 0x65,
+  0x78, 0x2C, 0x67, 0x65,  0x74, 0x43, 0x61, 0x72,  0x65, 0x74, 0x49, 0x6E,  0x64, 0x65, 0x78, 0x2C,
+  0x67, 0x65, 0x74, 0x46,  0x6F, 0x63, 0x75, 0x73,  0x2C, 0x73, 0x65, 0x74,  0x46, 0x6F, 0x63, 0x75,
+  0x73, 0x2C, 0x73, 0x65,  0x74, 0x53, 0x65, 0x6C,  0x65, 0x63, 0x74, 0x69,  0x6F, 0x6E, 0x00, 0x74,
+  0x65, 0x78, 0x74, 0x00,  0x54, 0x65, 0x78, 0x74,  0x52, 0x65, 0x6E, 0x64,  0x65, 0x72, 0x65, 0x72,
+  0x00, 0x38, 0x73, 0x65,  0x74, 0x41, 0x64, 0x76,  0x61, 0x6E, 0x63, 0x65,  0x64, 0x41, 0x6E, 0x74,
+  0x69, 0x61, 0x6C, 0x69,  0x61, 0x73, 0x69, 0x6E,  0x67, 0x54, 0x61, 0x62,  0x6C, 0x65, 0x00, 0x38,
+  0x6D, 0x61, 0x78, 0x4C,  0x65, 0x76, 0x65, 0x6C,  0x00, 0x38, 0x64, 0x69,  0x73, 0x70, 0x6C, 0x61,
+  0x79, 0x4D, 0x6F, 0x64,  0x65, 0x00, 0x74, 0x65,  0x78, 0x74, 0x52, 0x65,  0x6E, 0x64, 0x65, 0x72,
+  0x65, 0x72, 0x00, 0x58,  0x4D, 0x4C, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,  0x00, 0x6F, 0x6E, 0x58,
+  0x4D, 0x4C, 0x00, 0x63,  0x6F, 0x6E, 0x6E, 0x65,  0x63, 0x74, 0x2C, 0x73,  0x65, 0x6E, 0x64, 0x2C,
+  0x63, 0x6C, 0x6F, 0x73,  0x65, 0x00, 0x67, 0x65,  0x6F, 0x6D, 0x00, 0x50,  0x6F, 0x69, 0x6E, 0x74,
+  0x00, 0x61, 0x72, 0x67,  0x75, 0x6D, 0x65, 0x6E,  0x74, 0x73, 0x00, 0x79,  0x00, 0x64, 0x69, 0x73,
+  0x74, 0x61, 0x6E, 0x63,  0x65, 0x00, 0x61, 0x00,  0x62, 0x00, 0x73, 0x75,  0x62, 0x74, 0x72, 0x61,
+  0x63, 0x74, 0x00, 0x69,  0x6E, 0x74, 0x65, 0x72,  0x70, 0x6F, 0x6C, 0x61,  0x74, 0x65, 0x00, 0x76,
+  0x61, 0x6C, 0x75, 0x65,  0x00, 0x70, 0x6F, 0x6C,  0x61, 0x72, 0x00, 0x4D,  0x61, 0x74, 0x68, 0x00,
+  0x61, 0x6E, 0x67, 0x6C,  0x65, 0x00, 0x63, 0x6F,  0x73, 0x00, 0x73, 0x69,  0x6E, 0x00, 0x73, 0x71,
+  0x72, 0x74, 0x00, 0x61,  0x64, 0x64, 0x00, 0x6F,  0x74, 0x68, 0x65, 0x72,  0x00, 0x63, 0x6C, 0x6F,
+  0x6E, 0x65, 0x00, 0x65,  0x71, 0x75, 0x61, 0x6C,  0x73, 0x00, 0x6E, 0x6F,  0x72, 0x6D, 0x61, 0x6C,
+  0x69, 0x7A, 0x65, 0x00,  0x66, 0x61, 0x63, 0x74,  0x6F, 0x72, 0x00, 0x6F,  0x66, 0x66, 0x73, 0x65,
+  0x74, 0x00, 0x28, 0x78,  0x3D, 0x00, 0x2C, 0x20,  0x79, 0x3D, 0x00, 0x29,  0x00, 0x52, 0x65, 0x63,
+  0x74, 0x61, 0x6E, 0x67,  0x6C, 0x65, 0x00, 0x73,  0x65, 0x74, 0x45, 0x6D,  0x70, 0x74, 0x79, 0x00,
+  0x77, 0x69, 0x64, 0x74,  0x68, 0x00, 0x68, 0x65,  0x69, 0x67, 0x68, 0x74,  0x00, 0x2C, 0x20, 0x77,
+  0x3D, 0x00, 0x2C, 0x20,  0x68, 0x3D, 0x00, 0x72,  0x65, 0x63, 0x74, 0x00,  0x63, 0x6F, 0x6E, 0x74,
+  0x61, 0x69, 0x6E, 0x73,  0x00, 0x63, 0x6F, 0x6E,  0x74, 0x61, 0x69, 0x6E,  0x73, 0x50, 0x6F, 0x69,
+  0x6E, 0x74, 0x00, 0x70,  0x6F, 0x69, 0x6E, 0x74,  0x00, 0x63, 0x6F, 0x6E,  0x74, 0x61, 0x69, 0x6E,
+  0x73, 0x52, 0x65, 0x63,  0x74, 0x61, 0x6E, 0x67,  0x6C, 0x65, 0x00, 0x74,  0x72, 0x00, 0x74, 0x62,
+  0x00, 0x72, 0x72, 0x00,  0x72, 0x62, 0x00, 0x69,  0x73, 0x45, 0x6D, 0x70,  0x74, 0x79, 0x00, 0x69,
+  0x6E, 0x74, 0x65, 0x72,  0x73, 0x65, 0x63, 0x74,  0x69, 0x6F, 0x6E, 0x00,  0x69, 0x6E, 0x74, 0x73,
+  0x00, 0x6D, 0x61, 0x78,  0x00, 0x6D, 0x69, 0x6E,  0x00, 0x69, 0x6E, 0x74,  0x65, 0x72, 0x73, 0x65,
+  0x63, 0x74, 0x73, 0x00,  0x75, 0x6E, 0x69, 0x6F,  0x6E, 0x00, 0x64, 0x78,  0x00, 0x64, 0x79, 0x00,
+  0x6F, 0x66, 0x66, 0x73,  0x65, 0x74, 0x50, 0x6F,  0x69, 0x6E, 0x74, 0x00,  0x64, 0x00, 0x69, 0x6E,
+  0x66, 0x6C, 0x61, 0x74,  0x65, 0x00, 0x69, 0x6E,  0x66, 0x6C, 0x61, 0x74,  0x65, 0x50, 0x6F, 0x69,
+  0x6E, 0x74, 0x00, 0x6C,  0x65, 0x66, 0x74, 0x00,  0x72, 0x69, 0x67, 0x68,  0x74, 0x00, 0x74, 0x6F,
+  0x70, 0x00, 0x62, 0x6F,  0x74, 0x74, 0x6F, 0x6D,  0x00, 0x74, 0x6F, 0x70,  0x4C, 0x65, 0x66, 0x74,
+  0x00, 0x62, 0x6F, 0x74,  0x74, 0x6F, 0x6D, 0x52,  0x69, 0x67, 0x68, 0x74,  0x00, 0x4D, 0x61, 0x74,
+  0x72, 0x69, 0x78, 0x00,  0x49, 0x6D, 0x70, 0x6C,  0x65, 0x6D, 0x65, 0x6E,  0x74, 0x20, 0x4D, 0x61,
+  0x74, 0x72, 0x69, 0x78,  0x00, 0x49, 0x6D, 0x70,  0x6C, 0x65, 0x6D, 0x65,  0x6E, 0x74, 0x20, 0x4D,
+  0x61, 0x74, 0x72, 0x69,  0x78, 0x2E, 0x63, 0x6C,  0x6F, 0x6E, 0x65, 0x00,  0x63, 0x6F, 0x6E, 0x63,
+  0x61, 0x74, 0x00, 0x49,  0x6D, 0x70, 0x6C, 0x65,  0x6D, 0x65, 0x6E, 0x74,  0x20, 0x4D, 0x61, 0x74,
+  0x72, 0x69, 0x78, 0x2E,  0x63, 0x6F, 0x6E, 0x63,  0x61, 0x74, 0x00, 0x63,  0x72, 0x65, 0x61, 0x74,
+  0x65, 0x42, 0x6F, 0x78,  0x00, 0x49, 0x6D, 0x70,  0x6C, 0x65, 0x6D, 0x65,  0x6E, 0x74, 0x20, 0x4D,
+  0x61, 0x74, 0x72, 0x69,  0x78, 0x2E, 0x63, 0x72,  0x65, 0x61, 0x74, 0x65,  0x42, 0x6F, 0x78, 0x00,
+  0x63, 0x72, 0x65, 0x61,  0x74, 0x65, 0x47, 0x72,  0x61, 0x64, 0x69, 0x65,  0x6E, 0x74, 0x42, 0x6F,
+  0x78, 0x00, 0x49, 0x6D,  0x70, 0x6C, 0x65, 0x6D,  0x65, 0x6E, 0x74, 0x20,  0x4D, 0x61, 0x74, 0x72,
+  0x69, 0x78, 0x2E, 0x63,  0x72, 0x65, 0x61, 0x74,  0x65, 0x47, 0x72, 0x61,  0x64, 0x69, 0x65, 0x6E,
+  0x74, 0x42, 0x6F, 0x78,  0x00, 0x64, 0x65, 0x6C,  0x74, 0x61, 0x54, 0x72,  0x61, 0x6E, 0x73, 0x66,
+  0x6F, 0x72, 0x6D, 0x50,  0x6F, 0x69, 0x6E, 0x74,  0x00, 0x49, 0x6D, 0x70,  0x6C, 0x65, 0x6D, 0x65,
+  0x6E, 0x74, 0x20, 0x4D,  0x61, 0x74, 0x72, 0x69,  0x78, 0x2E, 0x64, 0x65,  0x6C, 0x74, 0x61, 0x54,
+  0x72, 0x61, 0x6E, 0x73,  0x66, 0x6F, 0x72, 0x6D,  0x50, 0x6F, 0x69, 0x6E,  0x74, 0x00, 0x69, 0x64,
+  0x65, 0x6E, 0x74, 0x69,  0x74, 0x79, 0x00, 0x49,  0x6D, 0x70, 0x6C, 0x65,  0x6D, 0x65, 0x6E, 0x74,
+  0x20, 0x4D, 0x61, 0x74,  0x72, 0x69, 0x78, 0x2E,  0x69, 0x64, 0x65, 0x6E,  0x74, 0x69, 0x74, 0x79,
+  0x00, 0x69, 0x6E, 0x76,  0x65, 0x72, 0x74, 0x00,  0x49, 0x6D, 0x70, 0x6C,  0x65, 0x6D, 0x65, 0x6E,
+  0x74, 0x20, 0x4D, 0x61,  0x74, 0x72, 0x69, 0x78,  0x2E, 0x69, 0x6E, 0x76,  0x65, 0x72, 0x74, 0x00,
+  0x72, 0x6F, 0x74, 0x61,  0x74, 0x65, 0x00, 0x49,  0x6D, 0x70, 0x6C, 0x65,  0x6D, 0x65, 0x6E, 0x74,
+  0x20, 0x4D, 0x61, 0x74,  0x72, 0x69, 0x78, 0x2E,  0x72, 0x6F, 0x74, 0x61,  0x74, 0x65, 0x00, 0x73,
+  0x63, 0x61, 0x6C, 0x65,  0x00, 0x49, 0x6D, 0x70,  0x6C, 0x65, 0x6D, 0x65,  0x6E, 0x74, 0x20, 0x4D,
+  0x61, 0x74, 0x72, 0x69,  0x78, 0x2E, 0x73, 0x63,  0x61, 0x6C, 0x65, 0x00,  0x74, 0x72, 0x61, 0x6E,
+  0x73, 0x66, 0x6F, 0x72,  0x6D, 0x50, 0x6F, 0x69,  0x6E, 0x74, 0x00, 0x49,  0x6D, 0x70, 0x6C, 0x65,
   0x6D, 0x65, 0x6E, 0x74,  0x20, 0x4D, 0x61, 0x74,  0x72, 0x69, 0x78, 0x2E,  0x74, 0x72, 0x61, 0x6E,
-  0x73, 0x6C, 0x61, 0x74,  0x65, 0x00, 0x49, 0x6D,  0x70, 0x6C, 0x65, 0x6D,  0x65, 0x6E, 0x74, 0x20,
-  0x4D, 0x61, 0x74, 0x72,  0x69, 0x78, 0x2E, 0x74,  0x6F, 0x53, 0x74, 0x72,  0x69, 0x6E, 0x67, 0x00,
-  0x43, 0x6F, 0x6C, 0x6F,  0x72, 0x54, 0x72, 0x61,  0x6E, 0x73, 0x66, 0x6F,  0x72, 0x6D, 0x00, 0x49,
-  0x6D, 0x70, 0x6C, 0x65,  0x6D, 0x65, 0x6E, 0x74,  0x20, 0x43, 0x6F, 0x6C,  0x6F, 0x72, 0x54, 0x72,
-  0x61, 0x6E, 0x73, 0x66,  0x6F, 0x72, 0x6D, 0x2E,  0x74, 0x6F, 0x53, 0x74,  0x72, 0x69, 0x6E, 0x67,
-  0x00, 0x38, 0x63, 0x6F,  0x6E, 0x63, 0x61, 0x74,  0x00, 0x38, 0x61, 0x6C,  0x70, 0x68, 0x61, 0x4D,
-  0x75, 0x6C, 0x74, 0x69,  0x70, 0x6C, 0x69, 0x65,  0x72, 0x2C, 0x38, 0x72,  0x65, 0x64, 0x4D, 0x75,
-  0x6C, 0x74, 0x69, 0x70,  0x6C, 0x69, 0x65, 0x72,  0x2C, 0x38, 0x67, 0x72,  0x65, 0x65, 0x6E, 0x4D,
-  0x75, 0x6C, 0x74, 0x69,  0x70, 0x6C, 0x69, 0x65,  0x72, 0x2C, 0x38, 0x62,  0x6C, 0x75, 0x65, 0x4D,
-  0x75, 0x6C, 0x74, 0x69,  0x70, 0x6C, 0x69, 0x65,  0x72, 0x2C, 0x38, 0x61,  0x6C, 0x70, 0x68, 0x61,
-  0x4F, 0x66, 0x66, 0x73,  0x65, 0x74, 0x2C, 0x38,  0x72, 0x65, 0x64, 0x4F,  0x66, 0x66, 0x73, 0x65,
-  0x74, 0x2C, 0x38, 0x67,  0x72, 0x65, 0x65, 0x6E,  0x4F, 0x66, 0x66, 0x73,  0x65, 0x74, 0x2C, 0x38,
-  0x62, 0x6C, 0x75, 0x65,  0x4F, 0x66, 0x66, 0x73,  0x65, 0x74, 0x2C, 0x38,  0x72, 0x67, 0x62, 0x00,
-  0x54, 0x72, 0x61, 0x6E,  0x73, 0x66, 0x6F, 0x72,  0x6D, 0x00, 0x38, 0x6D,  0x61, 0x74, 0x72, 0x69,
-  0x78, 0x2C, 0x38, 0x63,  0x6F, 0x6E, 0x63, 0x61,  0x74, 0x65, 0x6E, 0x61,  0x74, 0x65, 0x64, 0x4D,
-  0x61, 0x74, 0x72, 0x69,  0x78, 0x2C, 0x38, 0x63,  0x6F, 0x6C, 0x6F, 0x72,  0x54, 0x72, 0x61, 0x6E,
-  0x73, 0x66, 0x6F, 0x72,  0x6D, 0x2C, 0x38, 0x63,  0x6F, 0x6E, 0x63, 0x61,  0x74, 0x65, 0x6E, 0x61,
-  0x74, 0x65, 0x64, 0x43,  0x6F, 0x6C, 0x6F, 0x72,  0x54, 0x72, 0x61, 0x6E,  0x73, 0x66, 0x6F, 0x72,
-  0x6D, 0x2C, 0x38, 0x70,  0x69, 0x78, 0x65, 0x6C,  0x42, 0x6F, 0x75, 0x6E,  0x64, 0x73, 0x00, 0x42,
-  0x69, 0x74, 0x6D, 0x61,  0x70, 0x44, 0x61, 0x74,  0x61, 0x00, 0x52, 0x45,  0x44, 0x5F, 0x43, 0x48,
-  0x41, 0x4E, 0x4E, 0x45,  0x4C, 0x00, 0x47, 0x52,  0x45, 0x45, 0x4E, 0x5F,  0x43, 0x48, 0x41, 0x4E,
-  0x4E, 0x45, 0x4C, 0x00,  0x42, 0x4C, 0x55, 0x45,  0x5F, 0x43, 0x48, 0x41,  0x4E, 0x4E, 0x45, 0x4C,
-  0x00, 0x41, 0x4C, 0x50,  0x48, 0x41, 0x5F, 0x43,  0x48, 0x41, 0x4E, 0x4E,  0x45, 0x4C, 0x00, 0x38,
-  0x6C, 0x6F, 0x61, 0x64,  0x42, 0x69, 0x74, 0x6D,  0x61, 0x70, 0x00, 0x38,  0x67, 0x65, 0x74, 0x50,
-  0x69, 0x78, 0x65, 0x6C,  0x2C, 0x38, 0x73, 0x65,  0x74, 0x50, 0x69, 0x78,  0x65, 0x6C, 0x2C, 0x38,
-  0x66, 0x69, 0x6C, 0x6C,  0x52, 0x65, 0x63, 0x74,  0x2C, 0x38, 0x63, 0x6F,  0x70, 0x79, 0x50, 0x69,
-  0x78, 0x65, 0x6C, 0x73,  0x2C, 0x38, 0x61, 0x70,  0x70, 0x6C, 0x79, 0x46,  0x69, 0x6C, 0x74, 0x65,
-  0x72, 0x2C, 0x38, 0x73,  0x63, 0x72, 0x6F, 0x6C,  0x6C, 0x2C, 0x38, 0x74,  0x68, 0x72, 0x65, 0x73,
-  0x68, 0x6F, 0x6C, 0x64,  0x2C, 0x38, 0x64, 0x72,  0x61, 0x77, 0x2C, 0x38,  0x70, 0x69, 0x78, 0x65,
-  0x6C, 0x44, 0x69, 0x73,  0x73, 0x6F, 0x6C, 0x76,  0x65, 0x2C, 0x38, 0x67,  0x65, 0x74, 0x50, 0x69,
-  0x78, 0x65, 0x6C, 0x33,  0x32, 0x2C, 0x38, 0x73,  0x65, 0x74, 0x50, 0x69,  0x78, 0x65, 0x6C, 0x33,
-  0x32, 0x2C, 0x38, 0x66,  0x6C, 0x6F, 0x6F, 0x64,  0x46, 0x69, 0x6C, 0x6C,  0x2C, 0x38, 0x67, 0x65,
-  0x74, 0x43, 0x6F, 0x6C,  0x6F, 0x72, 0x42, 0x6F,  0x75, 0x6E, 0x64, 0x73,  0x52, 0x65, 0x63, 0x74,
-  0x2C, 0x38, 0x70, 0x65,  0x72, 0x6C, 0x69, 0x6E,  0x4E, 0x6F, 0x69, 0x73,  0x65, 0x2C, 0x38, 0x63,
-  0x6F, 0x6C, 0x6F, 0x72,  0x54, 0x72, 0x61, 0x6E,  0x73, 0x66, 0x6F, 0x72,  0x6D, 0x2C, 0x38, 0x68,
-  0x69, 0x74, 0x54, 0x65,  0x73, 0x74, 0x2C, 0x38,  0x70, 0x61, 0x6C, 0x65,  0x74, 0x74, 0x65, 0x4D,
-  0x61, 0x70, 0x2C, 0x38,  0x6D, 0x65, 0x72, 0x67,  0x65, 0x2C, 0x38, 0x6E,  0x6F, 0x69, 0x73, 0x65,
-  0x2C, 0x38, 0x63, 0x6F,  0x70, 0x79, 0x43, 0x68,  0x61, 0x6E, 0x6E, 0x65,  0x6C, 0x2C, 0x38, 0x63,
-  0x6C, 0x6F, 0x6E, 0x65,  0x2C, 0x38, 0x64, 0x69,  0x73, 0x70, 0x6F, 0x73,  0x65, 0x2C, 0x38, 0x67,
-  0x65, 0x6E, 0x65, 0x72,  0x61, 0x74, 0x65, 0x46,  0x69, 0x6C, 0x74, 0x65,  0x72, 0x52, 0x65, 0x63,
-  0x74, 0x2C, 0x38, 0x63,  0x6F, 0x6D, 0x70, 0x61,  0x72, 0x65, 0x00, 0x38,  0x77, 0x69, 0x64, 0x74,
-  0x68, 0x2C, 0x38, 0x68,  0x65, 0x69, 0x67, 0x68,  0x74, 0x2C, 0x38, 0x72,  0x65, 0x63, 0x74, 0x61,
-  0x6E, 0x67, 0x6C, 0x65,  0x2C, 0x38, 0x74, 0x72,  0x61, 0x6E, 0x73, 0x70,  0x61, 0x72, 0x65, 0x6E,
-  0x74, 0x00, 0x65, 0x78,  0x74, 0x65, 0x72, 0x6E,  0x61, 0x6C, 0x00, 0x45,  0x78, 0x74, 0x65, 0x72,
-  0x6E, 0x61, 0x6C, 0x49,  0x6E, 0x74, 0x65, 0x72,  0x66, 0x61, 0x63, 0x65,  0x00, 0x61, 0x64, 0x64,
-  0x43, 0x61, 0x6C, 0x6C,  0x62, 0x61, 0x63, 0x6B,  0x00, 0x61, 0x76, 0x61,  0x69, 0x6C, 0x61, 0x62,
-  0x6C, 0x65, 0x00, 0x5F,  0x69, 0x6E, 0x69, 0x74,  0x4A, 0x53, 0x00, 0x69,  0x6E, 0x73, 0x74, 0x61,
-  0x6E, 0x63, 0x65, 0x00,  0x72, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x00,  0x5F, 0x63, 0x61, 0x6C,
-  0x6C, 0x49, 0x6E, 0x00,  0x5F, 0x61, 0x64, 0x64,  0x43, 0x61, 0x6C, 0x6C,  0x62, 0x61, 0x63, 0x6B,
-  0x00, 0x63, 0x61, 0x6C,  0x6C, 0x00, 0x74, 0x72,  0x79, 0x20, 0x7B, 0x20,  0x00, 0x5F, 0x6F, 0x62,
-  0x6A, 0x65, 0x63, 0x74,  0x49, 0x44, 0x00, 0x69,  0x64, 0x00, 0x2E, 0x53,  0x65, 0x74, 0x52, 0x65,
-  0x74, 0x75, 0x72, 0x6E,  0x56, 0x61, 0x6C, 0x75,  0x65, 0x28, 0x00, 0x5F,  0x5F, 0x66, 0x6C, 0x61,
-  0x73, 0x68, 0x5F, 0x5F,  0x74, 0x6F, 0x58, 0x4D,  0x4C, 0x20, 0x28, 0x00,  0x28, 0x00, 0x2C, 0x00,
-  0x5F, 0x74, 0x6F, 0x4A,  0x53, 0x00, 0x29, 0x29,  0x20, 0x00, 0x3B, 0x20,  0x7D, 0x20, 0x63, 0x61,
-  0x74, 0x63, 0x68, 0x20,  0x28, 0x65, 0x29, 0x20,  0x7B, 0x20, 0x00, 0x2E,  0x53, 0x65, 0x74, 0x52,
-  0x65, 0x74, 0x75, 0x72,  0x6E, 0x56, 0x61, 0x6C,  0x75, 0x65, 0x28, 0x22,  0x3C, 0x75, 0x6E, 0x64,
-  0x65, 0x66, 0x69, 0x6E,  0x65, 0x64, 0x2F, 0x3E,  0x22, 0x29, 0x3B, 0x20,  0x7D, 0x00, 0x22, 0x3C,
-  0x75, 0x6E, 0x64, 0x65,  0x66, 0x69, 0x6E, 0x65,  0x64, 0x2F, 0x3E, 0x22,  0x3B, 0x20, 0x7D, 0x00,
-  0x5F, 0x65, 0x76, 0x61,  0x6C, 0x4A, 0x53, 0x00,  0x3C, 0x69, 0x6E, 0x76,  0x6F, 0x6B, 0x65, 0x20,
-  0x6E, 0x61, 0x6D, 0x65,  0x3D, 0x22, 0x00, 0x22,  0x20, 0x72, 0x65, 0x74,  0x75, 0x72, 0x6E, 0x74,
-  0x79, 0x70, 0x65, 0x3D,  0x22, 0x78, 0x6D, 0x6C,  0x22, 0x3E, 0x00, 0x5F,  0x61, 0x72, 0x67, 0x75,
-  0x6D, 0x65, 0x6E, 0x74,  0x73, 0x54, 0x6F, 0x58,  0x4D, 0x4C, 0x00, 0x3C,  0x2F, 0x69, 0x6E, 0x76,
-  0x6F, 0x6B, 0x65, 0x3E,  0x00, 0x5F, 0x63, 0x61,  0x6C, 0x6C, 0x4F, 0x75,  0x74, 0x00, 0x78, 0x6D,
-  0x6C, 0x00, 0x69, 0x67,  0x6E, 0x6F, 0x72, 0x65,  0x57, 0x68, 0x69, 0x74,  0x65, 0x00, 0x66, 0x69,
-  0x72, 0x73, 0x74, 0x43,  0x68, 0x69, 0x6C, 0x64,  0x00, 0x5F, 0x74, 0x6F,  0x41, 0x53, 0x00, 0x61,
-  0x72, 0x67, 0x73, 0x00,  0x63, 0x68, 0x69, 0x6C,  0x64, 0x4E, 0x6F, 0x64,  0x65, 0x73, 0x00, 0x6E,
-  0x6F, 0x64, 0x65, 0x4E,  0x61, 0x6D, 0x65, 0x00,  0x5F, 0x61, 0x72, 0x67,  0x75, 0x6D, 0x65, 0x6E,
-  0x74, 0x73, 0x54, 0x6F,  0x41, 0x53, 0x00, 0x61,  0x70, 0x70, 0x6C, 0x79,  0x00, 0x61, 0x74, 0x74,
-  0x72, 0x69, 0x62, 0x75,  0x74, 0x65, 0x73, 0x00,  0x72, 0x65, 0x74, 0x75,  0x72, 0x6E, 0x74, 0x79,
-  0x70, 0x65, 0x00, 0x6A,  0x61, 0x76, 0x61, 0x73,  0x63, 0x72, 0x69, 0x70,  0x74, 0x00, 0x5F, 0x74,
-  0x6F, 0x58, 0x4D, 0x4C,  0x00, 0x5F, 0x61, 0x72,  0x72, 0x61, 0x79, 0x54,  0x6F, 0x58, 0x4D, 0x4C,
-  0x00, 0x3C, 0x61, 0x72,  0x72, 0x61, 0x79, 0x3E,  0x00, 0x73, 0x00, 0x61,  0x72, 0x72, 0x61, 0x79,
-  0x00, 0x3C, 0x70, 0x72,  0x6F, 0x70, 0x65, 0x72,  0x74, 0x79, 0x20, 0x69,  0x64, 0x3D, 0x22, 0x00,
-  0x22, 0x3E, 0x00, 0x3C,  0x2F, 0x70, 0x72, 0x6F,  0x70, 0x65, 0x72, 0x74,  0x79, 0x3E, 0x00, 0x3C,
-  0x2F, 0x61, 0x72, 0x72,  0x61, 0x79, 0x3E, 0x00,  0x3C, 0x61, 0x72, 0x67,  0x75, 0x6D, 0x65, 0x6E,
-  0x74, 0x73, 0x3E, 0x00,  0x3C, 0x2F, 0x61, 0x72,  0x67, 0x75, 0x6D, 0x65,  0x6E, 0x74, 0x73, 0x3E,
-  0x00, 0x5F, 0x6F, 0x62,  0x6A, 0x65, 0x63, 0x74,  0x54, 0x6F, 0x58, 0x4D,  0x4C, 0x00, 0x3C, 0x6F,
-  0x62, 0x6A, 0x65, 0x63,  0x74, 0x3E, 0x00, 0x6F,  0x62, 0x6A, 0x00, 0x3C,  0x2F, 0x6F, 0x62, 0x6A,
-  0x65, 0x63, 0x74, 0x3E,  0x00, 0x73, 0x74, 0x72,  0x69, 0x6E, 0x67, 0x00,  0x3C, 0x73, 0x74, 0x72,
-  0x69, 0x6E, 0x67, 0x3E,  0x00, 0x5F, 0x65, 0x73,  0x63, 0x61, 0x70, 0x65,  0x58, 0x4D, 0x4C, 0x00,
-  0x3C, 0x2F, 0x73, 0x74,  0x72, 0x69, 0x6E, 0x67,  0x3E, 0x00, 0x3C, 0x75,  0x6E, 0x64, 0x65, 0x66,
-  0x69, 0x6E, 0x65, 0x64,  0x2F, 0x3E, 0x00, 0x6E,  0x75, 0x6D, 0x62, 0x65,  0x72, 0x00, 0x3C, 0x6E,
-  0x75, 0x6D, 0x62, 0x65,  0x72, 0x3E, 0x00, 0x3C,  0x2F, 0x6E, 0x75, 0x6D,  0x62, 0x65, 0x72, 0x3E,
-  0x00, 0x3C, 0x6E, 0x75,  0x6C, 0x6C, 0x2F, 0x3E,  0x00, 0x62, 0x6F, 0x6F,  0x6C, 0x65, 0x61, 0x6E,
-  0x00, 0x3C, 0x74, 0x72,  0x75, 0x65, 0x2F, 0x3E,  0x00, 0x3C, 0x66, 0x61,  0x6C, 0x73, 0x65, 0x2F,
-  0x3E, 0x00, 0x68, 0x61,  0x73, 0x4F, 0x77, 0x6E,  0x50, 0x72, 0x6F, 0x70,  0x65, 0x72, 0x74, 0x79,
-  0x00, 0x5F, 0x6F, 0x62,  0x6A, 0x65, 0x63, 0x74,  0x54, 0x6F, 0x41, 0x53,  0x00, 0x70, 0x72, 0x6F,
-  0x70, 0x65, 0x72, 0x74,  0x79, 0x00, 0x5F, 0x61,  0x72, 0x72, 0x61, 0x79,  0x54, 0x6F, 0x41, 0x53,
-  0x00, 0x4E, 0x75, 0x6D,  0x62, 0x65, 0x72, 0x00,  0x53, 0x74, 0x72, 0x69,  0x6E, 0x67, 0x00, 0x5F,
-  0x75, 0x6E, 0x65, 0x73,  0x63, 0x61, 0x70, 0x65,  0x58, 0x4D, 0x4C, 0x00,  0x63, 0x6C, 0x61, 0x73,
-  0x73, 0x00, 0x5F, 0x61,  0x72, 0x72, 0x61, 0x79,  0x54, 0x6F, 0x4A, 0x53,  0x00, 0x5B, 0x00, 0x5F,
-  0x6C, 0x31, 0x00, 0x5D,  0x00, 0x5F, 0x6F, 0x62,  0x6A, 0x65, 0x63, 0x74,  0x54, 0x6F, 0x4A, 0x53,
-  0x00, 0x28, 0x7B, 0x00,  0x6E, 0x65, 0x65, 0x64,  0x73, 0x5F, 0x63, 0x6F,  0x6D, 0x6D, 0x61, 0x00,
-  0x3A, 0x00, 0x7D, 0x29,  0x00, 0x22, 0x00, 0x5F,  0x6A, 0x73, 0x51, 0x75,  0x6F, 0x74, 0x65, 0x53,
-  0x74, 0x72, 0x69, 0x6E,  0x67, 0x00, 0x38, 0x5F,  0x69, 0x6E, 0x69, 0x74,  0x4A, 0x53, 0x2C, 0x38,
-  0x5F, 0x6F, 0x62, 0x6A,  0x65, 0x63, 0x74, 0x49,  0x44, 0x2C, 0x38, 0x5F,  0x61, 0x64, 0x64, 0x43,
-  0x61, 0x6C, 0x6C, 0x62,  0x61, 0x63, 0x6B, 0x2C,  0x38, 0x5F, 0x65, 0x76,  0x61, 0x6C, 0x4A, 0x53,
-  0x2C, 0x38, 0x5F, 0x63,  0x61, 0x6C, 0x6C, 0x4F,  0x75, 0x74, 0x2C, 0x38,  0x5F, 0x65, 0x73, 0x63,
-  0x61, 0x70, 0x65, 0x58,  0x4D, 0x4C, 0x2C, 0x38,  0x5F, 0x75, 0x6E, 0x65,  0x73, 0x63, 0x61, 0x70,
-  0x65, 0x58, 0x4D, 0x4C,  0x2C, 0x38, 0x5F, 0x6A,  0x73, 0x51, 0x75, 0x6F,  0x74, 0x65, 0x53, 0x74,
-  0x72, 0x69, 0x6E, 0x67,  0x00, 0x38, 0x61, 0x76,  0x61, 0x69, 0x6C, 0x61,  0x62, 0x6C, 0x65, 0x00,
-  0x53, 0x68, 0x61, 0x72,  0x65, 0x64, 0x4F, 0x62,  0x6A, 0x65, 0x63, 0x74,  0x00, 0x64, 0x65, 0x6C,
-  0x65, 0x74, 0x65, 0x41,  0x6C, 0x6C, 0x00, 0x49,  0x6D, 0x70, 0x6C, 0x65,  0x6D, 0x65, 0x6E, 0x74,
-  0x20, 0x53, 0x68, 0x61,  0x72, 0x65, 0x64, 0x4F,  0x62, 0x6A, 0x65, 0x63,  0x74, 0x2E, 0x64, 0x65,
-  0x6C, 0x65, 0x74, 0x65,  0x41, 0x6C, 0x6C, 0x20,  0x28, 0x73, 0x74, 0x61,  0x74, 0x69, 0x63, 0x29,
-  0x00, 0x67, 0x65, 0x74,  0x44, 0x69, 0x73, 0x6B,  0x55, 0x73, 0x61, 0x67,  0x65, 0x00, 0x49, 0x6D,
+  0x73, 0x66, 0x6F, 0x72,  0x6D, 0x50, 0x6F, 0x69,  0x6E, 0x74, 0x00, 0x74,  0x72, 0x61, 0x6E, 0x73,
+  0x6C, 0x61, 0x74, 0x65,  0x00, 0x49, 0x6D, 0x70,  0x6C, 0x65, 0x6D, 0x65,  0x6E, 0x74, 0x20, 0x4D,
+  0x61, 0x74, 0x72, 0x69,  0x78, 0x2E, 0x74, 0x72,  0x61, 0x6E, 0x73, 0x6C,  0x61, 0x74, 0x65, 0x00,
+  0x49, 0x6D, 0x70, 0x6C,  0x65, 0x6D, 0x65, 0x6E,  0x74, 0x20, 0x4D, 0x61,  0x74, 0x72, 0x69, 0x78,
+  0x2E, 0x74, 0x6F, 0x53,  0x74, 0x72, 0x69, 0x6E,  0x67, 0x00, 0x43, 0x6F,  0x6C, 0x6F, 0x72, 0x54,
+  0x72, 0x61, 0x6E, 0x73,  0x66, 0x6F, 0x72, 0x6D,  0x00, 0x49, 0x6D, 0x70,  0x6C, 0x65, 0x6D, 0x65,
+  0x6E, 0x74, 0x20, 0x43,  0x6F, 0x6C, 0x6F, 0x72,  0x54, 0x72, 0x61, 0x6E,  0x73, 0x66, 0x6F, 0x72,
+  0x6D, 0x2E, 0x74, 0x6F,  0x53, 0x74, 0x72, 0x69,  0x6E, 0x67, 0x00, 0x38,  0x63, 0x6F, 0x6E, 0x63,
+  0x61, 0x74, 0x00, 0x38,  0x61, 0x6C, 0x70, 0x68,  0x61, 0x4D, 0x75, 0x6C,  0x74, 0x69, 0x70, 0x6C,
+  0x69, 0x65, 0x72, 0x2C,  0x38, 0x72, 0x65, 0x64,  0x4D, 0x75, 0x6C, 0x74,  0x69, 0x70, 0x6C, 0x69,
+  0x65, 0x72, 0x2C, 0x38,  0x67, 0x72, 0x65, 0x65,  0x6E, 0x4D, 0x75, 0x6C,  0x74, 0x69, 0x70, 0x6C,
+  0x69, 0x65, 0x72, 0x2C,  0x38, 0x62, 0x6C, 0x75,  0x65, 0x4D, 0x75, 0x6C,  0x74, 0x69, 0x70, 0x6C,
+  0x69, 0x65, 0x72, 0x2C,  0x38, 0x61, 0x6C, 0x70,  0x68, 0x61, 0x4F, 0x66,  0x66, 0x73, 0x65, 0x74,
+  0x2C, 0x38, 0x72, 0x65,  0x64, 0x4F, 0x66, 0x66,  0x73, 0x65, 0x74, 0x2C,  0x38, 0x67, 0x72, 0x65,
+  0x65, 0x6E, 0x4F, 0x66,  0x66, 0x73, 0x65, 0x74,  0x2C, 0x38, 0x62, 0x6C,  0x75, 0x65, 0x4F, 0x66,
+  0x66, 0x73, 0x65, 0x74,  0x2C, 0x38, 0x72, 0x67,  0x62, 0x00, 0x54, 0x72,  0x61, 0x6E, 0x73, 0x66,
+  0x6F, 0x72, 0x6D, 0x00,  0x38, 0x6D, 0x61, 0x74,  0x72, 0x69, 0x78, 0x2C,  0x38, 0x63, 0x6F, 0x6E,
+  0x63, 0x61, 0x74, 0x65,  0x6E, 0x61, 0x74, 0x65,  0x64, 0x4D, 0x61, 0x74,  0x72, 0x69, 0x78, 0x2C,
+  0x38, 0x63, 0x6F, 0x6C,  0x6F, 0x72, 0x54, 0x72,  0x61, 0x6E, 0x73, 0x66,  0x6F, 0x72, 0x6D, 0x2C,
+  0x38, 0x63, 0x6F, 0x6E,  0x63, 0x61, 0x74, 0x65,  0x6E, 0x61, 0x74, 0x65,  0x64, 0x43, 0x6F, 0x6C,
+  0x6F, 0x72, 0x54, 0x72,  0x61, 0x6E, 0x73, 0x66,  0x6F, 0x72, 0x6D, 0x2C,  0x38, 0x70, 0x69, 0x78,
+  0x65, 0x6C, 0x42, 0x6F,  0x75, 0x6E, 0x64, 0x73,  0x00, 0x42, 0x69, 0x74,  0x6D, 0x61, 0x70, 0x44,
+  0x61, 0x74, 0x61, 0x00,  0x52, 0x45, 0x44, 0x5F,  0x43, 0x48, 0x41, 0x4E,  0x4E, 0x45, 0x4C, 0x00,
+  0x47, 0x52, 0x45, 0x45,  0x4E, 0x5F, 0x43, 0x48,  0x41, 0x4E, 0x4E, 0x45,  0x4C, 0x00, 0x42, 0x4C,
+  0x55, 0x45, 0x5F, 0x43,  0x48, 0x41, 0x4E, 0x4E,  0x45, 0x4C, 0x00, 0x41,  0x4C, 0x50, 0x48, 0x41,
+  0x5F, 0x43, 0x48, 0x41,  0x4E, 0x4E, 0x45, 0x4C,  0x00, 0x38, 0x6C, 0x6F,  0x61, 0x64, 0x42, 0x69,
+  0x74, 0x6D, 0x61, 0x70,  0x00, 0x38, 0x67, 0x65,  0x74, 0x50, 0x69, 0x78,  0x65, 0x6C, 0x2C, 0x38,
+  0x73, 0x65, 0x74, 0x50,  0x69, 0x78, 0x65, 0x6C,  0x2C, 0x38, 0x66, 0x69,  0x6C, 0x6C, 0x52, 0x65,
+  0x63, 0x74, 0x2C, 0x38,  0x63, 0x6F, 0x70, 0x79,  0x50, 0x69, 0x78, 0x65,  0x6C, 0x73, 0x2C, 0x38,
+  0x61, 0x70, 0x70, 0x6C,  0x79, 0x46, 0x69, 0x6C,  0x74, 0x65, 0x72, 0x2C,  0x38, 0x73, 0x63, 0x72,
+  0x6F, 0x6C, 0x6C, 0x2C,  0x38, 0x74, 0x68, 0x72,  0x65, 0x73, 0x68, 0x6F,  0x6C, 0x64, 0x2C, 0x38,
+  0x64, 0x72, 0x61, 0x77,  0x2C, 0x38, 0x70, 0x69,  0x78, 0x65, 0x6C, 0x44,  0x69, 0x73, 0x73, 0x6F,
+  0x6C, 0x76, 0x65, 0x2C,  0x38, 0x67, 0x65, 0x74,  0x50, 0x69, 0x78, 0x65,  0x6C, 0x33, 0x32, 0x2C,
+  0x38, 0x73, 0x65, 0x74,  0x50, 0x69, 0x78, 0x65,  0x6C, 0x33, 0x32, 0x2C,  0x38, 0x66, 0x6C, 0x6F,
+  0x6F, 0x64, 0x46, 0x69,  0x6C, 0x6C, 0x2C, 0x38,  0x67, 0x65, 0x74, 0x43,  0x6F, 0x6C, 0x6F, 0x72,
+  0x42, 0x6F, 0x75, 0x6E,  0x64, 0x73, 0x52, 0x65,  0x63, 0x74, 0x2C, 0x38,  0x70, 0x65, 0x72, 0x6C,
+  0x69, 0x6E, 0x4E, 0x6F,  0x69, 0x73, 0x65, 0x2C,  0x38, 0x63, 0x6F, 0x6C,  0x6F, 0x72, 0x54, 0x72,
+  0x61, 0x6E, 0x73, 0x66,  0x6F, 0x72, 0x6D, 0x2C,  0x38, 0x68, 0x69, 0x74,  0x54, 0x65, 0x73, 0x74,
+  0x2C, 0x38, 0x70, 0x61,  0x6C, 0x65, 0x74, 0x74,  0x65, 0x4D, 0x61, 0x70,  0x2C, 0x38, 0x6D, 0x65,
+  0x72, 0x67, 0x65, 0x2C,  0x38, 0x6E, 0x6F, 0x69,  0x73, 0x65, 0x2C, 0x38,  0x63, 0x6F, 0x70, 0x79,
+  0x43, 0x68, 0x61, 0x6E,  0x6E, 0x65, 0x6C, 0x2C,  0x38, 0x63, 0x6C, 0x6F,  0x6E, 0x65, 0x2C, 0x38,
+  0x64, 0x69, 0x73, 0x70,  0x6F, 0x73, 0x65, 0x2C,  0x38, 0x67, 0x65, 0x6E,  0x65, 0x72, 0x61, 0x74,
+  0x65, 0x46, 0x69, 0x6C,  0x74, 0x65, 0x72, 0x52,  0x65, 0x63, 0x74, 0x2C,  0x38, 0x63, 0x6F, 0x6D,
+  0x70, 0x61, 0x72, 0x65,  0x00, 0x38, 0x77, 0x69,  0x64, 0x74, 0x68, 0x2C,  0x38, 0x68, 0x65, 0x69,
+  0x67, 0x68, 0x74, 0x2C,  0x38, 0x72, 0x65, 0x63,  0x74, 0x61, 0x6E, 0x67,  0x6C, 0x65, 0x2C, 0x38,
+  0x74, 0x72, 0x61, 0x6E,  0x73, 0x70, 0x61, 0x72,  0x65, 0x6E, 0x74, 0x00,  0x65, 0x78, 0x74, 0x65,
+  0x72, 0x6E, 0x61, 0x6C,  0x00, 0x45, 0x78, 0x74,  0x65, 0x72, 0x6E, 0x61,  0x6C, 0x49, 0x6E, 0x74,
+  0x65, 0x72, 0x66, 0x61,  0x63, 0x65, 0x00, 0x61,  0x64, 0x64, 0x43, 0x61,  0x6C, 0x6C, 0x62, 0x61,
+  0x63, 0x6B, 0x00, 0x61,  0x76, 0x61, 0x69, 0x6C,  0x61, 0x62, 0x6C, 0x65,  0x00, 0x5F, 0x69, 0x6E,
+  0x69, 0x74, 0x4A, 0x53,  0x00, 0x69, 0x6E, 0x73,  0x74, 0x61, 0x6E, 0x63,  0x65, 0x00, 0x72, 0x65,
+  0x71, 0x75, 0x65, 0x73,  0x74, 0x00, 0x5F, 0x63,  0x61, 0x6C, 0x6C, 0x49,  0x6E, 0x00, 0x5F, 0x61,
+  0x64, 0x64, 0x43, 0x61,  0x6C, 0x6C, 0x62, 0x61,  0x63, 0x6B, 0x00, 0x63,  0x61, 0x6C, 0x6C, 0x00,
+  0x74, 0x72, 0x79, 0x20,  0x7B, 0x20, 0x00, 0x5F,  0x6F, 0x62, 0x6A, 0x65,  0x63, 0x74, 0x49, 0x44,
+  0x00, 0x69, 0x64, 0x00,  0x2E, 0x53, 0x65, 0x74,  0x52, 0x65, 0x74, 0x75,  0x72, 0x6E, 0x56, 0x61,
+  0x6C, 0x75, 0x65, 0x28,  0x00, 0x5F, 0x5F, 0x66,  0x6C, 0x61, 0x73, 0x68,  0x5F, 0x5F, 0x74, 0x6F,
+  0x58, 0x4D, 0x4C, 0x20,  0x28, 0x00, 0x28, 0x00,  0x2C, 0x00, 0x5F, 0x74,  0x6F, 0x4A, 0x53, 0x00,
+  0x29, 0x29, 0x20, 0x00,  0x3B, 0x20, 0x7D, 0x20,  0x63, 0x61, 0x74, 0x63,  0x68, 0x20, 0x28, 0x65,
+  0x29, 0x20, 0x7B, 0x20,  0x00, 0x2E, 0x53, 0x65,  0x74, 0x52, 0x65, 0x74,  0x75, 0x72, 0x6E, 0x56,
+  0x61, 0x6C, 0x75, 0x65,  0x28, 0x22, 0x3C, 0x75,  0x6E, 0x64, 0x65, 0x66,  0x69, 0x6E, 0x65, 0x64,
+  0x2F, 0x3E, 0x22, 0x29,  0x3B, 0x20, 0x7D, 0x00,  0x22, 0x3C, 0x75, 0x6E,  0x64, 0x65, 0x66, 0x69,
+  0x6E, 0x65, 0x64, 0x2F,  0x3E, 0x22, 0x3B, 0x20,  0x7D, 0x00, 0x5F, 0x65,  0x76, 0x61, 0x6C, 0x4A,
+  0x53, 0x00, 0x3C, 0x69,  0x6E, 0x76, 0x6F, 0x6B,  0x65, 0x20, 0x6E, 0x61,  0x6D, 0x65, 0x3D, 0x22,
+  0x00, 0x22, 0x20, 0x72,  0x65, 0x74, 0x75, 0x72,  0x6E, 0x74, 0x79, 0x70,  0x65, 0x3D, 0x22, 0x78,
+  0x6D, 0x6C, 0x22, 0x3E,  0x00, 0x5F, 0x61, 0x72,  0x67, 0x75, 0x6D, 0x65,  0x6E, 0x74, 0x73, 0x54,
+  0x6F, 0x58, 0x4D, 0x4C,  0x00, 0x3C, 0x2F, 0x69,  0x6E, 0x76, 0x6F, 0x6B,  0x65, 0x3E, 0x00, 0x5F,
+  0x63, 0x61, 0x6C, 0x6C,  0x4F, 0x75, 0x74, 0x00,  0x78, 0x6D, 0x6C, 0x00,  0x69, 0x67, 0x6E, 0x6F,
+  0x72, 0x65, 0x57, 0x68,  0x69, 0x74, 0x65, 0x00,  0x66, 0x69, 0x72, 0x73,  0x74, 0x43, 0x68, 0x69,
+  0x6C, 0x64, 0x00, 0x5F,  0x74, 0x6F, 0x41, 0x53,  0x00, 0x61, 0x72, 0x67,  0x73, 0x00, 0x63, 0x68,
+  0x69, 0x6C, 0x64, 0x4E,  0x6F, 0x64, 0x65, 0x73,  0x00, 0x6E, 0x6F, 0x64,  0x65, 0x4E, 0x61, 0x6D,
+  0x65, 0x00, 0x5F, 0x61,  0x72, 0x67, 0x75, 0x6D,  0x65, 0x6E, 0x74, 0x73,  0x54, 0x6F, 0x41, 0x53,
+  0x00, 0x61, 0x70, 0x70,  0x6C, 0x79, 0x00, 0x61,  0x74, 0x74, 0x72, 0x69,  0x62, 0x75, 0x74, 0x65,
+  0x73, 0x00, 0x72, 0x65,  0x74, 0x75, 0x72, 0x6E,  0x74, 0x79, 0x70, 0x65,  0x00, 0x6A, 0x61, 0x76,
+  0x61, 0x73, 0x63, 0x72,  0x69, 0x70, 0x74, 0x00,  0x5F, 0x74, 0x6F, 0x58,  0x4D, 0x4C, 0x00, 0x5F,
+  0x61, 0x72, 0x72, 0x61,  0x79, 0x54, 0x6F, 0x58,  0x4D, 0x4C, 0x00, 0x3C,  0x61, 0x72, 0x72, 0x61,
+  0x79, 0x3E, 0x00, 0x73,  0x00, 0x61, 0x72, 0x72,  0x61, 0x79, 0x00, 0x3C,  0x70, 0x72, 0x6F, 0x70,
+  0x65, 0x72, 0x74, 0x79,  0x20, 0x69, 0x64, 0x3D,  0x22, 0x00, 0x22, 0x3E,  0x00, 0x3C, 0x2F, 0x70,
+  0x72, 0x6F, 0x70, 0x65,  0x72, 0x74, 0x79, 0x3E,  0x00, 0x3C, 0x2F, 0x61,  0x72, 0x72, 0x61, 0x79,
+  0x3E, 0x00, 0x3C, 0x61,  0x72, 0x67, 0x75, 0x6D,  0x65, 0x6E, 0x74, 0x73,  0x3E, 0x00, 0x3C, 0x2F,
+  0x61, 0x72, 0x67, 0x75,  0x6D, 0x65, 0x6E, 0x74,  0x73, 0x3E, 0x00, 0x5F,  0x6F, 0x62, 0x6A, 0x65,
+  0x63, 0x74, 0x54, 0x6F,  0x58, 0x4D, 0x4C, 0x00,  0x3C, 0x6F, 0x62, 0x6A,  0x65, 0x63, 0x74, 0x3E,
+  0x00, 0x6F, 0x62, 0x6A,  0x00, 0x3C, 0x2F, 0x6F,  0x62, 0x6A, 0x65, 0x63,  0x74, 0x3E, 0x00, 0x73,
+  0x74, 0x72, 0x69, 0x6E,  0x67, 0x00, 0x3C, 0x73,  0x74, 0x72, 0x69, 0x6E,  0x67, 0x3E, 0x00, 0x5F,
+  0x65, 0x73, 0x63, 0x61,  0x70, 0x65, 0x58, 0x4D,  0x4C, 0x00, 0x3C, 0x2F,  0x73, 0x74, 0x72, 0x69,
+  0x6E, 0x67, 0x3E, 0x00,  0x3C, 0x75, 0x6E, 0x64,  0x65, 0x66, 0x69, 0x6E,  0x65, 0x64, 0x2F, 0x3E,
+  0x00, 0x6E, 0x75, 0x6D,  0x62, 0x65, 0x72, 0x00,  0x3C, 0x6E, 0x75, 0x6D,  0x62, 0x65, 0x72, 0x3E,
+  0x00, 0x3C, 0x2F, 0x6E,  0x75, 0x6D, 0x62, 0x65,  0x72, 0x3E, 0x00, 0x3C,  0x6E, 0x75, 0x6C, 0x6C,
+  0x2F, 0x3E, 0x00, 0x62,  0x6F, 0x6F, 0x6C, 0x65,  0x61, 0x6E, 0x00, 0x3C,  0x74, 0x72, 0x75, 0x65,
+  0x2F, 0x3E, 0x00, 0x3C,  0x66, 0x61, 0x6C, 0x73,  0x65, 0x2F, 0x3E, 0x00,  0x68, 0x61, 0x73, 0x4F,
+  0x77, 0x6E, 0x50, 0x72,  0x6F, 0x70, 0x65, 0x72,  0x74, 0x79, 0x00, 0x5F,  0x6F, 0x62, 0x6A, 0x65,
+  0x63, 0x74, 0x54, 0x6F,  0x41, 0x53, 0x00, 0x70,  0x72, 0x6F, 0x70, 0x65,  0x72, 0x74, 0x79, 0x00,
+  0x5F, 0x61, 0x72, 0x72,  0x61, 0x79, 0x54, 0x6F,  0x41, 0x53, 0x00, 0x4E,  0x75, 0x6D, 0x62, 0x65,
+  0x72, 0x00, 0x53, 0x74,  0x72, 0x69, 0x6E, 0x67,  0x00, 0x5F, 0x75, 0x6E,  0x65, 0x73, 0x63, 0x61,
+  0x70, 0x65, 0x58, 0x4D,  0x4C, 0x00, 0x63, 0x6C,  0x61, 0x73, 0x73, 0x00,  0x5F, 0x61, 0x72, 0x72,
+  0x61, 0x79, 0x54, 0x6F,  0x4A, 0x53, 0x00, 0x5B,  0x00, 0x5F, 0x6C, 0x31,  0x00, 0x5D, 0x00, 0x5F,
+  0x6F, 0x62, 0x6A, 0x65,  0x63, 0x74, 0x54, 0x6F,  0x4A, 0x53, 0x00, 0x28,  0x7B, 0x00, 0x6E, 0x65,
+  0x65, 0x64, 0x73, 0x5F,  0x63, 0x6F, 0x6D, 0x6D,  0x61, 0x00, 0x3A, 0x00,  0x7D, 0x29, 0x00, 0x22,
+  0x00, 0x5F, 0x6A, 0x73,  0x51, 0x75, 0x6F, 0x74,  0x65, 0x53, 0x74, 0x72,  0x69, 0x6E, 0x67, 0x00,
+  0x38, 0x5F, 0x69, 0x6E,  0x69, 0x74, 0x4A, 0x53,  0x2C, 0x38, 0x5F, 0x6F,  0x62, 0x6A, 0x65, 0x63,
+  0x74, 0x49, 0x44, 0x2C,  0x38, 0x5F, 0x61, 0x64,  0x64, 0x43, 0x61, 0x6C,  0x6C, 0x62, 0x61, 0x63,
+  0x6B, 0x2C, 0x38, 0x5F,  0x65, 0x76, 0x61, 0x6C,  0x4A, 0x53, 0x2C, 0x38,  0x5F, 0x63, 0x61, 0x6C,
+  0x6C, 0x4F, 0x75, 0x74,  0x2C, 0x38, 0x5F, 0x65,  0x73, 0x63, 0x61, 0x70,  0x65, 0x58, 0x4D, 0x4C,
+  0x2C, 0x38, 0x5F, 0x75,  0x6E, 0x65, 0x73, 0x63,  0x61, 0x70, 0x65, 0x58,  0x4D, 0x4C, 0x2C, 0x38,
+  0x5F, 0x6A, 0x73, 0x51,  0x75, 0x6F, 0x74, 0x65,  0x53, 0x74, 0x72, 0x69,  0x6E, 0x67, 0x00, 0x38,
+  0x61, 0x76, 0x61, 0x69,  0x6C, 0x61, 0x62, 0x6C,  0x65, 0x00, 0x53, 0x68,  0x61, 0x72, 0x65, 0x64,
+  0x4F, 0x62, 0x6A, 0x65,  0x63, 0x74, 0x00, 0x64,  0x65, 0x6C, 0x65, 0x74,  0x65, 0x41, 0x6C, 0x6C,
+  0x00, 0x49, 0x6D, 0x70,  0x6C, 0x65, 0x6D, 0x65,  0x6E, 0x74, 0x20, 0x53,  0x68, 0x61, 0x72, 0x65,
+  0x64, 0x4F, 0x62, 0x6A,  0x65, 0x63, 0x74, 0x2E,  0x64, 0x65, 0x6C, 0x65,  0x74, 0x65, 0x41, 0x6C,
+  0x6C, 0x20, 0x28, 0x73,  0x74, 0x61, 0x74, 0x69,  0x63, 0x29, 0x00, 0x67,  0x65, 0x74, 0x44, 0x69,
+  0x73, 0x6B, 0x55, 0x73,  0x61, 0x67, 0x65, 0x00,  0x49, 0x6D, 0x70, 0x6C,  0x65, 0x6D, 0x65, 0x6E,
+  0x74, 0x20, 0x53, 0x68,  0x61, 0x72, 0x65, 0x64,  0x4F, 0x62, 0x6A, 0x65,  0x63, 0x74, 0x2E, 0x67,
+  0x65, 0x74, 0x44, 0x69,  0x73, 0x6B, 0x55, 0x73,  0x61, 0x67, 0x65, 0x20,  0x28, 0x73, 0x74, 0x61,
+  0x74, 0x69, 0x63, 0x29,  0x00, 0x67, 0x65, 0x74,  0x4C, 0x6F, 0x63, 0x61,  0x6C, 0x00, 0x49, 0x6D,
   0x70, 0x6C, 0x65, 0x6D,  0x65, 0x6E, 0x74, 0x20,  0x53, 0x68, 0x61, 0x72,  0x65, 0x64, 0x4F, 0x62,
-  0x6A, 0x65, 0x63, 0x74,  0x2E, 0x67, 0x65, 0x74,  0x44, 0x69, 0x73, 0x6B,  0x55, 0x73, 0x61, 0x67,
-  0x65, 0x20, 0x28, 0x73,  0x74, 0x61, 0x74, 0x69,  0x63, 0x29, 0x00, 0x67,  0x65, 0x74, 0x4C, 0x6F,
-  0x63, 0x61, 0x6C, 0x00,  0x49, 0x6D, 0x70, 0x6C,  0x65, 0x6D, 0x65, 0x6E,  0x74, 0x20, 0x53, 0x68,
-  0x61, 0x72, 0x65, 0x64,  0x4F, 0x62, 0x6A, 0x65,  0x63, 0x74, 0x2E, 0x67,  0x65, 0x74, 0x4C, 0x6F,
-  0x63, 0x61, 0x6C, 0x20,  0x28, 0x73, 0x74, 0x61,  0x74, 0x69, 0x63, 0x29,  0x00, 0x67, 0x65, 0x74,
-  0x52, 0x65, 0x6D, 0x6F,  0x74, 0x65, 0x00, 0x49,  0x6D, 0x70, 0x6C, 0x65,  0x6D, 0x65, 0x6E, 0x74,
-  0x20, 0x53, 0x68, 0x61,  0x72, 0x65, 0x64, 0x4F,  0x62, 0x6A, 0x65, 0x63,  0x74, 0x2E, 0x67, 0x65,
-  0x74, 0x52, 0x65, 0x6D,  0x6F, 0x74, 0x65, 0x20,  0x28, 0x73, 0x74, 0x61,  0x74, 0x69, 0x63, 0x29,
-  0x00, 0x64, 0x65, 0x6C,  0x65, 0x74, 0x65, 0x41,  0x6C, 0x6C, 0x2C, 0x67,  0x65, 0x74, 0x44, 0x69,
-  0x73, 0x6B, 0x55, 0x73,  0x61, 0x67, 0x65, 0x00,  0x36, 0x63, 0x6F, 0x6E,  0x6E, 0x65, 0x63, 0x74,
-  0x2C, 0x36, 0x73, 0x65,  0x6E, 0x64, 0x2C, 0x36,  0x66, 0x6C, 0x75, 0x73,  0x68, 0x2C, 0x36, 0x63,
-  0x6C, 0x6F, 0x73, 0x65,  0x2C, 0x36, 0x67, 0x65,  0x74, 0x53, 0x69, 0x7A,  0x65, 0x2C, 0x36, 0x73,
-  0x65, 0x74, 0x46, 0x70,  0x73, 0x2C, 0x36, 0x63,  0x6C, 0x65, 0x61, 0x72,  0x00, 0x73, 0x70, 0x6C,
-  0x69, 0x74, 0x00, 0x63,  0x6F, 0x75, 0x6E, 0x74,  0x00, 0x52, 0x65, 0x6D,  0x6F, 0x74, 0x65, 0x4C,
-  0x53, 0x4F, 0x55, 0x73,  0x61, 0x67, 0x65, 0x00,  0x67, 0x65, 0x74, 0x55,  0x52, 0x4C, 0x50, 0x61,
-  0x67, 0x65, 0x53, 0x75,  0x70, 0x70, 0x6F, 0x72,  0x74, 0x00, 0x49, 0x6D,  0x70, 0x6C, 0x65, 0x6D,
-  0x65, 0x6E, 0x74, 0x20,  0x52, 0x65, 0x6D, 0x6F,  0x74, 0x65, 0x4C, 0x53,  0x4F, 0x55, 0x73, 0x61,
-  0x67, 0x65, 0x2E, 0x67,  0x65, 0x74, 0x55, 0x52,  0x4C, 0x50, 0x61, 0x67,  0x65, 0x53, 0x75, 0x70,
-  0x70, 0x6F, 0x72, 0x74,  0x20, 0x28, 0x73, 0x74,  0x61, 0x74, 0x69, 0x63,  0x29, 0x00, 0x42, 0x75,
-  0x74, 0x74, 0x6F, 0x6E,  0x00, 0x67, 0x65, 0x74,  0x44, 0x65, 0x70, 0x74,  0x68, 0x00, 0x38, 0x73,
-  0x63, 0x61, 0x6C, 0x65,  0x39, 0x47, 0x72, 0x69,  0x64, 0x2C, 0x38, 0x66,  0x69, 0x6C, 0x74, 0x65,
-  0x72, 0x73, 0x2C, 0x38,  0x63, 0x61, 0x63, 0x68,  0x65, 0x41, 0x73, 0x42,  0x69, 0x74, 0x6D, 0x61,
-  0x70, 0x2C, 0x38, 0x62,  0x6C, 0x65, 0x6E, 0x64,  0x4D, 0x6F, 0x64, 0x65,  0x00, 0x66, 0x69, 0x6C,
-  0x74, 0x65, 0x72, 0x73,  0x00, 0x42, 0x69, 0x74,  0x6D, 0x61, 0x70, 0x46,  0x69, 0x6C, 0x74, 0x65,
-  0x72, 0x00, 0x38, 0x63,  0x6C, 0x6F, 0x6E, 0x65,  0x00, 0x42, 0x65, 0x76,  0x65, 0x6C, 0x46, 0x69,
-  0x6C, 0x74, 0x65, 0x72,  0x00, 0x38, 0x64, 0x69,  0x73, 0x74, 0x61, 0x6E,  0x63, 0x65, 0x2C, 0x38,
-  0x61, 0x6E, 0x67, 0x6C,  0x65, 0x2C, 0x38, 0x68,  0x69, 0x67, 0x68, 0x6C,  0x69, 0x67, 0x68, 0x74,
-  0x43, 0x6F, 0x6C, 0x6F,  0x72, 0x2C, 0x38, 0x68,  0x69, 0x67, 0x68, 0x6C,  0x69, 0x67, 0x68, 0x74,
-  0x41, 0x6C, 0x70, 0x68,  0x61, 0x2C, 0x38, 0x73,  0x68, 0x61, 0x64, 0x6F,  0x77, 0x43, 0x6F, 0x6C,
-  0x6F, 0x72, 0x2C, 0x38,  0x73, 0x68, 0x61, 0x64,  0x6F, 0x77, 0x41, 0x6C,  0x70, 0x68, 0x61, 0x2C,
-  0x38, 0x71, 0x75, 0x61,  0x6C, 0x69, 0x74, 0x79,  0x2C, 0x38, 0x73, 0x74,  0x72, 0x65, 0x6E, 0x67,
-  0x74, 0x68, 0x2C, 0x38,  0x6B, 0x6E, 0x6F, 0x63,  0x6B, 0x6F, 0x75, 0x74,  0x2C, 0x38, 0x62, 0x6C,
-  0x75, 0x72, 0x58, 0x2C,  0x38, 0x62, 0x6C, 0x75,  0x72, 0x59, 0x2C, 0x38,  0x74, 0x79, 0x70, 0x65,
-  0x00, 0x42, 0x6C, 0x75,  0x72, 0x46, 0x69, 0x6C,  0x74, 0x65, 0x72, 0x00,  0x38, 0x62, 0x6C, 0x75,
-  0x72, 0x58, 0x2C, 0x38,  0x62, 0x6C, 0x75, 0x72,  0x59, 0x2C, 0x38, 0x71,  0x75, 0x61, 0x6C, 0x69,
-  0x74, 0x79, 0x00, 0x43,  0x6F, 0x6C, 0x6F, 0x72,  0x4D, 0x61, 0x74, 0x72,  0x69, 0x78, 0x46, 0x69,
-  0x6C, 0x74, 0x65, 0x72,  0x00, 0x38, 0x6D, 0x61,  0x74, 0x72, 0x69, 0x78,  0x00, 0x43, 0x6F, 0x6E,
-  0x76, 0x6F, 0x6C, 0x75,  0x74, 0x69, 0x6F, 0x6E,  0x46, 0x69, 0x6C, 0x74,  0x65, 0x72, 0x00, 0x38,
-  0x6D, 0x61, 0x74, 0x72,  0x69, 0x78, 0x58, 0x2C,  0x38, 0x6D, 0x61, 0x74,  0x72, 0x69, 0x78, 0x59,
-  0x2C, 0x38, 0x6D, 0x61,  0x74, 0x72, 0x69, 0x78,  0x2C, 0x38, 0x64, 0x69,  0x76, 0x69, 0x73, 0x6F,
-  0x72, 0x2C, 0x38, 0x62,  0x69, 0x61, 0x73, 0x2C,  0x38, 0x70, 0x72, 0x65,  0x73, 0x65, 0x72, 0x76,
-  0x65, 0x41, 0x6C, 0x70,  0x68, 0x61, 0x2C, 0x38,  0x63, 0x6C, 0x61, 0x6D,  0x70, 0x2C, 0x38, 0x63,
-  0x6F, 0x6C, 0x6F, 0x72,  0x2C, 0x38, 0x61, 0x6C,  0x70, 0x68, 0x61, 0x00,  0x44, 0x69, 0x73, 0x70,
-  0x6C, 0x61, 0x63, 0x65,  0x6D, 0x65, 0x6E, 0x74,  0x4D, 0x61, 0x70, 0x46,  0x69, 0x6C, 0x74, 0x65,
-  0x72, 0x00, 0x38, 0x6D,  0x61, 0x70, 0x42, 0x69,  0x74, 0x6D, 0x61, 0x70,  0x2C, 0x38, 0x6D, 0x61,
-  0x70, 0x50, 0x6F, 0x69,  0x6E, 0x74, 0x2C, 0x38,  0x63, 0x6F, 0x6D, 0x70,  0x6F, 0x6E, 0x65, 0x6E,
-  0x74, 0x58, 0x2C, 0x38,  0x63, 0x6F, 0x6D, 0x70,  0x6F, 0x6E, 0x65, 0x6E,  0x74, 0x59, 0x2C, 0x38,
-  0x73, 0x63, 0x61, 0x6C,  0x65, 0x58, 0x2C, 0x38,  0x73, 0x63, 0x61, 0x6C,  0x65, 0x59, 0x2C, 0x38,
-  0x6D, 0x6F, 0x64, 0x65,  0x2C, 0x38, 0x63, 0x6F,  0x6C, 0x6F, 0x72, 0x2C,  0x38, 0x61, 0x6C, 0x70,
-  0x68, 0x61, 0x00, 0x44,  0x72, 0x6F, 0x70, 0x53,  0x68, 0x61, 0x64, 0x6F,  0x77, 0x46, 0x69, 0x6C,
-  0x74, 0x65, 0x72, 0x00,  0x38, 0x64, 0x69, 0x73,  0x74, 0x61, 0x6E, 0x63,  0x65, 0x2C, 0x38, 0x61,
-  0x6E, 0x67, 0x6C, 0x65,  0x2C, 0x38, 0x63, 0x6F,  0x6C, 0x6F, 0x72, 0x2C,  0x38, 0x61, 0x6C, 0x70,
-  0x68, 0x61, 0x2C, 0x38,  0x71, 0x75, 0x61, 0x6C,  0x69, 0x74, 0x79, 0x2C,  0x38, 0x69, 0x6E, 0x6E,
-  0x65, 0x72, 0x2C, 0x38,  0x6B, 0x6E, 0x6F, 0x63,  0x6B, 0x6F, 0x75, 0x74,  0x2C, 0x38, 0x62, 0x6C,
-  0x75, 0x72, 0x58, 0x2C,  0x38, 0x62, 0x6C, 0x75,  0x72, 0x59, 0x2C, 0x38,  0x73, 0x74, 0x72, 0x65,
-  0x6E, 0x67, 0x74, 0x68,  0x2C, 0x38, 0x68, 0x69,  0x64, 0x65, 0x4F, 0x62,  0x6A, 0x65, 0x63, 0x74,
-  0x00, 0x47, 0x6C, 0x6F,  0x77, 0x46, 0x69, 0x6C,  0x74, 0x65, 0x72, 0x00,  0x38, 0x63, 0x6F, 0x6C,
-  0x6F, 0x72, 0x2C, 0x38,  0x61, 0x6C, 0x70, 0x68,  0x61, 0x2C, 0x38, 0x71,  0x75, 0x61, 0x6C, 0x69,
-  0x74, 0x79, 0x2C, 0x38,  0x69, 0x6E, 0x6E, 0x65,  0x72, 0x2C, 0x38, 0x6B,  0x6E, 0x6F, 0x63, 0x6B,
-  0x6F, 0x75, 0x74, 0x2C,  0x38, 0x62, 0x6C, 0x75,  0x72, 0x58, 0x2C, 0x38,  0x62, 0x6C, 0x75, 0x72,
-  0x59, 0x2C, 0x38, 0x73,  0x74, 0x72, 0x65, 0x6E,  0x67, 0x74, 0x68, 0x00,  0x47, 0x72, 0x61, 0x64,
-  0x69, 0x65, 0x6E, 0x74,  0x42, 0x65, 0x76, 0x65,  0x6C, 0x46, 0x69, 0x6C,  0x74, 0x65, 0x72, 0x00,
-  0x38, 0x64, 0x69, 0x73,  0x74, 0x61, 0x6E, 0x63,  0x65, 0x2C, 0x38, 0x61,  0x6E, 0x67, 0x6C, 0x65,
-  0x2C, 0x38, 0x63, 0x6F,  0x6C, 0x6F, 0x72, 0x73,  0x2C, 0x38, 0x61, 0x6C,  0x70, 0x68, 0x61, 0x73,
-  0x2C, 0x38, 0x72, 0x61,  0x74, 0x69, 0x6F, 0x73,  0x2C, 0x38, 0x62, 0x6C,  0x75, 0x72, 0x58, 0x2C,
-  0x38, 0x62, 0x6C, 0x75,  0x72, 0x59, 0x2C, 0x38,  0x71, 0x75, 0x61, 0x6C,  0x69, 0x74, 0x79, 0x2C,
-  0x38, 0x73, 0x74, 0x72,  0x65, 0x6E, 0x67, 0x74,  0x68, 0x2C, 0x38, 0x6B,  0x6E, 0x6F, 0x63, 0x6B,
-  0x6F, 0x75, 0x74, 0x2C,  0x38, 0x74, 0x79, 0x70,  0x65, 0x00, 0x47, 0x72,  0x61, 0x64, 0x69, 0x65,
-  0x6E, 0x74, 0x47, 0x6C,  0x6F, 0x77, 0x46, 0x69,  0x6C, 0x74, 0x65, 0x72,  0x00, 0x73, 0x65, 0x74,
-  0x49, 0x6E, 0x74, 0x65,  0x72, 0x76, 0x61, 0x6C,  0x00, 0x63, 0x6C, 0x65,  0x61, 0x72, 0x49, 0x6E,
-  0x74, 0x65, 0x72, 0x76,  0x61, 0x6C, 0x00, 0x73,  0x65, 0x74, 0x54, 0x69,  0x6D, 0x65, 0x6F, 0x75,
-  0x74, 0x00, 0x63, 0x6C,  0x65, 0x61, 0x72, 0x54,  0x69, 0x6D, 0x65, 0x6F,  0x75, 0x74, 0x00, 0x73,
-  0x68, 0x6F, 0x77, 0x52,  0x65, 0x64, 0x72, 0x61,  0x77, 0x52, 0x65, 0x67,  0x69, 0x6F, 0x6E, 0x73,
-  0x00, 0x74, 0x72, 0x61,  0x63, 0x65, 0x00, 0x75,  0x70, 0x64, 0x61, 0x74,  0x65, 0x41, 0x66, 0x74,
-  0x65, 0x72, 0x45, 0x76,  0x65, 0x6E, 0x74, 0x00,  0x8E, 0x12, 0x00, 0x45,  0x72, 0x72, 0x6F, 0x72,
-  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x6D,  0x73, 0x67, 0x00, 0x23,  0x00, 0x96, 0x02, 0x00,
-  0x08, 0x08, 0x1C, 0x44,  0x96, 0x02, 0x00, 0x08,  0x09, 0x49, 0x12, 0x12,  0x9D, 0x02, 0x00, 0x0F,
-  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x04, 0x00, 0x08, 0x0B,  0x08, 0x08, 0x1C, 0x4F,
-  0x8E, 0x15, 0x00, 0x41,  0x73, 0x42, 0x72, 0x6F,  0x61, 0x64, 0x63, 0x61,  0x73, 0x74, 0x65, 0x72,
-  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x8E, 0x10, 0x00, 0x4C,  0x6F, 0x61, 0x64, 0x56,
-  0x61, 0x72, 0x73, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x8E,  0x0E, 0x00, 0x43, 0x61,
-  0x6D, 0x65, 0x72, 0x61,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x8E, 0x1D, 0x00, 0x43,
-  0x6F, 0x6E, 0x74, 0x65,  0x78, 0x74, 0x4D, 0x65,  0x6E, 0x75, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
-  0x00, 0x63, 0x61, 0x6C,  0x6C, 0x62, 0x61, 0x63,  0x6B, 0x00, 0x56, 0x00,  0x96, 0x02, 0x00, 0x08,
-  0x0A, 0x1C, 0x96, 0x04,  0x00, 0x08, 0xF4, 0x08,  0xF5, 0x1C, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x09, 0x00,  0x08, 0xF6, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,  0xF7, 0x40, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x28, 0x00,  0x08, 0xF8, 0x08, 0xF9,  0x05, 0x01, 0x08, 0xFA,
-  0x05, 0x01, 0x08, 0xFB,  0x05, 0x01, 0x08, 0xFC,  0x05, 0x01, 0x08, 0xFD,  0x05, 0x01, 0x08, 0xFE,
-  0x05, 0x01, 0x08, 0xFF,  0x05, 0x01, 0x09, 0x00,  0x01, 0x05, 0x01, 0x07,  0x08, 0x00, 0x00, 0x00,
-  0x43, 0x4F, 0x8E, 0x4D,  0x00, 0x43, 0x6F, 0x6E,  0x74, 0x65, 0x78, 0x74,  0x4D, 0x65, 0x6E, 0x75,
-  0x49, 0x74, 0x65, 0x6D,  0x00, 0x05, 0x00, 0x00,  0x00, 0x00, 0x00, 0x63,  0x61, 0x70, 0x74, 0x69,
-  0x6F, 0x6E, 0x00, 0x00,  0x63, 0x61, 0x6C, 0x6C,  0x62, 0x61, 0x63, 0x6B,  0x00, 0x00, 0x73, 0x65,
-  0x70, 0x61, 0x72, 0x61,  0x74, 0x6F, 0x72, 0x42,  0x65, 0x66, 0x6F, 0x72,  0x65, 0x00, 0x00, 0x65,
-  0x6E, 0x61, 0x62, 0x6C,  0x65, 0x64, 0x00, 0x00,  0x76, 0x69, 0x73, 0x69,  0x62, 0x6C, 0x65, 0x00,
-  0xBE, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x06, 0x00, 0x09,  0x04, 0x01, 0x09, 0x04,
-  0x01, 0x1C, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x04, 0x00,  0x08, 0xF4, 0x08, 0xF5,
-  0x1C, 0x4F, 0x96, 0x03,  0x00, 0x09, 0x05, 0x01,  0x1C, 0x96, 0x01, 0x00,  0x03, 0x49, 0x9D, 0x02,
-  0x00, 0x16, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x06, 0x00,  0x09, 0x05, 0x01, 0x09,
-  0x05, 0x01, 0x1C, 0x4F,  0x99, 0x02, 0x00, 0x0F,  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,
-  0x05, 0x00, 0x09, 0x05,  0x01, 0x05, 0x00, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x98, 0x1C, 0x96, 0x01,
-  0x00, 0x03, 0x49, 0x9D,  0x02, 0x00, 0x14, 0x00,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x04,
-  0x00, 0x08, 0x98, 0x08,  0x98, 0x1C, 0x4F, 0x99,  0x02, 0x00, 0x0E, 0x00,  0x96, 0x02, 0x00, 0x08,
-  0x0A, 0x1C, 0x96, 0x04,  0x00, 0x08, 0x98, 0x05,  0x01, 0x4F, 0x96, 0x03,  0x00, 0x09, 0x06, 0x01,
-  0x1C, 0x96, 0x01, 0x00,  0x03, 0x49, 0x9D, 0x02,  0x00, 0x16, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x06, 0x00,  0x09, 0x06, 0x01, 0x09,  0x06, 0x01, 0x1C, 0x4F,  0x99, 0x02, 0x00, 0x0F,
-  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x05, 0x00, 0x09, 0x06,  0x01, 0x05, 0x01, 0x4F,
-  0x8E, 0x17, 0x00, 0x4C,  0x6F, 0x63, 0x61, 0x6C,  0x43, 0x6F, 0x6E, 0x6E,  0x65, 0x63, 0x74, 0x69,
-  0x6F, 0x6E, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x8E, 0x12,  0x00, 0x4D, 0x69, 0x63,
-  0x72, 0x6F, 0x70, 0x68,  0x6F, 0x6E, 0x65, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x8E,
-  0x11, 0x00, 0x58, 0x4D,  0x4C, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x00,  0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x8E,  0x14, 0x00, 0x53, 0x68,  0x61, 0x72, 0x65, 0x64,  0x4F, 0x62, 0x6A, 0x65,
-  0x63, 0x74, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x8E, 0x1B,  0x00, 0x41, 0x73, 0x53,
-  0x65, 0x74, 0x75, 0x70,  0x45, 0x72, 0x72, 0x6F,  0x72, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,
-  0x6E, 0x61, 0x6D, 0x65,  0x73, 0x00, 0x5F, 0x00,  0x96, 0x0D, 0x00, 0x09,  0xE6, 0x01, 0x09, 0x92,
-  0x01, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0xC7,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xE5, 0x01, 0x52,
-  0x96, 0x02, 0x00, 0x08,  0x19, 0x4E, 0x3C, 0x96,  0x07, 0x00, 0x08, 0x18,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x3C, 0x99, 0x02,  0x00, 0x09, 0x00, 0x96,  0x02, 0x00, 0x08, 0x18,  0x4C, 0x1C, 0x50, 0x1D,
-  0x96, 0x02, 0x00, 0x08,  0x18, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xE6, 0x01,  0x1C, 0x48, 0x12, 0x9D,
-  0x02, 0x00, 0x13, 0x00,  0x96, 0x09, 0x00, 0x08,  0xC6, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x0C,
-  0x40, 0x3C, 0x99, 0x02,  0x00, 0xD0, 0xFF, 0x8E,  0x16, 0x00, 0x52, 0x65,  0x6D, 0x6F, 0x74, 0x65,
-  0x4C, 0x53, 0x4F, 0x55,  0x73, 0x61, 0x67, 0x65,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
-  0x96, 0x13, 0x00, 0x08,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x07,
-  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x1D,  0x96, 0x13, 0x00, 0x08,  0x02, 0x07, 0x00, 0x00,
-  0x00, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x1D,
-  0x96, 0x13, 0x00, 0x08,  0x03, 0x07, 0x01, 0x00,  0x00, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x07,
-  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x1D,  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,
-  0x00, 0x00, 0x43, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x05, 0x1C, 0x96, 0x13,  0x00, 0x08, 0x06, 0x07,
-  0x08, 0x00, 0x00, 0x00,  0x07, 0x65, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,
-  0x3D, 0x4F, 0x96, 0x08,  0x00, 0x07, 0x07, 0x00,  0x00, 0x00, 0x02, 0x08,  0x05, 0x1C, 0x96, 0x07,
-  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x00,  0x3D, 0x17, 0x96, 0x0E,  0x00, 0x07, 0x80, 0x00,
-  0x00, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,  0x07, 0x08, 0x05, 0x1C,  0x96, 0x07, 0x00, 0x07,
-  0x04, 0x00, 0x00, 0x00,  0x08, 0x00, 0x3D, 0x17,  0x96, 0x02, 0x00, 0x08,  0x0C, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x0E, 0x08, 0x0C, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x0D, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x0B, 0x08,  0x0C, 0x87, 0x01, 0x00,  0x00, 0x4F, 0x96, 0x02,
-  0x00, 0x04, 0x00, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x0C, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x0F, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x0D, 0x00,
-  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,  0x3E, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x10, 0x1C,  0x96, 0x13, 0x00, 0x08,  0x11, 0x07, 0x0C, 0x00,  0x00, 0x00, 0x07, 0x65,
-  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x10, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x12, 0x8E,  0x0B, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
-  0x00, 0x78, 0x00, 0x3C,  0x00, 0x96, 0x02, 0x00,  0x08, 0x13, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,
-  0x00, 0x00, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x14, 0x52,  0x17, 0x96, 0x02, 0x00,
-  0x08, 0x13, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x15, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x16, 0x52, 0x17, 0x96,  0x02, 0x00, 0x05, 0x01,
-  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x10, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x14, 0x8E, 0x0B, 0x00,
-  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x78,  0x00, 0x8F, 0x00, 0x96,  0x04, 0x00, 0x08, 0x17,
-  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x15,  0x4E, 0x3C, 0x96, 0x02,  0x00, 0x08, 0x18, 0x41,
-  0x96, 0x07, 0x00, 0x08,  0x18, 0x07, 0x00, 0x00,  0x00, 0x00, 0x3C, 0x99,  0x02, 0x00, 0x09, 0x00,
-  0x96, 0x02, 0x00, 0x08,  0x18, 0x4C, 0x1C, 0x50,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x18, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x17,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x19, 0x4E, 0x48,  0x12, 0x9D, 0x02, 0x00,
-  0x42, 0x00, 0x96, 0x02,  0x00, 0x08, 0x17, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x18, 0x1C, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x13,  0x1C, 0x49, 0x12, 0x9D,  0x02, 0x00, 0x23, 0x00,  0x96, 0x07, 0x00, 0x07,
-  0x01, 0x00, 0x00, 0x00,  0x08, 0x18, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
-  0x17, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1A, 0x52,  0x17, 0x96, 0x02, 0x00,  0x05, 0x01, 0x3E, 0x99,
-  0x02, 0x00, 0x9C, 0xFF,  0x96, 0x02, 0x00, 0x05,  0x00, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x10,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x1B, 0x8E, 0x0B,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,
-  0x6F, 0x00, 0x73, 0x00,  0x96, 0x02, 0x00, 0x08,  0x1C, 0x1C, 0x96, 0x13,  0x00, 0x08, 0x11, 0x07,
-  0x0C, 0x00, 0x00, 0x00,  0x07, 0x65, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,
-  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x04, 0x00, 0x08,  0x12, 0x08, 0x10, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x12, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x04, 0x00,
-  0x08, 0x14, 0x08, 0x10,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x14, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x1C, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x15, 0x07,  0x00, 0x00, 0x00, 0x00,  0x42, 0x4F, 0x96, 0x09,
-  0x00, 0x07, 0x83, 0x00,  0x00, 0x00, 0x08, 0x1D,  0x08, 0x1C, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x4F,  0x96, 0x8C, 0x00, 0x08,  0x1E, 0x08, 0x1F, 0x07,
-  0x12, 0x00, 0x00, 0x00,  0x08, 0x20, 0x07, 0x08,  0x00, 0x00, 0x00, 0x08,  0x21, 0x07, 0x14, 0x00,
-  0x00, 0x00, 0x08, 0x22,  0x07, 0x11, 0x00, 0x00,  0x00, 0x08, 0x23, 0x07,  0x2E, 0x00, 0x00, 0x00,
-  0x08, 0x24, 0x07, 0x28,  0x00, 0x00, 0x00, 0x08,  0x25, 0x07, 0x23, 0x00,  0x00, 0x00, 0x08, 0x26,
-  0x07, 0x0D, 0x00, 0x00,  0x00, 0x08, 0x27, 0x07,  0x1B, 0x00, 0x00, 0x00,  0x08, 0x28, 0x07, 0x24,
-  0x00, 0x00, 0x00, 0x08,  0x29, 0x07, 0x2D, 0x00,  0x00, 0x00, 0x08, 0x2A,  0x07, 0x25, 0x00, 0x00,
-  0x00, 0x08, 0x2B, 0x07,  0x22, 0x00, 0x00, 0x00,  0x08, 0x2C, 0x07, 0x21,  0x00, 0x00, 0x00, 0x08,
-  0x2D, 0x07, 0x27, 0x00,  0x00, 0x00, 0x08, 0x2E,  0x07, 0x10, 0x00, 0x00,  0x00, 0x08, 0x2F, 0x07,
-  0x20, 0x00, 0x00, 0x00,  0x08, 0x30, 0x07, 0x09,  0x00, 0x00, 0x00, 0x08,  0x31, 0x07, 0x26, 0x00,
-  0x00, 0x00, 0x07, 0x13,  0x00, 0x00, 0x00, 0x43,  0x1D, 0x96, 0x09, 0x00,  0x08, 0x32, 0x07, 0x20,
-  0x03, 0x00, 0x00, 0x08,  0x1E, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x02,
-  0x3D, 0x17, 0x96, 0x02,  0x00, 0x08, 0x1E, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
-  0x08, 0x10, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1B,  0x52, 0x17, 0x96, 0x08,  0x00, 0x07, 0x07, 0x00,
-  0x00, 0x00, 0x02, 0x08,  0x1E, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x00,
-  0x3D, 0x17, 0x96, 0x07,  0x00, 0x08, 0x33, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x1D, 0x96, 0x02,
-  0x00, 0x08, 0x33, 0x1C,  0x96, 0x13, 0x00, 0x08,  0x34, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x05,
-  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x33, 0x1C, 0x96, 0x13,  0x00, 0x08, 0x35, 0x07,  0x01, 0x00, 0x00, 0x00,  0x07, 0x05, 0x00, 0x00,
-  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x33, 0x1C,
-  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x10, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1B,
-  0x52, 0x17, 0x96, 0x08,  0x00, 0x07, 0x07, 0x00,  0x00, 0x00, 0x02, 0x08,  0x33, 0x1C, 0x96, 0x07,
-  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x00,  0x3D, 0x17, 0x96, 0x07,  0x00, 0x08, 0x36, 0x07,
-  0x00, 0x00, 0x00, 0x00,  0x43, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x36, 0x1C,  0x96, 0x07, 0x00, 0x07,
-  0x01, 0x00, 0x00, 0x00,  0x08, 0x10, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1B,  0x52, 0x17, 0x96, 0x0E,
-  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x37,  0x07, 0x9A, 0x02, 0x00,  0x00, 0x08, 0x36, 0x1C,
-  0x96, 0x07, 0x00, 0x07,  0x04, 0x00, 0x00, 0x00,  0x08, 0x03, 0x3D, 0x17,  0x96, 0x13, 0x00, 0x08,
-  0x38, 0x07, 0xC8, 0x00,  0x00, 0x00, 0x07, 0x34,  0x08, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
-  0x08, 0x39, 0x3D, 0x1D,  0x96, 0x09, 0x00, 0x08,  0x3A, 0x07, 0x34, 0x08,  0x00, 0x00, 0x08, 0x38,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
-  0x02, 0x3D, 0x17, 0x96,  0x12, 0x00, 0x02, 0x07,  0x04, 0x00, 0x00, 0x00,  0x07, 0x34, 0x08, 0x00,
-  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x96, 0x09, 0x00,  0x08, 0x3B, 0x07, 0x03,
+  0x6A, 0x65, 0x63, 0x74,  0x2E, 0x67, 0x65, 0x74,  0x4C, 0x6F, 0x63, 0x61,  0x6C, 0x20, 0x28, 0x73,
+  0x74, 0x61, 0x74, 0x69,  0x63, 0x29, 0x00, 0x67,  0x65, 0x74, 0x52, 0x65,  0x6D, 0x6F, 0x74, 0x65,
+  0x00, 0x49, 0x6D, 0x70,  0x6C, 0x65, 0x6D, 0x65,  0x6E, 0x74, 0x20, 0x53,  0x68, 0x61, 0x72, 0x65,
+  0x64, 0x4F, 0x62, 0x6A,  0x65, 0x63, 0x74, 0x2E,  0x67, 0x65, 0x74, 0x52,  0x65, 0x6D, 0x6F, 0x74,
+  0x65, 0x20, 0x28, 0x73,  0x74, 0x61, 0x74, 0x69,  0x63, 0x29, 0x00, 0x64,  0x65, 0x6C, 0x65, 0x74,
+  0x65, 0x41, 0x6C, 0x6C,  0x2C, 0x67, 0x65, 0x74,  0x44, 0x69, 0x73, 0x6B,  0x55, 0x73, 0x61, 0x67,
+  0x65, 0x00, 0x36, 0x63,  0x6F, 0x6E, 0x6E, 0x65,  0x63, 0x74, 0x2C, 0x36,  0x73, 0x65, 0x6E, 0x64,
+  0x2C, 0x36, 0x66, 0x6C,  0x75, 0x73, 0x68, 0x2C,  0x36, 0x63, 0x6C, 0x6F,  0x73, 0x65, 0x2C, 0x36,
+  0x67, 0x65, 0x74, 0x53,  0x69, 0x7A, 0x65, 0x2C,  0x36, 0x73, 0x65, 0x74,  0x46, 0x70, 0x73, 0x2C,
+  0x36, 0x63, 0x6C, 0x65,  0x61, 0x72, 0x00, 0x73,  0x70, 0x6C, 0x69, 0x74,  0x00, 0x63, 0x6F, 0x75,
+  0x6E, 0x74, 0x00, 0x52,  0x65, 0x6D, 0x6F, 0x74,  0x65, 0x4C, 0x53, 0x4F,  0x55, 0x73, 0x61, 0x67,
+  0x65, 0x00, 0x67, 0x65,  0x74, 0x55, 0x52, 0x4C,  0x50, 0x61, 0x67, 0x65,  0x53, 0x75, 0x70, 0x70,
+  0x6F, 0x72, 0x74, 0x00,  0x49, 0x6D, 0x70, 0x6C,  0x65, 0x6D, 0x65, 0x6E,  0x74, 0x20, 0x52, 0x65,
+  0x6D, 0x6F, 0x74, 0x65,  0x4C, 0x53, 0x4F, 0x55,  0x73, 0x61, 0x67, 0x65,  0x2E, 0x67, 0x65, 0x74,
+  0x55, 0x52, 0x4C, 0x50,  0x61, 0x67, 0x65, 0x53,  0x75, 0x70, 0x70, 0x6F,  0x72, 0x74, 0x20, 0x28,
+  0x73, 0x74, 0x61, 0x74,  0x69, 0x63, 0x29, 0x00,  0x42, 0x75, 0x74, 0x74,  0x6F, 0x6E, 0x00, 0x67,
+  0x65, 0x74, 0x44, 0x65,  0x70, 0x74, 0x68, 0x00,  0x38, 0x73, 0x63, 0x61,  0x6C, 0x65, 0x39, 0x47,
+  0x72, 0x69, 0x64, 0x2C,  0x38, 0x66, 0x69, 0x6C,  0x74, 0x65, 0x72, 0x73,  0x2C, 0x38, 0x63, 0x61,
+  0x63, 0x68, 0x65, 0x41,  0x73, 0x42, 0x69, 0x74,  0x6D, 0x61, 0x70, 0x2C,  0x38, 0x62, 0x6C, 0x65,
+  0x6E, 0x64, 0x4D, 0x6F,  0x64, 0x65, 0x00, 0x66,  0x69, 0x6C, 0x74, 0x65,  0x72, 0x73, 0x00, 0x42,
+  0x69, 0x74, 0x6D, 0x61,  0x70, 0x46, 0x69, 0x6C,  0x74, 0x65, 0x72, 0x00,  0x38, 0x63, 0x6C, 0x6F,
+  0x6E, 0x65, 0x00, 0x42,  0x65, 0x76, 0x65, 0x6C,  0x46, 0x69, 0x6C, 0x74,  0x65, 0x72, 0x00, 0x38,
+  0x64, 0x69, 0x73, 0x74,  0x61, 0x6E, 0x63, 0x65,  0x2C, 0x38, 0x61, 0x6E,  0x67, 0x6C, 0x65, 0x2C,
+  0x38, 0x68, 0x69, 0x67,  0x68, 0x6C, 0x69, 0x67,  0x68, 0x74, 0x43, 0x6F,  0x6C, 0x6F, 0x72, 0x2C,
+  0x38, 0x68, 0x69, 0x67,  0x68, 0x6C, 0x69, 0x67,  0x68, 0x74, 0x41, 0x6C,  0x70, 0x68, 0x61, 0x2C,
+  0x38, 0x73, 0x68, 0x61,  0x64, 0x6F, 0x77, 0x43,  0x6F, 0x6C, 0x6F, 0x72,  0x2C, 0x38, 0x73, 0x68,
+  0x61, 0x64, 0x6F, 0x77,  0x41, 0x6C, 0x70, 0x68,  0x61, 0x2C, 0x38, 0x71,  0x75, 0x61, 0x6C, 0x69,
+  0x74, 0x79, 0x2C, 0x38,  0x73, 0x74, 0x72, 0x65,  0x6E, 0x67, 0x74, 0x68,  0x2C, 0x38, 0x6B, 0x6E,
+  0x6F, 0x63, 0x6B, 0x6F,  0x75, 0x74, 0x2C, 0x38,  0x62, 0x6C, 0x75, 0x72,  0x58, 0x2C, 0x38, 0x62,
+  0x6C, 0x75, 0x72, 0x59,  0x2C, 0x38, 0x74, 0x79,  0x70, 0x65, 0x00, 0x42,  0x6C, 0x75, 0x72, 0x46,
+  0x69, 0x6C, 0x74, 0x65,  0x72, 0x00, 0x38, 0x62,  0x6C, 0x75, 0x72, 0x58,  0x2C, 0x38, 0x62, 0x6C,
+  0x75, 0x72, 0x59, 0x2C,  0x38, 0x71, 0x75, 0x61,  0x6C, 0x69, 0x74, 0x79,  0x00, 0x43, 0x6F, 0x6C,
+  0x6F, 0x72, 0x4D, 0x61,  0x74, 0x72, 0x69, 0x78,  0x46, 0x69, 0x6C, 0x74,  0x65, 0x72, 0x00, 0x38,
+  0x6D, 0x61, 0x74, 0x72,  0x69, 0x78, 0x00, 0x43,  0x6F, 0x6E, 0x76, 0x6F,  0x6C, 0x75, 0x74, 0x69,
+  0x6F, 0x6E, 0x46, 0x69,  0x6C, 0x74, 0x65, 0x72,  0x00, 0x38, 0x6D, 0x61,  0x74, 0x72, 0x69, 0x78,
+  0x58, 0x2C, 0x38, 0x6D,  0x61, 0x74, 0x72, 0x69,  0x78, 0x59, 0x2C, 0x38,  0x6D, 0x61, 0x74, 0x72,
+  0x69, 0x78, 0x2C, 0x38,  0x64, 0x69, 0x76, 0x69,  0x73, 0x6F, 0x72, 0x2C,  0x38, 0x62, 0x69, 0x61,
+  0x73, 0x2C, 0x38, 0x70,  0x72, 0x65, 0x73, 0x65,  0x72, 0x76, 0x65, 0x41,  0x6C, 0x70, 0x68, 0x61,
+  0x2C, 0x38, 0x63, 0x6C,  0x61, 0x6D, 0x70, 0x2C,  0x38, 0x63, 0x6F, 0x6C,  0x6F, 0x72, 0x2C, 0x38,
+  0x61, 0x6C, 0x70, 0x68,  0x61, 0x00, 0x44, 0x69,  0x73, 0x70, 0x6C, 0x61,  0x63, 0x65, 0x6D, 0x65,
+  0x6E, 0x74, 0x4D, 0x61,  0x70, 0x46, 0x69, 0x6C,  0x74, 0x65, 0x72, 0x00,  0x38, 0x6D, 0x61, 0x70,
+  0x42, 0x69, 0x74, 0x6D,  0x61, 0x70, 0x2C, 0x38,  0x6D, 0x61, 0x70, 0x50,  0x6F, 0x69, 0x6E, 0x74,
+  0x2C, 0x38, 0x63, 0x6F,  0x6D, 0x70, 0x6F, 0x6E,  0x65, 0x6E, 0x74, 0x58,  0x2C, 0x38, 0x63, 0x6F,
+  0x6D, 0x70, 0x6F, 0x6E,  0x65, 0x6E, 0x74, 0x59,  0x2C, 0x38, 0x73, 0x63,  0x61, 0x6C, 0x65, 0x58,
+  0x2C, 0x38, 0x73, 0x63,  0x61, 0x6C, 0x65, 0x59,  0x2C, 0x38, 0x6D, 0x6F,  0x64, 0x65, 0x2C, 0x38,
+  0x63, 0x6F, 0x6C, 0x6F,  0x72, 0x2C, 0x38, 0x61,  0x6C, 0x70, 0x68, 0x61,  0x00, 0x44, 0x72, 0x6F,
+  0x70, 0x53, 0x68, 0x61,  0x64, 0x6F, 0x77, 0x46,  0x69, 0x6C, 0x74, 0x65,  0x72, 0x00, 0x38, 0x64,
+  0x69, 0x73, 0x74, 0x61,  0x6E, 0x63, 0x65, 0x2C,  0x38, 0x61, 0x6E, 0x67,  0x6C, 0x65, 0x2C, 0x38,
+  0x63, 0x6F, 0x6C, 0x6F,  0x72, 0x2C, 0x38, 0x61,  0x6C, 0x70, 0x68, 0x61,  0x2C, 0x38, 0x71, 0x75,
+  0x61, 0x6C, 0x69, 0x74,  0x79, 0x2C, 0x38, 0x69,  0x6E, 0x6E, 0x65, 0x72,  0x2C, 0x38, 0x6B, 0x6E,
+  0x6F, 0x63, 0x6B, 0x6F,  0x75, 0x74, 0x2C, 0x38,  0x62, 0x6C, 0x75, 0x72,  0x58, 0x2C, 0x38, 0x62,
+  0x6C, 0x75, 0x72, 0x59,  0x2C, 0x38, 0x73, 0x74,  0x72, 0x65, 0x6E, 0x67,  0x74, 0x68, 0x2C, 0x38,
+  0x68, 0x69, 0x64, 0x65,  0x4F, 0x62, 0x6A, 0x65,  0x63, 0x74, 0x00, 0x47,  0x6C, 0x6F, 0x77, 0x46,
+  0x69, 0x6C, 0x74, 0x65,  0x72, 0x00, 0x38, 0x63,  0x6F, 0x6C, 0x6F, 0x72,  0x2C, 0x38, 0x61, 0x6C,
+  0x70, 0x68, 0x61, 0x2C,  0x38, 0x71, 0x75, 0x61,  0x6C, 0x69, 0x74, 0x79,  0x2C, 0x38, 0x69, 0x6E,
+  0x6E, 0x65, 0x72, 0x2C,  0x38, 0x6B, 0x6E, 0x6F,  0x63, 0x6B, 0x6F, 0x75,  0x74, 0x2C, 0x38, 0x62,
+  0x6C, 0x75, 0x72, 0x58,  0x2C, 0x38, 0x62, 0x6C,  0x75, 0x72, 0x59, 0x2C,  0x38, 0x73, 0x74, 0x72,
+  0x65, 0x6E, 0x67, 0x74,  0x68, 0x00, 0x47, 0x72,  0x61, 0x64, 0x69, 0x65,  0x6E, 0x74, 0x42, 0x65,
+  0x76, 0x65, 0x6C, 0x46,  0x69, 0x6C, 0x74, 0x65,  0x72, 0x00, 0x38, 0x64,  0x69, 0x73, 0x74, 0x61,
+  0x6E, 0x63, 0x65, 0x2C,  0x38, 0x61, 0x6E, 0x67,  0x6C, 0x65, 0x2C, 0x38,  0x63, 0x6F, 0x6C, 0x6F,
+  0x72, 0x73, 0x2C, 0x38,  0x61, 0x6C, 0x70, 0x68,  0x61, 0x73, 0x2C, 0x38,  0x72, 0x61, 0x74, 0x69,
+  0x6F, 0x73, 0x2C, 0x38,  0x62, 0x6C, 0x75, 0x72,  0x58, 0x2C, 0x38, 0x62,  0x6C, 0x75, 0x72, 0x59,
+  0x2C, 0x38, 0x71, 0x75,  0x61, 0x6C, 0x69, 0x74,  0x79, 0x2C, 0x38, 0x73,  0x74, 0x72, 0x65, 0x6E,
+  0x67, 0x74, 0x68, 0x2C,  0x38, 0x6B, 0x6E, 0x6F,  0x63, 0x6B, 0x6F, 0x75,  0x74, 0x2C, 0x38, 0x74,
+  0x79, 0x70, 0x65, 0x00,  0x47, 0x72, 0x61, 0x64,  0x69, 0x65, 0x6E, 0x74,  0x47, 0x6C, 0x6F, 0x77,
+  0x46, 0x69, 0x6C, 0x74,  0x65, 0x72, 0x00, 0x73,  0x65, 0x74, 0x49, 0x6E,  0x74, 0x65, 0x72, 0x76,
+  0x61, 0x6C, 0x00, 0x63,  0x6C, 0x65, 0x61, 0x72,  0x49, 0x6E, 0x74, 0x65,  0x72, 0x76, 0x61, 0x6C,
+  0x00, 0x73, 0x65, 0x74,  0x54, 0x69, 0x6D, 0x65,  0x6F, 0x75, 0x74, 0x00,  0x63, 0x6C, 0x65, 0x61,
+  0x72, 0x54, 0x69, 0x6D,  0x65, 0x6F, 0x75, 0x74,  0x00, 0x73, 0x68, 0x6F,  0x77, 0x52, 0x65, 0x64,
+  0x72, 0x61, 0x77, 0x52,  0x65, 0x67, 0x69, 0x6F,  0x6E, 0x73, 0x00, 0x74,  0x72, 0x61, 0x63, 0x65,
+  0x00, 0x75, 0x70, 0x64,  0x61, 0x74, 0x65, 0x41,  0x66, 0x74, 0x65, 0x72,  0x45, 0x76, 0x65, 0x6E,
+  0x74, 0x00, 0x8E, 0x12,  0x00, 0x45, 0x72, 0x72,  0x6F, 0x72, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
+  0x00, 0x6D, 0x73, 0x67,  0x00, 0x23, 0x00, 0x96,  0x02, 0x00, 0x08, 0x08,  0x1C, 0x44, 0x96, 0x02,
+  0x00, 0x08, 0x09, 0x49,  0x12, 0x12, 0x9D, 0x02,  0x00, 0x0F, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,
+  0x1C, 0x96, 0x04, 0x00,  0x08, 0x0B, 0x08, 0x08,  0x1C, 0x4F, 0x8E, 0x15,  0x00, 0x41, 0x73, 0x42,
+  0x72, 0x6F, 0x61, 0x64,  0x63, 0x61, 0x73, 0x74,  0x65, 0x72, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x8E, 0x10,  0x00, 0x4C, 0x6F, 0x61,  0x64, 0x56, 0x61, 0x72,  0x73, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x00, 0x8E, 0x0E, 0x00,  0x43, 0x61, 0x6D, 0x65,  0x72, 0x61, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x8E, 0x1D,  0x00, 0x43, 0x6F, 0x6E,  0x74, 0x65, 0x78, 0x74,
+  0x4D, 0x65, 0x6E, 0x75,  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x63,  0x61, 0x6C, 0x6C, 0x62,
+  0x61, 0x63, 0x6B, 0x00,  0x58, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x04, 0x00, 0x08,
+  0xF6, 0x08, 0xF7, 0x1C,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x09, 0x00, 0x08, 0xF8,
+  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0xF9, 0x40,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,
+  0x2A, 0x00, 0x08, 0xFA,  0x08, 0xFB, 0x05, 0x01,  0x08, 0xFC, 0x05, 0x01,  0x08, 0xFD, 0x05, 0x01,
+  0x08, 0xFE, 0x05, 0x01,  0x08, 0xFF, 0x05, 0x01,  0x09, 0x00, 0x01, 0x05,  0x01, 0x09, 0x01, 0x01,
+  0x05, 0x01, 0x09, 0x02,  0x01, 0x05, 0x01, 0x07,  0x08, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x8E, 0x4D,
+  0x00, 0x43, 0x6F, 0x6E,  0x74, 0x65, 0x78, 0x74,  0x4D, 0x65, 0x6E, 0x75,  0x49, 0x74, 0x65, 0x6D,
+  0x00, 0x05, 0x00, 0x00,  0x00, 0x00, 0x00, 0x63,  0x61, 0x70, 0x74, 0x69,  0x6F, 0x6E, 0x00, 0x00,
+  0x63, 0x61, 0x6C, 0x6C,  0x62, 0x61, 0x63, 0x6B,  0x00, 0x00, 0x73, 0x65,  0x70, 0x61, 0x72, 0x61,
+  0x74, 0x6F, 0x72, 0x42,  0x65, 0x66, 0x6F, 0x72,  0x65, 0x00, 0x00, 0x65,  0x6E, 0x61, 0x62, 0x6C,
+  0x65, 0x64, 0x00, 0x00,  0x76, 0x69, 0x73, 0x69,  0x62, 0x6C, 0x65, 0x00,  0xBE, 0x00, 0x96, 0x02,
+  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x06, 0x00, 0x09,  0x06, 0x01, 0x09, 0x06,  0x01, 0x1C, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x04, 0x00,  0x08, 0xF6, 0x08, 0xF7,  0x1C, 0x4F, 0x96, 0x03,
+  0x00, 0x09, 0x07, 0x01,  0x1C, 0x96, 0x01, 0x00,  0x03, 0x49, 0x9D, 0x02,  0x00, 0x16, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x06, 0x00,  0x09, 0x07, 0x01, 0x09,  0x07, 0x01, 0x1C, 0x4F,
+  0x99, 0x02, 0x00, 0x0F,  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x05, 0x00, 0x09, 0x07,
+  0x01, 0x05, 0x00, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x98, 0x1C, 0x96, 0x01,  0x00, 0x03, 0x49, 0x9D,
+  0x02, 0x00, 0x14, 0x00,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x04,  0x00, 0x08, 0x98, 0x08,
+  0x98, 0x1C, 0x4F, 0x99,  0x02, 0x00, 0x0E, 0x00,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x04,
+  0x00, 0x08, 0x98, 0x05,  0x01, 0x4F, 0x96, 0x03,  0x00, 0x09, 0x08, 0x01,  0x1C, 0x96, 0x01, 0x00,
+  0x03, 0x49, 0x9D, 0x02,  0x00, 0x16, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x06, 0x00,
+  0x09, 0x08, 0x01, 0x09,  0x08, 0x01, 0x1C, 0x4F,  0x99, 0x02, 0x00, 0x0F,  0x00, 0x96, 0x02, 0x00,
+  0x08, 0x0A, 0x1C, 0x96,  0x05, 0x00, 0x09, 0x08,  0x01, 0x05, 0x01, 0x4F,  0x8E, 0x17, 0x00, 0x4C,
+  0x6F, 0x63, 0x61, 0x6C,  0x43, 0x6F, 0x6E, 0x6E,  0x65, 0x63, 0x74, 0x69,  0x6F, 0x6E, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x8E, 0x12,  0x00, 0x4D, 0x69, 0x63,  0x72, 0x6F, 0x70, 0x68,
+  0x6F, 0x6E, 0x65, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x8E,  0x11, 0x00, 0x58, 0x4D,
+  0x4C, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x8E,
+  0x14, 0x00, 0x53, 0x68,  0x61, 0x72, 0x65, 0x64,  0x4F, 0x62, 0x6A, 0x65,  0x63, 0x74, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x8E, 0x1B,  0x00, 0x41, 0x73, 0x53,  0x65, 0x74, 0x75, 0x70,
+  0x45, 0x72, 0x72, 0x6F,  0x72, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,  0x6E, 0x61, 0x6D, 0x65,
+  0x73, 0x00, 0x5F, 0x00,  0x96, 0x0D, 0x00, 0x09,  0xE8, 0x01, 0x09, 0x94,  0x01, 0x07, 0x01, 0x00,
+  0x00, 0x00, 0x08, 0xC7,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xE7, 0x01, 0x52,  0x96, 0x02, 0x00, 0x08,
+  0x19, 0x4E, 0x3C, 0x96,  0x07, 0x00, 0x08, 0x18,  0x07, 0x00, 0x00, 0x00,  0x00, 0x3C, 0x99, 0x02,
+  0x00, 0x09, 0x00, 0x96,  0x02, 0x00, 0x08, 0x18,  0x4C, 0x1C, 0x50, 0x1D,  0x96, 0x02, 0x00, 0x08,
+  0x18, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xE8, 0x01,  0x1C, 0x48, 0x12, 0x9D,  0x02, 0x00, 0x13, 0x00,
+  0x96, 0x09, 0x00, 0x08,  0xC6, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x0C,  0x40, 0x3C, 0x99, 0x02,
+  0x00, 0xD0, 0xFF, 0x8E,  0x16, 0x00, 0x52, 0x65,  0x6D, 0x6F, 0x74, 0x65,  0x4C, 0x53, 0x4F, 0x55,
+  0x73, 0x61, 0x67, 0x65,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x96, 0x13, 0x00, 0x08,
+  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
+  0x08, 0x01, 0x3D, 0x1D,  0x96, 0x13, 0x00, 0x08,  0x02, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x04,
+  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x1D,  0x96, 0x13, 0x00, 0x08,
+  0x03, 0x07, 0x01, 0x00,  0x00, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
+  0x08, 0x01, 0x3D, 0x1D,  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x1D,
+  0x96, 0x02, 0x00, 0x08,  0x05, 0x1C, 0x96, 0x13,  0x00, 0x08, 0x06, 0x07,  0x08, 0x00, 0x00, 0x00,
+  0x07, 0x65, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x08,
+  0x00, 0x07, 0x07, 0x00,  0x00, 0x00, 0x02, 0x08,  0x05, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,
+  0x00, 0x00, 0x08, 0x00,  0x3D, 0x17, 0x96, 0x0E,  0x00, 0x07, 0x80, 0x00,  0x00, 0x00, 0x07, 0x00,
+  0x00, 0x00, 0x00, 0x08,  0x07, 0x08, 0x05, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x04, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x3D, 0x17,  0x96, 0x02, 0x00, 0x08,  0x0C, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
+  0x96, 0x04, 0x00, 0x08,  0x0E, 0x08, 0x0C, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x04,
+  0x00, 0x08, 0x0B, 0x08,  0x0C, 0x87, 0x01, 0x00,  0x00, 0x4F, 0x96, 0x02,  0x00, 0x04, 0x00, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x0C, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x0F, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x0D, 0x00,  0x96, 0x02, 0x00, 0x08,
+  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x10, 0x1C,
+  0x96, 0x13, 0x00, 0x08,  0x11, 0x07, 0x0C, 0x00,  0x00, 0x00, 0x07, 0x65,  0x00, 0x00, 0x00, 0x07,
+  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x10, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x12, 0x8E,  0x0B, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x78, 0x00, 0x3C,
+  0x00, 0x96, 0x02, 0x00,  0x08, 0x13, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,
+  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x14, 0x52,  0x17, 0x96, 0x02, 0x00,  0x08, 0x13, 0x1C, 0x96,
+  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x15, 0x4E,
+  0x96, 0x02, 0x00, 0x08,  0x16, 0x52, 0x17, 0x96,  0x02, 0x00, 0x05, 0x01,  0x3E, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x10, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x14, 0x8E, 0x0B, 0x00,  0x00, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x78,  0x00, 0x8F, 0x00, 0x96,  0x04, 0x00, 0x08, 0x17,  0x08, 0x0A, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x15,  0x4E, 0x3C, 0x96, 0x02,  0x00, 0x08, 0x18, 0x41,  0x96, 0x07, 0x00, 0x08,
+  0x18, 0x07, 0x00, 0x00,  0x00, 0x00, 0x3C, 0x99,  0x02, 0x00, 0x09, 0x00,  0x96, 0x02, 0x00, 0x08,
+  0x18, 0x4C, 0x1C, 0x50,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x18, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x17,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x19, 0x4E, 0x48,  0x12, 0x9D, 0x02, 0x00,  0x42, 0x00, 0x96, 0x02,
+  0x00, 0x08, 0x17, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x18, 0x1C, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x13,
+  0x1C, 0x49, 0x12, 0x9D,  0x02, 0x00, 0x23, 0x00,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
+  0x08, 0x18, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x17, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x1A, 0x52,  0x17, 0x96, 0x02, 0x00,  0x05, 0x01, 0x3E, 0x99,  0x02, 0x00, 0x9C, 0xFF,
+  0x96, 0x02, 0x00, 0x05,  0x00, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x10,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x1B, 0x8E, 0x0B,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,  0x6F, 0x00, 0x73, 0x00,
+  0x96, 0x02, 0x00, 0x08,  0x1C, 0x1C, 0x96, 0x13,  0x00, 0x08, 0x11, 0x07,  0x0C, 0x00, 0x00, 0x00,
+  0x07, 0x65, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x04, 0x00, 0x08,  0x12, 0x08, 0x10, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x12, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x04, 0x00,  0x08, 0x14, 0x08, 0x10,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x14, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x1C, 0x1C, 0x96, 0x07,
+  0x00, 0x08, 0x15, 0x07,  0x00, 0x00, 0x00, 0x00,  0x42, 0x4F, 0x96, 0x09,  0x00, 0x07, 0x83, 0x00,
+  0x00, 0x00, 0x08, 0x1D,  0x08, 0x1C, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
+  0x00, 0x3D, 0x17, 0x4F,  0x96, 0x8C, 0x00, 0x08,  0x1E, 0x08, 0x1F, 0x07,  0x12, 0x00, 0x00, 0x00,
+  0x08, 0x20, 0x07, 0x08,  0x00, 0x00, 0x00, 0x08,  0x21, 0x07, 0x14, 0x00,  0x00, 0x00, 0x08, 0x22,
+  0x07, 0x11, 0x00, 0x00,  0x00, 0x08, 0x23, 0x07,  0x2E, 0x00, 0x00, 0x00,  0x08, 0x24, 0x07, 0x28,
+  0x00, 0x00, 0x00, 0x08,  0x25, 0x07, 0x23, 0x00,  0x00, 0x00, 0x08, 0x26,  0x07, 0x0D, 0x00, 0x00,
+  0x00, 0x08, 0x27, 0x07,  0x1B, 0x00, 0x00, 0x00,  0x08, 0x28, 0x07, 0x24,  0x00, 0x00, 0x00, 0x08,
+  0x29, 0x07, 0x2D, 0x00,  0x00, 0x00, 0x08, 0x2A,  0x07, 0x25, 0x00, 0x00,  0x00, 0x08, 0x2B, 0x07,
+  0x22, 0x00, 0x00, 0x00,  0x08, 0x2C, 0x07, 0x21,  0x00, 0x00, 0x00, 0x08,  0x2D, 0x07, 0x27, 0x00,
+  0x00, 0x00, 0x08, 0x2E,  0x07, 0x10, 0x00, 0x00,  0x00, 0x08, 0x2F, 0x07,  0x20, 0x00, 0x00, 0x00,
+  0x08, 0x30, 0x07, 0x09,  0x00, 0x00, 0x00, 0x08,  0x31, 0x07, 0x26, 0x00,  0x00, 0x00, 0x07, 0x13,
+  0x00, 0x00, 0x00, 0x43,  0x1D, 0x96, 0x09, 0x00,  0x08, 0x32, 0x07, 0x20,  0x03, 0x00, 0x00, 0x08,
+  0x1E, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x02,  0x3D, 0x17, 0x96, 0x02,
+  0x00, 0x08, 0x1E, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x10, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x1B,  0x52, 0x17, 0x96, 0x08,  0x00, 0x07, 0x07, 0x00,  0x00, 0x00, 0x02, 0x08,
+  0x1E, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x00,  0x3D, 0x17, 0x96, 0x07,
+  0x00, 0x08, 0x33, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x33, 0x1C,
+  0x96, 0x13, 0x00, 0x08,  0x34, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x05,  0x00, 0x00, 0x00, 0x07,
+  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x33, 0x1C, 0x96, 0x13,
+  0x00, 0x08, 0x35, 0x07,  0x01, 0x00, 0x00, 0x00,  0x07, 0x05, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,
+  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x33, 0x1C,  0x96, 0x07, 0x00, 0x07,
+  0x01, 0x00, 0x00, 0x00,  0x08, 0x10, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1B,  0x52, 0x17, 0x96, 0x08,
+  0x00, 0x07, 0x07, 0x00,  0x00, 0x00, 0x02, 0x08,  0x33, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,
+  0x00, 0x00, 0x08, 0x00,  0x3D, 0x17, 0x96, 0x07,  0x00, 0x08, 0x36, 0x07,  0x00, 0x00, 0x00, 0x00,
+  0x43, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x36, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
+  0x08, 0x10, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1B,  0x52, 0x17, 0x96, 0x0E,  0x00, 0x07, 0x01, 0x00,
+  0x00, 0x00, 0x08, 0x37,  0x07, 0x9A, 0x02, 0x00,  0x00, 0x08, 0x36, 0x1C,  0x96, 0x07, 0x00, 0x07,
+  0x04, 0x00, 0x00, 0x00,  0x08, 0x03, 0x3D, 0x17,  0x96, 0x13, 0x00, 0x08,  0x38, 0x07, 0xC8, 0x00,
+  0x00, 0x00, 0x07, 0x34,  0x08, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x39, 0x3D, 0x1D,
+  0x96, 0x09, 0x00, 0x08,  0x3A, 0x07, 0x34, 0x08,  0x00, 0x00, 0x08, 0x38,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x02, 0x3D, 0x17, 0x96,
+  0x12, 0x00, 0x02, 0x07,  0x04, 0x00, 0x00, 0x00,  0x07, 0x34, 0x08, 0x00,  0x00, 0x07, 0x02, 0x00,
+  0x00, 0x00, 0x08, 0x01,  0x3D, 0x96, 0x09, 0x00,  0x08, 0x3B, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
+  0x38, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x07, 0x52, 0x17, 0x96,
+  0x02, 0x00, 0x08, 0x38,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x3C,
+  0x08, 0x3D, 0x4F, 0x96,  0x12, 0x00, 0x02, 0x07,  0x05, 0x00, 0x00, 0x00,  0x07, 0x34, 0x08, 0x00,
+  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x96, 0x09, 0x00,  0x08, 0x3E, 0x07, 0x03,
   0x00, 0x00, 0x00, 0x08,  0x38, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x07, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x38,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
-  0x04, 0x00, 0x08, 0x3C,  0x08, 0x3D, 0x4F, 0x96,  0x12, 0x00, 0x02, 0x07,  0x05, 0x00, 0x00, 0x00,
-  0x07, 0x34, 0x08, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x96, 0x09, 0x00,
-  0x08, 0x3E, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x38, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x07, 0x52, 0x17, 0x96,  0x08, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x02,
-  0x08, 0x38, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,
-  0x00, 0x08, 0x00, 0x3D,  0x17, 0x96, 0x02, 0x00,  0x08, 0x3F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,
-  0x4E, 0x96, 0x02, 0x00,  0x08, 0x40, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x1E,
-  0x00, 0x96, 0x07, 0x00,  0x08, 0x1C, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x3C, 0x96, 0x07, 0x00,
-  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x41, 0x52, 0x17, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x3F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x42, 0x8E, 0x0E, 0x00,  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x66,  0x6C, 0x61, 0x67, 0x00,
-  0x1E, 0x00, 0x96, 0x07,  0x00, 0x08, 0x1C, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x3C, 0x96, 0x07,
-  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x43, 0x52, 0x17,
-  0x4F, 0x96, 0x02, 0x00,  0x08, 0x3F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x02, 0x00,
-  0x08, 0x44, 0x8E, 0x0E,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,  0x66, 0x6C, 0x61, 0x67,
-  0x00, 0x1E, 0x00, 0x96,  0x07, 0x00, 0x08, 0x1C,  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x3C, 0x96,
-  0x07, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,  0x1C, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x45, 0x52,
-  0x17, 0x4F, 0x96, 0x09,  0x00, 0x08, 0x46, 0x07,  0x35, 0x08, 0x00, 0x00,  0x08, 0x3F, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x02, 0x3D,
-  0x17, 0x96, 0x0E, 0x00,  0x07, 0x05, 0x00, 0x00,  0x00, 0x08, 0x47, 0x07,  0x35, 0x08, 0x00, 0x00,
-  0x08, 0x3F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x04, 0x00, 0x00,
-  0x00, 0x08, 0x03, 0x3D,  0x17, 0x96, 0x08, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x02, 0x08, 0x3F,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
-  0x00, 0x3D, 0x17, 0x96,  0x02, 0x00, 0x08, 0x48,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
-  0x04, 0x00, 0x08, 0x49,  0x08, 0x4A, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x48,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x0D, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x4B,  0x07, 0x00, 0x00, 0x00,  0x00, 0x07, 0x2D, 0x01,
+  0x07, 0x52, 0x17, 0x96,  0x08, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x02,  0x08, 0x38, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x00, 0x3D,
+  0x17, 0x96, 0x02, 0x00,  0x08, 0x3F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x02, 0x00,
+  0x08, 0x40, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x1E,  0x00, 0x96, 0x07, 0x00,
+  0x08, 0x1C, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x3C, 0x96, 0x07, 0x00,  0x07, 0x00, 0x00, 0x00,
+  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x41, 0x52, 0x17, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x3F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x42, 0x8E, 0x0E, 0x00,
+  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x66,  0x6C, 0x61, 0x67, 0x00,  0x1E, 0x00, 0x96, 0x07,
+  0x00, 0x08, 0x1C, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x3C, 0x96, 0x07,  0x00, 0x07, 0x00, 0x00,
+  0x00, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x43, 0x52, 0x17,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x3F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x44, 0x8E, 0x0E,
+  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,  0x66, 0x6C, 0x61, 0x67,  0x00, 0x1E, 0x00, 0x96,
+  0x07, 0x00, 0x08, 0x1C,  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x3C, 0x96,  0x07, 0x00, 0x07, 0x00,
+  0x00, 0x00, 0x00, 0x08,  0x1C, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x45, 0x52,  0x17, 0x4F, 0x96, 0x09,
+  0x00, 0x08, 0x46, 0x07,  0x35, 0x08, 0x00, 0x00,  0x08, 0x3F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,
+  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x02, 0x3D,  0x17, 0x96, 0x0E, 0x00,
+  0x07, 0x05, 0x00, 0x00,  0x00, 0x08, 0x47, 0x07,  0x35, 0x08, 0x00, 0x00,  0x08, 0x3F, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x04, 0x00, 0x00,  0x00, 0x08, 0x03, 0x3D,
+  0x17, 0x96, 0x08, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x02, 0x08, 0x3F,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x96,
+  0x02, 0x00, 0x08, 0x48,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x49,
+  0x08, 0x4A, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x48,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
+  0x13, 0x00, 0x08, 0x4B,  0x07, 0x00, 0x00, 0x00,  0x00, 0x07, 0x2D, 0x01,  0x00, 0x00, 0x07, 0x02,
+  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x48,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0D, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x4C,  0x07, 0x01, 0x00, 0x00,  0x00, 0x07, 0x2D, 0x01,
   0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x48,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x4C,  0x07, 0x01, 0x00, 0x00,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x4D,  0x07, 0x02, 0x00, 0x00,
   0x00, 0x07, 0x2D, 0x01,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x48,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x4D,
-  0x07, 0x02, 0x00, 0x00,  0x00, 0x07, 0x2D, 0x01,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
+  0x02, 0x00, 0x08, 0x48,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x4E,
+  0x07, 0x03, 0x00, 0x00,  0x00, 0x07, 0x2D, 0x01,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
   0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x48,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
-  0x13, 0x00, 0x08, 0x4E,  0x07, 0x03, 0x00, 0x00,  0x00, 0x07, 0x2D, 0x01,  0x00, 0x00, 0x07, 0x02,
-  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x48,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x0D, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x4F,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x48, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x50, 0x8E, 0x0D, 0x00,  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x73,
-  0x72, 0x63, 0x00, 0x64,  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x04, 0x00, 0x08, 0x51,
-  0x05, 0x01, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x52,  0x1C, 0x96, 0x01, 0x00,  0x02, 0x49, 0x12, 0x9D,
-  0x02, 0x00, 0x19, 0x00,  0x96, 0x09, 0x00, 0x05,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x4F, 0x52, 0x17,  0x99, 0x02, 0x00, 0x2C,  0x00, 0x96, 0x02, 0x00,
-  0x08, 0x52, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x4E, 0x52,  0x17, 0x96, 0x09, 0x00,  0x05, 0x01, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,
-  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x4F, 0x52,  0x17, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x48, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0F, 0x8E,  0x08, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00,  0xB3, 0x00, 0x96, 0x03,  0x00, 0x08, 0x53, 0x02,  0x3C, 0x96, 0x02, 0x00,
-  0x08, 0x0A, 0x46, 0x87,  0x01, 0x00, 0x00, 0x96,  0x01, 0x00, 0x02, 0x49,  0x9D, 0x02, 0x00, 0x91,
-  0x00, 0x96, 0x04, 0x00,  0x08, 0x13, 0x04, 0x00,  0x3C, 0x96, 0x02, 0x00,  0x08, 0x53, 0x1C, 0x96,
-  0x01, 0x00, 0x02, 0x49,  0x9D, 0x02, 0x00, 0x41,  0x00, 0x96, 0x02, 0x00,  0x08, 0x53, 0x4C, 0x1C,
-  0x96, 0x04, 0x00, 0x08,  0x56, 0x08, 0x13, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
-  0x08, 0x54, 0x3D, 0x47,  0x96, 0x02, 0x00, 0x08,  0x55, 0x47, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x13, 0x1C, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,
-  0x54, 0x3D, 0x47, 0x47,  0x1D, 0x99, 0x02, 0x00,  0x33, 0x00, 0x96, 0x04,  0x00, 0x08, 0x53, 0x08,
-  0x13, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x54,  0x3D, 0x96, 0x02, 0x00,
-  0x08, 0x55, 0x47, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x1C, 0x4E,
-  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x54, 0x3D, 0x47,  0x1D, 0x99, 0x02, 0x00,
-  0x61, 0xFF, 0x96, 0x02,  0x00, 0x08, 0x53, 0x1C,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x48, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x57, 0x8E,  0x08, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00,  0x0D, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x58, 0x4E, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x48, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x59, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x0D, 0x00,
-  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x5A, 0x4E,  0x3E, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x48, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x5B, 0x8E,
-  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x1E, 0x00, 0x96, 0x07,  0x00, 0x08, 0x1C, 0x07,
-  0x00, 0x00, 0x00, 0x00,  0x43, 0x3C, 0x96, 0x07,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x1C,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x5C, 0x52, 0x17,  0x4F, 0x96, 0x08, 0x00,  0x07, 0x83, 0x00, 0x00,
-  0x00, 0x02, 0x08, 0x48,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x96,  0x13, 0x00, 0x08, 0x5D,  0x07, 0x10, 0x00, 0x00,
-  0x00, 0x07, 0xF4, 0x01,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x39, 0x3D, 0x1D, 0x96,
-  0x09, 0x00, 0x08, 0x5E,  0x07, 0xF4, 0x01, 0x00,  0x00, 0x08, 0x5D, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x02,  0x3D, 0x17, 0x96, 0x0E,
-  0x00, 0x07, 0x12, 0x00,  0x00, 0x00, 0x08, 0x47,  0x07, 0xF4, 0x01, 0x00,  0x00, 0x08, 0x5D, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,  0x00, 0x00, 0x08, 0x03,
-  0x3D, 0x17, 0x96, 0x08,  0x00, 0x07, 0x07, 0x00,  0x00, 0x00, 0x02, 0x08,  0x5D, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x00, 0x3D, 0x17,
-  0x96, 0x13, 0x00, 0x08,  0x5F, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,
-  0x02, 0x00, 0x00, 0x00,  0x08, 0x39, 0x3D, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x5F, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x60, 0x07, 0x01, 0x00,  0x00, 0x00, 0x07, 0xFD,
+  0x02, 0x00, 0x08, 0x4F,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x48, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x50, 0x8E, 0x0D, 0x00,  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x73,  0x72, 0x63, 0x00, 0x64,
+  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x04, 0x00, 0x08, 0x51,  0x05, 0x01, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x52,  0x1C, 0x96, 0x01, 0x00,  0x02, 0x49, 0x12, 0x9D,  0x02, 0x00, 0x19, 0x00,
+  0x96, 0x09, 0x00, 0x05,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x4F, 0x52, 0x17,  0x99, 0x02, 0x00, 0x2C,  0x00, 0x96, 0x02, 0x00,  0x08, 0x52, 0x1C, 0x96,
+  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x4E, 0x52,
+  0x17, 0x96, 0x09, 0x00,  0x05, 0x01, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x4F, 0x52,  0x17, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x48, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0F, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0xB3, 0x00, 0x96, 0x03,  0x00, 0x08, 0x53, 0x02,  0x3C, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x46, 0x87,
+  0x01, 0x00, 0x00, 0x96,  0x01, 0x00, 0x02, 0x49,  0x9D, 0x02, 0x00, 0x91,  0x00, 0x96, 0x04, 0x00,
+  0x08, 0x13, 0x04, 0x00,  0x3C, 0x96, 0x02, 0x00,  0x08, 0x53, 0x1C, 0x96,  0x01, 0x00, 0x02, 0x49,
+  0x9D, 0x02, 0x00, 0x41,  0x00, 0x96, 0x02, 0x00,  0x08, 0x53, 0x4C, 0x1C,  0x96, 0x04, 0x00, 0x08,
+  0x56, 0x08, 0x13, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x54, 0x3D, 0x47,
+  0x96, 0x02, 0x00, 0x08,  0x55, 0x47, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x13, 0x1C, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x54, 0x3D, 0x47, 0x47,
+  0x1D, 0x99, 0x02, 0x00,  0x33, 0x00, 0x96, 0x04,  0x00, 0x08, 0x53, 0x08,  0x13, 0x1C, 0x96, 0x07,
+  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x54,  0x3D, 0x96, 0x02, 0x00,  0x08, 0x55, 0x47, 0x96,
+  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x1C, 0x4E,  0x96, 0x07, 0x00, 0x07,
+  0x01, 0x00, 0x00, 0x00,  0x08, 0x54, 0x3D, 0x47,  0x1D, 0x99, 0x02, 0x00,  0x61, 0xFF, 0x96, 0x02,
+  0x00, 0x08, 0x53, 0x1C,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x48, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x57, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x0D, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x58, 0x4E, 0x3E, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x48, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x59, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x0D, 0x00,  0x96, 0x02, 0x00, 0x08,
+  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x5A, 0x4E,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x48, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x5B, 0x8E,  0x08, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x1E, 0x00, 0x96, 0x07,  0x00, 0x08, 0x1C, 0x07,  0x00, 0x00, 0x00, 0x00,
+  0x43, 0x3C, 0x96, 0x07,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x5C, 0x52, 0x17,  0x4F, 0x96, 0x08, 0x00,  0x07, 0x83, 0x00, 0x00,  0x00, 0x02, 0x08, 0x48,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
+  0x00, 0x3D, 0x17, 0x96,  0x13, 0x00, 0x08, 0x5D,  0x07, 0x10, 0x00, 0x00,  0x00, 0x07, 0xF4, 0x01,
+  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x39, 0x3D, 0x1D, 0x96,  0x09, 0x00, 0x08, 0x5E,
+  0x07, 0xF4, 0x01, 0x00,  0x00, 0x08, 0x5D, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,
+  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x02,  0x3D, 0x17, 0x96, 0x0E,  0x00, 0x07, 0x12, 0x00,
+  0x00, 0x00, 0x08, 0x47,  0x07, 0xF4, 0x01, 0x00,  0x00, 0x08, 0x5D, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,  0x00, 0x00, 0x08, 0x03,  0x3D, 0x17, 0x96, 0x08,
+  0x00, 0x07, 0x07, 0x00,  0x00, 0x00, 0x02, 0x08,  0x5D, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
+  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x00, 0x3D, 0x17,  0x96, 0x13, 0x00, 0x08,
+  0x5F, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
+  0x08, 0x39, 0x3D, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x5F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
+  0x96, 0x13, 0x00, 0x08,  0x60, 0x07, 0x01, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,
+  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x5F, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x61, 0x07, 0x02, 0x00,  0x00, 0x00, 0x07, 0xFD,
   0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x5F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x61, 0x07, 0x02, 0x00,
+  0x5F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x62, 0x07, 0x03, 0x00,
   0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,
   0x96, 0x02, 0x00, 0x08,  0x5F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x13, 0x00, 0x08,
-  0x62, 0x07, 0x03, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
+  0x63, 0x07, 0x04, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
   0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x5F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
-  0x96, 0x13, 0x00, 0x08,  0x63, 0x07, 0x04, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,
+  0x96, 0x13, 0x00, 0x08,  0x64, 0x07, 0x05, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,
   0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x5F, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x64, 0x07, 0x05, 0x00,  0x00, 0x00, 0x07, 0xFD,
+  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x0F, 0x07, 0x06, 0x00,  0x00, 0x00, 0x07, 0xFD,
   0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x5F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x0F, 0x07, 0x06, 0x00,
+  0x5F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x65, 0x07, 0x07, 0x00,
   0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,
   0x96, 0x02, 0x00, 0x08,  0x5F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x13, 0x00, 0x08,
-  0x65, 0x07, 0x07, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
-  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x5F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
-  0x96, 0x13, 0x00, 0x08,  0x66, 0x07, 0x08, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,
-  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x13, 0x00, 0x08,  0x67, 0x07, 0x09, 0x00,
-  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x39, 0x3D, 0x1D,
-  0x96, 0x02, 0x00, 0x08,  0x67, 0x1C, 0x96, 0x10,  0x00, 0x08, 0x0D, 0x08,  0x68, 0x07, 0x01, 0x00,
-  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x5F, 0x40, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x67,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x69,  0x3A, 0x17, 0x96, 0x09,
-  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x0D,  0x08, 0x67, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x96,  0x02, 0x00, 0x08, 0x67,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x0D, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x4B,  0x07, 0x00, 0x00, 0x00,  0x00, 0x07, 0x2D, 0x01,
+  0x66, 0x07, 0x08, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
+  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x13, 0x00, 0x08,  0x67, 0x07, 0x09, 0x00,  0x00, 0x00, 0x07, 0xFD,
+  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x39, 0x3D, 0x1D,  0x96, 0x02, 0x00, 0x08,
+  0x67, 0x1C, 0x96, 0x10,  0x00, 0x08, 0x0D, 0x08,  0x68, 0x07, 0x01, 0x00,  0x00, 0x00, 0x07, 0x02,
+  0x00, 0x00, 0x00, 0x08,  0x5F, 0x40, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x67,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0D, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x69,  0x3A, 0x17, 0x96, 0x09,  0x00, 0x07, 0x03, 0x00,
+  0x00, 0x00, 0x08, 0x0D,  0x08, 0x67, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
+  0x00, 0x3D, 0x17, 0x96,  0x02, 0x00, 0x08, 0x67,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
+  0x13, 0x00, 0x08, 0x4B,  0x07, 0x00, 0x00, 0x00,  0x00, 0x07, 0x2D, 0x01,  0x00, 0x00, 0x07, 0x02,
+  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x67,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0D, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x4C,  0x07, 0x01, 0x00, 0x00,  0x00, 0x07, 0x2D, 0x01,
   0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x67,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x4C,  0x07, 0x01, 0x00, 0x00,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x4D,  0x07, 0x02, 0x00, 0x00,
   0x00, 0x07, 0x2D, 0x01,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x67,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x4D,
-  0x07, 0x02, 0x00, 0x00,  0x00, 0x07, 0x2D, 0x01,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
+  0x02, 0x00, 0x08, 0x67,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x6A,
+  0x07, 0x0A, 0x00, 0x00,  0x00, 0x07, 0xFD, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
   0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x67,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
-  0x13, 0x00, 0x08, 0x6A,  0x07, 0x0A, 0x00, 0x00,  0x00, 0x07, 0xFD, 0x00,  0x00, 0x00, 0x07, 0x02,
+  0x13, 0x00, 0x08, 0x6B,  0x07, 0x0B, 0x00, 0x00,  0x00, 0x07, 0xFD, 0x00,  0x00, 0x00, 0x07, 0x02,
   0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x67,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x0D, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x6B,  0x07, 0x0B, 0x00, 0x00,  0x00, 0x07, 0xFD, 0x00,
+  0x08, 0x0D, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x6C,  0x07, 0x0C, 0x00, 0x00,  0x00, 0x07, 0xFD, 0x00,
   0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x67,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x6C,  0x07, 0x0C, 0x00, 0x00,
-  0x00, 0x07, 0xFD, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x67,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x4F,
-  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x67, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x50, 0x8E, 0x0D, 0x00,
-  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x73,  0x72, 0x63, 0x00, 0x72,  0x00, 0x96, 0x02, 0x00,
-  0x08, 0x52, 0x1C, 0x96,  0x01, 0x00, 0x02, 0x49,  0x12, 0x9D, 0x02, 0x00,  0x27, 0x00, 0x96, 0x02,
-  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x04, 0x00, 0x08,  0x51, 0x05, 0x00, 0x4F,  0x96, 0x09, 0x00, 0x05,
-  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x4F, 0x52, 0x17,
-  0x99, 0x02, 0x00, 0x3A,  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x04, 0x00, 0x08, 0x51,
-  0x05, 0x01, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x52,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
-  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x6C, 0x52, 0x17, 0x96,  0x09, 0x00, 0x05, 0x01,
-  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x4F, 0x52, 0x17, 0x4F,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x4F,  0x8E, 0x08, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x67, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x50, 0x8E, 0x0D, 0x00,  0x00, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x73,  0x72, 0x63, 0x00, 0x72,  0x00, 0x96, 0x02, 0x00,  0x08, 0x52, 0x1C, 0x96,
+  0x01, 0x00, 0x02, 0x49,  0x12, 0x9D, 0x02, 0x00,  0x27, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
+  0x96, 0x04, 0x00, 0x08,  0x51, 0x05, 0x00, 0x4F,  0x96, 0x09, 0x00, 0x05,  0x00, 0x07, 0x01, 0x00,
+  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x4F, 0x52, 0x17,  0x99, 0x02, 0x00, 0x3A,
+  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x04, 0x00, 0x08, 0x51,  0x05, 0x01, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x52,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x0A, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x6C, 0x52, 0x17, 0x96,  0x09, 0x00, 0x05, 0x01,  0x07, 0x01, 0x00, 0x00,
+  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x4F, 0x52, 0x17, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x67, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x57, 0x8E, 0x08, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x0D, 0x00,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x58, 0x4E,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x67, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x59, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x0D, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x5A, 0x4E, 0x3E, 0x4F,
   0x96, 0x02, 0x00, 0x08,  0x67, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x57, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x0D, 0x00,  0x96, 0x02, 0x00, 0x08,
-  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x58, 0x4E,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x67, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x59, 0x8E,  0x08, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00,  0x0D, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x5A, 0x4E, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x67, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x5B, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x1E, 0x00,
+  0x5B, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x1E, 0x00,  0x96, 0x07, 0x00, 0x08,
+  0x1C, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x3C,  0x96, 0x07, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,
+  0x08, 0x1C, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x6D,  0x52, 0x17, 0x4F, 0x96,  0x07, 0x00, 0x08, 0x6E,
+  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x6E,  0x1C, 0x96, 0x07, 0x00,
+  0x08, 0x6F, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x6E, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x6F,  0x4E, 0x96, 0x13, 0x00,  0x08, 0x70, 0x07, 0x00,  0x00, 0x00, 0x00, 0x07,
+  0x0B, 0x00, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x07, 0x00,
+  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x6E, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x6F, 0x4E, 0x96, 0x02,
+  0x00, 0x08, 0x70, 0x52,  0x17, 0x96, 0x02, 0x00,  0x08, 0x6E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x6F,
+  0x4E, 0x96, 0x02, 0x00,  0x08, 0x70, 0x3A, 0x17,  0x96, 0x02, 0x00, 0x08,  0x6E, 0x1C, 0x96, 0x13,
+  0x00, 0x08, 0x71, 0x07,  0x00, 0x00, 0x00, 0x00,  0x07, 0x2A, 0x04, 0x00,  0x00, 0x07, 0x02, 0x00,
+  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x6E, 0x1C,  0x96, 0x13, 0x00, 0x08,
+  0x72, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x3B,  0x08, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
+  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x0E, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x73, 0x07, 0x3B,
+  0x08, 0x00, 0x00, 0x08,  0x6E, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,  0x00, 0x00, 0x08, 0x03,
+  0x3D, 0x17, 0x96, 0x09,  0x00, 0x07, 0x80, 0x00,  0x00, 0x00, 0x08, 0x74,  0x08, 0x6E, 0x1C, 0x96,
+  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x96,  0x02, 0x00, 0x08, 0x6E,
+  0x1C, 0x96, 0x09, 0x00,  0x08, 0x75, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,  0x05, 0x40, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x6E,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x75, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x69,
+  0x3A, 0x17, 0x96, 0x09,  0x00, 0x08, 0x76, 0x07,  0x0C, 0x00, 0x00, 0x00,  0x08, 0x6E, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x75,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x02, 0x3D,
+  0x17, 0x96, 0x0E, 0x00,  0x07, 0x05, 0x00, 0x00,  0x00, 0x08, 0x77, 0x07,  0x0C, 0x00, 0x00, 0x00,
+  0x08, 0x6E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x75,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x04, 0x00, 0x00,
+  0x00, 0x08, 0x03, 0x3D,  0x17, 0x96, 0x02, 0x00,  0x08, 0x6E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x75,
+  0x4E, 0x96, 0x02, 0x00,  0x08, 0x78, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x1E,
+  0x00, 0x96, 0x07, 0x00,  0x08, 0x1C, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x3C, 0x96, 0x07, 0x00,
+  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x79, 0x52, 0x17, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x6E, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x75, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x78, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x7A, 0x07, 0x00, 0x00,
+  0x00, 0x00, 0x07, 0x0F,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x6E, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x75, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x78, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
+  0x08, 0x10, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1B,  0x52, 0x17, 0x96, 0x02,  0x00, 0x08, 0x6E, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x7B, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x1E, 0x00,
   0x96, 0x07, 0x00, 0x08,  0x1C, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x3C,  0x96, 0x07, 0x00, 0x07,
-  0x00, 0x00, 0x00, 0x00,  0x08, 0x1C, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x6D,  0x52, 0x17, 0x4F, 0x96,
-  0x07, 0x00, 0x08, 0x6E,  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x6E,
-  0x1C, 0x96, 0x07, 0x00,  0x08, 0x6F, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x6E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x6F,  0x4E, 0x96, 0x13, 0x00,  0x08, 0x70, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x07,  0x0B, 0x00, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,
-  0x4F, 0x96, 0x07, 0x00,  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x6E, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x6F, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x70, 0x52,  0x17, 0x96, 0x02, 0x00,  0x08, 0x6E, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x6F,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x70, 0x3A, 0x17,  0x96, 0x02, 0x00, 0x08,
-  0x6E, 0x1C, 0x96, 0x13,  0x00, 0x08, 0x71, 0x07,  0x00, 0x00, 0x00, 0x00,  0x07, 0x2A, 0x04, 0x00,
-  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x6E, 0x1C,
-  0x96, 0x13, 0x00, 0x08,  0x72, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x3B,  0x08, 0x00, 0x00, 0x07,
-  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x0E, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
-  0x08, 0x73, 0x07, 0x3B,  0x08, 0x00, 0x00, 0x08,  0x6E, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,
-  0x00, 0x00, 0x08, 0x03,  0x3D, 0x17, 0x96, 0x09,  0x00, 0x07, 0x80, 0x00,  0x00, 0x00, 0x08, 0x74,
-  0x08, 0x6E, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x96,
-  0x02, 0x00, 0x08, 0x6E,  0x1C, 0x96, 0x09, 0x00,  0x08, 0x75, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,
-  0x05, 0x40, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x6E,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x75, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x69,  0x3A, 0x17, 0x96, 0x09,  0x00, 0x08, 0x76, 0x07,  0x0C, 0x00, 0x00, 0x00,
-  0x08, 0x6E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x75,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,
-  0x00, 0x08, 0x02, 0x3D,  0x17, 0x96, 0x0E, 0x00,  0x07, 0x05, 0x00, 0x00,  0x00, 0x08, 0x77, 0x07,
-  0x0C, 0x00, 0x00, 0x00,  0x08, 0x6E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x75,  0x4E, 0x96, 0x07, 0x00,
-  0x07, 0x04, 0x00, 0x00,  0x00, 0x08, 0x03, 0x3D,  0x17, 0x96, 0x02, 0x00,  0x08, 0x6E, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x75,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x78, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x1E,  0x00, 0x96, 0x07, 0x00,  0x08, 0x1C, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,
-  0x3C, 0x96, 0x07, 0x00,  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x79, 0x52, 0x17, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x6E, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x75, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x78, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x13, 0x00, 0x08,
-  0x7A, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x0F,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
-  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x6E, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x75, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x78, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,
-  0x01, 0x00, 0x00, 0x00,  0x08, 0x10, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1B,  0x52, 0x17, 0x96, 0x02,
-  0x00, 0x08, 0x6E, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x7B, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x08, 0x1C, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x7C,  0x52, 0x17, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x6E,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x7B, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,
+  0x4E, 0x96, 0x02, 0x00,  0x08, 0x7D, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x1E,
+  0x00, 0x96, 0x07, 0x00,  0x08, 0x1C, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x3C, 0x96, 0x07, 0x00,
+  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x7E, 0x52, 0x17, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x6E, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x7B, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x7F, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x1E, 0x00, 0x96, 0x07,  0x00, 0x08, 0x1C, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x3C, 0x96, 0x07,
+  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x80, 0x52, 0x17,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x6E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x7B,  0x4E, 0x96, 0x02, 0x00,
+  0x08, 0x0D, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x81,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x00, 0x1E, 0x00, 0x96,  0x07, 0x00, 0x08, 0x1C,  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x3C, 0x96,
+  0x07, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,  0x1C, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x82, 0x52,
+  0x17, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x6E, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x7B, 0x4E, 0x96, 0x02,
+  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x83, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x1E, 0x00,  0x96, 0x07, 0x00, 0x08,  0x1C, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x3C,
-  0x96, 0x07, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x1C, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x7C,
+  0x96, 0x07, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x1C, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x84,
   0x52, 0x17, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x6E,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x7B, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x7D, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x85, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x1E,  0x00, 0x96, 0x07, 0x00,  0x08, 0x1C, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,
   0x3C, 0x96, 0x07, 0x00,  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x7E, 0x52, 0x17, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x6E, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x7B, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x7F, 0x8E,  0x08, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00,  0x1E, 0x00, 0x96, 0x07,  0x00, 0x08, 0x1C, 0x07,  0x00, 0x00, 0x00, 0x00,
-  0x43, 0x3C, 0x96, 0x07,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x80, 0x52, 0x17,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x6E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x7B,
-  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x81,  0x8E, 0x08, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00,  0x00, 0x1E, 0x00, 0x96,  0x07, 0x00, 0x08, 0x1C,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x43, 0x3C, 0x96,  0x07, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,  0x1C, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x82, 0x52,  0x17, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x6E, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x7B, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x83, 0x8E, 0x08, 0x00,
-  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x1E, 0x00,  0x96, 0x07, 0x00, 0x08,  0x1C, 0x07, 0x00, 0x00,
-  0x00, 0x00, 0x43, 0x3C,  0x96, 0x07, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x1C, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x84,  0x52, 0x17, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x6E,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x7B, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x85, 0x8E, 0x08,
-  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x1E,  0x00, 0x96, 0x07, 0x00,  0x08, 0x1C, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x43,  0x3C, 0x96, 0x07, 0x00,  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x1C, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x86, 0x52, 0x17, 0x4F,  0x96, 0x08, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,
-  0x02, 0x08, 0x6E, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x7B, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
-  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x00, 0x3D, 0x17,  0x96, 0x02, 0x00, 0x08,
-  0x6E, 0x1C, 0x96, 0x27,  0x00, 0x08, 0x87, 0x08,  0x88, 0x08, 0x88, 0x08,  0x89, 0x08, 0x89, 0x08,
-  0x8A, 0x08, 0x8A, 0x08,  0x8B, 0x08, 0x8B, 0x08,  0x8C, 0x08, 0x8C, 0x08,  0x8D, 0x08, 0x8D, 0x08,
-  0x8E, 0x08, 0x8E, 0x08,  0x8F, 0x08, 0x8F, 0x07,  0x08, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x6E, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x87, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,
-  0x00, 0x00, 0x08, 0x10,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x1B, 0x52, 0x17,  0x96, 0x09, 0x00, 0x08,
-  0x90, 0x07, 0x0D, 0x00,  0x00, 0x00, 0x08, 0x6E,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x87, 0x4E, 0x96,
-  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x02, 0x3D, 0x17, 0x96,  0x08, 0x00, 0x07, 0x07,
-  0x00, 0x00, 0x00, 0x02,  0x08, 0x6E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x87,  0x4E, 0x96, 0x07, 0x00,
-  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x00, 0x3D,  0x17, 0x96, 0x02, 0x00,  0x08, 0x91, 0x8E, 0x10,
-  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,  0x74, 0x61, 0x72, 0x67,  0x65, 0x74, 0x00, 0x27,
-  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x04, 0x00, 0x08, 0x92,  0x08, 0x92, 0x1C, 0x4F,
-  0x96, 0x08, 0x00, 0x07,  0x07, 0x00, 0x00, 0x00,  0x02, 0x08, 0x0A, 0x1C,  0x96, 0x07, 0x00, 0x07,
-  0x03, 0x00, 0x00, 0x00,  0x08, 0x00, 0x3D, 0x17,  0x1D, 0x96, 0x09, 0x00,  0x08, 0x93, 0x07, 0xBC,
-  0x02, 0x00, 0x00, 0x08,  0x91, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,
-  0x03, 0x00, 0x00, 0x00,  0x08, 0x02, 0x3D, 0x17,  0x96, 0x08, 0x00, 0x07,  0x07, 0x00, 0x00, 0x00,
-  0x02, 0x08, 0x91, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,
-  0x00, 0x00, 0x08, 0x00,  0x3D, 0x17, 0x96, 0x13,  0x00, 0x08, 0x94, 0x07,  0x00, 0x00, 0x00, 0x00,
-  0x07, 0x2B, 0x04, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x39,  0x3D, 0x1D, 0x96, 0x0E,
-  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x95,  0x07, 0x2B, 0x04, 0x00,  0x00, 0x08, 0x94, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,  0x00, 0x00, 0x08, 0x02,
-  0x3D, 0x17, 0x96, 0x02,  0x00, 0x08, 0x96, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x04,
-  0x00, 0x08, 0x97, 0x05,  0x01, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x96, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x0D, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x98, 0x05,  0x01, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x96, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x99, 0x8E,  0x10, 0x00, 0x00, 0x01,
-  0x00, 0x00, 0x00, 0x00,  0x00, 0x6D, 0x65, 0x74,  0x68, 0x6F, 0x64, 0x00,  0x5B, 0x00, 0x96, 0x09,
-  0x00, 0x08, 0x9C, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x9A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x9B,
-  0x52, 0x3C, 0x96, 0x02,  0x00, 0x08, 0x9C, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x9D, 0x49, 0x9D, 0x02,
-  0x00, 0x2D, 0x00, 0x96,  0x02, 0x00, 0x08, 0x9C,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x9E, 0x49, 0x9D,
-  0x02, 0x00, 0x0E, 0x00,  0x96, 0x05, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x3E, 0x99, 0x02, 0x00,
-  0x09, 0x00, 0x96, 0x05,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x3E, 0x99,  0x02, 0x00, 0x09, 0x00,
-  0x96, 0x05, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x96, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x9F, 0x8E,  0x1D, 0x00, 0x00, 0x03,
-  0x00, 0x00, 0x00, 0x00,  0x00, 0x75, 0x72, 0x6C,  0x00, 0x00, 0x74, 0x61,  0x72, 0x67, 0x65, 0x74,
-  0x00, 0x00, 0x6D, 0x65,  0x74, 0x68, 0x6F, 0x64,  0x00, 0x97, 0x00, 0x96,  0x02, 0x00, 0x08, 0x92,
-  0x1C, 0x44, 0x96, 0x02,  0x00, 0x08, 0x09, 0x49,  0x12, 0x9D, 0x02, 0x00,  0x08, 0x00, 0x96, 0x04,
-  0x00, 0x08, 0x92, 0x08,  0x68, 0x1D, 0x96, 0x04,  0x00, 0x08, 0xA0, 0x08,  0x9A, 0x1C, 0x96, 0x07,
-  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x99, 0x52, 0x3C,
-  0x96, 0x02, 0x00, 0x08,  0xA0, 0x1C, 0x96, 0x05,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x49, 0x9D,
-  0x02, 0x00, 0x3E, 0x00,  0x96, 0x02, 0x00, 0x08,  0xA0, 0x1C, 0x96, 0x05,  0x00, 0x07, 0x01, 0x00,
-  0x00, 0x00, 0x49, 0x9D,  0x02, 0x00, 0x15, 0x00,  0x96, 0x02, 0x00, 0x08,  0xA1, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x92, 0x1C,  0x9A, 0x01, 0x00, 0x02,  0x99, 0x02, 0x00, 0x10,  0x00, 0x96, 0x02, 0x00,
-  0x08, 0xA1, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x92,  0x1C, 0x9A, 0x01, 0x00,  0x01, 0x99, 0x02, 0x00,
-  0x10, 0x00, 0x96, 0x02,  0x00, 0x08, 0xA1, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x92, 0x1C, 0x9A, 0x01,
-  0x00, 0x00, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x96,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0xA2,  0x8E, 0x15, 0x00, 0x00,  0x02, 0x00, 0x00, 0x00,  0x00, 0x00, 0x75, 0x72,
-  0x6C, 0x00, 0x00, 0x6D,  0x65, 0x74, 0x68, 0x6F,  0x64, 0x00, 0x99, 0x00,  0x96, 0x04, 0x00, 0x08,
-  0xA0, 0x08, 0x9A, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x0A, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x99,  0x52, 0x3C, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x20, 0x96, 0x02, 0x00,
-  0x08, 0xA0, 0x1C, 0x96,  0x05, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x49,  0x9D, 0x02, 0x00, 0x4A,
-  0x00, 0x96, 0x02, 0x00,  0x08, 0xA0, 0x1C, 0x96,  0x05, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x49,
-  0x9D, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x02, 0x00,  0x08, 0xA1, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0xA3, 0x4E, 0x9A,  0x01, 0x00, 0xC2, 0x99,  0x02, 0x00, 0x16, 0x00,
-  0x96, 0x02, 0x00, 0x08,  0xA1, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0xA3, 0x4E, 0x9A, 0x01,  0x00, 0xC1, 0x99, 0x02,  0x00, 0x16, 0x00, 0x96,  0x02, 0x00, 0x08, 0xA1,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xA3,  0x4E, 0x9A, 0x01, 0x00,
-  0xC0, 0x8B, 0x01, 0x00,  0x00, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x96, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0xA4, 0x8E,  0x15, 0x00, 0x00, 0x02,  0x00, 0x00, 0x00, 0x00,
-  0x00, 0x75, 0x72, 0x6C,  0x00, 0x00, 0x6D, 0x65,  0x74, 0x68, 0x6F, 0x64,  0x00, 0x99, 0x00, 0x96,
-  0x04, 0x00, 0x08, 0xA0,  0x08, 0x9A, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,
-  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x99, 0x52,  0x3C, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x20,
-  0x96, 0x02, 0x00, 0x08,  0xA0, 0x1C, 0x96, 0x05,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x49, 0x9D,
-  0x02, 0x00, 0x4A, 0x00,  0x96, 0x02, 0x00, 0x08,  0xA0, 0x1C, 0x96, 0x05,  0x00, 0x07, 0x01, 0x00,
-  0x00, 0x00, 0x49, 0x9D,  0x02, 0x00, 0x1B, 0x00,  0x96, 0x02, 0x00, 0x08,  0xA1, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0xA3, 0x4E, 0x9A, 0x01,  0x00, 0x42, 0x99, 0x02,
-  0x00, 0x16, 0x00, 0x96,  0x02, 0x00, 0x08, 0xA1,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0xA3,  0x4E, 0x9A, 0x01, 0x00,  0x41, 0x99, 0x02, 0x00,  0x16, 0x00, 0x96, 0x02,
-  0x00, 0x08, 0xA1, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xA3, 0x4E,
-  0x9A, 0x01, 0x00, 0x40,  0x8B, 0x01, 0x00, 0x00,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x96, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x02, 0x00,  0x08, 0xA5, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x1D,  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x20,  0x96, 0x04, 0x00, 0x08,
-  0x68, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0xA3, 0x4E, 0x9A, 0x01,  0x00, 0x40, 0x8B, 0x01,
-  0x00, 0x00, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x96,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0xA6,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x12, 0x00, 0x96,
-  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x94, 0x40,
-  0x3E, 0x4F, 0x96, 0x09,  0x00, 0x07, 0x80, 0x00,  0x00, 0x00, 0x08, 0xA6,  0x08, 0x96, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x00, 0x3D,
-  0x17, 0x96, 0x09, 0x00,  0x08, 0xA7, 0x07, 0x84,  0x03, 0x00, 0x00, 0x08,  0x96, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x02, 0x3D, 0x17,
-  0x96, 0x0E, 0x00, 0x07,  0xC8, 0x00, 0x00, 0x00,  0x08, 0xA8, 0x07, 0x84,  0x03, 0x00, 0x00, 0x08,
+  0x86, 0x52, 0x17, 0x4F,  0x96, 0x08, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x02, 0x08, 0x6E, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x7B, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,
+  0x03, 0x00, 0x00, 0x00,  0x08, 0x00, 0x3D, 0x17,  0x96, 0x02, 0x00, 0x08,  0x6E, 0x1C, 0x96, 0x27,
+  0x00, 0x08, 0x87, 0x08,  0x88, 0x08, 0x88, 0x08,  0x89, 0x08, 0x89, 0x08,  0x8A, 0x08, 0x8A, 0x08,
+  0x8B, 0x08, 0x8B, 0x08,  0x8C, 0x08, 0x8C, 0x08,  0x8D, 0x08, 0x8D, 0x08,  0x8E, 0x08, 0x8E, 0x08,
+  0x8F, 0x08, 0x8F, 0x07,  0x08, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x6E, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x87, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x10,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x1B, 0x52, 0x17,  0x96, 0x09, 0x00, 0x08,  0x90, 0x07, 0x0D, 0x00,
+  0x00, 0x00, 0x08, 0x6E,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x87, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,
+  0x00, 0x00, 0x00, 0x08,  0x02, 0x3D, 0x17, 0x96,  0x08, 0x00, 0x07, 0x07,  0x00, 0x00, 0x00, 0x02,
+  0x08, 0x6E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x87,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,
+  0x00, 0x08, 0x00, 0x3D,  0x17, 0x96, 0x02, 0x00,  0x08, 0x91, 0x8E, 0x10,  0x00, 0x00, 0x01, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x74, 0x61, 0x72, 0x67,  0x65, 0x74, 0x00, 0x27,  0x00, 0x96, 0x02, 0x00,
+  0x08, 0x0A, 0x1C, 0x96,  0x04, 0x00, 0x08, 0x92,  0x08, 0x92, 0x1C, 0x4F,  0x96, 0x08, 0x00, 0x07,
+  0x07, 0x00, 0x00, 0x00,  0x02, 0x08, 0x0A, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x3D, 0x17,  0x1D, 0x96, 0x09, 0x00,  0x08, 0x93, 0x07, 0xBC,  0x02, 0x00, 0x00, 0x08,
+  0x91, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,
+  0x08, 0x02, 0x3D, 0x17,  0x96, 0x08, 0x00, 0x07,  0x07, 0x00, 0x00, 0x00,  0x02, 0x08, 0x91, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x00,
+  0x3D, 0x17, 0x96, 0x13,  0x00, 0x08, 0x94, 0x07,  0x00, 0x00, 0x00, 0x00,  0x07, 0x2B, 0x04, 0x00,
+  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x39,  0x3D, 0x1D, 0x96, 0x0E,  0x00, 0x07, 0x01, 0x00,
+  0x00, 0x00, 0x08, 0x95,  0x07, 0x2B, 0x04, 0x00,  0x00, 0x08, 0x94, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,  0x00, 0x00, 0x08, 0x02,  0x3D, 0x17, 0x96, 0x02,
+  0x00, 0x08, 0x96, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x97, 0x05,
+  0x01, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x96, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x04,
+  0x00, 0x08, 0x98, 0x05,  0x01, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x96, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x99, 0x8E,  0x10, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
+  0x00, 0x6D, 0x65, 0x74,  0x68, 0x6F, 0x64, 0x00,  0x5B, 0x00, 0x96, 0x09,  0x00, 0x08, 0x9C, 0x07,
+  0x00, 0x00, 0x00, 0x00,  0x08, 0x9A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x9B,  0x52, 0x3C, 0x96, 0x02,
+  0x00, 0x08, 0x9C, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x9D, 0x49, 0x9D, 0x02,  0x00, 0x2D, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0x9C,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x9E, 0x49, 0x9D,  0x02, 0x00, 0x0E, 0x00,
+  0x96, 0x05, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x3E, 0x99, 0x02, 0x00,  0x09, 0x00, 0x96, 0x05,
+  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x3E, 0x99,  0x02, 0x00, 0x09, 0x00,  0x96, 0x05, 0x00, 0x07,
+  0x02, 0x00, 0x00, 0x00,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x96, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x9F, 0x8E,  0x1D, 0x00, 0x00, 0x03,  0x00, 0x00, 0x00, 0x00,
+  0x00, 0x75, 0x72, 0x6C,  0x00, 0x00, 0x74, 0x61,  0x72, 0x67, 0x65, 0x74,  0x00, 0x00, 0x6D, 0x65,
+  0x74, 0x68, 0x6F, 0x64,  0x00, 0x97, 0x00, 0x96,  0x02, 0x00, 0x08, 0x92,  0x1C, 0x44, 0x96, 0x02,
+  0x00, 0x08, 0x09, 0x49,  0x12, 0x9D, 0x02, 0x00,  0x08, 0x00, 0x96, 0x04,  0x00, 0x08, 0x92, 0x08,
+  0x68, 0x1D, 0x96, 0x04,  0x00, 0x08, 0xA0, 0x08,  0x9A, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,
+  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x99, 0x52, 0x3C,  0x96, 0x02, 0x00, 0x08,
+  0xA0, 0x1C, 0x96, 0x05,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x49, 0x9D,  0x02, 0x00, 0x3E, 0x00,
+  0x96, 0x02, 0x00, 0x08,  0xA0, 0x1C, 0x96, 0x05,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x49, 0x9D,
+  0x02, 0x00, 0x15, 0x00,  0x96, 0x02, 0x00, 0x08,  0xA1, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x92, 0x1C,
+  0x9A, 0x01, 0x00, 0x02,  0x99, 0x02, 0x00, 0x10,  0x00, 0x96, 0x02, 0x00,  0x08, 0xA1, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x92,  0x1C, 0x9A, 0x01, 0x00,  0x01, 0x99, 0x02, 0x00,  0x10, 0x00, 0x96, 0x02,
+  0x00, 0x08, 0xA1, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x92, 0x1C, 0x9A, 0x01,  0x00, 0x00, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x96,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x02, 0x00, 0x08, 0xA2,
+  0x8E, 0x15, 0x00, 0x00,  0x02, 0x00, 0x00, 0x00,  0x00, 0x00, 0x75, 0x72,  0x6C, 0x00, 0x00, 0x6D,
+  0x65, 0x74, 0x68, 0x6F,  0x64, 0x00, 0x99, 0x00,  0x96, 0x04, 0x00, 0x08,  0xA0, 0x08, 0x9A, 0x1C,
+  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x99,
+  0x52, 0x3C, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x20, 0x96, 0x02, 0x00,  0x08, 0xA0, 0x1C, 0x96,
+  0x05, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x49,  0x9D, 0x02, 0x00, 0x4A,  0x00, 0x96, 0x02, 0x00,
+  0x08, 0xA0, 0x1C, 0x96,  0x05, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x49,  0x9D, 0x02, 0x00, 0x1B,
+  0x00, 0x96, 0x02, 0x00,  0x08, 0xA1, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0xA3, 0x4E, 0x9A,  0x01, 0x00, 0xC2, 0x99,  0x02, 0x00, 0x16, 0x00,  0x96, 0x02, 0x00, 0x08,
+  0xA1, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0xA3, 0x4E, 0x9A, 0x01,
+  0x00, 0xC1, 0x99, 0x02,  0x00, 0x16, 0x00, 0x96,  0x02, 0x00, 0x08, 0xA1,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xA3,  0x4E, 0x9A, 0x01, 0x00,  0xC0, 0x8B, 0x01, 0x00,
+  0x00, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x96, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,
+  0x00, 0x08, 0xA4, 0x8E,  0x15, 0x00, 0x00, 0x02,  0x00, 0x00, 0x00, 0x00,  0x00, 0x75, 0x72, 0x6C,
+  0x00, 0x00, 0x6D, 0x65,  0x74, 0x68, 0x6F, 0x64,  0x00, 0x99, 0x00, 0x96,  0x04, 0x00, 0x08, 0xA0,
+  0x08, 0x9A, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x99, 0x52,  0x3C, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x20,  0x96, 0x02, 0x00, 0x08,
+  0xA0, 0x1C, 0x96, 0x05,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x49, 0x9D,  0x02, 0x00, 0x4A, 0x00,
+  0x96, 0x02, 0x00, 0x08,  0xA0, 0x1C, 0x96, 0x05,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x49, 0x9D,
+  0x02, 0x00, 0x1B, 0x00,  0x96, 0x02, 0x00, 0x08,  0xA1, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0xA3, 0x4E, 0x9A, 0x01,  0x00, 0x42, 0x99, 0x02,  0x00, 0x16, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0xA1,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xA3,
+  0x4E, 0x9A, 0x01, 0x00,  0x41, 0x99, 0x02, 0x00,  0x16, 0x00, 0x96, 0x02,  0x00, 0x08, 0xA1, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xA3, 0x4E,  0x9A, 0x01, 0x00, 0x40,
+  0x8B, 0x01, 0x00, 0x00,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x96, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,
+  0x4E, 0x96, 0x02, 0x00,  0x08, 0xA5, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x1D,
+  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x20,  0x96, 0x04, 0x00, 0x08,  0x68, 0x08, 0x0A, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0xA3, 0x4E, 0x9A, 0x01,  0x00, 0x40, 0x8B, 0x01,  0x00, 0x00, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x96,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x02, 0x00, 0x08, 0xA6,
+  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x12, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,
+  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x94, 0x40,  0x3E, 0x4F, 0x96, 0x09,
+  0x00, 0x07, 0x80, 0x00,  0x00, 0x00, 0x08, 0xA6,  0x08, 0x96, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,
+  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x00, 0x3D,  0x17, 0x96, 0x09, 0x00,
+  0x08, 0xA7, 0x07, 0x84,  0x03, 0x00, 0x00, 0x08,  0x96, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
+  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x02, 0x3D, 0x17,  0x96, 0x0E, 0x00, 0x07,
+  0xC8, 0x00, 0x00, 0x00,  0x08, 0xA8, 0x07, 0x84,  0x03, 0x00, 0x00, 0x08,  0x96, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x04, 0x00, 0x00, 0x00,  0x08, 0x03, 0x3D, 0x17,
+  0x96, 0x0E, 0x00, 0x07,  0x2C, 0x01, 0x00, 0x00,  0x08, 0xA9, 0x07, 0x84,  0x03, 0x00, 0x00, 0x08,
   0x96, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x04, 0x00, 0x00, 0x00,
-  0x08, 0x03, 0x3D, 0x17,  0x96, 0x0E, 0x00, 0x07,  0x2C, 0x01, 0x00, 0x00,  0x08, 0xA9, 0x07, 0x84,
+  0x08, 0x03, 0x3D, 0x17,  0x96, 0x0E, 0x00, 0x07,  0x91, 0x01, 0x00, 0x00,  0x08, 0xAA, 0x07, 0x84,
   0x03, 0x00, 0x00, 0x08,  0x96, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,
-  0x04, 0x00, 0x00, 0x00,  0x08, 0x03, 0x3D, 0x17,  0x96, 0x0E, 0x00, 0x07,  0x91, 0x01, 0x00, 0x00,
-  0x08, 0xAA, 0x07, 0x84,  0x03, 0x00, 0x00, 0x08,  0x96, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
+  0x04, 0x00, 0x00, 0x00,  0x08, 0x03, 0x3D, 0x17,  0x96, 0x0E, 0x00, 0x07,  0xA1, 0x01, 0x00, 0x00,
+  0x08, 0xAB, 0x07, 0x84,  0x03, 0x00, 0x00, 0x08,  0x96, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
   0x96, 0x07, 0x00, 0x07,  0x04, 0x00, 0x00, 0x00,  0x08, 0x03, 0x3D, 0x17,  0x96, 0x0E, 0x00, 0x07,
-  0xA1, 0x01, 0x00, 0x00,  0x08, 0xAB, 0x07, 0x84,  0x03, 0x00, 0x00, 0x08,  0x96, 0x1C, 0x96, 0x02,
+  0xF4, 0x01, 0x00, 0x00,  0x08, 0xAC, 0x07, 0x84,  0x03, 0x00, 0x00, 0x08,  0x96, 0x1C, 0x96, 0x02,
   0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x04, 0x00, 0x00, 0x00,  0x08, 0x03, 0x3D, 0x17,
-  0x96, 0x0E, 0x00, 0x07,  0xF4, 0x01, 0x00, 0x00,  0x08, 0xAC, 0x07, 0x84,  0x03, 0x00, 0x00, 0x08,
-  0x96, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x04, 0x00, 0x00, 0x00,
-  0x08, 0x03, 0x3D, 0x17,  0x96, 0x09, 0x00, 0x08,  0xAD, 0x07, 0x85, 0x03,  0x00, 0x00, 0x08, 0x96,
+  0x96, 0x09, 0x00, 0x08,  0xAD, 0x07, 0x85, 0x03,  0x00, 0x00, 0x08, 0x96,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x02, 0x3D, 0x17, 0x96,
+  0x0E, 0x00, 0x07, 0x0C,  0x00, 0x00, 0x00, 0x08,  0xAE, 0x07, 0x85, 0x03,  0x00, 0x00, 0x08, 0x96,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x08,
+  0x03, 0x3D, 0x17, 0x96,  0x02, 0x00, 0x08, 0x96,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
+  0x13, 0x00, 0x08, 0xAF,  0x07, 0xC8, 0x00, 0x00,  0x00, 0x07, 0x68, 0x00,  0x00, 0x00, 0x07, 0x02,
+  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x08, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x02,
+  0x08, 0x96, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,
+  0x00, 0x08, 0x00, 0x3D,  0x17, 0x96, 0x13, 0x00,  0x08, 0xB0, 0x07, 0x00,  0x00, 0x00, 0x00, 0x07,
+  0x70, 0x00, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x39, 0x3D,  0x1D, 0x96, 0x0E, 0x00,
+  0x07, 0x64, 0x00, 0x00,  0x00, 0x08, 0xB1, 0x07,  0x70, 0x00, 0x00, 0x00,  0x08, 0xB0, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x04, 0x00, 0x00,  0x00, 0x08, 0x02, 0x3D,
+  0x17, 0x96, 0x02, 0x00,  0x08, 0xB0, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,
+  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x10, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x1B, 0x52, 0x17, 0x96,
+  0x08, 0x00, 0x07, 0x03,  0x04, 0x00, 0x00, 0x02,  0x08, 0xB0, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,
+  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x00, 0x3D,  0x17, 0x96, 0x13, 0x00,
+  0x08, 0xB2, 0x07, 0x00,  0x00, 0x00, 0x00, 0x07,  0x68, 0x00, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,
+  0x00, 0x08, 0x39, 0x3D,  0x1D, 0x96, 0x02, 0x00,  0x08, 0xB2, 0x1C, 0x96,  0x13, 0x00, 0x08, 0xB3,
+  0x07, 0xC9, 0x00, 0x00,  0x00, 0x07, 0x68, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
+  0x01, 0x3D, 0x4F, 0x96,  0x0E, 0x00, 0x07, 0x64,  0x00, 0x00, 0x00, 0x08,  0xB4, 0x07, 0x68, 0x00,
+  0x00, 0x00, 0x08, 0xB2,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x04,
+  0x00, 0x00, 0x00, 0x08,  0x02, 0x3D, 0x17, 0x96,  0x02, 0x00, 0x08, 0xB2,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x10, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x1B, 0x52,  0x17, 0x96, 0x08, 0x00,  0x07, 0x83, 0x00, 0x00,  0x00, 0x02, 0x08, 0xB2,
   0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
-  0x02, 0x3D, 0x17, 0x96,  0x0E, 0x00, 0x07, 0x0C,  0x00, 0x00, 0x00, 0x08,  0xAE, 0x07, 0x85, 0x03,
-  0x00, 0x00, 0x08, 0x96,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x04,
-  0x00, 0x00, 0x00, 0x08,  0x03, 0x3D, 0x17, 0x96,  0x02, 0x00, 0x08, 0x96,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x0D, 0x4E, 0x96,  0x13, 0x00, 0x08, 0xAF,  0x07, 0xC8, 0x00, 0x00,  0x00, 0x07, 0x68, 0x00,
-  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x08, 0x00, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x02,  0x08, 0x96, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,
-  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x00, 0x3D,  0x17, 0x96, 0x13, 0x00,  0x08, 0xB0, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x07,  0x70, 0x00, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x39, 0x3D,
-  0x1D, 0x96, 0x0E, 0x00,  0x07, 0x64, 0x00, 0x00,  0x00, 0x08, 0xB1, 0x07,  0x70, 0x00, 0x00, 0x00,
-  0x08, 0xB0, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x04, 0x00, 0x00,
-  0x00, 0x08, 0x02, 0x3D,  0x17, 0x96, 0x02, 0x00,  0x08, 0xB0, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,
-  0x4E, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x10, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x1B, 0x52, 0x17, 0x96,  0x08, 0x00, 0x07, 0x03,  0x04, 0x00, 0x00, 0x02,  0x08, 0xB0, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x00, 0x3D,
-  0x17, 0x96, 0x13, 0x00,  0x08, 0xB2, 0x07, 0x00,  0x00, 0x00, 0x00, 0x07,  0x68, 0x00, 0x00, 0x00,
-  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x39, 0x3D,  0x1D, 0x96, 0x02, 0x00,  0x08, 0xB2, 0x1C, 0x96,
-  0x13, 0x00, 0x08, 0xB3,  0x07, 0xC9, 0x00, 0x00,  0x00, 0x07, 0x68, 0x00,  0x00, 0x00, 0x07, 0x02,
-  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x0E, 0x00, 0x07, 0x64,  0x00, 0x00, 0x00, 0x08,
-  0xB4, 0x07, 0x68, 0x00,  0x00, 0x00, 0x08, 0xB2,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
-  0x07, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x08,  0x02, 0x3D, 0x17, 0x96,  0x02, 0x00, 0x08, 0xB2,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,
-  0x10, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1B, 0x52,  0x17, 0x96, 0x08, 0x00,  0x07, 0x83, 0x00, 0x00,
-  0x00, 0x02, 0x08, 0xB2,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x96,  0x0E, 0x00, 0x07, 0x2C,  0x01, 0x00, 0x00, 0x08,
-  0xB5, 0x07, 0x68, 0x00,  0x00, 0x00, 0x08, 0xB2,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
-  0x07, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x08,  0x03, 0x3D, 0x17, 0x96,  0x0E, 0x00, 0x07, 0xC8,
-  0x00, 0x00, 0x00, 0x08,  0xB6, 0x07, 0x84, 0x03,  0x00, 0x00, 0x08, 0xB2,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x08,  0x03, 0x3D, 0x17, 0x96,
-  0x08, 0x00, 0x07, 0x83,  0x00, 0x00, 0x00, 0x02,  0x08, 0xB2, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x96,  0x13, 0x00, 0x08, 0xB7,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x07, 0x6E, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x39, 0x3D, 0x1D, 0x96,
-  0x02, 0x00, 0x08, 0xB2,  0x1C, 0x96, 0x13, 0x00,  0x08, 0xB8, 0x07, 0x00,  0x00, 0x00, 0x00, 0x07,
-  0x71, 0x00, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x39, 0x3D,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0xB2, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xB8,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0xB9,  0x8E, 0x0B, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x6F, 0x00,
-  0x67, 0x00, 0x96, 0x02,  0x00, 0x08, 0x1C, 0x1C,  0x44, 0x96, 0x02, 0x00,  0x08, 0xBA, 0x49, 0x12,
-  0x12, 0x9D, 0x02, 0x00,  0x05, 0x00, 0x96, 0x01,  0x00, 0x02, 0x3E, 0x96,  0x07, 0x00, 0x08, 0xBB,
-  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x3C, 0x96,  0x02, 0x00, 0x08, 0x1C,  0x46, 0x87, 0x01, 0x00,
-  0x00, 0x96, 0x01, 0x00,  0x02, 0x49, 0x9D, 0x02,  0x00, 0x27, 0x00, 0x96,  0x04, 0x00, 0x08, 0xBC,
-  0x04, 0x00, 0x3C, 0x96,  0x02, 0x00, 0x08, 0xBB,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xBC, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xBC, 0x1C, 0x4E,  0x4F, 0x99, 0x02, 0x00,
-  0xCB, 0xFF, 0x96, 0x02,  0x00, 0x08, 0xBB, 0x1C,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0xB2, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0xB8, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0xBD, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x36, 0x00,  0x96, 0x02, 0x00, 0x08,
-  0x0A, 0x1C, 0x96, 0x07,  0x00, 0x08, 0xBE, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x07, 0x00, 0x08,  0xBF, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,
-  0x96, 0x07, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xC0,
-  0x52, 0x17, 0x4F, 0x96,  0x02, 0x00, 0x08, 0xB2,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xB8, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x02, 0x00,  0x08, 0xC1, 0x8E, 0x0E,  0x00, 0x00, 0x01, 0x00,
-  0x00, 0x00, 0x00, 0x00,  0x6E, 0x61, 0x6D, 0x65,  0x00, 0x25, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0xBE, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0E,  0x1C, 0x4E, 0x96, 0x07,
-  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xB9, 0x52, 0x3E,
-  0x4F, 0x96, 0x02, 0x00,  0x08, 0xB2, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xB8,  0x4E, 0x96, 0x02, 0x00,
-  0x08, 0x0D, 0x4E, 0x96,  0x02, 0x00, 0x08, 0xC2,  0x8E, 0x15, 0x00, 0x00,  0x02, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x6E, 0x61,  0x6D, 0x65, 0x00, 0x00,  0x73, 0x74, 0x79, 0x6C,  0x65, 0x00, 0x79, 0x00,
-  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xBE, 0x4E,  0x12, 0x12, 0x9D, 0x02,
-  0x00, 0x12, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x07, 0x00,  0x08, 0xBE, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xBE,
-  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xC3,  0x1C, 0x96, 0x07, 0x00,
-  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0xB9, 0x52, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x0E,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x0A, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0xC4, 0x52, 0x17, 0x96,  0x07, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,
-  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xC0, 0x52,  0x17, 0x4F, 0x96, 0x02,  0x00, 0x08, 0xB2, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0xB8, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0xC5, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x5B, 0x00,  0x96, 0x04, 0x00, 0x08,
-  0xC6, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0xBE, 0x4E, 0x3C, 0x96,  0x07, 0x00, 0x08, 0xC7,
-  0x07, 0x00, 0x00, 0x00,  0x00, 0x42, 0x3C, 0x96,  0x02, 0x00, 0x08, 0xC6,  0x46, 0x87, 0x01, 0x00,
-  0x00, 0x96, 0x01, 0x00,  0x02, 0x49, 0x9D, 0x02,  0x00, 0x25, 0x00, 0x96,  0x04, 0x00, 0x08, 0xBC,
-  0x04, 0x00, 0x3C, 0x96,  0x02, 0x00, 0x08, 0xBC,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
-  0x00, 0x08, 0xC7, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x16, 0x52, 0x17, 0x99,  0x02, 0x00, 0xCD, 0xFF,
-  0x96, 0x02, 0x00, 0x08,  0xC7, 0x1C, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0xB2, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0xB8, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0xC4, 0x8E,
-  0x0E, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x6E, 0x61, 0x6D,  0x65, 0x00, 0x5C, 0x00,
-  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xBF, 0x4E,  0x12, 0x12, 0x9D, 0x02,
-  0x00, 0x12, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x07, 0x00,  0x08, 0xBF, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xBF,
-  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,
+  0x00, 0x3D, 0x17, 0x96,  0x0E, 0x00, 0x07, 0x2C,  0x01, 0x00, 0x00, 0x08,  0xB5, 0x07, 0x68, 0x00,
+  0x00, 0x00, 0x08, 0xB2,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x04,
+  0x00, 0x00, 0x00, 0x08,  0x03, 0x3D, 0x17, 0x96,  0x0E, 0x00, 0x07, 0xC8,  0x00, 0x00, 0x00, 0x08,
+  0xB6, 0x07, 0x84, 0x03,  0x00, 0x00, 0x08, 0xB2,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
+  0x07, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x08,  0x03, 0x3D, 0x17, 0x96,  0x08, 0x00, 0x07, 0x83,
+  0x00, 0x00, 0x00, 0x02,  0x08, 0xB2, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
+  0x00, 0x3D, 0x17, 0x96,  0x13, 0x00, 0x08, 0xB7,  0x07, 0x00, 0x00, 0x00,  0x00, 0x07, 0x6E, 0x00,
+  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x39, 0x3D, 0x1D, 0x96,  0x02, 0x00, 0x08, 0xB2,
+  0x1C, 0x96, 0x13, 0x00,  0x08, 0xB8, 0x07, 0x00,  0x00, 0x00, 0x00, 0x07,  0x71, 0x00, 0x00, 0x00,
+  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x39, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0xB2, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0xB8,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x02, 0x00, 0x08, 0xB9,
+  0x8E, 0x0B, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x6F, 0x00,  0x67, 0x00, 0x96, 0x02,
+  0x00, 0x08, 0x1C, 0x1C,  0x44, 0x96, 0x02, 0x00,  0x08, 0xBA, 0x49, 0x12,  0x12, 0x9D, 0x02, 0x00,
+  0x05, 0x00, 0x96, 0x01,  0x00, 0x02, 0x3E, 0x96,  0x07, 0x00, 0x08, 0xBB,  0x07, 0x00, 0x00, 0x00,
+  0x00, 0x43, 0x3C, 0x96,  0x02, 0x00, 0x08, 0x1C,  0x46, 0x87, 0x01, 0x00,  0x00, 0x96, 0x01, 0x00,
+  0x02, 0x49, 0x9D, 0x02,  0x00, 0x27, 0x00, 0x96,  0x04, 0x00, 0x08, 0xBC,  0x04, 0x00, 0x3C, 0x96,
+  0x02, 0x00, 0x08, 0xBB,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xBC, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1C,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0xBC, 0x1C, 0x4E,  0x4F, 0x99, 0x02, 0x00,  0xCB, 0xFF, 0x96, 0x02,
+  0x00, 0x08, 0xBB, 0x1C,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0xB2, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0xB8, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,  0xBD, 0x8E, 0x08, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x36, 0x00,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x07,
+  0x00, 0x08, 0xBE, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
+  0x96, 0x07, 0x00, 0x08,  0xBF, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,  0x96, 0x07, 0x00, 0x07,
+  0x00, 0x00, 0x00, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xC0,  0x52, 0x17, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0xB2,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xB8, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,
+  0x4E, 0x96, 0x02, 0x00,  0x08, 0xC1, 0x8E, 0x0E,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x6E, 0x61, 0x6D, 0x65,  0x00, 0x25, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,
   0x08, 0xBE, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0E,  0x1C, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,
-  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xC8, 0x52, 0x4F,  0x4F, 0x96, 0x02, 0x00,
+  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xB9, 0x52, 0x3E,  0x4F, 0x96, 0x02, 0x00,
   0x08, 0xB2, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xB8,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0xC8,  0x8E, 0x0F, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x73, 0x74,
-  0x79, 0x6C, 0x65, 0x00,  0x9D, 0x03, 0x96, 0x02,  0x00, 0x08, 0xC3, 0x1C,  0x96, 0x01, 0x00, 0x02,
-  0x49, 0x12, 0x9D, 0x02,  0x00, 0x05, 0x00, 0x96,  0x01, 0x00, 0x02, 0x3E,  0x96, 0x09, 0x00, 0x08,
-  0xC9, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0xB7,  0x40, 0x3C, 0x96, 0x02,  0x00, 0x08, 0xC3, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0xCA, 0x4E, 0x12, 0x9D,  0x02, 0x00, 0x15, 0x00,  0x96, 0x02, 0x00, 0x08,
-  0xC9, 0x1C, 0x96, 0x04,  0x00, 0x08, 0xCB, 0x08,  0xC3, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xCA, 0x4E,
-  0x4F, 0x96, 0x02, 0x00,  0x08, 0xC3, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xCC,  0x4E, 0x96, 0x02, 0x00,
-  0x08, 0xCD, 0x49, 0x9D,  0x02, 0x00, 0x2B, 0x00,  0x96, 0x02, 0x00, 0x08,  0xC3, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0xCC, 0x4E,  0x96, 0x02, 0x00, 0x08,  0xCE, 0x49, 0x12, 0x9D,  0x02, 0x00, 0x0E, 0x00,
-  0x96, 0x02, 0x00, 0x08,  0xC9, 0x1C, 0x96, 0x04,  0x00, 0x08, 0xCD, 0x05,  0x00, 0x4F, 0x99, 0x02,
-  0x00, 0x0E, 0x00, 0x96,  0x02, 0x00, 0x08, 0xC9,  0x1C, 0x96, 0x04, 0x00,  0x08, 0xCD, 0x05, 0x01,
-  0x4F, 0x96, 0x02, 0x00,  0x08, 0xC3, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xCF,  0x4E, 0x12, 0x9D, 0x02,
-  0x00, 0x41, 0x00, 0x96,  0x04, 0x00, 0x08, 0xC6,  0x08, 0xC3, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xCF,
-  0x4E, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0xD0, 0x52, 0x3C, 0x96,  0x02, 0x00, 0x08, 0xC6,  0x1C, 0x96, 0x01, 0x00,  0x02, 0x49, 0x12, 0x12,
-  0x9D, 0x02, 0x00, 0x0F,  0x00, 0x96, 0x02, 0x00,  0x08, 0xC9, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xCF,
-  0x08, 0xC6, 0x1C, 0x4F,  0x96, 0x02, 0x00, 0x08,  0xC9, 0x1C, 0x96, 0x04,  0x00, 0x08, 0xD1, 0x08,
-  0xC3, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xD1, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0xC3, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0xD2,  0x4E, 0x12, 0x9D, 0x02,  0x00, 0x26, 0x00, 0x96,  0x02, 0x00, 0x08, 0xC9,
-  0x1C, 0x96, 0x04, 0x00,  0x08, 0xD3, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xD2, 0x4E, 0x96,
-  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xD4, 0x52,
-  0x4F, 0x96, 0x02, 0x00,  0x08, 0xC3, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xD5,  0x4E, 0x12, 0x9D, 0x02,
-  0x00, 0x20, 0x00, 0x96,  0x02, 0x00, 0x08, 0xC9,  0x1C, 0x96, 0x04, 0x00,  0x08, 0xD6, 0x08, 0xC3,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0xD5, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,
-  0xD7, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xD8, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0xD9,  0x49, 0x9D, 0x02, 0x00,  0x2B, 0x00, 0x96, 0x02,  0x00, 0x08, 0xC3, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0xD8, 0x4E, 0x96, 0x02,  0x00, 0x08, 0xCE, 0x49,  0x12, 0x9D, 0x02, 0x00,
-  0x0E, 0x00, 0x96, 0x02,  0x00, 0x08, 0xC9, 0x1C,  0x96, 0x04, 0x00, 0x08,  0xD9, 0x05, 0x00, 0x4F,
-  0x99, 0x02, 0x00, 0x0E,  0x00, 0x96, 0x02, 0x00,  0x08, 0xC9, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xD9,
-  0x05, 0x01, 0x4F, 0x96,  0x02, 0x00, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xDA, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0xDB,  0x49, 0x9D, 0x02, 0x00,  0x4F, 0x00, 0x96, 0x02,  0x00, 0x08, 0xC3, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0xDA, 0x4E, 0x96, 0x02,  0x00, 0x08, 0xDC, 0x49,  0x9D, 0x02, 0x00, 0x25,
-  0x00, 0x96, 0x02, 0x00,  0x08, 0xC9, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xDA,  0x08, 0xC3, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0xDA,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0xD7, 0x3D,
-  0x4F, 0x99, 0x02, 0x00,  0x0E, 0x00, 0x96, 0x02,  0x00, 0x08, 0xC9, 0x1C,  0x96, 0x04, 0x00, 0x08,
-  0xDA, 0x05, 0x00, 0x4F,  0x99, 0x02, 0x00, 0x0E,  0x00, 0x96, 0x02, 0x00,  0x08, 0xC9, 0x1C, 0x96,
-  0x04, 0x00, 0x08, 0xDA,  0x05, 0x01, 0x4F, 0x96,  0x02, 0x00, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0xDD, 0x4E, 0x12,  0x9D, 0x02, 0x00, 0x20,  0x00, 0x96, 0x02, 0x00,  0x08, 0xC9, 0x1C, 0x96,
-  0x04, 0x00, 0x08, 0xDD,  0x08, 0xC3, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xDD,  0x4E, 0x96, 0x07, 0x00,
+  0x02, 0x00, 0x08, 0xC2,  0x8E, 0x15, 0x00, 0x00,  0x02, 0x00, 0x00, 0x00,  0x00, 0x00, 0x6E, 0x61,
+  0x6D, 0x65, 0x00, 0x00,  0x73, 0x74, 0x79, 0x6C,  0x65, 0x00, 0x79, 0x00,  0x96, 0x02, 0x00, 0x08,
+  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xBE, 0x4E,  0x12, 0x12, 0x9D, 0x02,  0x00, 0x12, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x07, 0x00,  0x08, 0xBE, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xBE,  0x4E, 0x96, 0x02, 0x00,
+  0x08, 0x0E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xC3,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
+  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0xB9, 0x52, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0E,
+  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0xC4, 0x52, 0x17, 0x96,  0x07, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0xC0, 0x52,  0x17, 0x4F, 0x96, 0x02,  0x00, 0x08, 0xB2, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0xB8, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,  0xC5, 0x8E, 0x08, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x5B, 0x00,  0x96, 0x04, 0x00, 0x08,  0xC6, 0x08, 0x0A, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0xBE, 0x4E, 0x3C, 0x96,  0x07, 0x00, 0x08, 0xC7,  0x07, 0x00, 0x00, 0x00,
+  0x00, 0x42, 0x3C, 0x96,  0x02, 0x00, 0x08, 0xC6,  0x46, 0x87, 0x01, 0x00,  0x00, 0x96, 0x01, 0x00,
+  0x02, 0x49, 0x9D, 0x02,  0x00, 0x25, 0x00, 0x96,  0x04, 0x00, 0x08, 0xBC,  0x04, 0x00, 0x3C, 0x96,
+  0x02, 0x00, 0x08, 0xBC,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0xC7, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x16, 0x52, 0x17, 0x99,  0x02, 0x00, 0xCD, 0xFF,  0x96, 0x02, 0x00, 0x08,
+  0xC7, 0x1C, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0xB2, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xB8, 0x4E,
+  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0xC4, 0x8E,  0x0E, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00,  0x00, 0x6E, 0x61, 0x6D,  0x65, 0x00, 0x5C, 0x00,  0x96, 0x02, 0x00, 0x08,
+  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xBF, 0x4E,  0x12, 0x12, 0x9D, 0x02,  0x00, 0x12, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x07, 0x00,  0x08, 0xBF, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xBF,  0x4E, 0x96, 0x02, 0x00,
+  0x08, 0x0E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xBE, 0x4E, 0x96,
+  0x02, 0x00, 0x08, 0x0E,  0x1C, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x0A,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0xC8, 0x52, 0x4F,  0x4F, 0x96, 0x02, 0x00,  0x08, 0xB2, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0xB8,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x02, 0x00, 0x08, 0xC8,
+  0x8E, 0x0F, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x73, 0x74,  0x79, 0x6C, 0x65, 0x00,
+  0x9D, 0x03, 0x96, 0x02,  0x00, 0x08, 0xC3, 0x1C,  0x96, 0x01, 0x00, 0x02,  0x49, 0x12, 0x9D, 0x02,
+  0x00, 0x05, 0x00, 0x96,  0x01, 0x00, 0x02, 0x3E,  0x96, 0x09, 0x00, 0x08,  0xC9, 0x07, 0x00, 0x00,
+  0x00, 0x00, 0x08, 0xB7,  0x40, 0x3C, 0x96, 0x02,  0x00, 0x08, 0xC3, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0xCA, 0x4E, 0x12, 0x9D,  0x02, 0x00, 0x15, 0x00,  0x96, 0x02, 0x00, 0x08,  0xC9, 0x1C, 0x96, 0x04,
+  0x00, 0x08, 0xCB, 0x08,  0xC3, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xCA, 0x4E,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0xC3, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xCC,  0x4E, 0x96, 0x02, 0x00,  0x08, 0xCD, 0x49, 0x9D,
+  0x02, 0x00, 0x2B, 0x00,  0x96, 0x02, 0x00, 0x08,  0xC3, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xCC, 0x4E,
+  0x96, 0x02, 0x00, 0x08,  0xCE, 0x49, 0x12, 0x9D,  0x02, 0x00, 0x0E, 0x00,  0x96, 0x02, 0x00, 0x08,
+  0xC9, 0x1C, 0x96, 0x04,  0x00, 0x08, 0xCD, 0x05,  0x00, 0x4F, 0x99, 0x02,  0x00, 0x0E, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0xC9,  0x1C, 0x96, 0x04, 0x00,  0x08, 0xCD, 0x05, 0x01,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0xC3, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xCF,  0x4E, 0x12, 0x9D, 0x02,  0x00, 0x41, 0x00, 0x96,
+  0x04, 0x00, 0x08, 0xC6,  0x08, 0xC3, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xCF,  0x4E, 0x96, 0x07, 0x00,
+  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0xD0, 0x52, 0x3C, 0x96,
+  0x02, 0x00, 0x08, 0xC6,  0x1C, 0x96, 0x01, 0x00,  0x02, 0x49, 0x12, 0x12,  0x9D, 0x02, 0x00, 0x0F,
+  0x00, 0x96, 0x02, 0x00,  0x08, 0xC9, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xCF,  0x08, 0xC6, 0x1C, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0xC9, 0x1C, 0x96, 0x04,  0x00, 0x08, 0xD1, 0x08,  0xC3, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0xD1, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0xC3, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xD2,
+  0x4E, 0x12, 0x9D, 0x02,  0x00, 0x26, 0x00, 0x96,  0x02, 0x00, 0x08, 0xC9,  0x1C, 0x96, 0x04, 0x00,
+  0x08, 0xD3, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xD2, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,
+  0x00, 0x00, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xD4, 0x52,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0xC3, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xD5,  0x4E, 0x12, 0x9D, 0x02,  0x00, 0x20, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0xC9,  0x1C, 0x96, 0x04, 0x00,  0x08, 0xD6, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0xD5, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0xD7, 0x3D, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xD8, 0x4E, 0x96,  0x02, 0x00, 0x08, 0xD9,
+  0x49, 0x9D, 0x02, 0x00,  0x2B, 0x00, 0x96, 0x02,  0x00, 0x08, 0xC3, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0xD8, 0x4E, 0x96, 0x02,  0x00, 0x08, 0xCE, 0x49,  0x12, 0x9D, 0x02, 0x00,  0x0E, 0x00, 0x96, 0x02,
+  0x00, 0x08, 0xC9, 0x1C,  0x96, 0x04, 0x00, 0x08,  0xD9, 0x05, 0x00, 0x4F,  0x99, 0x02, 0x00, 0x0E,
+  0x00, 0x96, 0x02, 0x00,  0x08, 0xC9, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xD9,  0x05, 0x01, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xDA, 0x4E, 0x96,  0x02, 0x00, 0x08, 0xDB,
+  0x49, 0x9D, 0x02, 0x00,  0x4F, 0x00, 0x96, 0x02,  0x00, 0x08, 0xC3, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0xDA, 0x4E, 0x96, 0x02,  0x00, 0x08, 0xDC, 0x49,  0x9D, 0x02, 0x00, 0x25,  0x00, 0x96, 0x02, 0x00,
+  0x08, 0xC9, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xDA,  0x08, 0xC3, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xDA,
+  0x4E, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0xD7, 0x3D,  0x4F, 0x99, 0x02, 0x00,
+  0x0E, 0x00, 0x96, 0x02,  0x00, 0x08, 0xC9, 0x1C,  0x96, 0x04, 0x00, 0x08,  0xDA, 0x05, 0x00, 0x4F,
+  0x99, 0x02, 0x00, 0x0E,  0x00, 0x96, 0x02, 0x00,  0x08, 0xC9, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xDA,
+  0x05, 0x01, 0x4F, 0x96,  0x02, 0x00, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xDD, 0x4E, 0x12,
+  0x9D, 0x02, 0x00, 0x20,  0x00, 0x96, 0x02, 0x00,  0x08, 0xC9, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xDD,
+  0x08, 0xC3, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xDD,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
+  0x00, 0x08, 0xD7, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0xC3, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xDE,
+  0x4E, 0x12, 0x9D, 0x02,  0x00, 0x20, 0x00, 0x96,  0x02, 0x00, 0x08, 0xC9,  0x1C, 0x96, 0x04, 0x00,
+  0x08, 0xDF, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xDE, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,
+  0x00, 0x00, 0x00, 0x08,  0xD7, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0xE0, 0x4E, 0x12,  0x9D, 0x02, 0x00, 0x20,  0x00, 0x96, 0x02, 0x00,  0x08, 0xC9, 0x1C, 0x96,
+  0x04, 0x00, 0x08, 0xE0,  0x08, 0xC3, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xE0,  0x4E, 0x96, 0x07, 0x00,
   0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0xD7, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0xC3, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0xDE,  0x4E, 0x12, 0x9D, 0x02,  0x00, 0x20, 0x00, 0x96,  0x02, 0x00, 0x08, 0xC9,
-  0x1C, 0x96, 0x04, 0x00,  0x08, 0xDF, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xDE, 0x4E, 0x96,
+  0x02, 0x00, 0x08, 0xE1,  0x4E, 0x12, 0x9D, 0x02,  0x00, 0x20, 0x00, 0x96,  0x02, 0x00, 0x08, 0xC9,
+  0x1C, 0x96, 0x04, 0x00,  0x08, 0xE2, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xE1, 0x4E, 0x96,
   0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0xD7, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0xC3,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0xE0, 0x4E, 0x12,  0x9D, 0x02, 0x00, 0x20,  0x00, 0x96, 0x02, 0x00,
-  0x08, 0xC9, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xE0,  0x08, 0xC3, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xE0,
-  0x4E, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0xD7, 0x3D,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0xC3, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xE1,  0x4E, 0x12, 0x9D, 0x02,  0x00, 0x20, 0x00, 0x96,
-  0x02, 0x00, 0x08, 0xC9,  0x1C, 0x96, 0x04, 0x00,  0x08, 0xE2, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0xE1, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0xD7, 0x3D, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xE3, 0x4E, 0x12,  0x9D, 0x02, 0x00, 0x3B,
-  0x00, 0x96, 0x04, 0x00,  0x08, 0xC6, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xE3, 0x4E, 0x96,
-  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0xD7, 0x3D, 0x3C, 0x96,  0x07, 0x00, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x08,  0xC6, 0x1C, 0x48, 0x12,  0x9D, 0x02, 0x00, 0x0F,  0x00, 0x96, 0x02, 0x00,
-  0x08, 0xC9, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xE4,  0x08, 0xC6, 0x1C, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0xC3, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xE5, 0x4E,  0x96, 0x02, 0x00, 0x08,  0xE6, 0x49, 0x9D, 0x02,
-  0x00, 0x2B, 0x00, 0x96,  0x02, 0x00, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xE5, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x3D,  0x49, 0x12, 0x9D, 0x02,  0x00, 0x0E, 0x00, 0x96,  0x02, 0x00, 0x08, 0xC9,
-  0x1C, 0x96, 0x04, 0x00,  0x08, 0xE6, 0x05, 0x00,  0x4F, 0x99, 0x02, 0x00,  0x0E, 0x00, 0x96, 0x02,
-  0x00, 0x08, 0xC9, 0x1C,  0x96, 0x04, 0x00, 0x08,  0xE6, 0x05, 0x01, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0xC9, 0x1C, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0xB2, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xB8, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0xE7, 0x8E,  0x0D, 0x00, 0x00, 0x01,
-  0x00, 0x00, 0x00, 0x00,  0x00, 0x63, 0x73, 0x73,  0x00, 0xDA, 0x00, 0x96,  0x04, 0x00, 0x08, 0xEA,
-  0x08, 0xE8, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0xE9, 0x52,  0x3C, 0x96, 0x02, 0x00,  0x08, 0xEA, 0x1C, 0x44,  0x96, 0x02, 0x00, 0x08,
-  0xEB, 0x49, 0x12, 0x9D,  0x02, 0x00, 0x06, 0x00,  0x96, 0x02, 0x00, 0x05,  0x00, 0x3E, 0x96, 0x02,
-  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0xBE, 0x4E, 0x12, 0x12,  0x9D, 0x02, 0x00, 0x12,
-  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x07, 0x00, 0x08, 0xBE,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0xEA,  0x46, 0x87, 0x01, 0x00,  0x00, 0x96, 0x01, 0x00,
-  0x02, 0x49, 0x9D, 0x02,  0x00, 0x56, 0x00, 0x96,  0x04, 0x00, 0x08, 0xBC,  0x04, 0x00, 0x3C, 0x96,
-  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xBE, 0x4E, 0x96,  0x02, 0x00, 0x08, 0xBC,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0xEA, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xBC,  0x1C, 0x4E, 0x96, 0x07,
-  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xB9, 0x52, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0xBC, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0xC4, 0x52, 0x17,  0x99, 0x02, 0x00, 0x9C,  0xFF, 0x96, 0x07, 0x00,
-  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0xC0, 0x52, 0x17, 0x96,
-  0x02, 0x00, 0x05, 0x01,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0xB2, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0xB8, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x04, 0x00, 0x08,  0xEC, 0x08, 0xB2, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0xB8, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0xE7, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0xB2,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xB8, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x13, 0x00,  0x08, 0x4B, 0x07, 0x00,  0x00, 0x00, 0x00, 0x07,
-  0x2D, 0x01, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0xB2, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xB8,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x4F,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x4F,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0xE3, 0x4E, 0x12,  0x9D, 0x02, 0x00, 0x3B,  0x00, 0x96, 0x04, 0x00,
+  0x08, 0xC6, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xE3, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,
+  0x00, 0x00, 0x00, 0x08,  0xD7, 0x3D, 0x3C, 0x96,  0x07, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,
+  0xC6, 0x1C, 0x48, 0x12,  0x9D, 0x02, 0x00, 0x0F,  0x00, 0x96, 0x02, 0x00,  0x08, 0xC9, 0x1C, 0x96,
+  0x04, 0x00, 0x08, 0xE4,  0x08, 0xC6, 0x1C, 0x4F,  0x96, 0x02, 0x00, 0x08,  0xC3, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0xE5, 0x4E,  0x96, 0x02, 0x00, 0x08,  0xE6, 0x49, 0x9D, 0x02,  0x00, 0x2B, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0xC3,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xE5, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x3D,
+  0x49, 0x12, 0x9D, 0x02,  0x00, 0x0E, 0x00, 0x96,  0x02, 0x00, 0x08, 0xC9,  0x1C, 0x96, 0x04, 0x00,
+  0x08, 0xE6, 0x05, 0x00,  0x4F, 0x99, 0x02, 0x00,  0x0E, 0x00, 0x96, 0x02,  0x00, 0x08, 0xC9, 0x1C,
+  0x96, 0x04, 0x00, 0x08,  0xE6, 0x05, 0x01, 0x4F,  0x96, 0x02, 0x00, 0x08,  0xC9, 0x1C, 0x3E, 0x4F,
   0x96, 0x02, 0x00, 0x08,  0xB2, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xB8, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x50, 0x8E,  0x0D, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
-  0x00, 0x73, 0x72, 0x63,  0x00, 0x6B, 0x00, 0x96,  0x02, 0x00, 0x08, 0x52,  0x1C, 0x96, 0x01, 0x00,
-  0x02, 0x49, 0x12, 0x9D,  0x02, 0x00, 0x19, 0x00,  0x96, 0x09, 0x00, 0x05,  0x00, 0x07, 0x01, 0x00,
-  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x4F, 0x52, 0x17,  0x99, 0x02, 0x00, 0x41,
-  0x00, 0x96, 0x04, 0x00,  0x08, 0xEA, 0x08, 0x52,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
-  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0xEC, 0x52, 0x3C, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x04, 0x00,  0x08, 0x51, 0x08, 0xEA,  0x1C, 0x4F, 0x96, 0x02,  0x00, 0x08, 0xEA, 0x1C,
-  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x4F,
-  0x52, 0x17, 0x4F, 0x96,  0x0E, 0x00, 0x07, 0x64,  0x00, 0x00, 0x00, 0x08,  0xED, 0x07, 0x71, 0x00,
-  0x00, 0x00, 0x08, 0xB2,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xB8, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,
-  0x4E, 0x96, 0x07, 0x00,  0x07, 0x04, 0x00, 0x00,  0x00, 0x08, 0x02, 0x3D,  0x17, 0x96, 0x08, 0x00,
-  0x07, 0x03, 0x04, 0x00,  0x00, 0x02, 0x08, 0xB2,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xB8, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x00, 0x3D,
-  0x17, 0x96, 0x09, 0x00,  0x07, 0x03, 0x04, 0x00,  0x00, 0x08, 0xB8, 0x08,  0xB2, 0x1C, 0x96, 0x07,
-  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x00,  0x3D, 0x17, 0x96, 0x07,  0x00, 0x08, 0xEE, 0x07,
-  0x00, 0x00, 0x00, 0x00,  0x43, 0x1D, 0x96, 0x09,  0x00, 0x08, 0xEF, 0x07,  0xCF, 0x07, 0x00, 0x00,
-  0x08, 0xEE, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x02, 0x3D, 0x17, 0x96,
-  0x08, 0x00, 0x07, 0x06,  0x00, 0x00, 0x00, 0x02,  0x08, 0xEE, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x96,  0x02, 0x00, 0x08, 0xF0,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x9E, 0x8E, 0x0F,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,  0x69, 0x6E, 0x64, 0x65,
-  0x78, 0x00, 0x2A, 0x00,  0x96, 0x13, 0x00, 0x08,  0xF1, 0x07, 0xC8, 0x00,  0x00, 0x00, 0x07, 0x36,
-  0x08, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x3C,  0x96, 0x02, 0x00, 0x08,
-  0xF2, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0xF1,  0x3D, 0x3E, 0x4F, 0x96,
-  0x12, 0x00, 0x02, 0x07,  0xC9, 0x00, 0x00, 0x00,  0x07, 0x36, 0x08, 0x00,  0x00, 0x07, 0x02, 0x00,
-  0x00, 0x00, 0x08, 0x01,  0x3D, 0x96, 0x09, 0x00,  0x08, 0xC7, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
-  0xF0, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x07, 0x52,  0x17, 0x96, 0x09, 0x00,  0x08, 0xF3, 0x07, 0x36,
-  0x08, 0x00, 0x00, 0x08,  0xF0, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,
-  0x03, 0x00, 0x00, 0x00,  0x08, 0x02, 0x3D, 0x17,  0x96, 0x08, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,
-  0x02, 0x08, 0xF0, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,
-  0x00, 0x00, 0x08, 0x00,  0x3D, 0x17, 0x96, 0x03,  0x00, 0x09, 0x01, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x0D, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x02,  0x01, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0xC8, 0x00,  0x96, 0x0A, 0x00, 0x08,  0x1C, 0x07, 0x00, 0x00,  0x00, 0x00, 0x09, 0x01,
-  0x01, 0x40, 0x3C, 0x96,  0x02, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x04, 0x00,  0x08, 0xF4, 0x08, 0x0A,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0xF4, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x1C, 0x1C, 0x96, 0x09,
-  0x00, 0x08, 0xF6, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0xF7, 0x40, 0x4F,  0x96, 0x07, 0x00, 0x08,
-  0x18, 0x07, 0x00, 0x00,  0x00, 0x00, 0x3C, 0x99,  0x02, 0x00, 0x09, 0x00,  0x96, 0x02, 0x00, 0x08,
-  0x18, 0x4C, 0x1C, 0x50,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x18, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0xF6, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x19,  0x4E, 0x48, 0x12, 0x9D,
-  0x02, 0x00, 0x3C, 0x00,  0x96, 0x07, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x0A, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0xF6,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x18, 0x1C, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0x02, 0x01, 0x52, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x1C, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0xF6, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x16, 0x52, 0x17, 0x99,  0x02, 0x00, 0x9C, 0xFF,
-  0x96, 0x02, 0x00, 0x08,  0x1C, 0x1C, 0x96, 0x04,  0x00, 0x08, 0xF8, 0x08,  0x0A, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0xF8, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x1C, 0x1C, 0x3E,  0x4F, 0x96, 0x03, 0x00,
-  0x09, 0x01, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x03, 0x01,
-  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x33, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x28, 0x00,  0x08, 0xF8, 0x08, 0xF9,  0x05, 0x00, 0x08, 0xFA,  0x05, 0x00, 0x08, 0xFB,
-  0x05, 0x00, 0x08, 0xFC,  0x05, 0x00, 0x08, 0xFD,  0x05, 0x00, 0x08, 0xFE,  0x05, 0x00, 0x08, 0xFF,
-  0x05, 0x00, 0x09, 0x00,  0x01, 0x05, 0x00, 0x07,  0x08, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x4F, 0x96,
-  0x09, 0x00, 0x07, 0x03,  0x04, 0x00, 0x00, 0x02,  0x09, 0x01, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0xE7, 0x8E,  0x0D, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
+  0x00, 0x63, 0x73, 0x73,  0x00, 0xDA, 0x00, 0x96,  0x04, 0x00, 0x08, 0xEA,  0x08, 0xE8, 0x1C, 0x96,
+  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xE9, 0x52,
+  0x3C, 0x96, 0x02, 0x00,  0x08, 0xEA, 0x1C, 0x44,  0x96, 0x02, 0x00, 0x08,  0xEB, 0x49, 0x12, 0x9D,
+  0x02, 0x00, 0x06, 0x00,  0x96, 0x02, 0x00, 0x05,  0x00, 0x3E, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0xBE, 0x4E, 0x12, 0x12,  0x9D, 0x02, 0x00, 0x12,  0x00, 0x96, 0x02, 0x00,
+  0x08, 0x0A, 0x1C, 0x96,  0x07, 0x00, 0x08, 0xBE,  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0xEA,  0x46, 0x87, 0x01, 0x00,  0x00, 0x96, 0x01, 0x00,  0x02, 0x49, 0x9D, 0x02,
+  0x00, 0x56, 0x00, 0x96,  0x04, 0x00, 0x08, 0xBC,  0x04, 0x00, 0x3C, 0x96,  0x02, 0x00, 0x08, 0x0A,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0xBE, 0x4E, 0x96,  0x02, 0x00, 0x08, 0xBC,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0xEA, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xBC,  0x1C, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,
+  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xB9, 0x52, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0xBC, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0xC4, 0x52, 0x17,  0x99, 0x02, 0x00, 0x9C,  0xFF, 0x96, 0x07, 0x00,  0x07, 0x00, 0x00, 0x00,
+  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0xC0, 0x52, 0x17, 0x96,  0x02, 0x00, 0x05, 0x01,
+  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0xB2, 0x1C,  0x96, 0x02, 0x00, 0x08,  0xB8, 0x4E, 0x96, 0x02,
+  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x04, 0x00, 0x08,  0xEC, 0x08, 0xB2, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0xB8, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,  0xE7, 0x4E, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0xB2,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xB8, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,
+  0x4E, 0x96, 0x13, 0x00,  0x08, 0x4B, 0x07, 0x00,  0x00, 0x00, 0x00, 0x07,  0x2D, 0x01, 0x00, 0x00,
+  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0xB2, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0xB8,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x4F,
+  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0xB2, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xB8, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,
+  0x00, 0x08, 0x50, 0x8E,  0x0D, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x73, 0x72, 0x63,
+  0x00, 0x6B, 0x00, 0x96,  0x02, 0x00, 0x08, 0x52,  0x1C, 0x96, 0x01, 0x00,  0x02, 0x49, 0x12, 0x9D,
+  0x02, 0x00, 0x19, 0x00,  0x96, 0x09, 0x00, 0x05,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x0A,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x4F, 0x52, 0x17,  0x99, 0x02, 0x00, 0x41,  0x00, 0x96, 0x04, 0x00,
+  0x08, 0xEA, 0x08, 0x52,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x0A, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0xEC, 0x52, 0x3C, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x04, 0x00,
+  0x08, 0x51, 0x08, 0xEA,  0x1C, 0x4F, 0x96, 0x02,  0x00, 0x08, 0xEA, 0x1C,  0x96, 0x07, 0x00, 0x07,
+  0x01, 0x00, 0x00, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x4F,  0x52, 0x17, 0x4F, 0x96,
+  0x0E, 0x00, 0x07, 0x64,  0x00, 0x00, 0x00, 0x08,  0xED, 0x07, 0x71, 0x00,  0x00, 0x00, 0x08, 0xB2,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0xB8, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,
+  0x07, 0x04, 0x00, 0x00,  0x00, 0x08, 0x02, 0x3D,  0x17, 0x96, 0x08, 0x00,  0x07, 0x03, 0x04, 0x00,
+  0x00, 0x02, 0x08, 0xB2,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xB8, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,
+  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x00, 0x3D,  0x17, 0x96, 0x09, 0x00,
+  0x07, 0x03, 0x04, 0x00,  0x00, 0x08, 0xB8, 0x08,  0xB2, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,
+  0x00, 0x00, 0x08, 0x00,  0x3D, 0x17, 0x96, 0x0E,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0xEF,
+  0x07, 0x9B, 0x02, 0x00,  0x00, 0x08, 0xEE, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,
+  0x00, 0x07, 0x04, 0x00,  0x00, 0x00, 0x08, 0x02,  0x3D, 0x17, 0x96, 0x08,  0x00, 0x07, 0x03, 0x00,
+  0x00, 0x00, 0x02, 0x08,  0xEE, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,
+  0x03, 0x00, 0x00, 0x00,  0x08, 0x00, 0x3D, 0x17,  0x96, 0x07, 0x00, 0x08,  0xF0, 0x07, 0x00, 0x00,
+  0x00, 0x00, 0x43, 0x1D,  0x96, 0x09, 0x00, 0x08,  0xF1, 0x07, 0xCF, 0x07,  0x00, 0x00, 0x08, 0xF0,
+  0x1C, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x02, 0x3D,  0x17, 0x96, 0x08, 0x00,
+  0x07, 0x06, 0x00, 0x00,  0x00, 0x02, 0x08, 0xF0,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,
+  0x00, 0x08, 0x00, 0x3D,  0x17, 0x96, 0x02, 0x00,  0x08, 0xF2, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x9E,
+  0x8E, 0x0F, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x69, 0x6E,  0x64, 0x65, 0x78, 0x00,
+  0x2A, 0x00, 0x96, 0x13,  0x00, 0x08, 0xF3, 0x07,  0xC8, 0x00, 0x00, 0x00,  0x07, 0x36, 0x08, 0x00,
+  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x3C, 0x96, 0x02,  0x00, 0x08, 0xF4, 0x1C,
+  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0xF3, 0x3D, 0x3E,  0x4F, 0x96, 0x12, 0x00,
+  0x02, 0x07, 0xC9, 0x00,  0x00, 0x00, 0x07, 0x36,  0x08, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
+  0x08, 0x01, 0x3D, 0x96,  0x09, 0x00, 0x08, 0xC7,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0xF2, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x07, 0x52, 0x17, 0x96,  0x09, 0x00, 0x08, 0xF5,  0x07, 0x36, 0x08, 0x00,
+  0x00, 0x08, 0xF2, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,
+  0x00, 0x00, 0x08, 0x02,  0x3D, 0x17, 0x96, 0x08,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x02, 0x08,
+  0xF2, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x3D, 0x17,  0x96, 0x03, 0x00, 0x09,  0x03, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0x04, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0xC8, 0x00, 0x96, 0x0A,  0x00, 0x08, 0x1C, 0x07,  0x00, 0x00, 0x00, 0x00,  0x09, 0x03, 0x01, 0x40,
+  0x3C, 0x96, 0x02, 0x00,  0x08, 0x1C, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xF6,  0x08, 0x0A, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0xF6,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x09, 0x00, 0x08,
+  0xF8, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0xF9,  0x40, 0x4F, 0x96, 0x07,  0x00, 0x08, 0x18, 0x07,
+  0x00, 0x00, 0x00, 0x00,  0x3C, 0x99, 0x02, 0x00,  0x09, 0x00, 0x96, 0x02,  0x00, 0x08, 0x18, 0x4C,
+  0x1C, 0x50, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x18,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0xF8,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x19, 0x4E, 0x48,  0x12, 0x9D, 0x02, 0x00,
+  0x3C, 0x00, 0x96, 0x07,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0xF8, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x18,  0x1C, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x04, 0x01,
+  0x52, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0xF8, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x16, 0x52,  0x17, 0x99, 0x02, 0x00,  0x9C, 0xFF, 0x96, 0x02,
+  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x04, 0x00, 0x08,  0xFA, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0xFA, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x1C,  0x1C, 0x3E, 0x4F, 0x96,  0x03, 0x00, 0x09, 0x03,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x05, 0x01, 0x8E, 0x08,
+  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x35,  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,
+  0x2A, 0x00, 0x08, 0xFA,  0x08, 0xFB, 0x05, 0x00,  0x08, 0xFC, 0x05, 0x00,  0x08, 0xFD, 0x05, 0x00,
+  0x08, 0xFE, 0x05, 0x00,  0x08, 0xFF, 0x05, 0x00,  0x09, 0x00, 0x01, 0x05,  0x00, 0x09, 0x01, 0x01,
+  0x05, 0x00, 0x09, 0x02,  0x01, 0x05, 0x00, 0x07,  0x08, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x4F, 0x96,
+  0x09, 0x00, 0x07, 0x03,  0x04, 0x00, 0x00, 0x02,  0x09, 0x03, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
   0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x00,  0x3D, 0x17, 0x96, 0x03,
-  0x00, 0x09, 0x07, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x02,
+  0x00, 0x09, 0x09, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x04,
   0x01, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x85, 0x00,  0x96, 0x0A, 0x00, 0x08,
-  0x1C, 0x07, 0x00, 0x00,  0x00, 0x00, 0x09, 0x07,  0x01, 0x40, 0x3C, 0x96,  0x02, 0x00, 0x08, 0x1C,
-  0x1C, 0x96, 0x05, 0x00,  0x09, 0x04, 0x01, 0x08,  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x04, 0x01,
-  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x04, 0x00, 0x08,  0xF4, 0x08, 0x0A, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0xF4, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x05, 0x00,
-  0x09, 0x05, 0x01, 0x08,  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x05, 0x01,  0x4E, 0x4F, 0x96, 0x02,
+  0x1C, 0x07, 0x00, 0x00,  0x00, 0x00, 0x09, 0x09,  0x01, 0x40, 0x3C, 0x96,  0x02, 0x00, 0x08, 0x1C,
+  0x1C, 0x96, 0x05, 0x00,  0x09, 0x06, 0x01, 0x08,  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x06, 0x01,
+  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x04, 0x00, 0x08,  0xF6, 0x08, 0x0A, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0xF6, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x05, 0x00,
+  0x09, 0x07, 0x01, 0x08,  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x07, 0x01,  0x4E, 0x4F, 0x96, 0x02,
   0x00, 0x08, 0x1C, 0x1C,  0x96, 0x04, 0x00, 0x08,  0x98, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x98, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x05, 0x00,  0x09, 0x06, 0x01, 0x08,
-  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x06, 0x01,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x1C, 0x1C,
-  0x3E, 0x4F, 0x96, 0x09,  0x00, 0x07, 0x03, 0x04,  0x00, 0x00, 0x02, 0x09,  0x07, 0x01, 0x1C, 0x96,
+  0x98, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x05, 0x00,  0x09, 0x08, 0x01, 0x08,
+  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x08, 0x01,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x1C, 0x1C,
+  0x3E, 0x4F, 0x96, 0x09,  0x00, 0x07, 0x03, 0x04,  0x00, 0x00, 0x02, 0x09,  0x09, 0x01, 0x1C, 0x96,
   0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x00, 0x3D,
-  0x17, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x08, 0x00, 0x09, 0x08,  0x01, 0x07, 0x00, 0x00,
-  0x00, 0x00, 0x43, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x08, 0x01,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0x09, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
-  0x3E, 0x00, 0x96, 0x14,  0x00, 0x09, 0x0A, 0x01,  0x07, 0xC8, 0x00, 0x00,  0x00, 0x07, 0x9C, 0x08,
+  0x17, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x08, 0x00, 0x09, 0x0A,  0x01, 0x07, 0x00, 0x00,
+  0x00, 0x00, 0x43, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x0A, 0x01,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0x0B, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x3E, 0x00, 0x96, 0x14,  0x00, 0x09, 0x0C, 0x01,  0x07, 0xC8, 0x00, 0x00,  0x00, 0x07, 0x9C, 0x08,
   0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x3C, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x08, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x09, 0x0A, 0x01,  0x3D, 0x17, 0x96, 0x02,
+  0x1C, 0x96, 0x08, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x09, 0x0C, 0x01,  0x3D, 0x17, 0x96, 0x02,
   0x00, 0x08, 0x0A, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x15, 0x07, 0x00, 0x00,  0x00, 0x00, 0x42, 0x4F,
-  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x08,  0x01, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0x09, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x0A,  0x01, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0x0B, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,
   0x00, 0x00, 0x00, 0x08,  0x10, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1B, 0x52,  0x17, 0x96, 0x0A, 0x00,
-  0x09, 0x0B, 0x01, 0x07,  0x9C, 0x08, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x08,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x09, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
+  0x09, 0x0D, 0x01, 0x07,  0x9C, 0x08, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x0A,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x0B, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
   0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x02, 0x3D, 0x17, 0x96,  0x08, 0x00, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x02,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x08,  0x01, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0x09, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,
+  0x00, 0x00, 0x00, 0x02,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x0A,  0x01, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0x0B, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,
   0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x08, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x0C, 0x01, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x27,  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x0A, 0x00, 0x09, 0x0D,
-  0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0xF7,  0x40, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
+  0x09, 0x0A, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x0E, 0x01, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x27,  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x0A, 0x00, 0x09, 0x0F,
+  0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0xF9,  0x40, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
   0x96, 0x07, 0x00, 0x08,  0x15, 0x07, 0x00, 0x00,  0x00, 0x00, 0x42, 0x4F,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x08,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x0C, 0x01,
+  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x0A,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x0E, 0x01,
   0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,
-  0x10, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1B, 0x52,  0x17, 0x96, 0x0A, 0x00,  0x09, 0x0E, 0x01, 0x07,
-  0x9D, 0x08, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x08,  0x01, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0x0C, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,
+  0x10, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1B, 0x52,  0x17, 0x96, 0x0A, 0x00,  0x09, 0x10, 0x01, 0x07,
+  0x9D, 0x08, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x0A,  0x01, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0x0E, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,
   0x00, 0x00, 0x00, 0x08,  0x02, 0x3D, 0x17, 0x96,  0x08, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x02,
-  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x08,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x0C, 0x01,
+  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x0A,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x0E, 0x01,
   0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
-  0x00, 0x3D, 0x17, 0x96,  0x0B, 0x00, 0x09, 0x10,  0x01, 0x07, 0x98, 0x08,  0x00, 0x00, 0x09, 0x0F,
+  0x00, 0x3D, 0x17, 0x96,  0x0B, 0x00, 0x09, 0x12,  0x01, 0x07, 0x98, 0x08,  0x00, 0x00, 0x09, 0x11,
   0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,
-  0x08, 0x02, 0x3D, 0x17,  0x96, 0x09, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x02, 0x09, 0x0F, 0x01,
+  0x08, 0x02, 0x3D, 0x17,  0x96, 0x09, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x02, 0x09, 0x11, 0x01,
   0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
-  0x00, 0x3D, 0x17, 0x96,  0x03, 0x00, 0x09, 0x11,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x9E, 0x8E,
+  0x00, 0x3D, 0x17, 0x96,  0x03, 0x00, 0x09, 0x13,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x9E, 0x8E,
   0x0F, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x69, 0x6E, 0x64,  0x65, 0x78, 0x00, 0x2A,
-  0x00, 0x96, 0x13, 0x00,  0x08, 0xF1, 0x07, 0xC8,  0x00, 0x00, 0x00, 0x07,  0x38, 0x08, 0x00, 0x00,
-  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x3C, 0x96, 0x02, 0x00,  0x08, 0xF2, 0x1C, 0x96,
-  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0xF1, 0x3D, 0x3E, 0x4F,  0x96, 0x12, 0x00, 0x02,
+  0x00, 0x96, 0x13, 0x00,  0x08, 0xF3, 0x07, 0xC8,  0x00, 0x00, 0x00, 0x07,  0x38, 0x08, 0x00, 0x00,
+  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x3C, 0x96, 0x02, 0x00,  0x08, 0xF4, 0x1C, 0x96,
+  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0xF3, 0x3D, 0x3E, 0x4F,  0x96, 0x12, 0x00, 0x02,
   0x07, 0xC9, 0x00, 0x00,  0x00, 0x07, 0x38, 0x08,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
-  0x01, 0x3D, 0x96, 0x0A,  0x00, 0x08, 0xC7, 0x07,  0x03, 0x00, 0x00, 0x00,  0x09, 0x11, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x07, 0x52, 0x17, 0x96,  0x0B, 0x00, 0x09, 0x12,  0x01, 0x07, 0x38, 0x08,
-  0x00, 0x00, 0x09, 0x11,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,
+  0x01, 0x3D, 0x96, 0x0A,  0x00, 0x08, 0xC7, 0x07,  0x03, 0x00, 0x00, 0x00,  0x09, 0x13, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x07, 0x52, 0x17, 0x96,  0x0B, 0x00, 0x09, 0x14,  0x01, 0x07, 0x38, 0x08,
+  0x00, 0x00, 0x09, 0x13,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,
   0x03, 0x00, 0x00, 0x00,  0x08, 0x02, 0x3D, 0x17,  0x96, 0x09, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,
-  0x02, 0x09, 0x11, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x96,  0x14, 0x00, 0x09, 0x13,  0x01, 0x07, 0x00, 0x00,
+  0x02, 0x09, 0x13, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,
+  0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x96,  0x14, 0x00, 0x09, 0x15,  0x01, 0x07, 0x00, 0x00,
   0x00, 0x00, 0x07, 0x6F,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x39, 0x3D, 0x1D,
-  0x96, 0x10, 0x00, 0x07,  0x64, 0x00, 0x00, 0x00,  0x09, 0x14, 0x01, 0x07,  0x6F, 0x00, 0x00, 0x00,
-  0x09, 0x13, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,
+  0x96, 0x10, 0x00, 0x07,  0x64, 0x00, 0x00, 0x00,  0x09, 0x16, 0x01, 0x07,  0x6F, 0x00, 0x00, 0x00,
+  0x09, 0x15, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,
   0x00, 0x00, 0x08, 0x02,  0x3D, 0x17, 0x96, 0x09,  0x00, 0x07, 0x03, 0x04,  0x00, 0x00, 0x02, 0x09,
-  0x13, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,
-  0x00, 0x08, 0x00, 0x3D,  0x17, 0x96, 0x08, 0x00,  0x09, 0x15, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,
-  0x43, 0x1D, 0x96, 0x0B,  0x00, 0x09, 0x16, 0x01,  0x07, 0x58, 0x02, 0x00,  0x00, 0x09, 0x15, 0x01,
+  0x15, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,
+  0x00, 0x08, 0x00, 0x3D,  0x17, 0x96, 0x08, 0x00,  0x09, 0x17, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,
+  0x43, 0x1D, 0x96, 0x0B,  0x00, 0x09, 0x18, 0x01,  0x07, 0x58, 0x02, 0x00,  0x00, 0x09, 0x17, 0x01,
   0x1C, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x02, 0x3D,  0x17, 0x96, 0x03, 0x00,
-  0x09, 0x15, 0x01, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x10, 0x1C, 0x96,
+  0x09, 0x17, 0x01, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x10, 0x1C, 0x96,
   0x02, 0x00, 0x08, 0x1B,  0x52, 0x17, 0x96, 0x09,  0x00, 0x07, 0x07, 0x00,  0x00, 0x00, 0x02, 0x09,
-  0x15, 0x01, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x08, 0x00,  0x09, 0x17, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,
-  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x17, 0x01, 0x4E, 0x96,
-  0x14, 0x00, 0x09, 0x18,  0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x66,  0x08, 0x00, 0x00, 0x07,
+  0x17, 0x01, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x08, 0x00,  0x09, 0x19, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,
+  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x19, 0x01, 0x4E, 0x96,
+  0x14, 0x00, 0x09, 0x1A,  0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x66,  0x08, 0x00, 0x00, 0x07,
   0x02, 0x00, 0x00, 0x00,  0x08, 0x39, 0x3D, 0x4F,  0x96, 0x0F, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
-  0x09, 0x19, 0x01, 0x07,  0x66, 0x08, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x17,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x18, 0x01,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x04, 0x00, 0x00,
-  0x00, 0x08, 0x02, 0x3D,  0x17, 0x96, 0x0F, 0x00,  0x07, 0x04, 0x00, 0x00,  0x00, 0x09, 0x1A, 0x01,
-  0x07, 0x66, 0x08, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x17, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0x18,  0x01, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,  0x00, 0x00, 0x08, 0x03,
-  0x3D, 0x17, 0x96, 0x0F,  0x00, 0x07, 0x0A, 0x00,  0x00, 0x00, 0x09, 0x1B,  0x01, 0x07, 0x66, 0x08,
-  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x17, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0x18, 0x01, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x08,  0x03, 0x3D, 0x17, 0x96,
-  0x05, 0x00, 0x09, 0x1C,  0x01, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x17, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0x18,  0x01, 0x4E, 0x1D, 0x96,  0x03, 0x00, 0x09, 0x1D,  0x01, 0x1C, 0x96, 0x02,
+  0x09, 0x1B, 0x01, 0x07,  0x66, 0x08, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x19,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x1A, 0x01,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x04, 0x00, 0x00,
+  0x00, 0x08, 0x02, 0x3D,  0x17, 0x96, 0x0F, 0x00,  0x07, 0x04, 0x00, 0x00,  0x00, 0x09, 0x1C, 0x01,
+  0x07, 0x66, 0x08, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x19, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0x1A,  0x01, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,  0x00, 0x00, 0x08, 0x03,
+  0x3D, 0x17, 0x96, 0x0F,  0x00, 0x07, 0x0A, 0x00,  0x00, 0x00, 0x09, 0x1D,  0x01, 0x07, 0x66, 0x08,
+  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x19, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0x1A, 0x01, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x08,  0x03, 0x3D, 0x17, 0x96,
+  0x05, 0x00, 0x09, 0x1E,  0x01, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x19, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0x1A,  0x01, 0x4E, 0x1D, 0x96,  0x03, 0x00, 0x09, 0x1F,  0x01, 0x1C, 0x96, 0x02,
   0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x50, 0x8E, 0x0D, 0x00,  0x00, 0x01, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x73,  0x72, 0x63, 0x00, 0x24,  0x00, 0x96, 0x02, 0x00,  0x08, 0x52, 0x1C, 0x96,
   0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x67, 0x40, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,
-  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x1E, 0x01, 0x52,  0x17, 0x4F, 0x96, 0x0B,
-  0x00, 0x09, 0x1F, 0x01,  0x07, 0x90, 0x01, 0x00,  0x00, 0x09, 0x1D, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x20, 0x01, 0x52,  0x17, 0x4F, 0x96, 0x0B,
+  0x00, 0x09, 0x21, 0x01,  0x07, 0x90, 0x01, 0x00,  0x00, 0x09, 0x1F, 0x01,  0x1C, 0x96, 0x02, 0x00,
   0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x02, 0x3D, 0x17, 0x96,
-  0x09, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x02,  0x09, 0x1D, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x09, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x02,  0x09, 0x1F, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
   0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x00,  0x3D, 0x17, 0x96, 0x02,
-  0x00, 0x08, 0x04, 0x1C,  0x96, 0x08, 0x00, 0x09,  0x20, 0x01, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,
-  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x20,  0x01, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0x21, 0x01,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x76, 0x00, 0x96,
-  0x03, 0x00, 0x09, 0x22,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x19, 0x4E,  0x96, 0x05, 0x00, 0x07,
+  0x00, 0x08, 0x04, 0x1C,  0x96, 0x08, 0x00, 0x09,  0x22, 0x01, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x22,  0x01, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0x23, 0x01,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x76, 0x00, 0x96,
+  0x03, 0x00, 0x09, 0x24,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x19, 0x4E,  0x96, 0x05, 0x00, 0x07,
   0x00, 0x00, 0x00, 0x00,  0x49, 0x9D, 0x02, 0x00,  0x38, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
-  0x96, 0x05, 0x00, 0x08,  0x13, 0x09, 0x22, 0x01,  0x1C, 0x96, 0x05, 0x00,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x06, 0x00,  0x09, 0x23, 0x01, 0x09,
-  0x22, 0x01, 0x1C, 0x96,  0x05, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x4E,  0x4F, 0x99, 0x02, 0x00,
+  0x96, 0x05, 0x00, 0x08,  0x13, 0x09, 0x24, 0x01,  0x1C, 0x96, 0x05, 0x00,  0x07, 0x00, 0x00, 0x00,
+  0x00, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x06, 0x00,  0x09, 0x25, 0x01, 0x09,
+  0x24, 0x01, 0x1C, 0x96,  0x05, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x4E,  0x4F, 0x99, 0x02, 0x00,
   0x23, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x13, 0x07, 0x00, 0x00,
-  0x00, 0x00, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x08, 0x00,  0x09, 0x23, 0x01, 0x07,
+  0x00, 0x00, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x08, 0x00,  0x09, 0x25, 0x01, 0x07,
   0x00, 0x00, 0x00, 0x00,  0x4F, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x20, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x21,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x24, 0x01,
+  0x22, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x23,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x26, 0x01,
   0x8E, 0x0E, 0x00, 0x00,  0x02, 0x00, 0x00, 0x00,  0x00, 0x00, 0x61, 0x00,  0x00, 0x62, 0x00, 0x21,
-  0x00, 0x96, 0x03, 0x00,  0x09, 0x26, 0x01, 0x1C,  0x96, 0x08, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
-  0x09, 0x25, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x27, 0x01, 0x52, 0x96,  0x02, 0x00, 0x08, 0x19,
-  0x4E, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x20, 0x01, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x21, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x28,  0x01, 0x8E, 0x15, 0x00,
+  0x00, 0x96, 0x03, 0x00,  0x09, 0x28, 0x01, 0x1C,  0x96, 0x08, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
+  0x09, 0x27, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x29, 0x01, 0x52, 0x96,  0x02, 0x00, 0x08, 0x19,
+  0x4E, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x22, 0x01, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x23, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x2A,  0x01, 0x8E, 0x15, 0x00,
   0x00, 0x03, 0x00, 0x00,  0x00, 0x00, 0x00, 0x61,  0x00, 0x00, 0x62, 0x00,  0x00, 0x76, 0x61, 0x6C,
-  0x75, 0x65, 0x00, 0x7F,  0x00, 0x96, 0x03, 0x00,  0x09, 0x26, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x23, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x29,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x25, 0x01,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x26, 0x01, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x23,  0x01, 0x4E, 0x0B, 0x0C,  0x47, 0x96, 0x03, 0x00,  0x09, 0x26, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x29, 0x01,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x25, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x26, 0x01,
+  0x75, 0x65, 0x00, 0x7F,  0x00, 0x96, 0x03, 0x00,  0x09, 0x28, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0x25, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x2B,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x27, 0x01,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x28, 0x01, 0x1C, 0x96,
+  0x03, 0x00, 0x09, 0x25,  0x01, 0x4E, 0x0B, 0x0C,  0x47, 0x96, 0x03, 0x00,  0x09, 0x28, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x2B, 0x01,  0x1C, 0x96, 0x03, 0x00,
+  0x09, 0x27, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x28, 0x01,
   0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x0B,  0x0C, 0x47, 0x96, 0x07,  0x00, 0x07, 0x02, 0x00,
-  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x20, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0x21, 0x01, 0x53, 0x3E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x20,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x21, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x2A, 0x01, 0x8E,
+  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x22, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0x23, 0x01, 0x53, 0x3E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x22,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x23, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x2C, 0x01, 0x8E,
   0x17, 0x00, 0x00, 0x02,  0x00, 0x00, 0x00, 0x00,  0x00, 0x6C, 0x65, 0x6E,  0x67, 0x74, 0x68, 0x00,
   0x00, 0x61, 0x6E, 0x67,  0x6C, 0x65, 0x00, 0x5C,  0x00, 0x96, 0x02, 0x00,  0x08, 0x19, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x2C,  0x01, 0x1C, 0x96, 0x08,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x09, 0x2B,
-  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x2E, 0x01,  0x52, 0x0C, 0x96, 0x02,  0x00, 0x08, 0x19, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0x2C, 0x01, 0x1C, 0x96,  0x08, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x09,
-  0x2B, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x2D,  0x01, 0x52, 0x0C, 0x96,  0x07, 0x00, 0x07, 0x02,
-  0x00, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x20, 0x01,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x21, 0x01, 0x53,  0x3E, 0x4F, 0x96, 0x01,  0x00, 0x02, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x09, 0x2E,  0x01, 0x1C, 0x96, 0x08,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x09, 0x2D,
+  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x30, 0x01,  0x52, 0x0C, 0x96, 0x02,  0x00, 0x08, 0x19, 0x1C,
+  0x96, 0x03, 0x00, 0x09,  0x2E, 0x01, 0x1C, 0x96,  0x08, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x09,
+  0x2D, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x2F,  0x01, 0x52, 0x0C, 0x96,  0x07, 0x00, 0x07, 0x02,
+  0x00, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x22, 0x01,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x23, 0x01, 0x53,  0x3E, 0x4F, 0x96, 0x01,  0x00, 0x02, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x49,  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,
   0x4E, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x0C, 0x96, 0x02,
-  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x23, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,  0x0C, 0x47, 0x96, 0x08,  0x00, 0x07, 0x01, 0x00,
-  0x00, 0x00, 0x09, 0x2B,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x2F, 0x01,  0x52, 0x3E, 0x96, 0x09,
-  0x00, 0x08, 0x19, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x20,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x21, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
+  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x25, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,  0x0C, 0x47, 0x96, 0x08,  0x00, 0x07, 0x01, 0x00,
+  0x00, 0x00, 0x09, 0x2D,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x31, 0x01,  0x52, 0x3E, 0x96, 0x09,
+  0x00, 0x08, 0x19, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x22,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x23, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
   0x02, 0x00, 0x08, 0x07,  0x52, 0x17, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x20, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x21,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x30, 0x01, 0x8E, 0x0F,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x22, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x23,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x32, 0x01, 0x8E, 0x0F,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,
   0x6F, 0x74, 0x68, 0x65,  0x72, 0x00, 0x50, 0x00,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x23, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x31, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x23, 0x01, 0x4E, 0x47,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x31, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x47, 0x96, 0x07,
-  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x20, 0x01, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x21, 0x01, 0x53, 0x3E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x20,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x21, 0x01,  0x4E, 0x96, 0x02, 0x00,
-  0x08, 0x0D, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x32,  0x01, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x33, 0x00,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x23, 0x01,
+  0x00, 0x09, 0x25, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x33, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0x25, 0x01, 0x4E, 0x47,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x33, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x47, 0x96, 0x07,
+  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x22, 0x01, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x23, 0x01, 0x53, 0x3E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,
+  0x03, 0x00, 0x09, 0x22,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x23, 0x01,  0x4E, 0x96, 0x02, 0x00,
+  0x08, 0x0D, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x34,  0x01, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x33, 0x00,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x25, 0x01,
   0x4E, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x96, 0x07, 0x00,
-  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x20, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0x21,  0x01, 0x53, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x20, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x21, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x0D, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x33, 0x01,  0x8E, 0x0F, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x6F, 0x74,  0x68, 0x65, 0x72, 0x00,  0x68, 0x00, 0x96, 0x03,  0x00, 0x09, 0x31, 0x01,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x20,  0x01, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0x21, 0x01,  0x4E, 0x54, 0x12, 0x12,  0x9D, 0x02, 0x00, 0x06,  0x00, 0x96, 0x02, 0x00,
-  0x05, 0x00, 0x3E, 0x96,  0x03, 0x00, 0x09, 0x31,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,
+  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x22, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0x23,  0x01, 0x53, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0x22, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x0D, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x35, 0x01,  0x8E, 0x0F, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x6F, 0x74,  0x68, 0x65, 0x72, 0x00,  0x68, 0x00, 0x96, 0x03,  0x00, 0x09, 0x33, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x22,  0x01, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0x23, 0x01,  0x4E, 0x54, 0x12, 0x12,  0x9D, 0x02, 0x00, 0x06,  0x00, 0x96, 0x02, 0x00,
+  0x05, 0x00, 0x3E, 0x96,  0x03, 0x00, 0x09, 0x33,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,
   0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,  0x49, 0x4C, 0x12, 0x9D,
-  0x02, 0x00, 0x1D, 0x00,  0x17, 0x96, 0x03, 0x00,  0x09, 0x31, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x23, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,
-  0x49, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x20, 0x01, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x21, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x34, 0x01, 0x8E,  0x10, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x6C, 0x65, 0x6E,
+  0x02, 0x00, 0x1D, 0x00,  0x17, 0x96, 0x03, 0x00,  0x09, 0x33, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0x25, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,
+  0x49, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x22, 0x01, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x23, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x36, 0x01, 0x8E,  0x10, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x6C, 0x65, 0x6E,
   0x67, 0x74, 0x68, 0x00,  0x71, 0x00, 0x96, 0x07,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x0A,
   0x1C, 0x96, 0x02, 0x00,  0x08, 0x19, 0x4E, 0x48,  0x12, 0x12, 0x9D, 0x02,  0x00, 0x05, 0x00, 0x96,
-  0x01, 0x00, 0x03, 0x3E,  0x96, 0x05, 0x00, 0x09,  0x35, 0x01, 0x08, 0x19,  0x1C, 0x96, 0x02, 0x00,
+  0x01, 0x00, 0x03, 0x3E,  0x96, 0x05, 0x00, 0x09,  0x37, 0x01, 0x08, 0x19,  0x1C, 0x96, 0x02, 0x00,
   0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x19,  0x4E, 0x0D, 0x3C, 0x96,  0x02, 0x00, 0x08, 0x0A,
   0x1C, 0x96, 0x04, 0x00,  0x08, 0x13, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0x35,  0x01, 0x1C, 0x0C, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x05,
-  0x00, 0x09, 0x23, 0x01,  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x23,  0x01, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0x35, 0x01,  0x1C, 0x0C, 0x4F, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x20, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x21, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x0D, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x27, 0x01,  0x8E, 0x0F, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x09, 0x37,  0x01, 0x1C, 0x0C, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x05,
+  0x00, 0x09, 0x25, 0x01,  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x25,  0x01, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0x37, 0x01,  0x1C, 0x0C, 0x4F, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0x22, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x0D, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x29, 0x01,  0x8E, 0x0F, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x6F, 0x74,  0x68, 0x65, 0x72, 0x00,  0x50, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0x23, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x31,  0x01, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x23, 0x01,  0x4E, 0x0B, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x13, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x31, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x0B,
-  0x96, 0x07, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x20,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x21, 0x01,  0x53, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x20, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x21, 0x01, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x36, 0x01, 0x8E,  0x0E, 0x00, 0x00, 0x02,
+  0x96, 0x03, 0x00, 0x09,  0x25, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x33,  0x01, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0x25, 0x01,  0x4E, 0x0B, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x13, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x33, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x0B,
+  0x96, 0x07, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x22,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x23, 0x01,  0x53, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x22, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x23, 0x01, 0x4E, 0x96,
+  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x38, 0x01, 0x8E,  0x0E, 0x00, 0x00, 0x02,
   0x00, 0x00, 0x00, 0x00,  0x00, 0x78, 0x00, 0x00,  0x79, 0x00, 0x39, 0x00,  0x96, 0x02, 0x00, 0x08,
   0x0A, 0x1C, 0x4C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x13, 0x1C, 0x47,
   0x96, 0x02, 0x00, 0x08,  0x13, 0x4D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x4C, 0x96, 0x03,
-  0x00, 0x09, 0x23, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x1C,  0x47, 0x96, 0x03, 0x00,
-  0x09, 0x23, 0x01, 0x4D,  0x4F, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x20, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x21,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
+  0x00, 0x09, 0x25, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x1C,  0x47, 0x96, 0x03, 0x00,
+  0x09, 0x25, 0x01, 0x4D,  0x4F, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0x22, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x23,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
   0x96, 0x02, 0x00, 0x08,  0x0F, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x2D, 0x00,
-  0x96, 0x05, 0x00, 0x09,  0x37, 0x01, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x47,
-  0x96, 0x03, 0x00, 0x09,  0x38, 0x01, 0x47, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x23, 0x01, 0x4E,  0x47, 0x96, 0x03, 0x00,  0x09, 0x39, 0x01, 0x47,  0x3E, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x20, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x3A,
+  0x96, 0x05, 0x00, 0x09,  0x39, 0x01, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x47,
+  0x96, 0x03, 0x00, 0x09,  0x3A, 0x01, 0x47, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,
+  0x09, 0x25, 0x01, 0x4E,  0x47, 0x96, 0x03, 0x00,  0x09, 0x3B, 0x01, 0x47,  0x3E, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x22, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x3C,
   0x01, 0x8E, 0x1D, 0x00,  0x00, 0x04, 0x00, 0x00,  0x00, 0x00, 0x00, 0x78,  0x00, 0x00, 0x79, 0x00,
   0x00, 0x77, 0x69, 0x64,  0x74, 0x68, 0x00, 0x00,  0x68, 0x65, 0x69, 0x67,  0x68, 0x74, 0x00, 0x75,
-  0x00, 0x96, 0x03, 0x00,  0x09, 0x22, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x19, 0x4E, 0x96, 0x05,
+  0x00, 0x96, 0x03, 0x00,  0x09, 0x24, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x19, 0x4E, 0x96, 0x05,
   0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x49, 0x9D,  0x02, 0x00, 0x47, 0x00,  0x96, 0x02, 0x00, 0x08,
   0x0A, 0x1C, 0x96, 0x04,  0x00, 0x08, 0x13, 0x08,  0x13, 0x1C, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x06, 0x00,  0x09, 0x23, 0x01, 0x09,  0x23, 0x01, 0x1C, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x0A, 0x1C, 0x96, 0x06,  0x00, 0x09, 0x3C, 0x01,  0x09, 0x3C, 0x01, 0x1C,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x0A, 0x1C, 0x96,  0x06, 0x00, 0x09, 0x3D,  0x01, 0x09, 0x3D, 0x01,  0x1C, 0x4F, 0x99, 0x02,
+  0x1C, 0x96, 0x06, 0x00,  0x09, 0x25, 0x01, 0x09,  0x25, 0x01, 0x1C, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x0A, 0x1C, 0x96, 0x06,  0x00, 0x09, 0x3E, 0x01,  0x09, 0x3E, 0x01, 0x1C,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x0A, 0x1C, 0x96,  0x06, 0x00, 0x09, 0x3F,  0x01, 0x09, 0x3F, 0x01,  0x1C, 0x4F, 0x99, 0x02,
   0x00, 0x13, 0x00, 0x96,  0x07, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x3B, 0x01,  0x52, 0x17, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x20, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x3A, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0x32, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
-  0x4D, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x3D, 0x01, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3C, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x23, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,
+  0x00, 0x09, 0x3D, 0x01,  0x52, 0x17, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,
+  0x09, 0x22, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x3C, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0x34, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x4D, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x3F, 0x01, 0x4E, 0x96,
+  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3E, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x25, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,
   0x02, 0x00, 0x08, 0x13,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x04, 0x00, 0x00,  0x00, 0x08, 0x04, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0x20, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x3A,  0x01, 0x53, 0x3E, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x20, 0x01,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x3A, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0F, 0x8E,
-  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x57, 0x00, 0x96, 0x05,  0x00, 0x09, 0x37, 0x01,
-  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x47, 0x96, 0x03,  0x00, 0x09, 0x38, 0x01,
-  0x47, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x23,  0x01, 0x4E, 0x47, 0x96,
-  0x03, 0x00, 0x09, 0x3E,  0x01, 0x47, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x3C, 0x01, 0x4E, 0x47,  0x96, 0x03, 0x00, 0x09,  0x3F, 0x01, 0x47, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3D, 0x01, 0x4E,  0x47, 0x96, 0x03, 0x00,  0x09, 0x39, 0x01, 0x47,
-  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x20, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0x3A,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0x33, 0x01, 0x8E, 0x0E,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,  0x72, 0x65, 0x63, 0x74,
-  0x00, 0xAB, 0x00, 0x96,  0x03, 0x00, 0x09, 0x40,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0x20, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x3A,  0x01, 0x4E, 0x54, 0x4C,
+  0x96, 0x03, 0x00, 0x09,  0x22, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x3C,  0x01, 0x53, 0x3E, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x22, 0x01,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x3C, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0F, 0x8E,
+  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x57, 0x00, 0x96, 0x05,  0x00, 0x09, 0x39, 0x01,
+  0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x47, 0x96, 0x03,  0x00, 0x09, 0x3A, 0x01,
+  0x47, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x25,  0x01, 0x4E, 0x47, 0x96,
+  0x03, 0x00, 0x09, 0x40,  0x01, 0x47, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0x3E, 0x01, 0x4E, 0x47,  0x96, 0x03, 0x00, 0x09,  0x41, 0x01, 0x47, 0x96,  0x02, 0x00, 0x08, 0x0A,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3F, 0x01, 0x4E,  0x47, 0x96, 0x03, 0x00,  0x09, 0x3B, 0x01, 0x47,
+  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x22, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0x3C,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0x35, 0x01, 0x8E, 0x0E,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,  0x72, 0x65, 0x63, 0x74,
+  0x00, 0xAB, 0x00, 0x96,  0x03, 0x00, 0x09, 0x42,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,
+  0x96, 0x03, 0x00, 0x09,  0x22, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x3C,  0x01, 0x4E, 0x54, 0x4C,
   0x12, 0x9D, 0x02, 0x00,  0x1B, 0x00, 0x17, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x13, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x40,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,
+  0x08, 0x13, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x42,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,
   0x49, 0x4C, 0x12, 0x9D,  0x02, 0x00, 0x1D, 0x00,  0x17, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x23,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x40, 0x01,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x23, 0x01, 0x4E,  0x49, 0x4C, 0x12, 0x9D,  0x02, 0x00, 0x1D, 0x00,  0x17, 0x96, 0x02, 0x00,
-  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x3C,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x40, 0x01,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3C, 0x01, 0x4E,  0x49, 0x4C, 0x12, 0x9D,  0x02, 0x00, 0x1D, 0x00,
-  0x17, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x3D,  0x01, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0x40, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3D, 0x01, 0x4E,  0x49, 0x3E, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x20, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0x3A, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x41, 0x01, 0x8E,
+  0x03, 0x00, 0x09, 0x25,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x42, 0x01,  0x1C, 0x96, 0x03, 0x00,
+  0x09, 0x25, 0x01, 0x4E,  0x49, 0x4C, 0x12, 0x9D,  0x02, 0x00, 0x1D, 0x00,  0x17, 0x96, 0x02, 0x00,
+  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x3E,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x42, 0x01,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3E, 0x01, 0x4E,  0x49, 0x4C, 0x12, 0x9D,  0x02, 0x00, 0x1D, 0x00,
+  0x17, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x3F,  0x01, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0x42, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3F, 0x01, 0x4E,  0x49, 0x3E, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x22, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0x3C, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x43, 0x01, 0x8E,
   0x0E, 0x00, 0x00, 0x02,  0x00, 0x00, 0x00, 0x00,  0x00, 0x78, 0x00, 0x00,  0x79, 0x00, 0x87, 0x00,
   0x96, 0x02, 0x00, 0x08,  0x13, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,
   0x13, 0x4E, 0x48, 0x12,  0x4C, 0x12, 0x9D, 0x02,  0x00, 0x17, 0x00, 0x17,  0x96, 0x03, 0x00, 0x09,
-  0x23, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,
+  0x25, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,
   0x48, 0x12, 0x4C, 0x12,  0x9D, 0x02, 0x00, 0x22,  0x00, 0x17, 0x96, 0x02,  0x00, 0x08, 0x13, 0x1C,
   0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x3C, 0x01,  0x4E, 0x47, 0x48, 0x4C,  0x12, 0x9D, 0x02, 0x00,
-  0x24, 0x00, 0x17, 0x96,  0x03, 0x00, 0x09, 0x23,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0x23, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x3D, 0x01, 0x4E,  0x47, 0x48, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x20, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x3A, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x0D, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x42, 0x01,  0x8E, 0x0F, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x70, 0x6F,  0x69, 0x6E, 0x74, 0x00,  0xA3, 0x00, 0x96, 0x03,  0x00, 0x09, 0x43, 0x01,
+  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x3E, 0x01,  0x4E, 0x47, 0x48, 0x4C,  0x12, 0x9D, 0x02, 0x00,
+  0x24, 0x00, 0x17, 0x96,  0x03, 0x00, 0x09, 0x25,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
+  0x96, 0x03, 0x00, 0x09,  0x25, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,
+  0x09, 0x3F, 0x01, 0x4E,  0x47, 0x48, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0x22, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x3C, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x0D, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x44, 0x01,  0x8E, 0x0F, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x70, 0x6F,  0x69, 0x6E, 0x74, 0x00,  0xA3, 0x00, 0x96, 0x03,  0x00, 0x09, 0x45, 0x01,
   0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,
   0x08, 0x13, 0x4E, 0x48,  0x12, 0x4C, 0x12, 0x9D,  0x02, 0x00, 0x1E, 0x00,  0x17, 0x96, 0x03, 0x00,
-  0x09, 0x43, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x23, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,  0x48, 0x12, 0x4C, 0x12,  0x9D, 0x02, 0x00, 0x29,
-  0x00, 0x17, 0x96, 0x03,  0x00, 0x09, 0x43, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x96,
+  0x09, 0x45, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x25, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,  0x48, 0x12, 0x4C, 0x12,  0x9D, 0x02, 0x00, 0x29,
+  0x00, 0x17, 0x96, 0x03,  0x00, 0x09, 0x45, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x96,
   0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3C, 0x01, 0x4E,  0x47, 0x48, 0x4C, 0x12,  0x9D, 0x02, 0x00, 0x2B,
-  0x00, 0x17, 0x96, 0x03,  0x00, 0x09, 0x43, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x23, 0x01,  0x4E, 0x96, 0x02, 0x00,
-  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x3D,  0x01, 0x4E, 0x47, 0x48,  0x3E, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x20, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x3A,
-  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x44, 0x01, 0x8E, 0x0E,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3E, 0x01, 0x4E,  0x47, 0x48, 0x4C, 0x12,  0x9D, 0x02, 0x00, 0x2B,
+  0x00, 0x17, 0x96, 0x03,  0x00, 0x09, 0x45, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,
+  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x25, 0x01,  0x4E, 0x96, 0x02, 0x00,
+  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x3F,  0x01, 0x4E, 0x47, 0x48,  0x3E, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x22, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x3C,
+  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x46, 0x01, 0x8E, 0x0E,
   0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,  0x72, 0x65, 0x63, 0x74,  0x00, 0x63, 0x01, 0x96,
-  0x05, 0x00, 0x09, 0x45,  0x01, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x96, 0x02,
-  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x3C, 0x01, 0x4E, 0x47,  0x3C, 0x96, 0x05, 0x00,
-  0x09, 0x46, 0x01, 0x08,  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x23, 0x01,  0x4E, 0x96, 0x02, 0x00,
-  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x3D,  0x01, 0x4E, 0x47, 0x3C,  0x96, 0x06, 0x00, 0x09,
-  0x47, 0x01, 0x09, 0x40,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0x40, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x3C,  0x01, 0x4E, 0x47, 0x3C,  0x96, 0x06, 0x00, 0x09,
-  0x48, 0x01, 0x09, 0x40,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x23, 0x01,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x40, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x3D, 0x01, 0x4E, 0x47,  0x3C, 0x96, 0x03, 0x00,
-  0x09, 0x40, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
+  0x05, 0x00, 0x09, 0x47,  0x01, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x96, 0x02,
+  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x3E, 0x01, 0x4E, 0x47,  0x3C, 0x96, 0x05, 0x00,
+  0x09, 0x48, 0x01, 0x08,  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x25, 0x01,  0x4E, 0x96, 0x02, 0x00,
+  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x3F,  0x01, 0x4E, 0x47, 0x3C,  0x96, 0x06, 0x00, 0x09,
+  0x49, 0x01, 0x09, 0x42,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0x42, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x3E,  0x01, 0x4E, 0x47, 0x3C,  0x96, 0x06, 0x00, 0x09,
+  0x4A, 0x01, 0x09, 0x42,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x25, 0x01,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x42, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x3F, 0x01, 0x4E, 0x47,  0x3C, 0x96, 0x03, 0x00,
+  0x09, 0x42, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
   0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x48, 0x12,  0x4C, 0x12, 0x9D, 0x02,  0x00, 0x16, 0x00, 0x17,
-  0x96, 0x03, 0x00, 0x09,  0x40, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x45, 0x01, 0x1C,  0x48, 0x4C, 0x12, 0x9D,  0x02, 0x00, 0x1E, 0x00,  0x17, 0x96, 0x03, 0x00,
-  0x09, 0x40, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x23, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,  0x48, 0x12, 0x4C, 0x12,  0x9D, 0x02, 0x00, 0x17,
-  0x00, 0x17, 0x96, 0x03,  0x00, 0x09, 0x40, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x46, 0x01, 0x1C, 0x48,  0x4C, 0x12, 0x9D, 0x02,  0x00, 0x15, 0x00, 0x17,
+  0x96, 0x03, 0x00, 0x09,  0x42, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x47, 0x01, 0x1C,  0x48, 0x4C, 0x12, 0x9D,  0x02, 0x00, 0x1E, 0x00,  0x17, 0x96, 0x03, 0x00,
+  0x09, 0x42, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x25, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,  0x48, 0x12, 0x4C, 0x12,  0x9D, 0x02, 0x00, 0x17,
+  0x00, 0x17, 0x96, 0x03,  0x00, 0x09, 0x42, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x48, 0x01, 0x1C, 0x48,  0x4C, 0x12, 0x9D, 0x02,  0x00, 0x15, 0x00, 0x17,
   0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0x47, 0x01, 0x1C, 0x48,  0x4C, 0x12, 0x9D, 0x02,  0x00, 0x11, 0x00, 0x17,  0x96, 0x03, 0x00, 0x09,
-  0x45, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x47,  0x01, 0x1C, 0x48, 0x12,  0x4C, 0x12, 0x9D, 0x02,
-  0x00, 0x16, 0x00, 0x17,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x23, 0x01,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0x48, 0x01, 0x1C,  0x48, 0x4C, 0x12, 0x9D,  0x02, 0x00, 0x11, 0x00,
-  0x17, 0x96, 0x03, 0x00,  0x09, 0x46, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x48, 0x01, 0x1C, 0x48,
-  0x12, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x20, 0x01, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x3A, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x49, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x30, 0x00, 0x96, 0x07,
-  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3C, 0x01, 0x4E,
+  0x49, 0x01, 0x1C, 0x48,  0x4C, 0x12, 0x9D, 0x02,  0x00, 0x11, 0x00, 0x17,  0x96, 0x03, 0x00, 0x09,
+  0x47, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x49,  0x01, 0x1C, 0x48, 0x12,  0x4C, 0x12, 0x9D, 0x02,
+  0x00, 0x16, 0x00, 0x17,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x25, 0x01,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0x4A, 0x01, 0x1C,  0x48, 0x4C, 0x12, 0x9D,  0x02, 0x00, 0x11, 0x00,
+  0x17, 0x96, 0x03, 0x00,  0x09, 0x48, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x4A, 0x01, 0x1C, 0x48,
+  0x12, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x22, 0x01, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x3C, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x4B, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x30, 0x00, 0x96, 0x07,
+  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3E, 0x01, 0x4E,
   0x48, 0x12, 0x4C, 0x9D,  0x02, 0x00, 0x15, 0x00,  0x17, 0x96, 0x07, 0x00,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x3D, 0x01, 0x4E, 0x48,  0x12, 0x3E, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x20, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0x3A, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x3B, 0x01, 0x8E,
+  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x3F, 0x01, 0x4E, 0x48,  0x12, 0x3E, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x22, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0x3C, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x3D, 0x01, 0x8E,
   0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x47, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
   0x96, 0x07, 0x00, 0x08,  0x13, 0x07, 0x00, 0x00,  0x00, 0x00, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x08, 0x00,  0x09, 0x23, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x0A, 0x1C, 0x96,  0x08, 0x00, 0x09, 0x3C,  0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x08, 0x00,  0x09, 0x3D, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,
-  0x4F, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x20, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0x3A,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0x4A, 0x01, 0x8E, 0x0E,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,  0x72, 0x65, 0x63, 0x74,
-  0x00, 0xF4, 0x01, 0x96,  0x0A, 0x00, 0x09, 0x4B,  0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x04,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x20, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x3A, 0x01, 0x53, 0x3C,
-  0x96, 0x07, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x49,
+  0x1C, 0x96, 0x08, 0x00,  0x09, 0x25, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x0A, 0x1C, 0x96,  0x08, 0x00, 0x09, 0x3E,  0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x08, 0x00,  0x09, 0x3F, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,
+  0x4F, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x22, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0x3C,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0x4C, 0x01, 0x8E, 0x0E,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,  0x72, 0x65, 0x63, 0x74,
+  0x00, 0xF4, 0x01, 0x96,  0x0A, 0x00, 0x09, 0x4D,  0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x04,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x22, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x3C, 0x01, 0x53, 0x3C,
+  0x96, 0x07, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x4B,
   0x01, 0x52, 0x4C, 0x9D,  0x02, 0x00, 0x14, 0x00,  0x17, 0x96, 0x08, 0x00,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x09, 0x40, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x49, 0x01, 0x52,  0x12, 0x9D, 0x02, 0x00,
-  0x1C, 0x00, 0x96, 0x08,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x09, 0x4B,  0x01, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x3B, 0x01,  0x52, 0x17, 0x96, 0x03,  0x00, 0x09, 0x4B, 0x01,  0x1C, 0x3E, 0x96, 0x03,
-  0x00, 0x09, 0x4B, 0x01,  0x1C, 0x96, 0x05, 0x00,  0x08, 0x13, 0x09, 0x40,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x09, 0x42, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x4B, 0x01, 0x52,  0x12, 0x9D, 0x02, 0x00,
+  0x1C, 0x00, 0x96, 0x08,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x09, 0x4D,  0x01, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0x3D, 0x01,  0x52, 0x17, 0x96, 0x03,  0x00, 0x09, 0x4D, 0x01,  0x1C, 0x3E, 0x96, 0x03,
+  0x00, 0x09, 0x4D, 0x01,  0x1C, 0x96, 0x05, 0x00,  0x08, 0x13, 0x09, 0x42,  0x01, 0x1C, 0x96, 0x02,
   0x00, 0x08, 0x13, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,
-  0x96, 0x08, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x09, 0x2B, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x4C, 0x01, 0x52, 0x4F,  0x96, 0x03, 0x00, 0x09,  0x4B, 0x01, 0x1C, 0x96,  0x06, 0x00, 0x09, 0x23,
-  0x01, 0x09, 0x40, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x23, 0x01,  0x4E, 0x96, 0x08, 0x00,  0x07, 0x02, 0x00, 0x00,
-  0x00, 0x09, 0x2B, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x4C, 0x01, 0x52,  0x4F, 0x96, 0x03, 0x00,
-  0x09, 0x4B, 0x01, 0x1C,  0x96, 0x06, 0x00, 0x09,  0x3C, 0x01, 0x09, 0x40,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x13, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x40, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x3C,
+  0x96, 0x08, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x09, 0x2D, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0x4E, 0x01, 0x52, 0x4F,  0x96, 0x03, 0x00, 0x09,  0x4D, 0x01, 0x1C, 0x96,  0x06, 0x00, 0x09, 0x25,
+  0x01, 0x09, 0x42, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x25, 0x01,  0x4E, 0x96, 0x08, 0x00,  0x07, 0x02, 0x00, 0x00,
+  0x00, 0x09, 0x2D, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x4E, 0x01, 0x52,  0x4F, 0x96, 0x03, 0x00,
+  0x09, 0x4D, 0x01, 0x1C,  0x96, 0x06, 0x00, 0x09,  0x3E, 0x01, 0x09, 0x42,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x13, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x42, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x3E,
   0x01, 0x4E, 0x47, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3C, 0x01, 0x4E,  0x47, 0x96, 0x08, 0x00,
-  0x07, 0x02, 0x00, 0x00,  0x00, 0x09, 0x2B, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x4D, 0x01, 0x52,
-  0x96, 0x03, 0x00, 0x09,  0x4B, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x0B, 0x4F, 0x96,
-  0x03, 0x00, 0x09, 0x4B,  0x01, 0x1C, 0x96, 0x06,  0x00, 0x09, 0x3D, 0x01,  0x09, 0x40, 0x01, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0x23, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x40,  0x01, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x3D, 0x01,  0x4E, 0x47, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x23, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3D, 0x01, 0x4E,
-  0x47, 0x96, 0x08, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x09, 0x2B, 0x01,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x4D, 0x01, 0x52,  0x96, 0x03, 0x00, 0x09,  0x4B, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x23,
-  0x01, 0x4E, 0x0B, 0x4F,  0x96, 0x08, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x09, 0x4B, 0x01, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0x3C, 0x01, 0x4E, 0x48,  0x12, 0x4C, 0x9D, 0x02,  0x00, 0x16, 0x00, 0x17,
-  0x96, 0x08, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x09, 0x4B, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x3D, 0x01, 0x4E, 0x48,  0x12, 0x12, 0x9D, 0x02,  0x00, 0x14, 0x00, 0x96,  0x08, 0x00, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x09,  0x4B, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x3B,  0x01, 0x52, 0x17, 0x96,
-  0x03, 0x00, 0x09, 0x4B,  0x01, 0x1C, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x20, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x3A, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x0D, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x4E, 0x01,  0x8E, 0x0E, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3E, 0x01, 0x4E,  0x47, 0x96, 0x08, 0x00,
+  0x07, 0x02, 0x00, 0x00,  0x00, 0x09, 0x2D, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x4F, 0x01, 0x52,
+  0x96, 0x03, 0x00, 0x09,  0x4D, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x0B, 0x4F, 0x96,
+  0x03, 0x00, 0x09, 0x4D,  0x01, 0x1C, 0x96, 0x06,  0x00, 0x09, 0x3F, 0x01,  0x09, 0x42, 0x01, 0x1C,
+  0x96, 0x03, 0x00, 0x09,  0x25, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x42,  0x01, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0x3F, 0x01,  0x4E, 0x47, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0x25, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3F, 0x01, 0x4E,
+  0x47, 0x96, 0x08, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x09, 0x2D, 0x01,  0x1C, 0x96, 0x03, 0x00,
+  0x09, 0x4F, 0x01, 0x52,  0x96, 0x03, 0x00, 0x09,  0x4D, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x25,
+  0x01, 0x4E, 0x0B, 0x4F,  0x96, 0x08, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x09, 0x4D, 0x01, 0x1C,
+  0x96, 0x03, 0x00, 0x09,  0x3E, 0x01, 0x4E, 0x48,  0x12, 0x4C, 0x9D, 0x02,  0x00, 0x16, 0x00, 0x17,
+  0x96, 0x08, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x09, 0x4D, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0x3F, 0x01, 0x4E, 0x48,  0x12, 0x12, 0x9D, 0x02,  0x00, 0x14, 0x00, 0x96,  0x08, 0x00, 0x07, 0x00,
+  0x00, 0x00, 0x00, 0x09,  0x4D, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x3D,  0x01, 0x52, 0x17, 0x96,
+  0x03, 0x00, 0x09, 0x4D,  0x01, 0x1C, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0x22, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x3C, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x0D, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x50, 0x01,  0x8E, 0x0E, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x72, 0x65,  0x63, 0x74, 0x00, 0x27,  0x00, 0x96, 0x08, 0x00,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x09, 0x40, 0x01,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x0A, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0x4A, 0x01, 0x52, 0x96,  0x03, 0x00, 0x09, 0x49,  0x01, 0x52, 0x12, 0x3E,
-  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x20,  0x01, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0x3A, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x4F,
+  0x00, 0x09, 0x42, 0x01,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x0A, 0x1C,
+  0x96, 0x03, 0x00, 0x09,  0x4C, 0x01, 0x52, 0x96,  0x03, 0x00, 0x09, 0x4B,  0x01, 0x52, 0x12, 0x3E,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x22,  0x01, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0x3C, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x51,
   0x01, 0x8E, 0x0E, 0x00,  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x72,  0x65, 0x63, 0x74, 0x00,
   0xB3, 0x01, 0x96, 0x07,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x49, 0x01, 0x52,  0x12, 0x9D, 0x02, 0x00,  0x14, 0x00, 0x96, 0x08,  0x00, 0x07, 0x00, 0x00,
-  0x00, 0x00, 0x09, 0x40,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x32, 0x01,  0x52, 0x3E, 0x96, 0x08,
-  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x09, 0x40,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x49, 0x01,
+  0x09, 0x4B, 0x01, 0x52,  0x12, 0x9D, 0x02, 0x00,  0x14, 0x00, 0x96, 0x08,  0x00, 0x07, 0x00, 0x00,
+  0x00, 0x00, 0x09, 0x42,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x34, 0x01,  0x52, 0x3E, 0x96, 0x08,
+  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x09, 0x42,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x4B, 0x01,
   0x52, 0x12, 0x9D, 0x02,  0x00, 0x13, 0x00, 0x96,  0x07, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,
-  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x32, 0x01,  0x52, 0x3E, 0x96, 0x0A,  0x00, 0x09, 0x4F, 0x01,
-  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x20, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0x3A,  0x01, 0x53, 0x3C, 0x96,  0x03, 0x00, 0x09, 0x4F,  0x01, 0x1C, 0x96, 0x05,
-  0x00, 0x08, 0x13, 0x09,  0x40, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x96, 0x02, 0x00,
+  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x34, 0x01,  0x52, 0x3E, 0x96, 0x0A,  0x00, 0x09, 0x51, 0x01,
+  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x22, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0x3C,  0x01, 0x53, 0x3C, 0x96,  0x03, 0x00, 0x09, 0x51,  0x01, 0x1C, 0x96, 0x05,
+  0x00, 0x08, 0x13, 0x09,  0x42, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x96, 0x02, 0x00,
   0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x96, 0x08, 0x00,  0x07, 0x02, 0x00, 0x00,
-  0x00, 0x09, 0x2B, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x4D, 0x01, 0x52,  0x4F, 0x96, 0x03, 0x00,
-  0x09, 0x4F, 0x01, 0x1C,  0x96, 0x06, 0x00, 0x09,  0x23, 0x01, 0x09, 0x40,  0x01, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x23, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x23,
-  0x01, 0x4E, 0x96, 0x08,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x09, 0x2B,  0x01, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x4D, 0x01,  0x52, 0x4F, 0x96, 0x03,  0x00, 0x09, 0x4F, 0x01,  0x1C, 0x96, 0x06, 0x00,
-  0x09, 0x3C, 0x01, 0x09,  0x40, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x40, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x3C, 0x01, 0x4E, 0x47,  0x96, 0x02, 0x00, 0x08,
+  0x00, 0x09, 0x2D, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x4F, 0x01, 0x52,  0x4F, 0x96, 0x03, 0x00,
+  0x09, 0x51, 0x01, 0x1C,  0x96, 0x06, 0x00, 0x09,  0x25, 0x01, 0x09, 0x42,  0x01, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0x25, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x25,
+  0x01, 0x4E, 0x96, 0x08,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x09, 0x2D,  0x01, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0x4F, 0x01,  0x52, 0x4F, 0x96, 0x03,  0x00, 0x09, 0x51, 0x01,  0x1C, 0x96, 0x06, 0x00,
+  0x09, 0x3E, 0x01, 0x09,  0x42, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x42, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x3E, 0x01, 0x4E, 0x47,  0x96, 0x02, 0x00, 0x08,
   0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x3C, 0x01,  0x4E, 0x47, 0x96, 0x08,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x09, 0x2B,
-  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x4C, 0x01,  0x52, 0x96, 0x03, 0x00,  0x09, 0x4F, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x0B, 0x4F,  0x96, 0x03, 0x00, 0x09,  0x4F, 0x01, 0x1C, 0x96,
-  0x06, 0x00, 0x09, 0x3D,  0x01, 0x09, 0x40, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x40, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x3D,  0x01, 0x4E, 0x47, 0x96,
-  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x3D, 0x01,  0x4E, 0x47, 0x96, 0x08,  0x00, 0x07, 0x02, 0x00,
-  0x00, 0x00, 0x09, 0x2B,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x4C, 0x01,  0x52, 0x96, 0x03, 0x00,
-  0x09, 0x4F, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x23, 0x01, 0x4E, 0x0B,  0x4F, 0x96, 0x03, 0x00,
-  0x09, 0x4F, 0x01, 0x1C,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x20, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x3A,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x36, 0x01, 0x8E, 0x10,  0x00, 0x00, 0x02, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x00, 0x09, 0x3E, 0x01,  0x4E, 0x47, 0x96, 0x08,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x09, 0x2D,
+  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x4E, 0x01,  0x52, 0x96, 0x03, 0x00,  0x09, 0x51, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x0B, 0x4F,  0x96, 0x03, 0x00, 0x09,  0x51, 0x01, 0x1C, 0x96,
+  0x06, 0x00, 0x09, 0x3F,  0x01, 0x09, 0x42, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x42, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x3F,  0x01, 0x4E, 0x47, 0x96,
+  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x3F, 0x01,  0x4E, 0x47, 0x96, 0x08,  0x00, 0x07, 0x02, 0x00,
+  0x00, 0x00, 0x09, 0x2D,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x4E, 0x01,  0x52, 0x96, 0x03, 0x00,
+  0x09, 0x51, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x25, 0x01, 0x4E, 0x0B,  0x4F, 0x96, 0x03, 0x00,
+  0x09, 0x51, 0x01, 0x1C,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0x22, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x3C,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x38, 0x01, 0x8E, 0x10,  0x00, 0x00, 0x02, 0x00,  0x00, 0x00, 0x00, 0x00,
   0x64, 0x78, 0x00, 0x00,  0x64, 0x79, 0x00, 0x3A,  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x4C,
-  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x50, 0x01,  0x1C, 0x47, 0x96, 0x02,
+  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x52, 0x01,  0x1C, 0x47, 0x96, 0x02,
   0x00, 0x08, 0x13, 0x4D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x4C,  0x96, 0x03, 0x00, 0x09,
-  0x23, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x51,  0x01, 0x1C, 0x47, 0x96,  0x03, 0x00, 0x09, 0x23,
-  0x01, 0x4D, 0x4F, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x20, 0x01,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0x3A, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0x52, 0x01,  0x8E, 0x0B, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x64, 0x00,
+  0x25, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x53,  0x01, 0x1C, 0x47, 0x96,  0x03, 0x00, 0x09, 0x25,
+  0x01, 0x4D, 0x4F, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x22, 0x01,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0x3C, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0x54, 0x01,  0x8E, 0x0B, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x64, 0x00,
   0x47, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x4C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0x53,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,  0x47, 0x96, 0x02, 0x00,
-  0x08, 0x13, 0x4D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x4C, 0x96,  0x03, 0x00, 0x09, 0x23,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x53, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,
-  0x47, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4D,  0x4F, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0x20, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x3A,  0x01, 0x4E, 0x96, 0x02,
-  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x54, 0x01, 0x8E, 0x10,  0x00, 0x00, 0x02, 0x00,
+  0x03, 0x00, 0x09, 0x55,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,  0x47, 0x96, 0x02, 0x00,
+  0x08, 0x13, 0x4D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x4C, 0x96,  0x03, 0x00, 0x09, 0x25,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x55, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,
+  0x47, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4D,  0x4F, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,
+  0x96, 0x03, 0x00, 0x09,  0x22, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x3C,  0x01, 0x4E, 0x96, 0x02,
+  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x56, 0x01, 0x8E, 0x10,  0x00, 0x00, 0x02, 0x00,
   0x00, 0x00, 0x00, 0x00,  0x64, 0x78, 0x00, 0x00,  0x64, 0x79, 0x00, 0x82,  0x00, 0x96, 0x02, 0x00,
-  0x08, 0x0A, 0x1C, 0x4C,  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x50, 0x01,
+  0x08, 0x0A, 0x1C, 0x4C,  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x52, 0x01,
   0x1C, 0x0B, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x4C,
-  0x96, 0x03, 0x00, 0x09,  0x3C, 0x01, 0x4E, 0x96,  0x08, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x09,
-  0x50, 0x01, 0x1C, 0x0C,  0x47, 0x96, 0x03, 0x00,  0x09, 0x3C, 0x01, 0x4D,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x0A, 0x1C, 0x4C,  0x96, 0x03, 0x00, 0x09,  0x23, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x51,
-  0x01, 0x1C, 0x0B, 0x96,  0x03, 0x00, 0x09, 0x23,  0x01, 0x4D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x4C, 0x96, 0x03,  0x00, 0x09, 0x3D, 0x01,  0x4E, 0x96, 0x08, 0x00,  0x07, 0x02, 0x00, 0x00,
-  0x00, 0x09, 0x51, 0x01,  0x1C, 0x0C, 0x47, 0x96,  0x03, 0x00, 0x09, 0x3D,  0x01, 0x4D, 0x4F, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x20, 0x01,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x3A, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x55, 0x01,
+  0x96, 0x03, 0x00, 0x09,  0x3E, 0x01, 0x4E, 0x96,  0x08, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x09,
+  0x52, 0x01, 0x1C, 0x0C,  0x47, 0x96, 0x03, 0x00,  0x09, 0x3E, 0x01, 0x4D,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x0A, 0x1C, 0x4C,  0x96, 0x03, 0x00, 0x09,  0x25, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x53,
+  0x01, 0x1C, 0x0B, 0x96,  0x03, 0x00, 0x09, 0x25,  0x01, 0x4D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,
+  0x1C, 0x4C, 0x96, 0x03,  0x00, 0x09, 0x3F, 0x01,  0x4E, 0x96, 0x08, 0x00,  0x07, 0x02, 0x00, 0x00,
+  0x00, 0x09, 0x53, 0x01,  0x1C, 0x0C, 0x47, 0x96,  0x03, 0x00, 0x09, 0x3F,  0x01, 0x4D, 0x4F, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x22, 0x01,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x3C, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x57, 0x01,
   0x8E, 0x0B, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x64, 0x00,  0x9C, 0x00, 0x96, 0x02,
-  0x00, 0x08, 0x0A, 0x1C,  0x4C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x53,
+  0x00, 0x08, 0x0A, 0x1C,  0x4C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x55,
   0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,  0x0B, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4D, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x4C, 0x96,  0x03, 0x00, 0x09, 0x3C,  0x01, 0x4E, 0x96, 0x08,
-  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x09, 0x53,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,
-  0x0C, 0x47, 0x96, 0x03,  0x00, 0x09, 0x3C, 0x01,  0x4D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
-  0x4C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x53, 0x01, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x23,  0x01, 0x4E, 0x0B, 0x96,  0x03, 0x00, 0x09, 0x23,  0x01, 0x4D, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x4C, 0x96, 0x03,  0x00, 0x09, 0x3D, 0x01,  0x4E, 0x96, 0x08, 0x00,
-  0x07, 0x02, 0x00, 0x00,  0x00, 0x09, 0x53, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,
-  0x0C, 0x47, 0x96, 0x03,  0x00, 0x09, 0x3D, 0x01,  0x4D, 0x4F, 0x4F, 0x8E,  0x0E, 0x00, 0x00, 0x01,
+  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x4C, 0x96,  0x03, 0x00, 0x09, 0x3E,  0x01, 0x4E, 0x96, 0x08,
+  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x09, 0x55,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,
+  0x0C, 0x47, 0x96, 0x03,  0x00, 0x09, 0x3E, 0x01,  0x4D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
+  0x4C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x55, 0x01, 0x1C, 0x96,
+  0x03, 0x00, 0x09, 0x25,  0x01, 0x4E, 0x0B, 0x96,  0x03, 0x00, 0x09, 0x25,  0x01, 0x4D, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x4C, 0x96, 0x03,  0x00, 0x09, 0x3F, 0x01,  0x4E, 0x96, 0x08, 0x00,
+  0x07, 0x02, 0x00, 0x00,  0x00, 0x09, 0x55, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,
+  0x0C, 0x47, 0x96, 0x03,  0x00, 0x09, 0x3F, 0x01,  0x4D, 0x4F, 0x4F, 0x8E,  0x0E, 0x00, 0x00, 0x01,
   0x00, 0x00, 0x00, 0x00,  0x00, 0x6C, 0x65, 0x66,  0x74, 0x00, 0x3B, 0x00,  0x96, 0x02, 0x00, 0x08,
-  0x0A, 0x1C, 0x4C, 0x96,  0x03, 0x00, 0x09, 0x3C,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x56, 0x01,  0x1C, 0x0B, 0x47, 0x96,
-  0x03, 0x00, 0x09, 0x3C,  0x01, 0x4D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x05, 0x00,
-  0x08, 0x13, 0x09, 0x56,  0x01, 0x1C, 0x4F, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x0A, 0x1C, 0x4C, 0x96,  0x03, 0x00, 0x09, 0x3E,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x58, 0x01,  0x1C, 0x0B, 0x47, 0x96,
+  0x03, 0x00, 0x09, 0x3E,  0x01, 0x4D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x05, 0x00,
+  0x08, 0x13, 0x09, 0x58,  0x01, 0x1C, 0x4F, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
   0x0D, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x3E, 0x96,
-  0x0A, 0x00, 0x09, 0x56,  0x01, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x20, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x3A, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,
+  0x0A, 0x00, 0x09, 0x58,  0x01, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,
+  0x09, 0x22, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x3C, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,
   0x4E, 0x96, 0x02, 0x00,  0x08, 0x07, 0x52, 0x17,  0x8E, 0x0F, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x72, 0x69,  0x67, 0x68, 0x74, 0x00,  0x1E, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
-  0x96, 0x06, 0x00, 0x09,  0x3C, 0x01, 0x09, 0x57,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
+  0x96, 0x06, 0x00, 0x09,  0x3E, 0x01, 0x09, 0x59,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
   0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x0B, 0x4F,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
   0x00, 0x1B, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3C, 0x01, 0x4E,  0x47, 0x3E, 0x96, 0x0A,
-  0x00, 0x09, 0x57, 0x01,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x20, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x3A,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
+  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3E, 0x01, 0x4E,  0x47, 0x3E, 0x96, 0x0A,
+  0x00, 0x09, 0x59, 0x01,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0x22, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x3C,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
   0x96, 0x02, 0x00, 0x08,  0x07, 0x52, 0x17, 0x8E,  0x0D, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,
   0x00, 0x74, 0x6F, 0x70,  0x00, 0x3D, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x4C, 0x96, 0x03,
-  0x00, 0x09, 0x3D, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x23,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x58, 0x01,  0x1C, 0x0B, 0x47, 0x96,  0x03, 0x00, 0x09, 0x3D,
-  0x01, 0x4D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x06, 0x00,  0x09, 0x23, 0x01, 0x09,
-  0x58, 0x01, 0x1C, 0x4F,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x0E, 0x00, 0x96,
-  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,  0x3E, 0x96, 0x0A, 0x00,
-  0x09, 0x58, 0x01, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x20,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x3A, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
+  0x00, 0x09, 0x3F, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x25,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x5A, 0x01,  0x1C, 0x0B, 0x47, 0x96,  0x03, 0x00, 0x09, 0x3F,
+  0x01, 0x4D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x06, 0x00,  0x09, 0x25, 0x01, 0x09,
+  0x5A, 0x01, 0x1C, 0x4F,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x0E, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,  0x3E, 0x96, 0x0A, 0x00,
+  0x09, 0x5A, 0x01, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x22,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x3C, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
   0x02, 0x00, 0x08, 0x07,  0x52, 0x17, 0x8E, 0x10,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,
   0x62, 0x6F, 0x74, 0x74,  0x6F, 0x6D, 0x00, 0x1F,  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,
-  0x06, 0x00, 0x09, 0x3D,  0x01, 0x09, 0x59, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x23,  0x01, 0x4E, 0x0B, 0x4F,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
-  0x00, 0x1C, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x3D, 0x01,  0x4E, 0x47, 0x3E, 0x96,
-  0x0A, 0x00, 0x09, 0x59,  0x01, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x20, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x3A, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,
+  0x06, 0x00, 0x09, 0x3F,  0x01, 0x09, 0x5B, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,
+  0x03, 0x00, 0x09, 0x25,  0x01, 0x4E, 0x0B, 0x4F,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x00, 0x1C, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,
+  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x3F, 0x01,  0x4E, 0x47, 0x3E, 0x96,
+  0x0A, 0x00, 0x09, 0x5B,  0x01, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,
+  0x09, 0x22, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x3C, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,
   0x4E, 0x96, 0x02, 0x00,  0x08, 0x07, 0x52, 0x17,  0x8E, 0x11, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x74, 0x6F,  0x70, 0x4C, 0x65, 0x66,  0x74, 0x00, 0x92, 0x00,  0x96, 0x02, 0x00, 0x08,
-  0x0A, 0x1C, 0x4C, 0x96,  0x03, 0x00, 0x09, 0x3C,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x5A, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x13, 0x4E, 0x0B,  0x47, 0x96, 0x03, 0x00,  0x09, 0x3C, 0x01, 0x4D,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x0A, 0x1C, 0x4C,  0x96, 0x03, 0x00, 0x09,  0x3D, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x5A, 0x01, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x23,  0x01, 0x4E, 0x0B, 0x47,  0x96, 0x03, 0x00, 0x09,  0x3D, 0x01, 0x4D, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x05,  0x00, 0x08, 0x13, 0x09,  0x5A, 0x01, 0x1C, 0x96,
+  0x0A, 0x1C, 0x4C, 0x96,  0x03, 0x00, 0x09, 0x3E,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x13, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x5C, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x13, 0x4E, 0x0B,  0x47, 0x96, 0x03, 0x00,  0x09, 0x3E, 0x01, 0x4D,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x0A, 0x1C, 0x4C,  0x96, 0x03, 0x00, 0x09,  0x3F, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x5C, 0x01, 0x1C, 0x96,
+  0x03, 0x00, 0x09, 0x25,  0x01, 0x4E, 0x0B, 0x47,  0x96, 0x03, 0x00, 0x09,  0x3F, 0x01, 0x4D, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x05,  0x00, 0x08, 0x13, 0x09,  0x5C, 0x01, 0x1C, 0x96,
   0x02, 0x00, 0x08, 0x13,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x06, 0x00, 0x09,
-  0x23, 0x01, 0x09, 0x5A,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x23, 0x01,  0x4E, 0x4F, 0x8E, 0x08,
+  0x25, 0x01, 0x09, 0x5C,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x25, 0x01,  0x4E, 0x4F, 0x8E, 0x08,
   0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x33,  0x00, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x23,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x03, 0x00, 0x09, 0x25,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,
   0x13, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x20, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x21, 0x01, 0x53, 0x3E,  0x96, 0x0A, 0x00, 0x09,
-  0x5A, 0x01, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x20, 0x01,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0x3A, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,
+  0x09, 0x22, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x23, 0x01, 0x53, 0x3E,  0x96, 0x0A, 0x00, 0x09,
+  0x5C, 0x01, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x22, 0x01,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0x3C, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,
   0x00, 0x08, 0x07, 0x52,  0x17, 0x8E, 0x15, 0x00,  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x62,
   0x6F, 0x74, 0x74, 0x6F,  0x6D, 0x52, 0x69, 0x67,  0x68, 0x74, 0x00, 0x4A,  0x00, 0x96, 0x02, 0x00,
-  0x08, 0x0A, 0x1C, 0x96,  0x06, 0x00, 0x09, 0x3C,  0x01, 0x09, 0x5B, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0A, 0x1C, 0x96,  0x06, 0x00, 0x09, 0x3E,  0x01, 0x09, 0x5D, 0x01,  0x1C, 0x96, 0x02, 0x00,
   0x08, 0x13, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x0B,
-  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x06, 0x00, 0x09, 0x3D,  0x01, 0x09, 0x5B, 0x01,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x23, 0x01,  0x4E, 0x0B, 0x4F, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
-  0x4F, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x23, 0x01, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3D, 0x01, 0x4E,  0x47, 0x96, 0x02, 0x00,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x06, 0x00, 0x09, 0x3F,  0x01, 0x09, 0x5D, 0x01,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x25, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0x25, 0x01,  0x4E, 0x0B, 0x4F, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x4F, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x25, 0x01, 0x4E, 0x96,
+  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3F, 0x01, 0x4E,  0x47, 0x96, 0x02, 0x00,
   0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x13,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x3C,  0x01, 0x4E, 0x47, 0x96,  0x07, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
-  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x20, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x21, 0x01, 0x53,
-  0x3E, 0x96, 0x0A, 0x00,  0x09, 0x5B, 0x01, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x20,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x3A, 0x01,  0x4E, 0x96, 0x02, 0x00,
+  0x03, 0x00, 0x09, 0x3E,  0x01, 0x4E, 0x47, 0x96,  0x07, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
+  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x22, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x23, 0x01, 0x53,
+  0x3E, 0x96, 0x0A, 0x00,  0x09, 0x5D, 0x01, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,
+  0x03, 0x00, 0x09, 0x22,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x3C, 0x01,  0x4E, 0x96, 0x02, 0x00,
   0x08, 0x0D, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x07,  0x52, 0x17, 0x8E, 0x0E,  0x00, 0x00, 0x01, 0x00,
   0x00, 0x00, 0x00, 0x00,  0x73, 0x69, 0x7A, 0x65,  0x00, 0x2D, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x05, 0x00,  0x09, 0x3C, 0x01, 0x08,  0xE4, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,
-  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x05, 0x00, 0x09, 0x3D,  0x01, 0x08, 0xE4, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0x23, 0x01, 0x4E, 0x4F,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
-  0x00, 0x34, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3D, 0x01, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x3C, 0x01,  0x4E, 0x96, 0x07, 0x00,
-  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x20, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0x21,  0x01, 0x53, 0x3E, 0x96,  0x09, 0x00, 0x08, 0xE4,  0x07, 0x03, 0x00, 0x00,
-  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x20, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x3A,
+  0x1C, 0x96, 0x05, 0x00,  0x09, 0x3E, 0x01, 0x08,  0xE4, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x13, 0x4E,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,  0x05, 0x00, 0x09, 0x3F,  0x01, 0x08, 0xE4, 0x1C,
+  0x96, 0x03, 0x00, 0x09,  0x25, 0x01, 0x4E, 0x4F,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x00, 0x34, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x3F, 0x01, 0x4E,
+  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x3E, 0x01,  0x4E, 0x96, 0x07, 0x00,
+  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x22, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0x23,  0x01, 0x53, 0x3E, 0x96,  0x09, 0x00, 0x08, 0xE4,  0x07, 0x03, 0x00, 0x00,
+  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x22, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x3C,
   0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x07, 0x52, 0x17, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x20, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0x5C, 0x01, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x1F,  0x00, 0x96, 0x07, 0x00,
+  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x22, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0x5E, 0x01, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x1F,  0x00, 0x96, 0x07, 0x00,
   0x08, 0x1C, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x3C, 0x96, 0x07, 0x00,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x5D, 0x01, 0x52, 0x17,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x20,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x5C, 0x01,
-  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x32,  0x01, 0x8E, 0x08, 0x00,
+  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x5F, 0x01, 0x52, 0x17,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x22,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x5E, 0x01,
+  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x34,  0x01, 0x8E, 0x08, 0x00,
   0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x1F, 0x00,  0x96, 0x07, 0x00, 0x08,  0x1C, 0x07, 0x00, 0x00,
   0x00, 0x00, 0x43, 0x3C,  0x96, 0x07, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x1C, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x5E,  0x01, 0x52, 0x17, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x20, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x5C, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x0D, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x5F, 0x01,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x09, 0x60,  0x01, 0x52, 0x17, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0x22, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x5E, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x0D, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x61, 0x01,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
   0x00, 0x1F, 0x00, 0x96,  0x07, 0x00, 0x08, 0x1C,  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x3C, 0x96,
-  0x07, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,  0x1C, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x60, 0x01,
-  0x52, 0x17, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x20, 0x01, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x5C, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x61, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x1F, 0x00, 0x96, 0x07,
+  0x07, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,  0x1C, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x62, 0x01,
+  0x52, 0x17, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x22, 0x01, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x5E, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x63, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x1F, 0x00, 0x96, 0x07,
   0x00, 0x08, 0x1C, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x3C, 0x96, 0x07,  0x00, 0x07, 0x00, 0x00,
-  0x00, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x62, 0x01, 0x52,  0x17, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x20, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x5C,
-  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x63, 0x01, 0x8E, 0x08,
+  0x00, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x64, 0x01, 0x52,  0x17, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x22, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x5E,
+  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x65, 0x01, 0x8E, 0x08,
   0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x1F,  0x00, 0x96, 0x07, 0x00,  0x08, 0x1C, 0x07, 0x00,
   0x00, 0x00, 0x00, 0x43,  0x3C, 0x96, 0x07, 0x00,  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x1C, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0x64, 0x01, 0x52, 0x17,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x20,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x5C, 0x01,  0x4E, 0x96, 0x02, 0x00,
-  0x08, 0x0D, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x65,  0x01, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x96, 0x03, 0x00, 0x09,  0x66, 0x01, 0x52, 0x17,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,
+  0x03, 0x00, 0x09, 0x22,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x5E, 0x01,  0x4E, 0x96, 0x02, 0x00,
+  0x08, 0x0D, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x67,  0x01, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x1F, 0x00,  0x96, 0x07, 0x00, 0x08,  0x1C, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x3C,
-  0x96, 0x07, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x1C, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x66,
-  0x01, 0x52, 0x17, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x20, 0x01,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0x5C, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0x67, 0x01,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x1F, 0x00, 0x96,
+  0x96, 0x07, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x1C, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x68,
+  0x01, 0x52, 0x17, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x22, 0x01,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0x5E, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0x69, 0x01,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x1F, 0x00, 0x96,
   0x07, 0x00, 0x08, 0x1C,  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x3C, 0x96,  0x07, 0x00, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x08,  0x1C, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x68, 0x01,  0x52, 0x17, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x20, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0x5C, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x69, 0x01, 0x8E,
+  0x00, 0x00, 0x00, 0x08,  0x1C, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x6A, 0x01,  0x52, 0x17, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x22, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0x5E, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x6B, 0x01, 0x8E,
   0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x1F, 0x00, 0x96, 0x07,  0x00, 0x08, 0x1C, 0x07,
   0x00, 0x00, 0x00, 0x00,  0x43, 0x3C, 0x96, 0x07,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x1C,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x6A, 0x01, 0x52,  0x17, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0x20, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x5C,  0x01, 0x4E, 0x96, 0x02,
-  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x6B, 0x01, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x6C, 0x01, 0x52,  0x17, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,
+  0x96, 0x03, 0x00, 0x09,  0x22, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x5E,  0x01, 0x4E, 0x96, 0x02,
+  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x6D, 0x01, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x1F,  0x00, 0x96, 0x07, 0x00,  0x08, 0x1C, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,
   0x3C, 0x96, 0x07, 0x00,  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x6C, 0x01, 0x52, 0x17,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x20,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x5C, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0x6D,  0x01, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x1F, 0x00,
+  0x6E, 0x01, 0x52, 0x17,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x22,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x5E, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0x6F,  0x01, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x1F, 0x00,
   0x96, 0x07, 0x00, 0x08,  0x1C, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x3C,  0x96, 0x07, 0x00, 0x07,
-  0x00, 0x00, 0x00, 0x00,  0x08, 0x1C, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x6E,  0x01, 0x52, 0x17, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x20, 0x01,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x5C, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x6F, 0x01,
+  0x00, 0x00, 0x00, 0x00,  0x08, 0x1C, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x70,  0x01, 0x52, 0x17, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x22, 0x01,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x5E, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x71, 0x01,
   0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x1F, 0x00, 0x96,  0x07, 0x00, 0x08, 0x1C,
   0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x3C, 0x96,  0x07, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,
-  0x1C, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x70, 0x01,  0x52, 0x17, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x20, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x5C, 0x01, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x71, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,
+  0x1C, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x72, 0x01,  0x52, 0x17, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x22, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x5E, 0x01, 0x4E, 0x96,
+  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x73, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00,  0x1F, 0x00, 0x96, 0x07,  0x00, 0x08, 0x1C, 0x07,  0x00, 0x00, 0x00, 0x00,
   0x43, 0x3C, 0x96, 0x07,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x72, 0x01, 0x52,  0x17, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x20, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x5C,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
+  0x09, 0x74, 0x01, 0x52,  0x17, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0x22, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x5E,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
   0x96, 0x02, 0x00, 0x08,  0x0F, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x1F, 0x00,
   0x96, 0x07, 0x00, 0x08,  0x1C, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x3C,  0x96, 0x07, 0x00, 0x07,
-  0x00, 0x00, 0x00, 0x00,  0x08, 0x1C, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x73,  0x01, 0x52, 0x17, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x20, 0x01,  0x4E, 0x96, 0x14, 0x00,
-  0x09, 0x74, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,  0x07, 0x51, 0x04, 0x00,  0x00, 0x07, 0x02, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x08, 0x1C, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x75,  0x01, 0x52, 0x17, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x22, 0x01,  0x4E, 0x96, 0x14, 0x00,
+  0x09, 0x76, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,  0x07, 0x51, 0x04, 0x00,  0x00, 0x07, 0x02, 0x00,
   0x00, 0x00, 0x08, 0x39,  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x20, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x74,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
+  0x22, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x76,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
   0x96, 0x02, 0x00, 0x08,  0x0F, 0x8E, 0x08, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x1F, 0x00,
   0x96, 0x07, 0x00, 0x08,  0x1C, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x3C,  0x96, 0x07, 0x00, 0x07,
-  0x00, 0x00, 0x00, 0x00,  0x08, 0x1C, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x75,  0x01, 0x52, 0x17, 0x4F,
-  0x96, 0x0F, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x09, 0x76, 0x01, 0x07,  0x51, 0x04, 0x00, 0x00,
-  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x20,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x74, 0x01,
+  0x00, 0x00, 0x00, 0x00,  0x08, 0x1C, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x77,  0x01, 0x52, 0x17, 0x4F,
+  0x96, 0x0F, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x09, 0x78, 0x01, 0x07,  0x51, 0x04, 0x00, 0x00,
+  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x22,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x76, 0x01,
   0x4E, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x08,
-  0x02, 0x3D, 0x17, 0x96,  0x0F, 0x00, 0x07, 0x65,  0x00, 0x00, 0x00, 0x09,  0x77, 0x01, 0x07, 0x51,
-  0x04, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x20, 0x01,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x74, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,
+  0x02, 0x3D, 0x17, 0x96,  0x0F, 0x00, 0x07, 0x65,  0x00, 0x00, 0x00, 0x09,  0x79, 0x01, 0x07, 0x51,
+  0x04, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x22, 0x01,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x76, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,
   0x00, 0x00, 0x08, 0x03,  0x3D, 0x17, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x20, 0x01, 0x4E, 0x96,  0x14, 0x00, 0x09, 0x78,  0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x52,
+  0x22, 0x01, 0x4E, 0x96,  0x14, 0x00, 0x09, 0x7A,  0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x52,
   0x04, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x39, 0x3D, 0x4F,  0x96, 0x0F, 0x00, 0x07,
-  0x65, 0x00, 0x00, 0x00,  0x09, 0x79, 0x01, 0x07,  0x52, 0x04, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x20,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x78, 0x01,  0x4E, 0x96, 0x02, 0x00,
+  0x65, 0x00, 0x00, 0x00,  0x09, 0x7B, 0x01, 0x07,  0x52, 0x04, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,
+  0x03, 0x00, 0x09, 0x22,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x7A, 0x01,  0x4E, 0x96, 0x02, 0x00,
   0x08, 0x0D, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x08,  0x03, 0x3D, 0x17, 0x96,
   0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x07, 0x00,  0x08, 0xD1, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,
   0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xD1,  0x4E, 0x96, 0x14, 0x00,
-  0x09, 0x7A, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,  0x07, 0x4C, 0x04, 0x00,  0x00, 0x07, 0x02, 0x00,
+  0x09, 0x7C, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,  0x07, 0x4C, 0x04, 0x00,  0x00, 0x07, 0x02, 0x00,
   0x00, 0x00, 0x08, 0x39,  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0xD1, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x7A, 0x01,  0x4E, 0x96, 0x08, 0x00,  0x09, 0x7B, 0x01, 0x07,
+  0xD1, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x7C, 0x01,  0x4E, 0x96, 0x08, 0x00,  0x09, 0x7D, 0x01, 0x07,
   0x01, 0x00, 0x00, 0x00,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xD1,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0x7A, 0x01, 0x4E,  0x96, 0x08, 0x00, 0x09,  0x7C, 0x01, 0x07, 0x02,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0x7C, 0x01, 0x4E,  0x96, 0x08, 0x00, 0x09,  0x7E, 0x01, 0x07, 0x02,
   0x00, 0x00, 0x00, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xD1, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x7A, 0x01, 0x4E, 0x96,  0x08, 0x00, 0x09, 0x7D,  0x01, 0x07, 0x04, 0x00,
+  0x96, 0x03, 0x00, 0x09,  0x7C, 0x01, 0x4E, 0x96,  0x08, 0x00, 0x09, 0x7F,  0x01, 0x07, 0x04, 0x00,
   0x00, 0x00, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xD1, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0x7A,  0x01, 0x4E, 0x96, 0x08,  0x00, 0x09, 0x7E, 0x01,  0x07, 0x08, 0x00, 0x00,
-  0x00, 0x4F, 0x96, 0x0F,  0x00, 0x07, 0x28, 0x00,  0x00, 0x00, 0x09, 0x7F,  0x01, 0x07, 0x4C, 0x04,
-  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xD1, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x7A,
+  0x03, 0x00, 0x09, 0x7C,  0x01, 0x4E, 0x96, 0x08,  0x00, 0x09, 0x80, 0x01,  0x07, 0x08, 0x00, 0x00,
+  0x00, 0x4F, 0x96, 0x0F,  0x00, 0x07, 0x28, 0x00,  0x00, 0x00, 0x09, 0x81,  0x01, 0x07, 0x4C, 0x04,
+  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xD1, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x7C,
   0x01, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,  0x00, 0x00, 0x08, 0x02,  0x3D, 0x17, 0x96, 0x0F,
-  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x09, 0x80,  0x01, 0x07, 0x4C, 0x04,  0x00, 0x00, 0x08, 0x04,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0xD1, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x7A,  0x01, 0x4E, 0x96, 0x02,
+  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x09, 0x82,  0x01, 0x07, 0x4C, 0x04,  0x00, 0x00, 0x08, 0x04,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0xD1, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x7C,  0x01, 0x4E, 0x96, 0x02,
   0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x04, 0x00, 0x00, 0x00,  0x08, 0x02, 0x3D, 0x17,
-  0x96, 0x0F, 0x00, 0x07,  0x64, 0x00, 0x00, 0x00,  0x09, 0x81, 0x01, 0x07,  0x4C, 0x04, 0x00, 0x00,
-  0x08, 0x04, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xD1,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x7A, 0x01, 0x4E,
+  0x96, 0x0F, 0x00, 0x07,  0x64, 0x00, 0x00, 0x00,  0x09, 0x83, 0x01, 0x07,  0x4C, 0x04, 0x00, 0x00,
+  0x08, 0x04, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xD1,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x7C, 0x01, 0x4E,
   0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,  0x00, 0x00, 0x08, 0x03,
-  0x3D, 0x17, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x08, 0x00, 0x09,  0x82, 0x01, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x82,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x83, 0x01,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x82, 0x01,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0x83, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x84, 0x01, 0x8E, 0x20,
+  0x3D, 0x17, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x08, 0x00, 0x09,  0x84, 0x01, 0x07, 0x00,
+  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x84,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x85, 0x01,  0x8E, 0x08, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x84, 0x01,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0x85, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x86, 0x01, 0x8E, 0x20,
   0x00, 0x00, 0x03, 0x00,  0x00, 0x00, 0x00, 0x00,  0x6E, 0x61, 0x6D, 0x65,  0x00, 0x00, 0x69, 0x6E,
   0x73, 0x74, 0x61, 0x6E,  0x63, 0x65, 0x00, 0x00,  0x6D, 0x65, 0x74, 0x68,  0x6F, 0x64, 0x00, 0xC7,
   0x00, 0x96, 0x02, 0x00,  0x08, 0x9A, 0x1C, 0x12,  0x4C, 0x9D, 0x02, 0x00,  0x1D, 0x00, 0x17, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x82, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0x83, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x85,  0x01, 0x4E, 0x12, 0x12,  0x9D, 0x02, 0x00, 0x06,
+  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x84, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0x85, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x87,  0x01, 0x4E, 0x12, 0x12,  0x9D, 0x02, 0x00, 0x06,
   0x00, 0x96, 0x02, 0x00,  0x05, 0x00, 0x3E, 0x96,  0x07, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,
-  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x82, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x83, 0x01, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x86, 0x01, 0x52, 0x17,  0x8E, 0x11, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,
+  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x84, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x85, 0x01, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x88, 0x01, 0x52, 0x17,  0x8E, 0x11, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x72, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x00, 0x35, 0x00,  0x96, 0x03, 0x00, 0x09,
-  0x88, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x9A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x87, 0x01, 0x1C,
-  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x82,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x83, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x89, 0x01, 0x52,
+  0x8A, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x9A,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x89, 0x01, 0x1C,
+  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x84,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x85, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x8B, 0x01, 0x52,
   0x3E, 0x96, 0x02, 0x00,  0x08, 0x0E, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
-  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x82, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x83, 0x01, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x8A, 0x01, 0x52, 0x3E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x82,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x83, 0x01,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x8B, 0x01, 0x8E,  0x0E, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x6E, 0x61, 0x6D,
-  0x65, 0x00, 0xF6, 0x02,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x82, 0x01,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0x83, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x85, 0x01, 0x4E, 0x12,
+  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x84, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x85, 0x01, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x8C, 0x01, 0x52, 0x3E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,
+  0x03, 0x00, 0x09, 0x84,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x85, 0x01,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x8D, 0x01, 0x8E,  0x0E, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x6E, 0x61, 0x6D,
+  0x65, 0x00, 0xF6, 0x02,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x84, 0x01,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0x85, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x87, 0x01, 0x4E, 0x12,
   0x12, 0x9D, 0x02, 0x00,  0x05, 0x00, 0x96, 0x01,  0x00, 0x02, 0x3E, 0x96,  0x07, 0x00, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x82, 0x01,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x83, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x86, 0x01, 0x52, 0x17,  0x96, 0x06, 0x00, 0x09,
-  0x88, 0x01, 0x09, 0x8C,  0x01, 0x3C, 0x96, 0x0A,  0x00, 0x09, 0x8E, 0x01,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x82, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x83,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x8D, 0x01,  0x52, 0x3C, 0x96, 0x03,  0x00, 0x09, 0x8E, 0x01,
+  0x00, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x84, 0x01,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x85, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x88, 0x01, 0x52, 0x17,  0x96, 0x06, 0x00, 0x09,
+  0x8A, 0x01, 0x09, 0x8E,  0x01, 0x3C, 0x96, 0x0A,  0x00, 0x09, 0x90, 0x01,  0x07, 0x00, 0x00, 0x00,
+  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x84, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x85,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x8F, 0x01,  0x52, 0x3C, 0x96, 0x03,  0x00, 0x09, 0x90, 0x01,
   0x1C, 0x96, 0x01, 0x00,  0x02, 0x49, 0x12, 0x12,  0x9D, 0x02, 0x00, 0x18,  0x00, 0x96, 0x03, 0x00,
-  0x09, 0x88, 0x01, 0x4C,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x8E, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x8F, 0x01, 0x47, 0x47,  0x1D, 0x96, 0x03, 0x00,  0x09, 0x88, 0x01, 0x4C,  0x1C, 0x96, 0x05, 0x00,
-  0x09, 0x90, 0x01, 0x08,  0x0E, 0x1C, 0x47, 0x96,  0x03, 0x00, 0x09, 0x91,  0x01, 0x47, 0x47, 0x1D,
+  0x09, 0x8A, 0x01, 0x4C,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x90, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0x91, 0x01, 0x47, 0x47,  0x1D, 0x96, 0x03, 0x00,  0x09, 0x8A, 0x01, 0x4C,  0x1C, 0x96, 0x05, 0x00,
+  0x09, 0x92, 0x01, 0x08,  0x0E, 0x1C, 0x47, 0x96,  0x03, 0x00, 0x09, 0x93,  0x01, 0x47, 0x47, 0x1D,
   0x96, 0x07, 0x00, 0x08,  0x18, 0x07, 0x01, 0x00,  0x00, 0x00, 0x3C, 0x99,  0x02, 0x00, 0x09, 0x00,
   0x96, 0x02, 0x00, 0x08,  0x18, 0x4C, 0x1C, 0x50,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x18, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x22,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x19, 0x4E,  0x48, 0x12, 0x9D, 0x02,
+  0x03, 0x00, 0x09, 0x24,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x19, 0x4E,  0x48, 0x12, 0x9D, 0x02,
   0x00, 0x5F, 0x00, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x18, 0x1C, 0x48, 0x12,
-  0x9D, 0x02, 0x00, 0x10,  0x00, 0x96, 0x03, 0x00,  0x09, 0x88, 0x01, 0x4C,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x92, 0x01, 0x47,  0x1D, 0x96, 0x03, 0x00,  0x09, 0x88, 0x01, 0x4C,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x22, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x18, 0x1C, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,
-  0x00, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x82, 0x01,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x83, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x93, 0x01, 0x52, 0x47,  0x1D, 0x99, 0x02, 0x00,
-  0x7E, 0xFF, 0x96, 0x03,  0x00, 0x09, 0x88, 0x01,  0x4C, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x94, 0x01,
-  0x47, 0x1D, 0x96, 0x03,  0x00, 0x09, 0x8E, 0x01,  0x1C, 0x96, 0x01, 0x00,  0x02, 0x49, 0x12, 0x12,
-  0x9D, 0x02, 0x00, 0x10,  0x00, 0x96, 0x03, 0x00,  0x09, 0x88, 0x01, 0x4C,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x39, 0x01, 0x47,  0x1D, 0x96, 0x03, 0x00,  0x09, 0x88, 0x01, 0x4C,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x95, 0x01, 0x47,  0x1D, 0x96, 0x03, 0x00,  0x09, 0x8E, 0x01, 0x1C,  0x96, 0x01, 0x00, 0x02,
-  0x49, 0x12, 0x9D, 0x02,  0x00, 0x15, 0x00, 0x96,  0x03, 0x00, 0x09, 0x88,  0x01, 0x4C, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x97,  0x01, 0x47, 0x1D, 0x99,  0x02, 0x00, 0x18, 0x00,  0x96, 0x03, 0x00, 0x09,
-  0x88, 0x01, 0x4C, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x8E, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x96,
-  0x01, 0x47, 0x47, 0x1D,  0x96, 0x05, 0x00, 0x08,  0xEA, 0x09, 0x88, 0x01,  0x1C, 0x96, 0x07, 0x00,
-  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x82, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0x83,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x98, 0x01,  0x52, 0x3C, 0x96, 0x02,
+  0x9D, 0x02, 0x00, 0x10,  0x00, 0x96, 0x03, 0x00,  0x09, 0x8A, 0x01, 0x4C,  0x1C, 0x96, 0x03, 0x00,
+  0x09, 0x94, 0x01, 0x47,  0x1D, 0x96, 0x03, 0x00,  0x09, 0x8A, 0x01, 0x4C,  0x1C, 0x96, 0x03, 0x00,
+  0x09, 0x24, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x18, 0x1C, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,
+  0x00, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x84, 0x01,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x85, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x95, 0x01, 0x52, 0x47,  0x1D, 0x99, 0x02, 0x00,
+  0x7E, 0xFF, 0x96, 0x03,  0x00, 0x09, 0x8A, 0x01,  0x4C, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x96, 0x01,
+  0x47, 0x1D, 0x96, 0x03,  0x00, 0x09, 0x90, 0x01,  0x1C, 0x96, 0x01, 0x00,  0x02, 0x49, 0x12, 0x12,
+  0x9D, 0x02, 0x00, 0x10,  0x00, 0x96, 0x03, 0x00,  0x09, 0x8A, 0x01, 0x4C,  0x1C, 0x96, 0x03, 0x00,
+  0x09, 0x3B, 0x01, 0x47,  0x1D, 0x96, 0x03, 0x00,  0x09, 0x8A, 0x01, 0x4C,  0x1C, 0x96, 0x03, 0x00,
+  0x09, 0x97, 0x01, 0x47,  0x1D, 0x96, 0x03, 0x00,  0x09, 0x90, 0x01, 0x1C,  0x96, 0x01, 0x00, 0x02,
+  0x49, 0x12, 0x9D, 0x02,  0x00, 0x15, 0x00, 0x96,  0x03, 0x00, 0x09, 0x8A,  0x01, 0x4C, 0x1C, 0x96,
+  0x03, 0x00, 0x09, 0x99,  0x01, 0x47, 0x1D, 0x99,  0x02, 0x00, 0x18, 0x00,  0x96, 0x03, 0x00, 0x09,
+  0x8A, 0x01, 0x4C, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x90, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x98,
+  0x01, 0x47, 0x47, 0x1D,  0x96, 0x05, 0x00, 0x08,  0xEA, 0x09, 0x8A, 0x01,  0x1C, 0x96, 0x07, 0x00,
+  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x84, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0x85,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x9A, 0x01,  0x52, 0x3C, 0x96, 0x02,
   0x00, 0x08, 0xEA, 0x1C,  0x96, 0x01, 0x00, 0x02,  0x49, 0x12, 0x9D, 0x02,  0x00, 0x6E, 0x00, 0x96,
-  0x08, 0x00, 0x09, 0x88,  0x01, 0x09, 0x99, 0x01,  0x08, 0x0E, 0x1C, 0x47,  0x96, 0x03, 0x00, 0x09,
-  0x9A, 0x01, 0x47, 0x96,  0x03, 0x00, 0x09, 0x22,  0x01, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,
-  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x82, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0x83, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x9B,  0x01, 0x52, 0x47, 0x96,  0x03, 0x00, 0x09, 0x9C,
-  0x01, 0x47, 0x1D, 0x96,  0x05, 0x00, 0x08, 0xEA,  0x09, 0x88, 0x01, 0x1C,  0x96, 0x07, 0x00, 0x07,
-  0x01, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x82,  0x01, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0x83, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x9D, 0x01, 0x52,  0x1D, 0x96, 0x02, 0x00,
+  0x08, 0x00, 0x09, 0x8A,  0x01, 0x09, 0x9B, 0x01,  0x08, 0x0E, 0x1C, 0x47,  0x96, 0x03, 0x00, 0x09,
+  0x9C, 0x01, 0x47, 0x96,  0x03, 0x00, 0x09, 0x24,  0x01, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,
+  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x84, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0x85, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x9D,  0x01, 0x52, 0x47, 0x96,  0x03, 0x00, 0x09, 0x9E,
+  0x01, 0x47, 0x1D, 0x96,  0x05, 0x00, 0x08, 0xEA,  0x09, 0x8A, 0x01, 0x1C,  0x96, 0x07, 0x00, 0x07,
+  0x01, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x84,  0x01, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0x85, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x9F, 0x01, 0x52,  0x1D, 0x96, 0x02, 0x00,
   0x08, 0xEA, 0x1C, 0x96,  0x01, 0x00, 0x02, 0x49,  0x12, 0x9D, 0x02, 0x00,  0x05, 0x00, 0x96, 0x01,
-  0x00, 0x02, 0x3E, 0x96,  0x0A, 0x00, 0x09, 0x9E,  0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x67,
-  0x40, 0x3C, 0x96, 0x03,  0x00, 0x09, 0x9E, 0x01,  0x1C, 0x96, 0x05, 0x00,  0x09, 0x9F, 0x01, 0x05,
+  0x00, 0x02, 0x3E, 0x96,  0x0A, 0x00, 0x09, 0xA0,  0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x67,
+  0x40, 0x3C, 0x96, 0x03,  0x00, 0x09, 0xA0, 0x01,  0x1C, 0x96, 0x05, 0x00,  0x09, 0xA1, 0x01, 0x05,
   0x01, 0x4F, 0x96, 0x02,  0x00, 0x08, 0xEA, 0x1C,  0x96, 0x08, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
-  0x09, 0x9E, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x6C, 0x52, 0x17, 0x96,  0x03, 0x00, 0x09, 0x9E,
-  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xA0, 0x01,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
-  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x82, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x83,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xA1, 0x01,  0x52, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x82, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x83, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0x89,  0x01, 0x8E, 0x23, 0x00,  0x00, 0x03, 0x00, 0x00,  0x00, 0x00, 0x00, 0x69,
+  0x09, 0xA0, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x6C, 0x52, 0x17, 0x96,  0x03, 0x00, 0x09, 0xA0,
+  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xA2, 0x01,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
+  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x84, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x85,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xA3, 0x01,  0x52, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x84, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x85, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0x8B,  0x01, 0x8E, 0x23, 0x00,  0x00, 0x03, 0x00, 0x00,  0x00, 0x00, 0x00, 0x69,
   0x6E, 0x73, 0x74, 0x61,  0x6E, 0x63, 0x65, 0x00,  0x00, 0x6D, 0x65, 0x74,  0x68, 0x6F, 0x64, 0x00,
-  0x00, 0x72, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,  0x00, 0x9A, 0x01, 0x96,  0x0A, 0x00, 0x09, 0x9E,
-  0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x67,  0x40, 0x3C, 0x96, 0x03,  0x00, 0x09, 0x9E, 0x01,
-  0x1C, 0x96, 0x05, 0x00,  0x09, 0x9F, 0x01, 0x05,  0x01, 0x4F, 0x96, 0x03,  0x00, 0x09, 0x88, 0x01,
-  0x1C, 0x96, 0x08, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x09, 0x9E, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x6C, 0x52, 0x17,  0x96, 0x04, 0x00, 0x09,  0xA2, 0x01, 0x02, 0x3C,  0x96, 0x07, 0x00, 0x08,
+  0x00, 0x72, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,  0x00, 0x9A, 0x01, 0x96,  0x0A, 0x00, 0x09, 0xA0,
+  0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x67,  0x40, 0x3C, 0x96, 0x03,  0x00, 0x09, 0xA0, 0x01,
+  0x1C, 0x96, 0x05, 0x00,  0x09, 0xA1, 0x01, 0x05,  0x01, 0x4F, 0x96, 0x03,  0x00, 0x09, 0x8A, 0x01,
+  0x1C, 0x96, 0x08, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x09, 0xA0, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x6C, 0x52, 0x17,  0x96, 0x04, 0x00, 0x09,  0xA4, 0x01, 0x02, 0x3C,  0x96, 0x07, 0x00, 0x08,
   0x18, 0x07, 0x00, 0x00,  0x00, 0x00, 0x3C, 0x99,  0x02, 0x00, 0x09, 0x00,  0x96, 0x02, 0x00, 0x08,
-  0x18, 0x4C, 0x1C, 0x50,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x18, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x9E,
-  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xA0, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xA3, 0x01, 0x4E,
+  0x18, 0x4C, 0x1C, 0x50,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x18, 0x1C, 0x96,  0x03, 0x00, 0x09, 0xA0,
+  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xA2, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xA5, 0x01, 0x4E,
   0x96, 0x02, 0x00, 0x08,  0x19, 0x4E, 0x48, 0x12,  0x9D, 0x02, 0x00, 0x5A,  0x00, 0x96, 0x03, 0x00,
-  0x09, 0x9E, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xA0, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xA3,
-  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x18, 0x1C,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xA4, 0x01, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x22, 0x01, 0x49, 0x12,  0x9D, 0x02, 0x00, 0x25,  0x00, 0x96, 0x06, 0x00,
-  0x09, 0xA2, 0x01, 0x09,  0x9E, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0xA0,  0x01, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0xA3, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x18, 0x1C, 0x4E,  0x1D, 0x99, 0x02, 0x00,
-  0x05, 0x00, 0x99, 0x02,  0x00, 0x75, 0xFF, 0x96,  0x05, 0x00, 0x08, 0xEA,  0x09, 0xA2, 0x01, 0x1C,
-  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x82,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x83, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xA5, 0x01, 0x52,
-  0x96, 0x03, 0x00, 0x09,  0x87, 0x01, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
-  0x9A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xA6, 0x01,  0x52, 0x3C, 0x96, 0x03,  0x00, 0x09, 0x9E, 0x01,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0xA0, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xA7, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0xA8,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xA9, 0x01,  0x49, 0x9D, 0x02, 0x00,
+  0x09, 0xA0, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xA2, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xA5,
+  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x18, 0x1C,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xA6, 0x01, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x24, 0x01, 0x49, 0x12,  0x9D, 0x02, 0x00, 0x25,  0x00, 0x96, 0x06, 0x00,
+  0x09, 0xA4, 0x01, 0x09,  0xA0, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0xA2,  0x01, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0xA5, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x18, 0x1C, 0x4E,  0x1D, 0x99, 0x02, 0x00,
+  0x05, 0x00, 0x99, 0x02,  0x00, 0x75, 0xFF, 0x96,  0x05, 0x00, 0x08, 0xEA,  0x09, 0xA4, 0x01, 0x1C,
+  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x84,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x85, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xA7, 0x01, 0x52,
+  0x96, 0x03, 0x00, 0x09,  0x89, 0x01, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
+  0x9A, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xA8, 0x01,  0x52, 0x3C, 0x96, 0x03,  0x00, 0x09, 0xA0, 0x01,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0xA2, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xA9, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0xAA,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xAB, 0x01,  0x49, 0x9D, 0x02, 0x00,
   0x2C, 0x00, 0x96, 0x02,  0x00, 0x08, 0xEA, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
-  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x82,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x83, 0x01,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0xAA, 0x01, 0x52,  0x3E, 0x99, 0x02, 0x00,  0x27, 0x00, 0x96, 0x02,
+  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x84,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x85, 0x01,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0xAC, 0x01, 0x52,  0x3E, 0x99, 0x02, 0x00,  0x27, 0x00, 0x96, 0x02,
   0x00, 0x08, 0xEA, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x82,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x83, 0x01,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x93, 0x01, 0x52,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0x82, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x83,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xAB, 0x01,
+  0x03, 0x00, 0x09, 0x84,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x85, 0x01,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x95, 0x01, 0x52,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0x84, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x85,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xAD, 0x01,
   0x8E, 0x0F, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x61, 0x72,  0x72, 0x61, 0x79, 0x00,
-  0xA2, 0x00, 0x96, 0x06,  0x00, 0x09, 0xAD, 0x01,  0x09, 0xAC, 0x01, 0x3C,  0x96, 0x07, 0x00, 0x08,
+  0xA2, 0x00, 0x96, 0x06,  0x00, 0x09, 0xAF, 0x01,  0x09, 0xAE, 0x01, 0x3C,  0x96, 0x07, 0x00, 0x08,
   0x18, 0x07, 0x00, 0x00,  0x00, 0x00, 0x3C, 0x99,  0x02, 0x00, 0x09, 0x00,  0x96, 0x02, 0x00, 0x08,
-  0x18, 0x4C, 0x1C, 0x50,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x18, 0x1C, 0x96,  0x03, 0x00, 0x09, 0xAE,
+  0x18, 0x4C, 0x1C, 0x50,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x18, 0x1C, 0x96,  0x03, 0x00, 0x09, 0xB0,
   0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x19, 0x4E,  0x48, 0x12, 0x9D, 0x02,  0x00, 0x56, 0x00, 0x96,
-  0x03, 0x00, 0x09, 0xAD,  0x01, 0x4C, 0x1C, 0x96,  0x05, 0x00, 0x09, 0xAF,  0x01, 0x08, 0x18, 0x1C,
-  0x47, 0x96, 0x03, 0x00,  0x09, 0xB0, 0x01, 0x47,  0x96, 0x03, 0x00, 0x09,  0xAE, 0x01, 0x1C, 0x96,
+  0x03, 0x00, 0x09, 0xAF,  0x01, 0x4C, 0x1C, 0x96,  0x05, 0x00, 0x09, 0xB1,  0x01, 0x08, 0x18, 0x1C,
+  0x47, 0x96, 0x03, 0x00,  0x09, 0xB2, 0x01, 0x47,  0x96, 0x03, 0x00, 0x09,  0xB0, 0x01, 0x1C, 0x96,
   0x02, 0x00, 0x08, 0x18,  0x1C, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x04,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x82, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x83, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0xAA,  0x01, 0x52, 0x47, 0x96,  0x03, 0x00, 0x09, 0xB1,  0x01, 0x47, 0x47, 0x1D,
-  0x99, 0x02, 0x00, 0x87,  0xFF, 0x96, 0x03, 0x00,  0x09, 0xAD, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0xB2, 0x01, 0x47, 0x3E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x82,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x83, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x9B, 0x01, 0x8E,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x84, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x85, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0xAC,  0x01, 0x52, 0x47, 0x96,  0x03, 0x00, 0x09, 0xB3,  0x01, 0x47, 0x47, 0x1D,
+  0x99, 0x02, 0x00, 0x87,  0xFF, 0x96, 0x03, 0x00,  0x09, 0xAF, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0xB4, 0x01, 0x47, 0x3E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x84,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x85, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x9D, 0x01, 0x8E,
   0x0E, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x61, 0x72, 0x67,  0x73, 0x00, 0x89, 0x00,
-  0x96, 0x06, 0x00, 0x09,  0xAD, 0x01, 0x09, 0xB3,  0x01, 0x3C, 0x96, 0x07,  0x00, 0x08, 0x18, 0x07,
+  0x96, 0x06, 0x00, 0x09,  0xAF, 0x01, 0x09, 0xB5,  0x01, 0x3C, 0x96, 0x07,  0x00, 0x08, 0x18, 0x07,
   0x00, 0x00, 0x00, 0x00,  0x3C, 0x99, 0x02, 0x00,  0x09, 0x00, 0x96, 0x02,  0x00, 0x08, 0x18, 0x4C,
-  0x1C, 0x50, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x18,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xA2, 0x01, 0x1C,
+  0x1C, 0x50, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x18,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xA4, 0x01, 0x1C,
   0x96, 0x02, 0x00, 0x08,  0x19, 0x4E, 0x48, 0x12,  0x9D, 0x02, 0x00, 0x3D,  0x00, 0x96, 0x03, 0x00,
-  0x09, 0xAD, 0x01, 0x4C,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xA2, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x09, 0xAF, 0x01, 0x4C,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xA4, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
   0x18, 0x1C, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x82, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x83, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0xAA, 0x01, 0x52, 0x47,  0x1D, 0x99, 0x02, 0x00,  0xA0, 0xFF, 0x96, 0x03,  0x00, 0x09, 0xAD, 0x01,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0xB4, 0x01, 0x47,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0x82, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x83,  0x01, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0xB5, 0x01,  0x8E, 0x0D, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x6F, 0x62,
-  0x6A, 0x00, 0x8C, 0x00,  0x96, 0x06, 0x00, 0x09,  0xAD, 0x01, 0x09, 0xB6,  0x01, 0x3C, 0x96, 0x03,
-  0x00, 0x09, 0xB7, 0x01,  0x46, 0x87, 0x01, 0x00,  0x00, 0x96, 0x01, 0x00,  0x02, 0x49, 0x9D, 0x02,
-  0x00, 0x5E, 0x00, 0x96,  0x04, 0x00, 0x08, 0xBC,  0x04, 0x00, 0x3C, 0x96,  0x03, 0x00, 0x09, 0xAD,
-  0x01, 0x4C, 0x1C, 0x96,  0x05, 0x00, 0x09, 0xAF,  0x01, 0x08, 0xBC, 0x1C,  0x47, 0x96, 0x03, 0x00,
-  0x09, 0xB0, 0x01, 0x47,  0x96, 0x03, 0x00, 0x09,  0xB7, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xBC,
+  0x00, 0x09, 0x84, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x85, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0xAC, 0x01, 0x52, 0x47,  0x1D, 0x99, 0x02, 0x00,  0xA0, 0xFF, 0x96, 0x03,  0x00, 0x09, 0xAF, 0x01,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0xB6, 0x01, 0x47,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,
+  0x96, 0x03, 0x00, 0x09,  0x84, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x85,  0x01, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0xB7, 0x01,  0x8E, 0x0D, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x6F, 0x62,
+  0x6A, 0x00, 0x8C, 0x00,  0x96, 0x06, 0x00, 0x09,  0xAF, 0x01, 0x09, 0xB8,  0x01, 0x3C, 0x96, 0x03,
+  0x00, 0x09, 0xB9, 0x01,  0x46, 0x87, 0x01, 0x00,  0x00, 0x96, 0x01, 0x00,  0x02, 0x49, 0x9D, 0x02,
+  0x00, 0x5E, 0x00, 0x96,  0x04, 0x00, 0x08, 0xBC,  0x04, 0x00, 0x3C, 0x96,  0x03, 0x00, 0x09, 0xAF,
+  0x01, 0x4C, 0x1C, 0x96,  0x05, 0x00, 0x09, 0xB1,  0x01, 0x08, 0xBC, 0x1C,  0x47, 0x96, 0x03, 0x00,
+  0x09, 0xB2, 0x01, 0x47,  0x96, 0x03, 0x00, 0x09,  0xB9, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xBC,
   0x1C, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x82, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x83, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xAA,
-  0x01, 0x52, 0x47, 0x96,  0x03, 0x00, 0x09, 0xB1,  0x01, 0x47, 0x47, 0x1D,  0x99, 0x02, 0x00, 0x94,
-  0xFF, 0x96, 0x03, 0x00,  0x09, 0xAD, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xB8, 0x01, 0x47, 0x3E,
-  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x82,  0x01, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0x83, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xAA, 0x01, 0x8E,  0x0F, 0x00, 0x00, 0x01,
+  0x09, 0x84, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x85, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xAC,
+  0x01, 0x52, 0x47, 0x96,  0x03, 0x00, 0x09, 0xB3,  0x01, 0x47, 0x47, 0x1D,  0x99, 0x02, 0x00, 0x94,
+  0xFF, 0x96, 0x03, 0x00,  0x09, 0xAF, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xBA, 0x01, 0x47, 0x3E,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x84,  0x01, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0x85, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xAC, 0x01, 0x8E,  0x0F, 0x00, 0x00, 0x01,
   0x00, 0x00, 0x00, 0x00,  0x00, 0x76, 0x61, 0x6C,  0x75, 0x65, 0x00, 0x7A,  0x01, 0x96, 0x05, 0x00,
-  0x08, 0xA0, 0x09, 0x29,  0x01, 0x1C, 0x44, 0x3C,  0x96, 0x02, 0x00, 0x08,  0xA0, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0xB9, 0x01,  0x49, 0x9D, 0x02, 0x00,  0x2A, 0x01, 0x96, 0x02,  0x00, 0x08, 0xA0, 0x1C,
+  0x08, 0xA0, 0x09, 0x2B,  0x01, 0x1C, 0x44, 0x3C,  0x96, 0x02, 0x00, 0x08,  0xA0, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0xBB, 0x01,  0x49, 0x9D, 0x02, 0x00,  0x2A, 0x01, 0x96, 0x02,  0x00, 0x08, 0xA0, 0x1C,
   0x96, 0x02, 0x00, 0x08,  0x09, 0x49, 0x9D, 0x02,  0x00, 0x0D, 0x01, 0x96,  0x02, 0x00, 0x08, 0xA0,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0xBE, 0x01, 0x49,  0x9D, 0x02, 0x00, 0xE3,  0x00, 0x96, 0x03, 0x00,
-  0x09, 0x29, 0x01, 0x1C,  0x96, 0x01, 0x00, 0x02,  0x49, 0x9D, 0x02, 0x00,  0xC6, 0x00, 0x96, 0x02,
-  0x00, 0x08, 0xA0, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xC2, 0x01, 0x49, 0x9D,  0x02, 0x00, 0x91, 0x00,
-  0x96, 0x0A, 0x00, 0x08,  0x19, 0x07, 0x01, 0x00,  0x00, 0x00, 0x09, 0x29,  0x01, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0xC5, 0x01,  0x52, 0x9D, 0x02, 0x00,  0x4A, 0x00, 0x96, 0x02,  0x00, 0x08, 0xA0, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0xBA, 0x49, 0x9D, 0x02,  0x00, 0x0C, 0x00, 0x96,  0x03, 0x00, 0x09, 0xC1,
-  0x01, 0x3E, 0x99, 0x02,  0x00, 0x28, 0x00, 0x96,  0x03, 0x00, 0x09, 0x29,  0x01, 0x1C, 0x96, 0x07,
-  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x82, 0x01, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x83, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xB5,  0x01, 0x52, 0x3E, 0x99,
-  0x02, 0x00, 0x28, 0x00,  0x96, 0x03, 0x00, 0x09,  0x29, 0x01, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,
-  0x00, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x82, 0x01,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x83, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xAB, 0x01, 0x52, 0x3E,  0x99, 0x02, 0x00, 0x1E,
-  0x00, 0x96, 0x03, 0x00,  0x09, 0x29, 0x01, 0x1C,  0x9D, 0x02, 0x00, 0x0B,  0x00, 0x96, 0x03, 0x00,
-  0x09, 0xC4, 0x01, 0x99,  0x02, 0x00, 0x06, 0x00,  0x96, 0x03, 0x00, 0x09,  0xC3, 0x01, 0x3E, 0x99,
-  0x02, 0x00, 0x07, 0x00,  0x96, 0x03, 0x00, 0x09,  0xC1, 0x01, 0x3E, 0x99,  0x02, 0x00, 0x13, 0x00,
-  0x96, 0x06, 0x00, 0x09,  0xBF, 0x01, 0x09, 0x29,  0x01, 0x1C, 0x47, 0x96,  0x03, 0x00, 0x09, 0xC0,
-  0x01, 0x47, 0x3E, 0x99,  0x02, 0x00, 0x07, 0x00,  0x96, 0x03, 0x00, 0x09,  0xBD, 0x01, 0x3E, 0x99,
-  0x02, 0x00, 0x33, 0x00,  0x96, 0x06, 0x00, 0x09,  0xBA, 0x01, 0x09, 0x29,  0x01, 0x1C, 0x96, 0x07,
-  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x82, 0x01, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x83, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xBB,  0x01, 0x52, 0x47, 0x96,
-  0x03, 0x00, 0x09, 0xBC,  0x01, 0x47, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x82, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x83, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0xC6, 0x01, 0x8E, 0x0D,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,  0x78, 0x6D, 0x6C, 0x00,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0xC0, 0x01, 0x49,  0x9D, 0x02, 0x00, 0xE3,  0x00, 0x96, 0x03, 0x00,
+  0x09, 0x2B, 0x01, 0x1C,  0x96, 0x01, 0x00, 0x02,  0x49, 0x9D, 0x02, 0x00,  0xC6, 0x00, 0x96, 0x02,
+  0x00, 0x08, 0xA0, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xC4, 0x01, 0x49, 0x9D,  0x02, 0x00, 0x91, 0x00,
+  0x96, 0x0A, 0x00, 0x08,  0x19, 0x07, 0x01, 0x00,  0x00, 0x00, 0x09, 0x2B,  0x01, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0xC7, 0x01,  0x52, 0x9D, 0x02, 0x00,  0x4A, 0x00, 0x96, 0x02,  0x00, 0x08, 0xA0, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0xBA, 0x49, 0x9D, 0x02,  0x00, 0x0C, 0x00, 0x96,  0x03, 0x00, 0x09, 0xC3,
+  0x01, 0x3E, 0x99, 0x02,  0x00, 0x28, 0x00, 0x96,  0x03, 0x00, 0x09, 0x2B,  0x01, 0x1C, 0x96, 0x07,
+  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x84, 0x01, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x85, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xB7,  0x01, 0x52, 0x3E, 0x99,
+  0x02, 0x00, 0x28, 0x00,  0x96, 0x03, 0x00, 0x09,  0x2B, 0x01, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,
+  0x00, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x84, 0x01,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x85, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xAD, 0x01, 0x52, 0x3E,  0x99, 0x02, 0x00, 0x1E,
+  0x00, 0x96, 0x03, 0x00,  0x09, 0x2B, 0x01, 0x1C,  0x9D, 0x02, 0x00, 0x0B,  0x00, 0x96, 0x03, 0x00,
+  0x09, 0xC6, 0x01, 0x99,  0x02, 0x00, 0x06, 0x00,  0x96, 0x03, 0x00, 0x09,  0xC5, 0x01, 0x3E, 0x99,
+  0x02, 0x00, 0x07, 0x00,  0x96, 0x03, 0x00, 0x09,  0xC3, 0x01, 0x3E, 0x99,  0x02, 0x00, 0x13, 0x00,
+  0x96, 0x06, 0x00, 0x09,  0xC1, 0x01, 0x09, 0x2B,  0x01, 0x1C, 0x47, 0x96,  0x03, 0x00, 0x09, 0xC2,
+  0x01, 0x47, 0x3E, 0x99,  0x02, 0x00, 0x07, 0x00,  0x96, 0x03, 0x00, 0x09,  0xBF, 0x01, 0x3E, 0x99,
+  0x02, 0x00, 0x33, 0x00,  0x96, 0x06, 0x00, 0x09,  0xBC, 0x01, 0x09, 0x2B,  0x01, 0x1C, 0x96, 0x07,
+  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x84, 0x01, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x85, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xBD,  0x01, 0x52, 0x47, 0x96,
+  0x03, 0x00, 0x09, 0xBE,  0x01, 0x47, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0x84, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x85, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0xC8, 0x01, 0x8E, 0x0D,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,  0x78, 0x6D, 0x6C, 0x00,
   0xE1, 0x00, 0x96, 0x07,  0x00, 0x08, 0x1C, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x3C, 0x96, 0x07,
   0x00, 0x08, 0x18, 0x07,  0x00, 0x00, 0x00, 0x00,  0x1D, 0x99, 0x02, 0x00,  0x09, 0x00, 0x96, 0x02,
   0x00, 0x08, 0x18, 0x4C,  0x1C, 0x50, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x18,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x9E, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xA3, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x19,
-  0x4E, 0x48, 0x12, 0x9D,  0x02, 0x00, 0x94, 0x00,  0x96, 0x03, 0x00, 0x09,  0x9E, 0x01, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0xA3,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x18, 0x1C,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0xA4, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xC7, 0x01, 0x49, 0x12,  0x9D, 0x02, 0x00, 0x66,
-  0x00, 0x96, 0x02, 0x00,  0x08, 0x1C, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x9E,  0x01, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0xA3, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x18, 0x1C, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0xA7, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x8E,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x9E, 0x01,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0xA3, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x18, 0x1C, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0xA0,  0x01, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x04,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x82, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x83, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0xA1,  0x01, 0x52, 0x4F, 0x99,  0x02, 0x00, 0x42, 0xFF,  0x96, 0x02, 0x00, 0x08,
-  0x1C, 0x1C, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x82, 0x01,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0x83, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xC8, 0x01, 0x8E, 0x0D,
+  0x09, 0xA0, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xA5, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x19,
+  0x4E, 0x48, 0x12, 0x9D,  0x02, 0x00, 0x94, 0x00,  0x96, 0x03, 0x00, 0x09,  0xA0, 0x01, 0x1C, 0x96,
+  0x03, 0x00, 0x09, 0xA5,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x18, 0x1C,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0xA6, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xC9, 0x01, 0x49, 0x12,  0x9D, 0x02, 0x00, 0x66,
+  0x00, 0x96, 0x02, 0x00,  0x08, 0x1C, 0x1C, 0x96,  0x03, 0x00, 0x09, 0xA0,  0x01, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0xA5, 0x01,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x18, 0x1C, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0xA9, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x90,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xA0, 0x01,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0xA5, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x18, 0x1C, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0xA2,  0x01, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x04,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x84, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x85, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0xA3,  0x01, 0x52, 0x4F, 0x99,  0x02, 0x00, 0x42, 0xFF,  0x96, 0x02, 0x00, 0x08,
+  0x1C, 0x1C, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x84, 0x01,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0x85, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xCA, 0x01, 0x8E, 0x0D,
   0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,  0x78, 0x6D, 0x6C, 0x00,  0xE4, 0x00, 0x96, 0x08,
-  0x00, 0x09, 0x25, 0x01,  0x07, 0x00, 0x00, 0x00,  0x00, 0x42, 0x3C, 0x96,  0x07, 0x00, 0x08, 0x18,
+  0x00, 0x09, 0x27, 0x01,  0x07, 0x00, 0x00, 0x00,  0x00, 0x42, 0x3C, 0x96,  0x07, 0x00, 0x08, 0x18,
   0x07, 0x00, 0x00, 0x00,  0x00, 0x1D, 0x99, 0x02,  0x00, 0x09, 0x00, 0x96,  0x02, 0x00, 0x08, 0x18,
-  0x4C, 0x1C, 0x50, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x18, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x9E, 0x01,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0xA3, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x19, 0x4E, 0x48, 0x12,
-  0x9D, 0x02, 0x00, 0x95,  0x00, 0x96, 0x03, 0x00,  0x09, 0x9E, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0xA3, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x18,  0x1C, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xA4, 0x01,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0xC7, 0x01, 0x49,  0x12, 0x9D, 0x02, 0x00,  0x67, 0x00, 0x96, 0x03,
-  0x00, 0x09, 0x25, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x9E, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0xA3, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x18,  0x1C, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xA7, 0x01,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0x8E, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x9E, 0x01, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0xA3,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x18, 0x1C,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0xA0, 0x01, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0x82,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x83, 0x01,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0xA1, 0x01, 0x52,  0x4F, 0x99, 0x02, 0x00,  0x41, 0xFF, 0x96, 0x03,  0x00, 0x09, 0x25, 0x01,
-  0x1C, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x82, 0x01, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x83, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xA1,  0x01, 0x8E, 0x0D, 0x00,
+  0x4C, 0x1C, 0x50, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x18, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xA0, 0x01,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0xA5, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x19, 0x4E, 0x48, 0x12,
+  0x9D, 0x02, 0x00, 0x95,  0x00, 0x96, 0x03, 0x00,  0x09, 0xA0, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0xA5, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x18,  0x1C, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xA6, 0x01,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0xC9, 0x01, 0x49,  0x12, 0x9D, 0x02, 0x00,  0x67, 0x00, 0x96, 0x03,
+  0x00, 0x09, 0x27, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xA0, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0xA5, 0x01, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x18,  0x1C, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xA9, 0x01,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0x90, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xA0, 0x01, 0x1C, 0x96,
+  0x03, 0x00, 0x09, 0xA5,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x18, 0x1C,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0xA2, 0x01, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,
+  0x03, 0x00, 0x09, 0x84,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x85, 0x01,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0xA3, 0x01, 0x52,  0x4F, 0x99, 0x02, 0x00,  0x41, 0xFF, 0x96, 0x03,  0x00, 0x09, 0x27, 0x01,
+  0x1C, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x84, 0x01, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x85, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xA3,  0x01, 0x8E, 0x0D, 0x00,
   0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x78,  0x6D, 0x6C, 0x00, 0xC2,  0x01, 0x96, 0x05, 0x00,
-  0x08, 0xA0, 0x09, 0x9E,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xA4, 0x01,  0x4E, 0x3C, 0x96, 0x02,
-  0x00, 0x08, 0xA0, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xBE, 0x01, 0x49, 0x9D,  0x02, 0x00, 0x79, 0x01,
-  0x96, 0x02, 0x00, 0x08,  0xA0, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xB9, 0x01,  0x49, 0x9D, 0x02, 0x00,
+  0x08, 0xA0, 0x09, 0xA0,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xA6, 0x01,  0x4E, 0x3C, 0x96, 0x02,
+  0x00, 0x08, 0xA0, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xC0, 0x01, 0x49, 0x9D,  0x02, 0x00, 0x79, 0x01,
+  0x96, 0x02, 0x00, 0x08,  0xA0, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xBB, 0x01,  0x49, 0x9D, 0x02, 0x00,
   0x27, 0x01, 0x96, 0x02,  0x00, 0x08, 0xA0, 0x1C,  0x96, 0x02, 0x00, 0x08,  0xDC, 0x49, 0x9D, 0x02,
   0x00, 0x0B, 0x01, 0x96,  0x02, 0x00, 0x08, 0xA0,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xDB, 0x49, 0x9D,
   0x02, 0x00, 0xEF, 0x00,  0x96, 0x02, 0x00, 0x08,  0xA0, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xEB, 0x49,
   0x9D, 0x02, 0x00, 0xD4,  0x00, 0x96, 0x02, 0x00,  0x08, 0xA0, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x09,
   0x49, 0x9D, 0x02, 0x00,  0xB9, 0x00, 0x96, 0x02,  0x00, 0x08, 0xA0, 0x1C,  0x96, 0x02, 0x00, 0x08,
   0xBA, 0x49, 0x9D, 0x02,  0x00, 0x7B, 0x00, 0x96,  0x02, 0x00, 0x08, 0xA0,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0xAE, 0x01, 0x49,  0x9D, 0x02, 0x00, 0x3C,  0x00, 0x96, 0x02, 0x00,  0x08, 0xA0, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0xCC,  0x01, 0x49, 0x9D, 0x02,  0x00, 0x0A, 0x00, 0x96,  0x01, 0x00, 0x03, 0x3E,
-  0x99, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x03, 0x00,  0x09, 0x9E, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0xA0, 0x01, 0x4E, 0x96,  0x08, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x09,  0xCA, 0x01, 0x3D, 0x3E,
-  0x99, 0x02, 0x00, 0x28,  0x00, 0x96, 0x03, 0x00,  0x09, 0x9E, 0x01, 0x1C,  0x96, 0x07, 0x00, 0x07,
-  0x01, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x82,  0x01, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0x83, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xC8, 0x01, 0x52,  0x3E, 0x99, 0x02, 0x00,
-  0x28, 0x00, 0x96, 0x03,  0x00, 0x09, 0x9E, 0x01,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
-  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x82, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x83,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xC6, 0x01,  0x52, 0x3E, 0x99, 0x02,  0x00, 0x05, 0x00, 0x96,
+  0x09, 0xB0, 0x01, 0x49,  0x9D, 0x02, 0x00, 0x3C,  0x00, 0x96, 0x02, 0x00,  0x08, 0xA0, 0x1C, 0x96,
+  0x03, 0x00, 0x09, 0xCE,  0x01, 0x49, 0x9D, 0x02,  0x00, 0x0A, 0x00, 0x96,  0x01, 0x00, 0x03, 0x3E,
+  0x99, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x03, 0x00,  0x09, 0xA0, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0xA2, 0x01, 0x4E, 0x96,  0x08, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x09,  0xCC, 0x01, 0x3D, 0x3E,
+  0x99, 0x02, 0x00, 0x28,  0x00, 0x96, 0x03, 0x00,  0x09, 0xA0, 0x01, 0x1C,  0x96, 0x07, 0x00, 0x07,
+  0x01, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x84,  0x01, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0x85, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xCA, 0x01, 0x52,  0x3E, 0x99, 0x02, 0x00,
+  0x28, 0x00, 0x96, 0x03,  0x00, 0x09, 0xA0, 0x01,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
+  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x84, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x85,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xC8, 0x01,  0x52, 0x3E, 0x99, 0x02,  0x00, 0x05, 0x00, 0x96,
   0x01, 0x00, 0x03, 0x3E,  0x99, 0x02, 0x00, 0x05,  0x00, 0x96, 0x01, 0x00,  0x02, 0x3E, 0x99, 0x02,
   0x00, 0x06, 0x00, 0x96,  0x02, 0x00, 0x05, 0x01,  0x3E, 0x99, 0x02, 0x00,  0x06, 0x00, 0x96, 0x02,
-  0x00, 0x05, 0x00, 0x3E,  0x99, 0x02, 0x00, 0x3B,  0x00, 0x96, 0x03, 0x00,  0x09, 0x9E, 0x01, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0xA0, 0x01, 0x4E, 0x96,  0x08, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x09,
-  0xCA, 0x01, 0x3D, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x82, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x83, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0xCB, 0x01, 0x52, 0x3E,  0x99, 0x02, 0x00, 0x26,  0x00, 0x96, 0x08, 0x00,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x09, 0x9E, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xA0, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x0F, 0x52, 0x96, 0x08,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x09, 0xC9,  0x01, 0x3D, 0x3E, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x82, 0x01,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0x83, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xA5, 0x01, 0x8E, 0x0D,  0x00, 0x00, 0x01, 0x00,
-  0x00, 0x00, 0x00, 0x00,  0x78, 0x6D, 0x6C, 0x00,  0x9C, 0x00, 0x96, 0x08,  0x00, 0x09, 0xA2, 0x01,
+  0x00, 0x05, 0x00, 0x3E,  0x99, 0x02, 0x00, 0x3B,  0x00, 0x96, 0x03, 0x00,  0x09, 0xA0, 0x01, 0x1C,
+  0x96, 0x03, 0x00, 0x09,  0xA2, 0x01, 0x4E, 0x96,  0x08, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x09,
+  0xCC, 0x01, 0x3D, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0x84, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x85, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0xCD, 0x01, 0x52, 0x3E,  0x99, 0x02, 0x00, 0x26,  0x00, 0x96, 0x08, 0x00,  0x07, 0x00, 0x00, 0x00,
+  0x00, 0x09, 0xA0, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xA2, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x0F, 0x52, 0x96, 0x08,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x09, 0xCB,  0x01, 0x3D, 0x3E, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x84, 0x01,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0x85, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xA7, 0x01, 0x8E, 0x0D,  0x00, 0x00, 0x01, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x78, 0x6D, 0x6C, 0x00,  0x9C, 0x00, 0x96, 0x08,  0x00, 0x09, 0xA4, 0x01,
   0x07, 0x00, 0x00, 0x00,  0x00, 0x42, 0x3C, 0x96,  0x07, 0x00, 0x08, 0x18,  0x07, 0x00, 0x00, 0x00,
   0x00, 0x3C, 0x99, 0x02,  0x00, 0x09, 0x00, 0x96,  0x02, 0x00, 0x08, 0x18,  0x4C, 0x1C, 0x50, 0x1D,
-  0x96, 0x02, 0x00, 0x08,  0x18, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x9E, 0x01,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0xA3, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x19, 0x4E, 0x48, 0x12,  0x9D, 0x02, 0x00, 0x4D,
-  0x00, 0x96, 0x03, 0x00,  0x09, 0x9E, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xA3, 0x01, 0x4E, 0x96,
+  0x96, 0x02, 0x00, 0x08,  0x18, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xA0, 0x01,  0x1C, 0x96, 0x03, 0x00,
+  0x09, 0xA5, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x19, 0x4E, 0x48, 0x12,  0x9D, 0x02, 0x00, 0x4D,
+  0x00, 0x96, 0x03, 0x00,  0x09, 0xA0, 0x01, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xA5, 0x01, 0x4E, 0x96,
   0x02, 0x00, 0x08, 0x18,  0x1C, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x04,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x82, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x83, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0xA1,  0x01, 0x52, 0x96, 0x08,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x09, 0xA2,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x84, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x85, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0xA3,  0x01, 0x52, 0x96, 0x08,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x09, 0xA4,
   0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x16, 0x52,  0x17, 0x99, 0x02, 0x00,  0x89, 0xFF, 0x96, 0x03,
-  0x00, 0x09, 0xA2, 0x01,  0x1C, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0x82, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x83, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xCD,
+  0x00, 0x09, 0xA4, 0x01,  0x1C, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,
+  0x09, 0x84, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x85, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xCF,
   0x01, 0x8E, 0x0F, 0x00,  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x61,  0x72, 0x72, 0x61, 0x79,
-  0x00, 0xB0, 0x00, 0x96,  0x06, 0x00, 0x09, 0xAD,  0x01, 0x09, 0xCE, 0x01,  0x3C, 0x96, 0x07, 0x00,
+  0x00, 0xB0, 0x00, 0x96,  0x06, 0x00, 0x09, 0xAF,  0x01, 0x09, 0xD0, 0x01,  0x3C, 0x96, 0x07, 0x00,
   0x08, 0x18, 0x07, 0x00,  0x00, 0x00, 0x00, 0x3C,  0x99, 0x02, 0x00, 0x09,  0x00, 0x96, 0x02, 0x00,
   0x08, 0x18, 0x4C, 0x1C,  0x50, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x18, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0xAE, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x19,  0x4E, 0x48, 0x12, 0x9D,  0x02, 0x00, 0x64, 0x00,
+  0xB0, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x19,  0x4E, 0x48, 0x12, 0x9D,  0x02, 0x00, 0x64, 0x00,
   0x96, 0x02, 0x00, 0x08,  0x18, 0x1C, 0x96, 0x05,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x49, 0x12,
-  0x12, 0x9D, 0x02, 0x00,  0x10, 0x00, 0x96, 0x03,  0x00, 0x09, 0xAD, 0x01,  0x4C, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x92, 0x01,  0x47, 0x1D, 0x96, 0x03,  0x00, 0x09, 0xAD, 0x01,  0x4C, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0xAE, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xCF, 0x01, 0x1C,  0x4E, 0x96, 0x07, 0x00,
-  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x82, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0x83,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x93, 0x01,  0x52, 0x47, 0x1D, 0x99,
-  0x02, 0x00, 0x79, 0xFF,  0x96, 0x03, 0x00, 0x09,  0xAD, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0xD0,
-  0x01, 0x47, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x82, 0x01,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0x83, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xD1, 0x01, 0x8E, 0x0D,
+  0x12, 0x9D, 0x02, 0x00,  0x10, 0x00, 0x96, 0x03,  0x00, 0x09, 0xAF, 0x01,  0x4C, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0x94, 0x01,  0x47, 0x1D, 0x96, 0x03,  0x00, 0x09, 0xAF, 0x01,  0x4C, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0xB0, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xD1, 0x01, 0x1C,  0x4E, 0x96, 0x07, 0x00,
+  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x84, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0x85,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0x95, 0x01,  0x52, 0x47, 0x1D, 0x99,
+  0x02, 0x00, 0x79, 0xFF,  0x96, 0x03, 0x00, 0x09,  0xAF, 0x01, 0x1C, 0x96,  0x03, 0x00, 0x09, 0xD2,
+  0x01, 0x47, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x84, 0x01,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0x85, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xD3, 0x01, 0x8E, 0x0D,
   0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,  0x6F, 0x62, 0x6A, 0x00,  0xB0, 0x00, 0x96, 0x06,
-  0x00, 0x09, 0xAD, 0x01,  0x09, 0xD2, 0x01, 0x3C,  0x96, 0x05, 0x00, 0x09,  0xD3, 0x01, 0x05, 0x00,
-  0x3C, 0x96, 0x03, 0x00,  0x09, 0xB7, 0x01, 0x46,  0x87, 0x01, 0x00, 0x00,  0x96, 0x01, 0x00, 0x02,
+  0x00, 0x09, 0xAF, 0x01,  0x09, 0xD4, 0x01, 0x3C,  0x96, 0x05, 0x00, 0x09,  0xD5, 0x01, 0x05, 0x00,
+  0x3C, 0x96, 0x03, 0x00,  0x09, 0xB9, 0x01, 0x46,  0x87, 0x01, 0x00, 0x00,  0x96, 0x01, 0x00, 0x02,
   0x49, 0x9D, 0x02, 0x00,  0x79, 0x00, 0x96, 0x04,  0x00, 0x08, 0xBC, 0x04,  0x00, 0x3C, 0x96, 0x03,
-  0x00, 0x09, 0xD3, 0x01,  0x1C, 0x12, 0x9D, 0x02,  0x00, 0x10, 0x00, 0x96,  0x03, 0x00, 0x09, 0xAD,
-  0x01, 0x4C, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x92,  0x01, 0x47, 0x1D, 0x96,  0x05, 0x00, 0x09, 0xD3,
-  0x01, 0x05, 0x01, 0x1D,  0x96, 0x03, 0x00, 0x09,  0xAD, 0x01, 0x4C, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0xBC, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xD4, 0x01,  0x47, 0x96, 0x03, 0x00,  0x09, 0xB7, 0x01, 0x1C,
+  0x00, 0x09, 0xD5, 0x01,  0x1C, 0x12, 0x9D, 0x02,  0x00, 0x10, 0x00, 0x96,  0x03, 0x00, 0x09, 0xAF,
+  0x01, 0x4C, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x94,  0x01, 0x47, 0x1D, 0x96,  0x05, 0x00, 0x09, 0xD5,
+  0x01, 0x05, 0x01, 0x1D,  0x96, 0x03, 0x00, 0x09,  0xAF, 0x01, 0x4C, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0xBC, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xD6, 0x01,  0x47, 0x96, 0x03, 0x00,  0x09, 0xB9, 0x01, 0x1C,
   0x96, 0x02, 0x00, 0x08,  0xBC, 0x1C, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,
-  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x82, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x83, 0x01, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0x93, 0x01, 0x52, 0x47,  0x47, 0x1D, 0x99, 0x02,  0x00, 0x79, 0xFF, 0x96,
-  0x03, 0x00, 0x09, 0xAD,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xD5, 0x01,  0x47, 0x3E, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x82, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0x83, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x93,  0x01, 0x8E, 0x0F, 0x00,  0x00, 0x01, 0x00, 0x00,
+  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0x84, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x85, 0x01, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0x95, 0x01, 0x52, 0x47,  0x47, 0x1D, 0x99, 0x02,  0x00, 0x79, 0xFF, 0x96,
+  0x03, 0x00, 0x09, 0xAF,  0x01, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xD7, 0x01,  0x47, 0x3E, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0x84, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0x85, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x95,  0x01, 0x8E, 0x0F, 0x00,  0x00, 0x01, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x76,  0x61, 0x6C, 0x75, 0x65,  0x00, 0x07, 0x01, 0x96,  0x05, 0x00, 0x08, 0xA0,
-  0x09, 0x29, 0x01, 0x1C,  0x44, 0x3C, 0x96, 0x02,  0x00, 0x08, 0xA0, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0xB9, 0x01, 0x49, 0x9D,  0x02, 0x00, 0x97, 0x00,  0x96, 0x02, 0x00, 0x08,  0xA0, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0xBA, 0x49,  0x9D, 0x02, 0x00, 0x19,  0x00, 0x96, 0x03, 0x00,  0x09, 0x29, 0x01, 0x1C,
-  0x96, 0x08, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x09, 0xCA, 0x01, 0x3D,  0x3E, 0x99, 0x02, 0x00,
-  0x68, 0x00, 0x96, 0x03,  0x00, 0x09, 0x29, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xF7, 0x1C, 0x54,
-  0x9D, 0x02, 0x00, 0x2D,  0x00, 0x96, 0x03, 0x00,  0x09, 0x29, 0x01, 0x1C,  0x96, 0x07, 0x00, 0x07,
-  0x01, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x82,  0x01, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0x83, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xD1, 0x01, 0x52,  0x3E, 0x99, 0x02, 0x00,
-  0x28, 0x00, 0x96, 0x03,  0x00, 0x09, 0x29, 0x01,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
-  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x82, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x83,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xCD, 0x01,  0x52, 0x3E, 0x99, 0x02,  0x00, 0x53, 0x00, 0x96,
-  0x06, 0x00, 0x09, 0xD6,  0x01, 0x09, 0x29, 0x01,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
-  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x82, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x83,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xCB, 0x01,  0x52, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
-  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x82, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x83,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xD7, 0x01,  0x52, 0x47, 0x96, 0x03,  0x00, 0x09, 0xD6, 0x01,
-  0x47, 0x3E, 0x4F, 0x96,  0x0A, 0x00, 0x09, 0xD8,  0x01, 0x07, 0x0E, 0x00,  0x00, 0x00, 0x08, 0x04,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0x82, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x83, 0x01, 0x4E, 0x96,
+  0x09, 0x2B, 0x01, 0x1C,  0x44, 0x3C, 0x96, 0x02,  0x00, 0x08, 0xA0, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0xBB, 0x01, 0x49, 0x9D,  0x02, 0x00, 0x97, 0x00,  0x96, 0x02, 0x00, 0x08,  0xA0, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0xBA, 0x49,  0x9D, 0x02, 0x00, 0x19,  0x00, 0x96, 0x03, 0x00,  0x09, 0x2B, 0x01, 0x1C,
+  0x96, 0x08, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x09, 0xCC, 0x01, 0x3D,  0x3E, 0x99, 0x02, 0x00,
+  0x68, 0x00, 0x96, 0x03,  0x00, 0x09, 0x2B, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xF9, 0x1C, 0x54,
+  0x9D, 0x02, 0x00, 0x2D,  0x00, 0x96, 0x03, 0x00,  0x09, 0x2B, 0x01, 0x1C,  0x96, 0x07, 0x00, 0x07,
+  0x01, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0x84,  0x01, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0x85, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xD3, 0x01, 0x52,  0x3E, 0x99, 0x02, 0x00,
+  0x28, 0x00, 0x96, 0x03,  0x00, 0x09, 0x2B, 0x01,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
+  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x84, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x85,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xCF, 0x01,  0x52, 0x3E, 0x99, 0x02,  0x00, 0x53, 0x00, 0x96,
+  0x06, 0x00, 0x09, 0xD8,  0x01, 0x09, 0x2B, 0x01,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
+  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x84, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x85,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xCD, 0x01,  0x52, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
+  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x84, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x85,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xD9, 0x01,  0x52, 0x47, 0x96, 0x03,  0x00, 0x09, 0xD8, 0x01,
+  0x47, 0x3E, 0x4F, 0x96,  0x0A, 0x00, 0x09, 0xDA,  0x01, 0x07, 0x0E, 0x00,  0x00, 0x00, 0x08, 0x04,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0x84, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0x85, 0x01, 0x4E, 0x96,
   0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x02, 0x3D, 0x17, 0x96,  0x0F, 0x00, 0x07, 0x64,
-  0x00, 0x00, 0x00, 0x09,  0xD9, 0x01, 0x07, 0x0E,  0x00, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0x82, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x83, 0x01, 0x4E,  0x96, 0x07, 0x00, 0x07,
+  0x00, 0x00, 0x00, 0x09,  0xDB, 0x01, 0x07, 0x0E,  0x00, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0x84, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x85, 0x01, 0x4E,  0x96, 0x07, 0x00, 0x07,
   0x04, 0x00, 0x00, 0x00,  0x08, 0x03, 0x3D, 0x17,  0x96, 0x08, 0x00, 0x07,  0x07, 0x10, 0x00, 0x00,
-  0x02, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x82, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x83,
+  0x02, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0x84, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x85,
   0x01, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x00,  0x3D, 0x17, 0x96, 0x03,
-  0x00, 0x09, 0xDA, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xDB, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,
+  0x00, 0x09, 0xDC, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xDD, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00,  0x1F, 0x00, 0x96, 0x07,  0x00, 0x08, 0x1C, 0x07,  0x00, 0x00, 0x00, 0x00,
   0x43, 0x3C, 0x96, 0x07,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0xDC, 0x01, 0x52,  0x17, 0x4F, 0x96, 0x03,  0x00, 0x09, 0xDA, 0x01,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0xDD, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x1F, 0x00, 0x96, 0x07,
+  0x09, 0xDE, 0x01, 0x52,  0x17, 0x4F, 0x96, 0x03,  0x00, 0x09, 0xDC, 0x01,  0x1C, 0x96, 0x03, 0x00,
+  0x09, 0xDF, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x1F, 0x00, 0x96, 0x07,
   0x00, 0x08, 0x1C, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x3C, 0x96, 0x07,  0x00, 0x07, 0x00, 0x00,
-  0x00, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xDE, 0x01, 0x52,  0x17, 0x4F, 0x96, 0x03,
-  0x00, 0x09, 0xDA, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xDF, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xE0, 0x01, 0x52,  0x17, 0x4F, 0x96, 0x03,
+  0x00, 0x09, 0xDC, 0x01,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xE1, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00,  0x1F, 0x00, 0x96, 0x07,  0x00, 0x08, 0x1C, 0x07,  0x00, 0x00, 0x00, 0x00,
   0x43, 0x3C, 0x96, 0x07,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0xE0, 0x01, 0x52,  0x17, 0x4F, 0x96, 0x03,  0x00, 0x09, 0xDA, 0x01,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0xE1, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x1F, 0x00, 0x96, 0x07,
+  0x09, 0xE2, 0x01, 0x52,  0x17, 0x4F, 0x96, 0x03,  0x00, 0x09, 0xDC, 0x01,  0x1C, 0x96, 0x03, 0x00,
+  0x09, 0xE3, 0x01, 0x8E,  0x08, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x1F, 0x00, 0x96, 0x07,
   0x00, 0x08, 0x1C, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x3C, 0x96, 0x07,  0x00, 0x07, 0x00, 0x00,
-  0x00, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xE2, 0x01, 0x52,  0x17, 0x4F, 0x96, 0x0B,
-  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x09, 0xE3,  0x01, 0x09, 0xDA, 0x01,  0x1C, 0x96, 0x07, 0x00,
-  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x00, 0x3D,  0x17, 0x96, 0x0B, 0x00,  0x09, 0xE4, 0x01, 0x07,
-  0x3A, 0x08, 0x00, 0x00,  0x09, 0xDA, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,
+  0x00, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xE4, 0x01, 0x52,  0x17, 0x4F, 0x96, 0x0B,
+  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x09, 0xE5,  0x01, 0x09, 0xDC, 0x01,  0x1C, 0x96, 0x07, 0x00,
+  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x00, 0x3D,  0x17, 0x96, 0x0B, 0x00,  0x09, 0xE6, 0x01, 0x07,
+  0x3A, 0x08, 0x00, 0x00,  0x09, 0xDC, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,
   0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x02,  0x3D, 0x17, 0x96, 0x09,  0x00, 0x07, 0x03, 0x00,
-  0x00, 0x00, 0x02, 0x09,  0xDA, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,
-  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x00, 0x3D,  0x17, 0x96, 0x03, 0x00,  0x09, 0xE7, 0x01, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0xE8, 0x01, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x1F,
+  0x00, 0x00, 0x02, 0x09,  0xDC, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,  0x4E, 0x96, 0x07, 0x00,
+  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x00, 0x3D,  0x17, 0x96, 0x03, 0x00,  0x09, 0xE9, 0x01, 0x1C,
+  0x96, 0x03, 0x00, 0x09,  0xEA, 0x01, 0x8E, 0x08,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x1F,
   0x00, 0x96, 0x07, 0x00,  0x08, 0x1C, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x3C, 0x96, 0x07, 0x00,
-  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xE9, 0x01, 0x52, 0x17,
-  0x4F, 0x96, 0x0B, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x09, 0xE8, 0x01,  0x09, 0xE7, 0x01, 0x1C,
+  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x1C, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xEB, 0x01, 0x52, 0x17,
+  0x4F, 0x96, 0x0B, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x09, 0xEA, 0x01,  0x09, 0xE9, 0x01, 0x1C,
   0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x00, 0x3D, 0x17,  0x96, 0x14, 0x00, 0x09,
-  0xEA, 0x01, 0x07, 0x00,  0x00, 0x00, 0x00, 0x07,  0x69, 0x00, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,
-  0x00, 0x08, 0x39, 0x3D,  0x1D, 0x96, 0x03, 0x00,  0x09, 0xEA, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x0D, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x97, 0x05,  0x01, 0x4F, 0x96, 0x03,  0x00, 0x09, 0xEA, 0x01,
+  0xEC, 0x01, 0x07, 0x00,  0x00, 0x00, 0x00, 0x07,  0x69, 0x00, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,
+  0x00, 0x08, 0x39, 0x3D,  0x1D, 0x96, 0x03, 0x00,  0x09, 0xEC, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x0D, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x97, 0x05,  0x01, 0x4F, 0x96, 0x03,  0x00, 0x09, 0xEC, 0x01,
   0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x98,  0x05, 0x01, 0x4F, 0x96,
-  0x03, 0x00, 0x09, 0xEA,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x14, 0x00, 0x09,
-  0xEB, 0x01, 0x07, 0x03,  0x00, 0x00, 0x00, 0x07,  0x69, 0x00, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,
-  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x10, 0x00,  0x07, 0x04, 0x00, 0x00,  0x00, 0x09, 0xEC, 0x01,
-  0x07, 0x69, 0x00, 0x00,  0x00, 0x09, 0xEA, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0xEC,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x14, 0x00, 0x09,
+  0xED, 0x01, 0x07, 0x03,  0x00, 0x00, 0x00, 0x07,  0x69, 0x00, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,
+  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x10, 0x00,  0x07, 0x04, 0x00, 0x00,  0x00, 0x09, 0xEE, 0x01,
+  0x07, 0x69, 0x00, 0x00,  0x00, 0x09, 0xEC, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0D, 0x4E, 0x96,
   0x07, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x08,  0x03, 0x3D, 0x17, 0x96,  0x0F, 0x00, 0x07, 0xC8,
-  0x00, 0x00, 0x00, 0x08,  0xB6, 0x07, 0x84, 0x03,  0x00, 0x00, 0x09, 0xEA,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x00, 0x00, 0x08,  0xB6, 0x07, 0x84, 0x03,  0x00, 0x00, 0x09, 0xEC,  0x01, 0x1C, 0x96, 0x02,
   0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x04, 0x00, 0x00, 0x00,  0x08, 0x03, 0x3D, 0x17,
-  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x08,  0x00, 0x09, 0xED, 0x01,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xED, 0x01, 0x4E,
-  0x96, 0x14, 0x00, 0x09,  0xEE, 0x01, 0x07, 0x00,  0x00, 0x00, 0x00, 0x07,  0x58, 0x04, 0x00, 0x00,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x08,  0x00, 0x09, 0xEF, 0x01,  0x07, 0x00, 0x00, 0x00,
+  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xEF, 0x01, 0x4E,
+  0x96, 0x14, 0x00, 0x09,  0xF0, 0x01, 0x07, 0x00,  0x00, 0x00, 0x00, 0x07,  0x58, 0x04, 0x00, 0x00,
   0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x39, 0x3D,  0x4F, 0x96, 0x0F, 0x00,  0x07, 0x01, 0x00, 0x00,
-  0x00, 0x09, 0xEF, 0x01,  0x07, 0x58, 0x04, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0xED, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xEE,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
+  0x00, 0x09, 0xF1, 0x01,  0x07, 0x58, 0x04, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0xEF, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xF0,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
   0x96, 0x07, 0x00, 0x07,  0x04, 0x00, 0x00, 0x00,  0x08, 0x02, 0x3D, 0x17,  0x96, 0x02, 0x00, 0x08,
-  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xED, 0x01,  0x4E, 0x96, 0x14, 0x00,  0x09, 0xF0, 0x01, 0x07,
+  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xEF, 0x01,  0x4E, 0x96, 0x14, 0x00,  0x09, 0xF2, 0x01, 0x07,
   0x00, 0x00, 0x00, 0x00,  0x07, 0x53, 0x04, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x39,
-  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xED, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0xF0,  0x01, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x0D, 0x07,  0x00, 0x00, 0x00, 0x00,
-  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0xED,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xEE, 0x01,
-  0x53, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xED, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0xF0,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x69, 0x3A, 0x17, 0x96,  0x0F, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x09,  0xF1, 0x01, 0x07, 0x53,
-  0x04, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xED, 0x01,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0xF0, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,
+  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xEF, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0xF2,  0x01, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x0D, 0x07,  0x00, 0x00, 0x00, 0x00,
+  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0xEF,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xF0, 0x01,
+  0x53, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xEF, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0xF2,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x69, 0x3A, 0x17, 0x96,  0x0F, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x09,  0xF3, 0x01, 0x07, 0x53,
+  0x04, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xEF, 0x01,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0xF2, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,
   0x00, 0x00, 0x08, 0x03,  0x3D, 0x17, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0xED, 0x01, 0x4E, 0x96,  0x14, 0x00, 0x09, 0xF2,  0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x4E,
+  0xEF, 0x01, 0x4E, 0x96,  0x14, 0x00, 0x09, 0xF4,  0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x4E,
   0x04, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x39, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xED, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xF2, 0x01, 0x4E,
+  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xEF, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xF4, 0x01, 0x4E,
   0x96, 0x09, 0x00, 0x08,  0x0D, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,
-  0x09, 0xED, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xEE, 0x01, 0x53, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xED, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xF2, 0x01, 0x4E,
+  0x09, 0xEF, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xF0, 0x01, 0x53, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xEF, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xF4, 0x01, 0x4E,
   0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x69, 0x3A,  0x17, 0x96, 0x0F, 0x00,
-  0x07, 0x01, 0x00, 0x00,  0x00, 0x09, 0xF3, 0x01,  0x07, 0x4E, 0x04, 0x00,  0x00, 0x08, 0x04, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0xED, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xF2,  0x01, 0x4E, 0x96, 0x02,
+  0x07, 0x01, 0x00, 0x00,  0x00, 0x09, 0xF5, 0x01,  0x07, 0x4E, 0x04, 0x00,  0x00, 0x08, 0x04, 0x1C,
+  0x96, 0x03, 0x00, 0x09,  0xEF, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xF4,  0x01, 0x4E, 0x96, 0x02,
   0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x04, 0x00, 0x00, 0x00,  0x08, 0x03, 0x3D, 0x17,
-  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xED, 0x01,  0x4E, 0x96, 0x14, 0x00,
-  0x09, 0xF4, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,  0x07, 0x56, 0x04, 0x00,  0x00, 0x07, 0x02, 0x00,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xEF, 0x01,  0x4E, 0x96, 0x14, 0x00,
+  0x09, 0xF6, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,  0x07, 0x56, 0x04, 0x00,  0x00, 0x07, 0x02, 0x00,
   0x00, 0x00, 0x08, 0x39,  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0xED, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xF4,  0x01, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x0D, 0x07,
-  0x00, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0xED,  0x01, 0x4E, 0x96, 0x03,
-  0x00, 0x09, 0xEE, 0x01,  0x53, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0xED, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xF4,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
+  0xEF, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xF6,  0x01, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x0D, 0x07,
+  0x00, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0xEF,  0x01, 0x4E, 0x96, 0x03,
+  0x00, 0x09, 0xF0, 0x01,  0x53, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0xEF, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xF6,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
   0x96, 0x02, 0x00, 0x08,  0x69, 0x3A, 0x17, 0x96,  0x0F, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x09,
-  0xF5, 0x01, 0x07, 0x56,  0x04, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xED, 0x01,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0xF4, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,
+  0xF7, 0x01, 0x07, 0x56,  0x04, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xEF, 0x01,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0xF6, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,
   0x00, 0x07, 0x04, 0x00,  0x00, 0x00, 0x08, 0x03,  0x3D, 0x17, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0xED, 0x01, 0x4E, 0x96,  0x14, 0x00, 0x09, 0xF6,  0x01, 0x07, 0x00, 0x00,
+  0x96, 0x03, 0x00, 0x09,  0xEF, 0x01, 0x4E, 0x96,  0x14, 0x00, 0x09, 0xF8,  0x01, 0x07, 0x00, 0x00,
   0x00, 0x00, 0x07, 0x55,  0x04, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x39, 0x3D, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xED, 0x01,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0xF6, 0x01, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x0D, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x04,
-  0x1C, 0x96, 0x03, 0x00,  0x09, 0xED, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xEE, 0x01, 0x53, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xED, 0x01,  0x4E, 0x96, 0x03, 0x00,
-  0x09, 0xF6, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x69, 0x3A,
-  0x17, 0x96, 0x0F, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x09, 0xF7, 0x01,  0x07, 0x55, 0x04, 0x00,
-  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xED, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xF6,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xEF, 0x01,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0xF8, 0x01, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x0D, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x04,
+  0x1C, 0x96, 0x03, 0x00,  0x09, 0xEF, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,  0xF0, 0x01, 0x53, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xEF, 0x01,  0x4E, 0x96, 0x03, 0x00,
+  0x09, 0xF8, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x69, 0x3A,
+  0x17, 0x96, 0x0F, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x09, 0xF9, 0x01,  0x07, 0x55, 0x04, 0x00,
+  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xEF, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xF8,
   0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x04, 0x00, 0x00, 0x00,
-  0x08, 0x03, 0x3D, 0x17,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xED, 0x01,
-  0x4E, 0x96, 0x14, 0x00,  0x09, 0xF8, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,  0x07, 0x57, 0x04, 0x00,
+  0x08, 0x03, 0x3D, 0x17,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xEF, 0x01,
+  0x4E, 0x96, 0x14, 0x00,  0x09, 0xFA, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,  0x07, 0x57, 0x04, 0x00,
   0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x39,  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0xED, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xF8,  0x01, 0x4E, 0x96, 0x09,
-  0x00, 0x08, 0x0D, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0xED,
-  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xEE, 0x01,  0x53, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0xED, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xF8,  0x01, 0x4E, 0x96, 0x02,
+  0x96, 0x03, 0x00, 0x09,  0xEF, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xFA,  0x01, 0x4E, 0x96, 0x09,
+  0x00, 0x08, 0x0D, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0xEF,
+  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xF0, 0x01,  0x53, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,
+  0x96, 0x03, 0x00, 0x09,  0xEF, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xFA,  0x01, 0x4E, 0x96, 0x02,
   0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x69, 0x3A, 0x17, 0x96,  0x0F, 0x00, 0x07, 0x01,
-  0x00, 0x00, 0x00, 0x09,  0xF9, 0x01, 0x07, 0x57,  0x04, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0xED, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xF8, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x00, 0x00, 0x00, 0x09,  0xFB, 0x01, 0x07, 0x57,  0x04, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0xEF, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xFA, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
   0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,  0x00, 0x00, 0x08, 0x03,  0x3D, 0x17, 0x96, 0x02,
-  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xED, 0x01, 0x4E, 0x96,  0x14, 0x00, 0x09, 0xFA,
+  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xEF, 0x01, 0x4E, 0x96,  0x14, 0x00, 0x09, 0xFC,
   0x01, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x4D,  0x04, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
-  0x08, 0x39, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xED, 0x01,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0xFA, 0x01, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x0D, 0x07, 0x00, 0x00,
-  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xED, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
-  0xEE, 0x01, 0x53, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xED, 0x01,
-  0x4E, 0x96, 0x03, 0x00,  0x09, 0xFA, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,
-  0x00, 0x08, 0x69, 0x3A,  0x17, 0x96, 0x0F, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x09, 0xFB, 0x01,
-  0x07, 0x4D, 0x04, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xED, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0xFA,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,
+  0x08, 0x39, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xEF, 0x01,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0xFC, 0x01, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x0D, 0x07, 0x00, 0x00,
+  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xEF, 0x01, 0x4E,  0x96, 0x03, 0x00, 0x09,
+  0xF0, 0x01, 0x53, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xEF, 0x01,
+  0x4E, 0x96, 0x03, 0x00,  0x09, 0xFC, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x02,
+  0x00, 0x08, 0x69, 0x3A,  0x17, 0x96, 0x0F, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x09, 0xFD, 0x01,
+  0x07, 0x4D, 0x04, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xEF, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0xFC,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x07, 0x00, 0x07,
   0x04, 0x00, 0x00, 0x00,  0x08, 0x03, 0x3D, 0x17,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0xED, 0x01,  0x4E, 0x96, 0x14, 0x00,  0x09, 0xFC, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,
+  0x00, 0x09, 0xEF, 0x01,  0x4E, 0x96, 0x14, 0x00,  0x09, 0xFE, 0x01, 0x07,  0x00, 0x00, 0x00, 0x00,
   0x07, 0x4F, 0x04, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x39,  0x3D, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xED, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xFC,
+  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xEF, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xFE,
   0x01, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x0D, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x04, 0x1C, 0x96,
-  0x03, 0x00, 0x09, 0xED,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xEE, 0x01,  0x53, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xED, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xFC,
+  0x03, 0x00, 0x09, 0xEF,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xF0, 0x01,  0x53, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xEF, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xFE,
   0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x69, 0x3A, 0x17, 0x96,
-  0x0F, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x09,  0xFD, 0x01, 0x07, 0x4F,  0x04, 0x00, 0x00, 0x08,
-  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xED, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xFC, 0x01, 0x4E,
+  0x0F, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x09,  0xFF, 0x01, 0x07, 0x4F,  0x04, 0x00, 0x00, 0x08,
+  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xEF, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xFE, 0x01, 0x4E,
   0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,  0x00, 0x00, 0x08, 0x03,
-  0x3D, 0x17, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xED, 0x01, 0x4E, 0x96,
-  0x14, 0x00, 0x09, 0xFE,  0x01, 0x07, 0xE8, 0x03,  0x00, 0x00, 0x07, 0x54,  0x04, 0x00, 0x00, 0x07,
+  0x3D, 0x17, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xEF, 0x01, 0x4E, 0x96,
+  0x14, 0x00, 0x09, 0x00,  0x02, 0x07, 0xE8, 0x03,  0x00, 0x00, 0x07, 0x54,  0x04, 0x00, 0x00, 0x07,
   0x02, 0x00, 0x00, 0x00,  0x08, 0x39, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0xED, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xFE, 0x01, 0x4E,  0x96, 0x09, 0x00, 0x08,
-  0x0D, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xED, 0x01, 0x4E,
-  0x96, 0x03, 0x00, 0x09,  0xEE, 0x01, 0x53, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0xED, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0xFE, 0x01, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x00, 0x09, 0xEF, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x00, 0x02, 0x4E,  0x96, 0x09, 0x00, 0x08,
+  0x0D, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x04,  0x1C, 0x96, 0x03, 0x00,  0x09, 0xEF, 0x01, 0x4E,
+  0x96, 0x03, 0x00, 0x09,  0xF0, 0x01, 0x53, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0xEF, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x00, 0x02, 0x4E,  0x96, 0x02, 0x00, 0x08,
   0x0D, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x69, 0x3A,  0x17, 0x96, 0x0F, 0x00,  0x07, 0x01, 0x00, 0x00,
-  0x00, 0x09, 0xFF, 0x01,  0x07, 0x54, 0x04, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
-  0xED, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0xFE,  0x01, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
+  0x00, 0x09, 0x01, 0x02,  0x07, 0x54, 0x04, 0x00,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,
+  0xEF, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x00,  0x02, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x4E,
   0x96, 0x07, 0x00, 0x07,  0x04, 0x00, 0x00, 0x00,  0x08, 0x03, 0x3D, 0x17,  0x96, 0x02, 0x00, 0x08,
-  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xED, 0x01,  0x4E, 0x96, 0x14, 0x00,  0x09, 0x00, 0x02, 0x07,
+  0x04, 0x1C, 0x96, 0x03,  0x00, 0x09, 0xEF, 0x01,  0x4E, 0x96, 0x14, 0x00,  0x09, 0x02, 0x02, 0x07,
   0x00, 0x00, 0x00, 0x00,  0x07, 0x54, 0x04, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x39,
-  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xED, 0x01, 0x4E, 0x96,
-  0x03, 0x00, 0x09, 0x00,  0x02, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x0D, 0x07,  0x00, 0x00, 0x00, 0x00,
-  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0xED,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xEE, 0x01,
+  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,  0x96, 0x03, 0x00, 0x09,  0xEF, 0x01, 0x4E, 0x96,
+  0x03, 0x00, 0x09, 0x02,  0x02, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x0D, 0x07,  0x00, 0x00, 0x00, 0x00,
+  0x08, 0x04, 0x1C, 0x96,  0x03, 0x00, 0x09, 0xEF,  0x01, 0x4E, 0x96, 0x03,  0x00, 0x09, 0xF0, 0x01,
   0x53, 0x4C, 0x96, 0x02,  0x00, 0x08, 0x1C, 0x4D,  0x1D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x04, 0x1C,
-  0x96, 0x03, 0x00, 0x09,  0xED, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x00,  0x02, 0x4E, 0x96, 0x02,
+  0x96, 0x03, 0x00, 0x09,  0xEF, 0x01, 0x4E, 0x96,  0x03, 0x00, 0x09, 0x02,  0x02, 0x4E, 0x96, 0x02,
   0x00, 0x08, 0x0D, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x69, 0x3A, 0x17, 0x96,  0x0F, 0x00, 0x07, 0x01,
-  0x00, 0x00, 0x00, 0x09,  0xFF, 0x01, 0x07, 0x54,  0x04, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
-  0x00, 0x09, 0xED, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x00, 0x02, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x00, 0x00, 0x00, 0x09,  0x01, 0x02, 0x07, 0x54,  0x04, 0x00, 0x00, 0x08,  0x04, 0x1C, 0x96, 0x03,
+  0x00, 0x09, 0xEF, 0x01,  0x4E, 0x96, 0x03, 0x00,  0x09, 0x02, 0x02, 0x4E,  0x96, 0x02, 0x00, 0x08,
   0x0D, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,  0x00, 0x00, 0x08, 0x03,  0x3D, 0x17, 0x96, 0x14,
-  0x00, 0x09, 0x01, 0x02,  0x07, 0x00, 0x00, 0x00,  0x00, 0x07, 0xFA, 0x00,  0x00, 0x00, 0x07, 0x02,
-  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x1D, 0x96,  0x14, 0x00, 0x09, 0x02,  0x02, 0x07, 0x01, 0x00,
+  0x00, 0x09, 0x03, 0x02,  0x07, 0x00, 0x00, 0x00,  0x00, 0x07, 0xFA, 0x00,  0x00, 0x00, 0x07, 0x02,
+  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x1D, 0x96,  0x14, 0x00, 0x09, 0x04,  0x02, 0x07, 0x01, 0x00,
   0x00, 0x00, 0x07, 0xFA,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x1D,
-  0x96, 0x14, 0x00, 0x09,  0x03, 0x02, 0x07, 0x02,  0x00, 0x00, 0x00, 0x07,  0xFA, 0x00, 0x00, 0x00,
-  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x1D, 0x96, 0x06, 0x00,  0x09, 0x04, 0x02, 0x09,
-  0x02, 0x02, 0x1C, 0x1D,  0x96, 0x14, 0x00, 0x09,  0x05, 0x02, 0x07, 0x01,  0x00, 0x00, 0x00, 0x07,
+  0x96, 0x14, 0x00, 0x09,  0x05, 0x02, 0x07, 0x02,  0x00, 0x00, 0x00, 0x07,  0xFA, 0x00, 0x00, 0x00,
+  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x1D, 0x96, 0x06, 0x00,  0x09, 0x06, 0x02, 0x09,
+  0x04, 0x02, 0x1C, 0x1D,  0x96, 0x14, 0x00, 0x09,  0x07, 0x02, 0x07, 0x01,  0x00, 0x00, 0x00, 0x07,
   0xFD, 0x03, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x1D, 0x96, 0x14, 0x00,
-  0x09, 0x06, 0x02, 0x07,  0x04, 0x00, 0x00, 0x00,  0x07, 0x64, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,
-  0x00, 0x00, 0x08, 0x01,  0x3D, 0x1D, 0x96, 0x14,  0x00, 0x09, 0x07, 0x02,  0x07, 0x00, 0x00, 0x00,
+  0x09, 0x08, 0x02, 0x07,  0x04, 0x00, 0x00, 0x00,  0x07, 0x64, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,
+  0x00, 0x00, 0x08, 0x01,  0x3D, 0x1D, 0x96, 0x14,  0x00, 0x09, 0x09, 0x02,  0x07, 0x00, 0x00, 0x00,
   0x00, 0x07, 0x09, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x1D, 0x96,
   0x03, 0x00, 0x08, 0x1C,  0x02, 0x1D, 0x96, 0x09,  0x00, 0x07, 0x00, 0x10,  0x00, 0x00, 0x08, 0x04,
   0x08, 0x0A, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x96,
commit d7e7cb68ea597415ccc5d035152f09c35dfa81e1
Author: Benjamin Otte <otte at gnome.org>
Date:   Sat Jan 19 22:12:38 2008 +0100

    rework security architecture and initialization
    
    Every sandbox has its own _global object, so now there is a SwfdecSandbox object
    which gets set to the current sandbox whenever we execute code. Otherwise the
    _global object is NULL.
    Chages required:
    - Make it possible to swfdec_as_context_startup() multiple times
    - Make startup version independant
    - Get rid of security framework, use the global object (the current sandbox)

diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index aa2c1c1..4990956 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -77,7 +77,6 @@ libswfdec_source_files = \
 	swfdec_file_reference_list.c \
 	swfdec_filter.c \
 	swfdec_filter_as.c \
-	swfdec_flash_security.c \
 	swfdec_flv_decoder.c \
 	swfdec_font.c \
 	swfdec_function_list.c \
@@ -117,9 +116,8 @@ libswfdec_source_files = \
 	swfdec_rectangle.c \
 	swfdec_resource.c \
 	swfdec_ringbuffer.c \
+	swfdec_sandbox.c \
 	swfdec_script.c \
-	swfdec_security.c \
-	swfdec_security_allow.c \
 	swfdec_selection.c \
 	swfdec_shape.c \
 	swfdec_shape_parser.c \
@@ -239,7 +237,6 @@ noinst_HEADERS = \
 	swfdec_text_field_movie.h \
 	swfdec_event.h \
 	swfdec_filter.h \
-	swfdec_flash_security.h \
 	swfdec_flv_decoder.h \
 	swfdec_font.h \
 	swfdec_function_list.h \
@@ -267,9 +264,8 @@ noinst_HEADERS = \
 	swfdec_rect.h \
 	swfdec_resource.h \
 	swfdec_ringbuffer.h \
+	swfdec_sandbox.h \
 	swfdec_script_internal.h \
-	swfdec_security.h \
-	swfdec_security_allow.h \
 	swfdec_shape.h \
 	swfdec_shape_parser.h \
 	swfdec_sound.h \
diff --git a/libswfdec/swfdec_as_context.c b/libswfdec/swfdec_as_context.c
index 1c6b357..f572239 100644
--- a/libswfdec/swfdec_as_context.c
+++ b/libswfdec/swfdec_as_context.c
@@ -561,7 +561,6 @@ swfdec_as_context_init (SwfdecAsContext *context)
     g_hash_table_insert (context->strings, (char *) s + 1, (char *) s);
   }
   g_assert (*s == 0);
-  context->global = swfdec_as_object_new_empty (context);
   context->rand = g_rand_new ();
   g_get_current_time (&context->start_time);
 }
@@ -779,6 +778,7 @@ swfdec_as_context_run (SwfdecAsContext *context)
   gboolean check_block; /* some opcodes avoid a scope check */
 
   g_return_if_fail (SWFDEC_IS_AS_CONTEXT (context));
+
   if (context->frame == NULL || context->state == SWFDEC_AS_CONTEXT_ABORTED)
     return;
 
@@ -793,6 +793,7 @@ swfdec_as_context_run (SwfdecAsContext *context)
   context->last_frame = context->frame->next;
   original_version = context->version;
 start:
+  g_return_if_fail (context->global); /* check here because of swfdec_sandbox_(un)use() */
   if (!swfdec_as_context_check_continue (context))
     goto error;
   /* setup data */
@@ -804,12 +805,6 @@ start:
     swfdec_as_context_abort (context, "Stack overflow");
     goto error;
   }
-  /* if security is NULL, the function may not be called */
-  if (frame->security == NULL) {
-    SWFDEC_WARNING ("insufficient right to call %s", frame->function_name);
-    swfdec_as_frame_return (frame, NULL);
-    goto start;
-  }
   if (SWFDEC_IS_AS_NATIVE_FUNCTION (frame->function)) {
     SwfdecAsNativeFunction *native = SWFDEC_AS_NATIVE_FUNCTION (frame->function);
     SwfdecAsValue rval = { 0, };
@@ -1344,7 +1339,7 @@ swfdec_as_context_parseFloat (SwfdecAsContext *cx, SwfdecAsObject *object,
 }
 
 static void
-swfdec_as_context_init_global (SwfdecAsContext *context, guint version)
+swfdec_as_context_init_global (SwfdecAsContext *context)
 {
   SwfdecAsValue val;
 
@@ -1388,25 +1383,26 @@ swfdec_as_context_run_init_script (SwfdecAsContext *context, const guint8 *data,
  * functions and properties are available in the context.
  **/
 void
-swfdec_as_context_startup (SwfdecAsContext *context, guint version)
+swfdec_as_context_startup (SwfdecAsContext *context)
 {
   g_return_if_fail (SWFDEC_IS_AS_CONTEXT (context));
   g_return_if_fail (context->state == SWFDEC_AS_CONTEXT_NEW);
 
   if (!swfdec_as_stack_push_segment (context))
     return;
-  context->version = version;
+  if (context->global == NULL)
+    context->global = swfdec_as_object_new_empty (context);
   /* init the two internal functions */
   /* FIXME: remove them for normal contexts? */
-  swfdec_player_preinit_global (context, version);
+  swfdec_player_preinit_global (context);
   /* get the necessary objects up to define objects and functions sanely */
-  swfdec_as_function_init_context (context, version);
-  swfdec_as_object_init_context (context, version);
+  swfdec_as_function_init_context (context);
+  swfdec_as_object_init_context (context);
   /* define the global object and other important ones */
-  swfdec_as_context_init_global (context, version);
+  swfdec_as_context_init_global (context);
 
   /* run init script */
-  swfdec_as_context_run_init_script (context, swfdec_as_initialize, sizeof (swfdec_as_initialize), context->version);
+  swfdec_as_context_run_init_script (context, swfdec_as_initialize, sizeof (swfdec_as_initialize), 8);
 
   if (context->state == SWFDEC_AS_CONTEXT_NEW)
     context->state = SWFDEC_AS_CONTEXT_RUNNING;
diff --git a/libswfdec/swfdec_as_context.h b/libswfdec/swfdec_as_context.h
index df09fa2..d5ef066 100644
--- a/libswfdec/swfdec_as_context.h
+++ b/libswfdec/swfdec_as_context.h
@@ -45,7 +45,8 @@ struct _SwfdecAsContext {
   GObject		object;
 
   SwfdecAsContextState	state;		/* our current state */
-  SwfdecAsObject *	global;		/* the global object */
+  SwfdecAsObject *	global;		/* the global object or NULL if not initialized yet. 
+					   In SwfdecPlayer is NULL unless a sandbox is in use */
   GRand *		rand;		/* random number generator */
   GTimeVal		start_time;   	/* time this movie started (for GetTime action) */
 
@@ -96,8 +97,7 @@ struct _SwfdecAsContextClass {
 
 GType		swfdec_as_context_get_type	(void);
 
-void		swfdec_as_context_startup     	(SwfdecAsContext *	context,
-						 guint			version);
+void		swfdec_as_context_startup     	(SwfdecAsContext *	context);
 
 gboolean	swfdec_as_context_is_aborted	(SwfdecAsContext *	context);
 gboolean	swfdec_as_context_is_constructing
diff --git a/libswfdec/swfdec_as_frame.c b/libswfdec/swfdec_as_frame.c
index 16546a5..39888b6 100644
--- a/libswfdec/swfdec_as_frame.c
+++ b/libswfdec/swfdec_as_frame.c
@@ -29,7 +29,6 @@
 #include "swfdec_as_strings.h"
 #include "swfdec_as_super.h"
 #include "swfdec_debug.h"
-#include "swfdec_security_allow.h"
 
 /**
  * SECTION:SwfdecAsFrame
@@ -278,10 +277,6 @@ swfdec_as_frame_dispose (GObject *object)
 
   /* clean up */
   g_slice_free1 (sizeof (SwfdecAsValue) * frame->n_registers, frame->registers);
-  if (frame->security) {
-    g_object_unref (frame->security);
-    frame->security = NULL;
-  }
   if (frame->constant_pool) {
     swfdec_constant_pool_free (frame->constant_pool);
     frame->constant_pool = NULL;
@@ -385,11 +380,6 @@ swfdec_as_frame_load (SwfdecAsFrame *frame)
 {
   SwfdecAsContext *context = SWFDEC_AS_OBJECT (frame)->context;
 
-  if (context->frame) {
-    frame->security = g_object_ref (context->frame->security);
-  } else {
-    frame->security = swfdec_security_allow_new ();
-  }
   frame->stack_begin = context->cur;
   context->base = frame->stack_begin;
   frame->next = context->frame;
@@ -903,22 +893,3 @@ swfdec_as_frame_get_this (SwfdecAsFrame *frame)
   return frame->thisp;
 }
 
-/**
- * swfdec_as_frame_set_security:
- * @frame: the frame to be executed
- * @guard: the security to be used in this frame
- *
- * Sets the security to be used in this frame to @guard.
- **/
-void
-swfdec_as_frame_set_security (SwfdecAsFrame *frame, SwfdecSecurity *guard)
-{
-  g_return_if_fail (SWFDEC_IS_AS_FRAME (frame));
-  g_return_if_fail (SWFDEC_IS_SECURITY (guard));
-
-  if (frame->security)
-    g_object_unref (frame->security);
-
-  frame->security = g_object_ref (guard);
-}
-
diff --git a/libswfdec/swfdec_as_frame_internal.h b/libswfdec/swfdec_as_frame_internal.h
index d50a9ce..866d1fa 100644
--- a/libswfdec/swfdec_as_frame_internal.h
+++ b/libswfdec/swfdec_as_frame_internal.h
@@ -22,7 +22,6 @@
 
 #include <libswfdec/swfdec_as_types.h>
 #include <libswfdec/swfdec_script_internal.h>
-#include <libswfdec/swfdec_security.h>
 
 G_BEGIN_DECLS
 
@@ -39,7 +38,6 @@ struct _SwfdecAsFrame {
   SwfdecAsValue *	return_value;	/* pointer to where to store the return value */
   guint			argc;		/* number of arguments */
   const SwfdecAsValue *	argv;		/* arguments or %NULL if taken from stack */
-  SwfdecSecurity *	security;	/* security for this frame or %NULL if not allowed to call */
   /* debugging */
   const char *		function_name;	/* name of function */
   /* script execution */
@@ -70,8 +68,6 @@ SwfdecAsFrame *	swfdec_as_frame_new_native	(SwfdecAsContext *	context);
 void		swfdec_as_frame_return		(SwfdecAsFrame *	frame,
 						 SwfdecAsValue *	return_value);
 
-void		swfdec_as_frame_set_security	(SwfdecAsFrame *	frame,
-						 SwfdecSecurity *	guard);
 void		swfdec_as_frame_set_this	(SwfdecAsFrame *	frame,
 						 SwfdecAsObject *	thisp);
 void		swfdec_as_frame_preload		(SwfdecAsFrame *	frame);
diff --git a/libswfdec/swfdec_as_function.c b/libswfdec/swfdec_as_function.c
index 5dce988..cc0e975 100644
--- a/libswfdec/swfdec_as_function.c
+++ b/libswfdec/swfdec_as_function.c
@@ -121,8 +121,6 @@ swfdec_as_function_call_no_preload (SwfdecAsFunction *function,
    * user of that function expects success, but super may fail here */
   if (frame == NULL)
     return NULL;
-  if (function->priv)
-    swfdec_as_frame_set_security (frame, function->priv);
   /* second check especially for super object */
   if (thisp != NULL && frame->thisp == NULL) {
     swfdec_as_frame_set_this (frame, swfdec_as_object_resolve (thisp));
@@ -248,7 +246,7 @@ swfdec_as_function_apply (SwfdecAsContext *cx, SwfdecAsObject *object,
 }
 
 void
-swfdec_as_function_init_context (SwfdecAsContext *context, guint version)
+swfdec_as_function_init_context (SwfdecAsContext *context)
 {
   SwfdecAsObject *function, *proto;
   SwfdecAsValue val;
@@ -259,11 +257,7 @@ swfdec_as_function_init_context (SwfdecAsContext *context, guint version)
       SWFDEC_AS_STR_Function, 0, NULL, 0));
   if (!function)
     return;
-  if (version < 6) {
-    /* deleting it later on is easier than duplicating swfdec_as_object_add_function() */
-    swfdec_as_object_unset_variable_flags (context->global, SWFDEC_AS_STR_Function, SWFDEC_AS_VARIABLE_PERMANENT);
-    swfdec_as_object_delete_variable (context->global, SWFDEC_AS_STR_Function);
-  }
+  swfdec_as_object_set_variable_flags (context->global, SWFDEC_AS_STR_Function, SWFDEC_AS_VARIABLE_VERSION_6_UP);
   context->Function = function;
   SWFDEC_AS_VALUE_SET_OBJECT (&val, function);
   swfdec_as_object_set_variable_and_flags (function, SWFDEC_AS_STR_constructor,
@@ -283,21 +277,3 @@ swfdec_as_function_init_context (SwfdecAsContext *context, guint version)
       &val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
 }
 
-/**
- * swfdec_as_function_set_security:
- * @fun: a #SwfdecFunction
- * @sec: the security guarding calls to this function
- *
- * Sets the security object guarding execution of this function. This function
- * may only be called once per #SwfdecAsFunction.
- **/
-void
-swfdec_as_function_set_security (SwfdecAsFunction *fun, SwfdecSecurity *sec)
-{
-  g_return_if_fail (SWFDEC_IS_AS_FUNCTION (fun));
-  g_return_if_fail (SWFDEC_IS_SECURITY (sec));
-  g_return_if_fail (fun->priv == NULL);
-
-  fun->priv = g_object_ref (sec);
-}
-
diff --git a/libswfdec/swfdec_as_function.h b/libswfdec/swfdec_as_function.h
index ab2c364..534aad5 100644
--- a/libswfdec/swfdec_as_function.h
+++ b/libswfdec/swfdec_as_function.h
@@ -39,8 +39,6 @@ typedef struct _SwfdecAsFunctionClass SwfdecAsFunctionClass;
 struct _SwfdecAsFunction {
   /*< private >*/
   SwfdecAsObject	object;
-
-  gpointer		priv;		/* currently only contains the security context or NULL for any */
 };
 
 struct _SwfdecAsFunctionClass {
diff --git a/libswfdec/swfdec_as_internal.h b/libswfdec/swfdec_as_internal.h
index 7305f92..30a556c 100644
--- a/libswfdec/swfdec_as_internal.h
+++ b/libswfdec/swfdec_as_internal.h
@@ -22,7 +22,6 @@
 
 #include <libswfdec/swfdec_as_object.h>
 #include <libswfdec/swfdec_as_types.h>
-#include <libswfdec/swfdec_security.h>
 
 G_BEGIN_DECLS
 
@@ -36,10 +35,7 @@ G_BEGIN_DECLS
 #define SWFDEC_AS_OBJECT_PROTOTYPE_RECURSION_LIMIT 256
 
 void		swfdec_as_function_set_constructor	(SwfdecAsFunction *	fun);
-void		swfdec_as_function_set_security	  	(SwfdecAsFunction *	fun,
-							 SwfdecSecurity *	sec);
-void		swfdec_as_function_init_context		(SwfdecAsContext *	context,
-							 guint			version);
+void		swfdec_as_function_init_context		(SwfdecAsContext *	context);
 SwfdecAsFrame *	swfdec_as_function_call_no_preload	(SwfdecAsFunction *	function, 
 							 SwfdecAsObject *	thisp,
 							 guint			n_args,
@@ -58,13 +54,6 @@ typedef SwfdecAsVariableForeach SwfdecAsVariableForeachRemove;
 typedef const char *(* SwfdecAsVariableForeachRename) (SwfdecAsObject *object, 
     const char *variable, SwfdecAsValue *value, guint flags, gpointer data);
 
-void		swfdec_as_object_call_with_security
-						(SwfdecAsObject *	object,
-						 SwfdecSecurity *	sec,
-						 const char *		name,
-						 guint			argc,
-						 SwfdecAsValue *	argv,
-						 SwfdecAsValue *	return_value);
 SwfdecAsValue *	swfdec_as_object_peek_variable	(SwfdecAsObject *       object,
 						 const char *		name);
 void		swfdec_as_object_collect	(SwfdecAsObject *     	object);
@@ -75,15 +64,10 @@ void		swfdec_as_object_foreach_rename	(SwfdecAsObject *       object,
 						 SwfdecAsVariableForeachRename func,
 						 gpointer		data);
 
-void		swfdec_as_object_init_context	(SwfdecAsContext *	context,
-					      	 guint			version);
+void		swfdec_as_object_init_context	(SwfdecAsContext *	context);
 void		swfdec_as_object_decode		(SwfdecAsObject *	obj,
 						 const char *		str);
 SwfdecAsObject * swfdec_as_object_get_prototype (SwfdecAsObject *	object);
-void		swfdec_as_object_run_with_security 
-						(SwfdecAsObject *	object,
-						 SwfdecScript *		script,
-						 SwfdecSecurity *	sec);
 void		swfdec_as_object_add_native_variable (SwfdecAsObject *	object,
 						 const char *		variable,
 						 SwfdecAsNative		get,
diff --git a/libswfdec/swfdec_as_object.c b/libswfdec/swfdec_as_object.c
index 854681d..babcd27 100644
--- a/libswfdec/swfdec_as_object.c
+++ b/libswfdec/swfdec_as_object.c
@@ -34,7 +34,6 @@
 #include "swfdec_as_super.h"
 #include "swfdec_debug.h"
 #include "swfdec_movie.h"
-#include "swfdec_security_allow.h"
 
 /**
  * SECTION:SwfdecAsObject
@@ -1180,22 +1179,26 @@ swfdec_as_object_add_constructor (SwfdecAsObject *object, const char *name, GTyp
   return function;
 }
 
+/**
+ * swfdec_as_object_run:
+ * @object: a #SwfdecAsObject
+ * @script: script to execute
+ *
+ * Executes the given @script with @object as this pointer.
+ **/
 void
-swfdec_as_object_run_with_security (SwfdecAsObject *object, SwfdecScript *script,
-    SwfdecSecurity *sec)
+swfdec_as_object_run (SwfdecAsObject *object, SwfdecScript *script)
 {
   SwfdecAsContext *context;
   SwfdecAsFrame *frame;
 
   g_return_if_fail (SWFDEC_IS_AS_OBJECT (object));
   g_return_if_fail (script != NULL);
-  g_return_if_fail (SWFDEC_IS_SECURITY (sec));
 
   context = object->context;
   frame = swfdec_as_frame_new (context, script);
   if (frame == NULL)
     return;
-  swfdec_as_frame_set_security (frame, sec);
   swfdec_as_frame_set_this (frame, object);
   swfdec_as_frame_preload (frame);
   swfdec_as_context_run (context);
@@ -1203,54 +1206,6 @@ swfdec_as_object_run_with_security (SwfdecAsObject *object, SwfdecScript *script
 }
 
 /**
- * swfdec_as_object_run:
- * @object: a #SwfdecAsObject
- * @script: script to execute
- *
- * Executes the given @script with @object as this pointer.
- **/
-void
-swfdec_as_object_run (SwfdecAsObject *object, SwfdecScript *script)
-{
-  SwfdecSecurity *sec;
-
-  g_return_if_fail (SWFDEC_IS_AS_OBJECT (object));
-  g_return_if_fail (script != NULL);
-
-  sec = swfdec_security_allow_new ();
-  swfdec_as_object_run_with_security (object, script, sec);
-  g_object_unref (sec);
-}
-
-void
-swfdec_as_object_call_with_security (SwfdecAsObject *object, SwfdecSecurity *sec,
-    const char *name, guint argc, SwfdecAsValue *argv, SwfdecAsValue *return_value) 
-{
-  static SwfdecAsValue tmp; /* ignored */
-  SwfdecAsFunction *fun;
-
-  g_return_if_fail (SWFDEC_IS_AS_OBJECT (object));
-  g_return_if_fail (SWFDEC_IS_SECURITY (sec));
-  g_return_if_fail (name != NULL);
-  g_return_if_fail (argc == 0 || argv != NULL);
-  g_return_if_fail (argc == 0 || argv != NULL);
-
-  if (return_value)
-    SWFDEC_AS_VALUE_SET_UNDEFINED (return_value);
-  swfdec_as_object_get_variable (object, name, &tmp);
-  if (!SWFDEC_AS_VALUE_IS_OBJECT (&tmp))
-    return;
-  fun = (SwfdecAsFunction *) SWFDEC_AS_VALUE_GET_OBJECT (&tmp);
-  if (!SWFDEC_IS_AS_FUNCTION (fun))
-    return;
-  swfdec_as_function_call (fun, object, argc, argv, return_value ? return_value : &tmp);
-  if (swfdec_as_context_is_aborted (object->context))
-    return;
-  swfdec_as_frame_set_security (object->context->frame, sec);
-  swfdec_as_context_run (object->context);
-}
-
-/**
  * swfdec_as_object_call:
  * @object: a #SwfdecAsObject
  * @name: garbage-collected string naming the function to call. 
@@ -1269,15 +1224,25 @@ void
 swfdec_as_object_call (SwfdecAsObject *object, const char *name, guint argc, 
     SwfdecAsValue *argv, SwfdecAsValue *return_value)
 {
-  SwfdecSecurity *sec;
+  SwfdecAsValue tmp;
+  SwfdecAsFunction *fun;
 
   g_return_if_fail (SWFDEC_IS_AS_OBJECT (object));
   g_return_if_fail (name != NULL);
   g_return_if_fail (argc == 0 || argv != NULL);
 
-  sec = swfdec_security_allow_new ();
-  swfdec_as_object_call_with_security (object, sec, name, argc, argv, return_value);
-  g_object_unref (sec);
+  if (return_value)
+    SWFDEC_AS_VALUE_SET_UNDEFINED (return_value);
+  swfdec_as_object_get_variable (object, name, &tmp);
+  if (!SWFDEC_AS_VALUE_IS_OBJECT (&tmp))
+    return;
+  fun = (SwfdecAsFunction *) SWFDEC_AS_VALUE_GET_OBJECT (&tmp);
+  if (!SWFDEC_IS_AS_FUNCTION (fun))
+    return;
+  swfdec_as_function_call (fun, object, argc, argv, return_value ? return_value : &tmp);
+  if (swfdec_as_context_is_aborted (object->context))
+    return;
+  swfdec_as_context_run (object->context);
 }
 
 /**
@@ -1714,7 +1679,7 @@ swfdec_as_object_decode (SwfdecAsObject *object, const char *str)
 }
 
 void
-swfdec_as_object_init_context (SwfdecAsContext *context, guint version)
+swfdec_as_object_init_context (SwfdecAsContext *context)
 {
   SwfdecAsValue val;
   SwfdecAsObject *object, *proto;
diff --git a/libswfdec/swfdec_event.c b/libswfdec/swfdec_event.c
index 585a5e0..6af665d 100644
--- a/libswfdec/swfdec_event.c
+++ b/libswfdec/swfdec_event.c
@@ -171,13 +171,12 @@ swfdec_event_list_parse (SwfdecEventList *list, SwfdecBits *bits, int version,
 
 void
 swfdec_event_list_execute (SwfdecEventList *list, SwfdecAsObject *object, 
-    SwfdecSecurity *sec, guint condition, guint8 key)
+    guint condition, guint8 key)
 {
   guint i;
 
   g_return_if_fail (list != NULL);
   g_return_if_fail (SWFDEC_IS_AS_OBJECT (object));
-  g_return_if_fail (SWFDEC_IS_SECURITY (sec));
   g_return_if_fail (condition < N_CONDITIONS);
 
   condition = (1 << condition);
@@ -189,7 +188,7 @@ swfdec_event_list_execute (SwfdecEventList *list, SwfdecAsObject *object,
     if ((event->conditions & condition) &&
 	event->key == key) {
       SWFDEC_LOG ("executing script for event %u on scriptable %p", condition, object);
-      swfdec_as_object_run_with_security (object, event->script, sec);
+      swfdec_as_object_run (object, event->script);
     }
   }
   swfdec_event_list_free (list);
diff --git a/libswfdec/swfdec_event.h b/libswfdec/swfdec_event.h
index 7ac6857..4b1ba40 100644
--- a/libswfdec/swfdec_event.h
+++ b/libswfdec/swfdec_event.h
@@ -20,7 +20,6 @@
 #include <libswfdec/swfdec_bits.h>
 #include <libswfdec/swfdec_as_types.h>
 #include <libswfdec/swfdec_player.h>
-#include <libswfdec/swfdec_security.h>
 #include <libswfdec/swfdec_types.h>
 
 #ifndef _SWFDEC_EVENT_H_
@@ -64,7 +63,6 @@ void			swfdec_event_list_parse		(SwfdecEventList *    list,
 							 const char *	      description);
 void			swfdec_event_list_execute	(SwfdecEventList *    list,
 							 SwfdecAsObject *     object,
-							 SwfdecSecurity *     sec,
 							 guint		      condition,
 							 guint8		      key);
 gboolean		swfdec_event_list_has_conditions(SwfdecEventList *    list,
diff --git a/libswfdec/swfdec_flash_security.c b/libswfdec/swfdec_flash_security.c
deleted file mode 100644
index ae7fce0..0000000
--- a/libswfdec/swfdec_flash_security.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include "swfdec_flash_security.h"
-#include "swfdec_debug.h"
-#include "swfdec_security_allow.h"
-
-
-G_DEFINE_TYPE (SwfdecFlashSecurity, swfdec_flash_security, SWFDEC_TYPE_SECURITY)
-
-static gboolean
-swfdec_flash_security_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
-{
-  if (guard == key) {
-    return TRUE;
-  } else if (SWFDEC_IS_SECURITY_ALLOW (key)) {
-    /* This only happens when calling functions (I hope) */
-    return TRUE;
-  } else if (SWFDEC_IS_FLASH_SECURITY (key)) {
-    SWFDEC_FIXME ("implement security checking");
-    return TRUE;
-  } else {
-    SWFDEC_ERROR ("unknown security %s, denying access", G_OBJECT_TYPE_NAME (key));
-    return FALSE;
-  }
-}
-
-static void
-swfdec_flash_security_dispose (GObject *object)
-{
-  SwfdecFlashSecurity *sec = SWFDEC_FLASH_SECURITY (object);
-
-  if (sec->url) {
-    swfdec_url_free (sec->url);
-    sec->url = NULL;
-  }
-  sec->sandbox = SWFDEC_SANDBOX_NONE;
-
-  G_OBJECT_CLASS (swfdec_flash_security_parent_class)->dispose (object);
-}
-
-static void
-swfdec_flash_security_class_init (SwfdecFlashSecurityClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  SwfdecSecurityClass *security_class = SWFDEC_SECURITY_CLASS (klass);
-
-  object_class->dispose = swfdec_flash_security_dispose;
-
-  security_class->allow = swfdec_flash_security_allow;
-}
-
-static void
-swfdec_flash_security_init (SwfdecFlashSecurity *sec)
-{
-}
-
-void
-swfdec_flash_security_set_url (SwfdecFlashSecurity *sec, const SwfdecURL *url)
-{
-  g_return_if_fail (SWFDEC_IS_FLASH_SECURITY (sec));
-  g_return_if_fail (sec->url == NULL);
-  g_return_if_fail (url != NULL);
-
-  g_assert (sec->sandbox == SWFDEC_SANDBOX_NONE);
-  sec->url = swfdec_url_copy (url);
-  if (swfdec_url_is_local (url)) {
-    sec->sandbox = SWFDEC_SANDBOX_LOCAL_FILE;
-  } else {
-    sec->sandbox = SWFDEC_SANDBOX_REMOTE;
-  }
-}
-
diff --git a/libswfdec/swfdec_flash_security.h b/libswfdec/swfdec_flash_security.h
deleted file mode 100644
index 3af3442..0000000
--- a/libswfdec/swfdec_flash_security.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifndef _SWFDEC_FLASH_SECURITY_H_
-#define _SWFDEC_FLASH_SECURITY_H_
-
-#include <libswfdec/swfdec_security.h>
-#include <libswfdec/swfdec_player.h>
-
-G_BEGIN_DECLS
-
-typedef struct _SwfdecFlashSecurity SwfdecFlashSecurity;
-typedef struct _SwfdecFlashSecurityClass SwfdecFlashSecurityClass;
-
-typedef enum {
-  SWFDEC_SANDBOX_NONE,
-  SWFDEC_SANDBOX_REMOTE,
-  SWFDEC_SANDBOX_LOCAL_FILE,
-  SWFDEC_SANDBOX_LOCAL_NETWORK,
-  SWFDEC_SANDBOX_LOCAL_TRUSTED
-} SwfdecSandboxType;
-
-#define SWFDEC_TYPE_FLASH_SECURITY                    (swfdec_flash_security_get_type())
-#define SWFDEC_IS_FLASH_SECURITY(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_FLASH_SECURITY))
-#define SWFDEC_IS_FLASH_SECURITY_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_FLASH_SECURITY))
-#define SWFDEC_FLASH_SECURITY(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_FLASH_SECURITY, SwfdecFlashSecurity))
-#define SWFDEC_FLASH_SECURITY_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_FLASH_SECURITY, SwfdecFlashSecurityClass))
-#define SWFDEC_FLASH_SECURITY_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_FLASH_SECURITY, SwfdecFlashSecurityClass))
-
-struct _SwfdecFlashSecurity
-{
-  SwfdecSecurity	security;
-
-  SwfdecPlayer		*player;
-  SwfdecSandboxType	sandbox;	/* sandbox we are operating in */
-  SwfdecURL *		url;		/* url this security was loaded from */
-};
-
-struct _SwfdecFlashSecurityClass
-{
-  SwfdecSecurityClass 	security_class;
-};
-
-GType			swfdec_flash_security_get_type		(void);
-
-void			swfdec_flash_security_set_url		(SwfdecFlashSecurity *	sec,
-								 const SwfdecURL *	url);
-
-
-G_END_DECLS
-#endif
diff --git a/libswfdec/swfdec_initialize.as b/libswfdec/swfdec_initialize.as
index 3302085..5444168 100644
--- a/libswfdec/swfdec_initialize.as
+++ b/libswfdec/swfdec_initialize.as
@@ -602,6 +602,11 @@ ASSetNative (TextField.StyleSheet.prototype, 113, "7update,7parseCSSInternal,7pa
 ASSetPropFlags (TextField.StyleSheet.prototype, null, 1027);
 ASSetPropFlags (TextField, "StyleSheet", 1027);
 
+/* Video */
+
+ASSetNative(Video.prototype, 667, "6attachVideo,6clear", 1);
+ASSetPropFlags(Video.prototype, null, 3);
+
 /* Accessibility */
 
 Accessibility = {};
diff --git a/libswfdec/swfdec_internal.h b/libswfdec/swfdec_internal.h
index a143330..79d49c1 100644
--- a/libswfdec/swfdec_internal.h
+++ b/libswfdec/swfdec_internal.h
@@ -59,14 +59,10 @@ SwfdecVideoDecoder *	swfdec_video_decoder_gst_new		(guint			format);
 
 /* AS engine setup code */
 
-void			swfdec_player_preinit_global		(SwfdecAsContext *	context,
-								 guint			version);
-void			swfdec_net_stream_init_context		(SwfdecPlayer *		player,
-								 guint			version);
-void			swfdec_sprite_movie_init_context	(SwfdecPlayer *		player,
-								 guint			version);
-void			swfdec_video_movie_init_context		(SwfdecPlayer *		player,
-								 guint			version);
+void			swfdec_player_preinit_global		(SwfdecAsContext *	context);
+void			swfdec_net_stream_init_context		(SwfdecPlayer *		player);
+void			swfdec_sprite_movie_init_context	(SwfdecPlayer *		player);
+void			swfdec_video_movie_init_context		(SwfdecPlayer *		player);
 
 G_END_DECLS
 #endif
diff --git a/libswfdec/swfdec_interval.c b/libswfdec/swfdec_interval.c
index c4caa21..88a2ca4 100644
--- a/libswfdec/swfdec_interval.c
+++ b/libswfdec/swfdec_interval.c
@@ -42,7 +42,7 @@ swfdec_interval_mark (SwfdecAsObject *object)
   SwfdecInterval *interval = SWFDEC_INTERVAL (object);
 
   swfdec_as_object_mark (interval->object);
-  swfdec_resource_mark (interval->resource);
+  swfdec_as_object_mark (SWFDEC_AS_OBJECT (interval->sandbox));
   if (interval->fun_name)
     swfdec_as_string_mark (interval->fun_name);
   for (i = 0; i < interval->n_args; i++) {
@@ -64,10 +64,6 @@ swfdec_interval_dispose (GObject *object)
     swfdec_player_remove_timeout (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (object)->context), &interval->timeout);
     interval->timeout.callback = NULL;
   }
-  if (interval->resource) {
-    g_object_unref (interval->resource);
-    interval->resource = NULL;
-  }
 
   G_OBJECT_CLASS (swfdec_interval_parent_class)->dispose (object);
 }
@@ -104,14 +100,16 @@ swfdec_interval_trigger (SwfdecTimeout *timeout)
     player->priv->intervals = g_list_remove (player->priv->intervals, interval);
     interval->timeout.callback = NULL;
   }
+  swfdec_sandbox_use (interval->sandbox);
   if (interval->fun_name) {
-    swfdec_as_object_call_with_security (interval->object, SWFDEC_SECURITY (interval->resource),
+    swfdec_as_object_call (interval->object, 
 	interval->fun_name, interval->n_args, interval->args, &ret);
   } else {
     swfdec_as_function_call (SWFDEC_AS_FUNCTION (interval->object), NULL, 
 	interval->n_args, interval->args, &ret);
     swfdec_as_context_run (context);
   }
+  swfdec_sandbox_unuse (interval->sandbox);
 }
 
 static guint
@@ -131,7 +129,7 @@ swfdec_interval_new (SwfdecPlayer *player, guint msecs, gboolean repeat,
   swfdec_as_object_add (SWFDEC_AS_OBJECT (interval), context, size);
 
   interval->id = ++player->priv->interval_id;
-  interval->resource = SWFDEC_RESOURCE (g_object_ref (context->frame->security));
+  interval->sandbox = SWFDEC_SANDBOX (context->global);
   interval->msecs = msecs;
   interval->repeat = repeat;
   interval->object = object;
diff --git a/libswfdec/swfdec_interval.h b/libswfdec/swfdec_interval.h
index 40a61cc..48941bf 100644
--- a/libswfdec/swfdec_interval.h
+++ b/libswfdec/swfdec_interval.h
@@ -23,6 +23,7 @@
 #include <libswfdec/swfdec_as_object.h>
 #include <libswfdec/swfdec_as_types.h>
 #include <libswfdec/swfdec_player_internal.h>
+#include <libswfdec/swfdec_sandbox.h>
 
 G_BEGIN_DECLS
 
@@ -40,7 +41,7 @@ struct _SwfdecInterval {
   SwfdecAsObject	asobject;
 
   SwfdecTimeout		timeout;
-  SwfdecResource *	resource;	/* resouce that initiated this interval */
+  SwfdecSandbox *	sandbox;	/* sandbox we run the script in */
   guint			id;		/* id this interval is identified with */
   guint			msecs;		/* interval in milliseconds */
   gboolean		repeat;		/* TRUE for calling in intervals, FALSE for single-shot */
diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index 3d3d0ec..f9acafe 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -130,8 +130,6 @@ swfdec_load_object_dispose (GObject *object)
     swfdec_buffer_unref (load->buffer);
     load->buffer = NULL;
   }
-  g_object_unref (load->resource);
-  load->resource = NULL;
 
   G_OBJECT_CLASS (swfdec_load_object_parent_class)->dispose (object);
 }
@@ -156,7 +154,7 @@ swfdec_load_object_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean al
 
   if (!allow) {
     SWFDEC_WARNING ("SECURITY: no access to %s from %s",
-	load->url, swfdec_url_get_url (SWFDEC_FLASH_SECURITY (load->resource)->url));
+	load->url, swfdec_url_get_url (load->sandbox->url));
 
     /* FIXME: call finish? */
 
@@ -165,7 +163,7 @@ swfdec_load_object_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean al
     return;
   }
 
-  load->loader = swfdec_loader_load (load->resource->loader, url, load->request, load->buffer);
+  load->loader = swfdec_loader_load (player->priv->resource->loader, url, load->request, load->buffer);
 
   swfdec_stream_set_target (SWFDEC_STREAM (load->loader), SWFDEC_STREAM_TARGET (load));
   swfdec_loader_set_data_type (load->loader, SWFDEC_LOADER_DATA_TEXT);
@@ -180,8 +178,8 @@ swfdec_load_object_request (gpointer objectp, gpointer playerp)
   SwfdecURL *url;
 
   /* FIXME: or is this relative to the player? */
-  url = swfdec_url_new_relative (SWFDEC_FLASH_SECURITY (load->resource)->url, load->url);
-  switch (SWFDEC_FLASH_SECURITY (load->resource)->sandbox) {
+  url = swfdec_url_new_relative (swfdec_loader_get_url (player->priv->resource->loader), load->url);
+  switch (load->sandbox->type) {
     case SWFDEC_SANDBOX_REMOTE:
     case SWFDEC_SANDBOX_LOCAL_NETWORK:
     case SWFDEC_SANDBOX_LOCAL_TRUSTED:
@@ -213,6 +211,7 @@ swfdec_load_object_mark (gpointer object, gpointer player)
 {
   SwfdecLoadObject *load = object;
 
+  swfdec_as_object_mark (SWFDEC_AS_OBJECT (load->sandbox));
   if (load->url)
     swfdec_as_string_mark (load->url);
   swfdec_as_object_mark (load->target);
@@ -242,7 +241,6 @@ swfdec_load_object_create (SwfdecAsObject *target, const char *url,
   load->finish = finish;
   /* get the current security */
   g_assert (SWFDEC_AS_CONTEXT (player)->frame);
-  load->resource = g_object_ref (SWFDEC_AS_CONTEXT (player)->frame->security);
-  g_assert (SWFDEC_IS_RESOURCE (load->resource));
+  load->sandbox = SWFDEC_SANDBOX (SWFDEC_AS_CONTEXT (player)->global);
   swfdec_player_request_resource (player, swfdec_load_object_request, load, NULL);
 }
diff --git a/libswfdec/swfdec_load_object.h b/libswfdec/swfdec_load_object.h
index 5f36625..3436562 100644
--- a/libswfdec/swfdec_load_object.h
+++ b/libswfdec/swfdec_load_object.h
@@ -51,7 +51,7 @@ struct _SwfdecLoadObject {
   SwfdecBuffer *		buffer;		/* data to send */
   SwfdecLoader *		loader;		/* loader when loading or NULL */
 
-  SwfdecResource *		resource;	/* resource that inited the loading */
+  SwfdecSandbox *		sandbox;	/* sandbox that inited the loading */
   SwfdecAsObject *		target;		/* target object */
   SwfdecLoadObjectProgress	progress;	/* progress callback */
   SwfdecLoadObjectFinish	finish;		/* finish callback */
diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c
index 3dd6902..2f45345 100644
--- a/libswfdec/swfdec_movie.c
+++ b/libswfdec/swfdec_movie.c
@@ -493,20 +493,20 @@ swfdec_movie_execute (SwfdecMovie *movie, SwfdecEventType condition)
       return;
   }
 
+  swfdec_sandbox_use (movie->resource->sandbox);
   if (movie->events) {
-    swfdec_event_list_execute (movie->events, thisp,
-	SWFDEC_SECURITY (movie->resource), condition, 0);
+    swfdec_event_list_execute (movie->events, thisp, condition, 0);
   }
   /* FIXME: how do we compute the version correctly here? */
   if (swfdec_movie_get_version (movie) <= 5)
     return;
   name = swfdec_event_type_get_name (condition);
   if (name != NULL) {
-    swfdec_as_object_call_with_security (SWFDEC_AS_OBJECT (movie),
-	SWFDEC_SECURITY (movie->resource), name, 0, NULL, NULL);
+    swfdec_as_object_call (SWFDEC_AS_OBJECT (movie), name, 0, NULL, NULL);
   }
   if (condition == SWFDEC_EVENT_CONSTRUCT)
     swfdec_as_object_call (thisp, SWFDEC_AS_STR_constructor, 0, NULL, NULL);
+  swfdec_sandbox_unuse (movie->resource->sandbox);
 }
 
 /**
@@ -1062,7 +1062,7 @@ swfdec_movie_mark (SwfdecAsObject *object)
     swfdec_as_object_mark (listener->object);
     swfdec_as_string_mark (listener->name);
   }
-  swfdec_resource_mark (movie->resource);
+  swfdec_as_object_mark (SWFDEC_AS_OBJECT (movie->resource));
 
   SWFDEC_AS_OBJECT_CLASS (swfdec_movie_parent_class)->mark (object);
 }
diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c
index 5a1e935..01566ad 100644
--- a/libswfdec/swfdec_net_stream.c
+++ b/libswfdec/swfdec_net_stream.c
@@ -28,10 +28,10 @@
 #include "swfdec_as_strings.h"
 #include "swfdec_audio_flv.h"
 #include "swfdec_debug.h"
-#include "swfdec_flash_security.h"
 #include "swfdec_loader_internal.h"
 #include "swfdec_player_internal.h"
 #include "swfdec_resource.h"
+#include "swfdec_sandbox.h"
 #include "swfdec_stream_target.h"
 
 /* NB: code and level must be rooted gc-strings */
@@ -499,11 +499,11 @@ swfdec_net_stream_set_url (SwfdecNetStream *stream, const char *url_string)
   cx = SWFDEC_AS_OBJECT (stream)->context;
   player = SWFDEC_PLAYER (cx);
   g_assert (cx->frame);
-  url = swfdec_url_new_relative (SWFDEC_FLASH_SECURITY (player->priv->resource)->url, url_string);
+  url = swfdec_url_new_relative (swfdec_loader_get_url (player->priv->resource->loader), url_string);
   if (swfdec_url_is_local (url)) {
     swfdec_net_stream_load (player, url, TRUE, stream);
   } else {
-    switch (SWFDEC_FLASH_SECURITY (cx->frame->security)->sandbox) {
+    switch (SWFDEC_SANDBOX (cx->global)->type) {
       case SWFDEC_SANDBOX_REMOTE:
 	swfdec_net_stream_load (player, url, TRUE, stream);
 	break;
diff --git a/libswfdec/swfdec_net_stream_as.c b/libswfdec/swfdec_net_stream_as.c
index 7057103..470b035 100644
--- a/libswfdec/swfdec_net_stream_as.c
+++ b/libswfdec/swfdec_net_stream_as.c
@@ -153,7 +153,7 @@ swfdec_net_stream_construct (SwfdecAsContext *cx, SwfdecAsObject *obj, guint arg
 }
 
 void
-swfdec_net_stream_init_context (SwfdecPlayer *player, guint version)
+swfdec_net_stream_init_context (SwfdecPlayer *player)
 {
   SwfdecAsContext *context;
   SwfdecAsObject *stream, *proto;
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 7bcce79..3393514 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -29,7 +29,6 @@
 
 #include "swfdec_player_internal.h"
 #include "swfdec_as_frame_internal.h"
-#include "swfdec_as_internal.h"
 #include "swfdec_as_strings.h"
 #include "swfdec_audio_internal.h"
 #include "swfdec_button_movie.h" /* for mouse cursor */
@@ -37,9 +36,6 @@
 #include "swfdec_debug.h"
 #include "swfdec_enums.h"
 #include "swfdec_event.h"
-#include "swfdec_flash_security.h"
-#include "swfdec_initialize.h"
-#include "swfdec_internal.h"
 #include "swfdec_loader_internal.h"
 #include "swfdec_marshal.h"
 #include "swfdec_movie.h"
@@ -477,8 +473,9 @@ swfdec_player_do_action (SwfdecPlayer *player)
     } while (action->movie == NULL); /* skip removed actions */
     if (action) {
       if (action->script) {
-	swfdec_as_object_run_with_security (SWFDEC_AS_OBJECT (action->movie), 
-	  action->script, SWFDEC_SECURITY (action->movie->resource));
+	swfdec_sandbox_use (action->movie->resource->sandbox);
+	swfdec_as_object_run (SWFDEC_AS_OBJECT (action->movie), action->script);
+	swfdec_sandbox_unuse (action->movie->resource->sandbox);
       } else {
 	swfdec_movie_execute (action->movie, action->event);
       }
@@ -917,6 +914,8 @@ swfdec_player_dispose (GObject *object)
   }
   g_assert (priv->movies == NULL);
   g_assert (priv->audio == NULL);
+  g_assert (g_hash_table_size (priv->sandboxes) == 0);
+  g_hash_table_destroy (priv->sandboxes);
   if (priv->external_timeout.callback)
     swfdec_player_remove_timeout (player, &priv->external_timeout);
   if (priv->rate) {
@@ -1796,6 +1795,8 @@ swfdec_player_init (SwfdecPlayer *player)
   priv->iterate_timeout.callback = swfdec_player_iterate;
   priv->stage_width = -1;
   priv->stage_height = -1;
+
+  priv->sandboxes = g_hash_table_new (swfdec_url_hash, swfdec_url_equal);
 }
 
 void
@@ -1986,8 +1987,7 @@ swfdec_player_launch (SwfdecPlayer *player, SwfdecLoaderRequest request, const c
  * the player is already initialized, this function does nothing.
  **/
 void
-swfdec_player_initialize (SwfdecPlayer *player, guint version, 
-    guint rate, guint width, guint height)
+swfdec_player_initialize (SwfdecPlayer *player, guint rate, guint width, guint height)
 {
   SwfdecPlayerPrivate *priv;
 
@@ -1996,24 +1996,6 @@ swfdec_player_initialize (SwfdecPlayer *player, guint version,
 
   priv = player->priv;
   if (!priv->initialized) {
-    SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player);
-    swfdec_as_context_startup (context, version);
-    /* reset state for initialization */
-    /* FIXME: have a better way to do this */
-    if (context->state == SWFDEC_AS_CONTEXT_RUNNING) {
-      context->state = SWFDEC_AS_CONTEXT_NEW;
-      swfdec_sprite_movie_init_context (player, version);
-      swfdec_video_movie_init_context (player, version);
-      swfdec_net_stream_init_context (player, version);
-
-      swfdec_as_context_run_init_script (context, swfdec_initialize, 
-	  sizeof (swfdec_initialize), context->version);
-
-      if (context->state == SWFDEC_AS_CONTEXT_NEW) {
-	context->state = SWFDEC_AS_CONTEXT_RUNNING;
-	swfdec_as_object_set_constructor (priv->roots->data, priv->MovieClip);
-      }
-    }
     priv->initialized = TRUE;
     g_object_notify (G_OBJECT (player), "initialized");
   } else {
diff --git a/libswfdec/swfdec_player_as.c b/libswfdec/swfdec_player_as.c
index e844bb6..a091f93 100644
--- a/libswfdec/swfdec_player_as.c
+++ b/libswfdec/swfdec_player_as.c
@@ -346,7 +346,7 @@ swfdec_player_object_registerClass (SwfdecAsContext *cx, SwfdecAsObject *object,
 /* This is ran at the beginning of swfdec_as_context_startup.
  * Yes, this is a hack */
 void
-swfdec_player_preinit_global (SwfdecAsContext *context, guint version)
+swfdec_player_preinit_global (SwfdecAsContext *context)
 {
   /* init these two before swfdec_as_context_startup, so they won't get
    * __proto__ and constructor properties */
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index dd9184b..fe08454 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -27,7 +27,6 @@
 #include <libswfdec/swfdec_player_scripting.h>
 #include <libswfdec/swfdec_rect.h>
 #include <libswfdec/swfdec_ringbuffer.h>
-#include <libswfdec/swfdec_security.h>
 #include <libswfdec/swfdec_socket.h>
 #include <libswfdec/swfdec_system.h>
 
@@ -136,12 +135,12 @@ struct _SwfdecPlayerPrivate
   SwfdecRingBuffer *	actions[SWFDEC_PLAYER_N_ACTION_QUEUES]; /* all actions we've queued up so far */
 
   /* security */
+  GHashTable *		sandboxes;		/* SwfdecURL => SwfdecSandbox mapping */
   GList *		loading_policy_files;	/* list of loading SwfdecPlayerLoader - newest first */
   GSList *		policy_files;		/* list of SwfdecPolicyLoader that finished loading */
 };
 
 void		swfdec_player_initialize	(SwfdecPlayer *		player,
-						 guint			version,
 						 guint			rate,
 						 guint			width,
 						 guint			height);
diff --git a/libswfdec/swfdec_policy_file.c b/libswfdec/swfdec_policy_file.c
index 9fbb768..34a532d 100644
--- a/libswfdec/swfdec_policy_file.c
+++ b/libswfdec/swfdec_policy_file.c
@@ -25,7 +25,6 @@
 #include <string.h>
 
 #include "swfdec_policy_file.h"
-#include "swfdec_flash_security.h"
 #include "swfdec_resource.h"
 #include "swfdec_as_strings.h"
 #include "swfdec_debug.h"
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index f76f891..30baaa4 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -25,18 +25,18 @@
 #include <stdlib.h>
 #include <string.h>
 #include "swfdec_resource.h"
-#include "swfdec_as_frame_internal.h"
+#include "swfdec_as_object.h"
 #include "swfdec_as_internal.h"
 #include "swfdec_as_interpret.h"
 #include "swfdec_as_strings.h"
 #include "swfdec_character.h"
 #include "swfdec_debug.h"
 #include "swfdec_decoder.h"
-#include "swfdec_flash_security.h"
 #include "swfdec_image_decoder.h"
 #include "swfdec_loader_internal.h"
 #include "swfdec_movie_clip_loader.h"
 #include "swfdec_player_internal.h"
+#include "swfdec_sandbox.h"
 #include "swfdec_script.h"
 #include "swfdec_sprite.h"
 #include "swfdec_stream_target.h"
@@ -45,7 +45,7 @@
 
 
 static void swfdec_resource_stream_target_init (SwfdecStreamTargetInterface *iface);
-G_DEFINE_TYPE_WITH_CODE (SwfdecResource, swfdec_resource, SWFDEC_TYPE_FLASH_SECURITY,
+G_DEFINE_TYPE_WITH_CODE (SwfdecResource, swfdec_resource, SWFDEC_TYPE_AS_OBJECT,
     G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_resource_stream_target_init))
 
 /*** SWFDEC_STREAM_TARGET interface ***/
@@ -56,27 +56,13 @@ swfdec_resource_is_root (SwfdecResource *resource)
   g_return_val_if_fail (SWFDEC_IS_RESOURCE (resource), FALSE);
 
   return
-    resource->movie == SWFDEC_FLASH_SECURITY (resource)->player->priv->roots->data;
+    resource->movie == SWFDEC_PLAYER (SWFDEC_AS_OBJECT (resource)->context)->priv->roots->data;
 }
 
 static SwfdecPlayer *
 swfdec_resource_stream_target_get_player (SwfdecStreamTarget *target)
 {
-  return SWFDEC_FLASH_SECURITY (target)->player;
-}
-
-static void
-swfdec_resource_check_rights (SwfdecResource *resource)
-{
-  SwfdecFlashSecurity *sec = SWFDEC_FLASH_SECURITY (resource);
-  SwfdecSwfDecoder *dec = SWFDEC_SWF_DECODER (resource->decoder);
-
-  if (swfdec_resource_is_root (resource)) {
-    if (dec->use_network && sec->sandbox == SWFDEC_SANDBOX_LOCAL_FILE)
-      sec->sandbox = SWFDEC_SANDBOX_LOCAL_NETWORK;
-    SWFDEC_INFO ("enabling local-with-network sandbox for %s",
-	swfdec_url_get_url (swfdec_loader_get_url (resource->loader)));
-  }
+  return SWFDEC_PLAYER (SWFDEC_AS_OBJECT (target)->context);
 }
 
 static void
@@ -90,14 +76,23 @@ swfdec_resource_stream_target_image (SwfdecResource *instance)
   if (SWFDEC_IS_SWF_DECODER (instance->decoder)) {
     SwfdecSwfDecoder *dec = SWFDEC_SWF_DECODER (instance->decoder);
 
-    movie->sprite = dec->main_sprite;
-    g_assert (movie->sprite->parse_frame > 0);
-    movie->n_frames = movie->sprite->n_frames;
-    swfdec_movie_invalidate_last (SWFDEC_MOVIE (movie));
-    swfdec_resource_check_rights (instance);
-    if (swfdec_resource_is_root (instance)) {
-      swfdec_movie_initialize (SWFDEC_MOVIE (movie));
-      swfdec_player_perform_actions (SWFDEC_FLASH_SECURITY (instance)->player);
+    if (swfdec_sandbox_set_allow_network (instance->sandbox, 
+	  SWFDEC_SWF_DECODER (instance->decoder)->use_network)) {
+      movie->sprite = dec->main_sprite;
+      g_assert (movie->sprite->parse_frame > 0);
+      movie->n_frames = movie->sprite->n_frames;
+      swfdec_movie_invalidate_last (SWFDEC_MOVIE (movie));
+      if (swfdec_resource_is_root (instance)) {
+	SwfdecPlayer *player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (instance)->context);
+	swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), player->priv->MovieClip);
+	swfdec_movie_initialize (SWFDEC_MOVIE (movie));
+	swfdec_player_perform_actions (player);
+      }
+    } else {
+      SWFDEC_FIXME ("cannot continue loading %s, invalid rights", 
+	  swfdec_url_get_url (swfdec_loader_get_url (instance->loader)));
+      swfdec_stream_set_target (SWFDEC_STREAM (instance->loader), NULL);
+      /* FIXME: anyting on the movie we need to clear? */
     }
   } else {
     g_assert_not_reached ();
@@ -200,7 +195,7 @@ swfdec_resource_create_movie (SwfdecResource *resource)
 
   if (resource->movie)
     return TRUE;
-  player = SWFDEC_FLASH_SECURITY (resource)->player;
+  player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (resource)->context);
   movie = (SwfdecSpriteMovie *) swfdec_action_lookup_object (SWFDEC_AS_CONTEXT (player),
       player->priv->roots->data, resource->target, resource->target + strlen (resource->target));
   if (!SWFDEC_IS_SPRITE_MOVIE (movie)) {
@@ -217,7 +212,8 @@ swfdec_resource_create_movie (SwfdecResource *resource)
   if (movie == NULL) {
     movie = swfdec_player_create_movie_at_level (player, resource, level);
   } else {
-    movie = swfdec_resource_replace_movie (movie, resource);
+    /* FIXME: is this correct? */
+    movie = swfdec_resource_replace_movie (movie, SWFDEC_MOVIE (movie)->resource);
   }
   swfdec_player_unroot (player, resource);
   return TRUE;
@@ -262,7 +258,7 @@ swfdec_resource_stream_target_parse (SwfdecStreamTarget *target, SwfdecStream *s
       return;
     buffer = swfdec_buffer_queue_peek (queue, 4);
     dec =
-      swfdec_decoder_new (SWFDEC_FLASH_SECURITY (resource)->player, buffer);
+      swfdec_decoder_new (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (resource)->context), buffer);
     swfdec_buffer_unref (buffer);
     if (dec == NULL) {
       SWFDEC_ERROR ("no decoder found for format");
@@ -304,8 +300,8 @@ swfdec_resource_stream_target_parse (SwfdecStreamTarget *target, SwfdecStream *s
       if (SWFDEC_IS_SWF_DECODER (dec))
 	resource->version = SWFDEC_SWF_DECODER (dec)->version;
       if (swfdec_resource_is_root (resource)) {
-	swfdec_player_initialize (SWFDEC_FLASH_SECURITY (resource)->player,
-	    resource->version, dec->rate, dec->width, dec->height);
+	swfdec_player_initialize (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (resource)->context),
+	    dec->rate, dec->width, dec->height);
       }
     }
     if (status & SWFDEC_STATUS_IMAGE)
@@ -369,6 +365,16 @@ swfdec_resource_stream_target_init (SwfdecStreamTargetInterface *iface)
 }
 
 static void
+swfdec_resource_mark (SwfdecAsObject *object)
+{
+  SwfdecResource *resource = SWFDEC_RESOURCE (object);
+
+  if (resource->clip_loader)
+    swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->clip_loader));
+  swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->sandbox));
+}
+
+static void
 swfdec_resource_dispose (GObject *object)
 {
   SwfdecResource *resource = SWFDEC_RESOURCE (object);
@@ -398,8 +404,11 @@ static void
 swfdec_resource_class_init (SwfdecResourceClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  SwfdecAsObjectClass *asobject_class = SWFDEC_AS_OBJECT_CLASS (klass);
 
   object_class->dispose = swfdec_resource_dispose;
+
+  asobject_class->mark = swfdec_resource_mark;
 }
 
 static void
@@ -420,8 +429,6 @@ swfdec_resource_set_loader (SwfdecResource *resource, SwfdecLoader *loader)
 
   resource->loader = g_object_ref (loader);
   swfdec_stream_set_target (SWFDEC_STREAM (resource->loader), SWFDEC_STREAM_TARGET (resource));
-  swfdec_flash_security_set_url (SWFDEC_FLASH_SECURITY (resource),
-      swfdec_loader_get_url (loader));
   resource->state = SWFDEC_RESOURCE_REQUESTED;
 }
 
@@ -429,28 +436,23 @@ SwfdecResource *
 swfdec_resource_new (SwfdecPlayer *player, SwfdecLoader *loader, const char *variables)
 {
   SwfdecResource *resource;
+  guint size;
 
   g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
   g_return_val_if_fail (SWFDEC_IS_LOADER (loader), NULL);
 
+  size = sizeof (SwfdecResource);
+  if (!swfdec_as_context_use_mem (SWFDEC_AS_CONTEXT (player), size))
+    size = 0;
   resource = g_object_new (SWFDEC_TYPE_RESOURCE, NULL);
-  resource->version = 7;
-  SWFDEC_FLASH_SECURITY (resource)->player = player;
+  swfdec_as_object_add (SWFDEC_AS_OBJECT (resource), SWFDEC_AS_CONTEXT (player), size);
+  resource->version = 8;
   resource->variables = g_strdup (variables);
   swfdec_resource_set_loader (resource, loader);
 
   return resource;
 }
 
-void
-swfdec_resource_mark (SwfdecResource *resource)
-{
-  g_return_if_fail (SWFDEC_IS_RESOURCE (resource));
-
-  if (resource->clip_loader)
-    swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->clip_loader));
-}
-
 gpointer
 swfdec_resource_get_export (SwfdecResource *instance, const char *name)
 {
@@ -480,9 +482,11 @@ swfdec_resource_add_export (SwfdecResource *instance, SwfdecCharacter *character
   g_hash_table_insert (instance->export_names, g_object_ref (character), g_strdup (name));
 }
 
+/*** RESOURC LOAD ***/
+
 typedef struct _SwfdecResourceLoad SwfdecResourceLoad;
 struct _SwfdecResourceLoad {
-  SwfdecResource *		resource;
+  SwfdecSandbox *		sandbox;
   char *			target;
   char *			url;
   SwfdecLoaderRequest		request;
@@ -496,8 +500,7 @@ swfdec_resource_load_free (gpointer loadp)
 {
   SwfdecResourceLoad *load = loadp;
 
-  swfdec_player_unroot (SWFDEC_FLASH_SECURITY (load->resource)->player, load);
-  g_object_unref (load->resource);
+  swfdec_player_unroot (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (load->sandbox)->context), load);
   g_free (load->url);
   g_free (load->target);
   if (load->buffer)
@@ -510,7 +513,7 @@ swfdec_resource_load_mark (gpointer loadp, gpointer playerp)
 {
   SwfdecResourceLoad *load = loadp;
 
-  swfdec_resource_mark (load->resource);
+  swfdec_as_object_mark (SWFDEC_AS_OBJECT (load->sandbox));
   if (load->loader)
     swfdec_as_object_mark (SWFDEC_AS_OBJECT (load->loader));
 }
@@ -522,24 +525,27 @@ swfdec_resource_do_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean al
   SwfdecResource *resource;
   SwfdecLoader *loader;
   
+  if (!swfdec_as_context_use_mem (SWFDEC_AS_CONTEXT (player), sizeof (SwfdecResource)))
+    return;
   resource = g_object_new (SWFDEC_TYPE_RESOURCE, NULL);
-  resource->version = load->resource->version;
-  SWFDEC_FLASH_SECURITY (resource)->player = player;
+  swfdec_as_object_add (SWFDEC_AS_OBJECT (resource), SWFDEC_AS_CONTEXT (player), sizeof (SwfdecResource));
+  resource->version = 8;
   resource->target = g_strdup (load->target);
   if (load->loader)
     resource->clip_loader = g_object_ref (load->loader);
-  swfdec_player_root (player, resource, (GFunc) swfdec_resource_mark);
+  swfdec_player_root (player, resource, (GFunc) swfdec_as_object_mark);
 
   if (!allowed) {
     SWFDEC_WARNING ("SECURITY: no access to %s from %s",
-	load->url, swfdec_url_get_url (SWFDEC_FLASH_SECURITY (load->resource)->url));
+	load->url, swfdec_url_get_url (load->sandbox->url));
     /* FIXME: is replacing correct? */
     swfdec_resource_emit_error (resource, SWFDEC_AS_STR_IllegalRequest);
     g_object_unref (resource);
     return;
   }
 
-  loader = swfdec_loader_load (load->resource->loader, url, load->request, load->buffer);
+  loader = swfdec_loader_load (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (load->sandbox))->priv->resource->loader, 
+      url, load->request, load->buffer);
   swfdec_resource_set_loader (resource, loader);
   g_object_unref (loader);
 }
@@ -562,7 +568,7 @@ swfdec_resource_load_request (gpointer loadp, gpointer playerp)
       SWFDEC_DEBUG ("no movie, not unloading");
       return;
     }
-    swfdec_resource_replace_movie (movie, load->resource);
+    swfdec_resource_replace_movie (movie, SWFDEC_MOVIE (movie)->resource);
     return;
   }
 
@@ -579,8 +585,8 @@ swfdec_resource_load_request (gpointer loadp, gpointer playerp)
     return;
   }
 
-  url = swfdec_url_new_relative (SWFDEC_FLASH_SECURITY (player->priv->resource)->url, load->url);
-  switch (SWFDEC_FLASH_SECURITY (load->resource)->sandbox) {
+  url = swfdec_url_new_relative (swfdec_loader_get_url (player->priv->resource->loader), load->url);
+  switch (load->sandbox->type) {
     case SWFDEC_SANDBOX_REMOTE:
       swfdec_resource_do_load (player, url, !swfdec_url_is_local (url), load);
       break;
@@ -634,7 +640,7 @@ swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url,
   } else {
     load->target = g_strdup (target);
   }
-  load->resource = SWFDEC_RESOURCE (g_object_ref (SWFDEC_AS_CONTEXT (player)->frame->security));
+  load->sandbox = SWFDEC_SANDBOX (SWFDEC_AS_CONTEXT (player)->global);
   load->url = g_strdup (url);
   load->request = request;
   load->buffer = buffer;
diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h
index 5de9c9b..c7d9544 100644
--- a/libswfdec/swfdec_resource.h
+++ b/libswfdec/swfdec_resource.h
@@ -21,7 +21,7 @@
 #define _SWFDEC_RESOURCE_H_
 
 #include <libswfdec/swfdec_player.h>
-#include <libswfdec/swfdec_flash_security.h>
+#include <libswfdec/swfdec_sandbox.h>
 #include <libswfdec/swfdec_sprite_movie.h>
 
 G_BEGIN_DECLS
@@ -45,9 +45,10 @@ typedef enum {
 
 struct _SwfdecResource
 {
-  SwfdecFlashSecurity	flash_security;
+  SwfdecAsObject      	object;
 
   guint			version;	/* version of this resource */
+  SwfdecSandbox *	sandbox;	/* sandbox this resource belongs to */
   SwfdecSpriteMovie * 	movie;		/* the movie responsible for creating this instance */
 
   SwfdecLoader *	loader;		/* the loader providing data for the decoder */
@@ -65,7 +66,7 @@ struct _SwfdecResource
 
 struct _SwfdecResourceClass
 {
-  SwfdecFlashSecurityClass	flash_security_class;
+  SwfdecAsObjectClass 	object_class;
 };
 
 GType		swfdec_resource_get_type	  	(void);
@@ -74,8 +75,6 @@ SwfdecResource *swfdec_resource_new			(SwfdecPlayer *		player,
 							 SwfdecLoader *		loader,
 							 const char *		variables);
 
-void		swfdec_resource_mark			(SwfdecResource *	resource);
-
 gboolean	swfdec_resource_emit_on_load_init	(SwfdecResource *	resource);
 void		swfdec_resource_add_export		(SwfdecResource *	instance,
 							 SwfdecCharacter *	character,
diff --git a/libswfdec/swfdec_security.c b/libswfdec/swfdec_security.c
deleted file mode 100644
index ae431a0..0000000
--- a/libswfdec/swfdec_security.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include "swfdec_security.h"
-#include "swfdec_debug.h"
-
-
-G_DEFINE_ABSTRACT_TYPE (SwfdecSecurity, swfdec_security, G_TYPE_OBJECT)
-
-static void
-swfdec_security_class_init (SwfdecSecurityClass *klass)
-{
-}
-
-static void
-swfdec_security_init (SwfdecSecurity *security)
-{
-}
-
-/**
- * swfdec_security_allow:
- * @guard: security guarding an operation
- * @key: security available
- *
- * Asks @guard to check if the given @key allows accessing it. If so, a
- * key for accessing the operation is returned.
- *
- * Returns: %TRUE if access was granted, %FALSE otherwise.
- **/
-gboolean
-swfdec_security_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
-{
-  SwfdecSecurityClass *klass;
-
-  g_return_val_if_fail (SWFDEC_IS_SECURITY (guard), FALSE);
-  g_return_val_if_fail (SWFDEC_IS_SECURITY (key), FALSE);
-
-  klass = SWFDEC_SECURITY_GET_CLASS (guard);
-  g_return_val_if_fail (klass->allow, FALSE);
-  return klass->allow (guard, key);
-}
-
diff --git a/libswfdec/swfdec_security.h b/libswfdec/swfdec_security.h
deleted file mode 100644
index 0211301..0000000
--- a/libswfdec/swfdec_security.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifndef _SWFDEC_SECURITY_H_
-#define _SWFDEC_SECURITY_H_
-
-#include <glib-object.h>
-#include <libswfdec/swfdec_url.h>
-
-G_BEGIN_DECLS
-
-typedef struct _SwfdecSecurity SwfdecSecurity;
-typedef struct _SwfdecSecurityClass SwfdecSecurityClass;
-
-#define SWFDEC_TYPE_SECURITY                    (swfdec_security_get_type())
-#define SWFDEC_IS_SECURITY(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_SECURITY))
-#define SWFDEC_IS_SECURITY_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_SECURITY))
-#define SWFDEC_SECURITY(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_SECURITY, SwfdecSecurity))
-#define SWFDEC_SECURITY_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_SECURITY, SwfdecSecurityClass))
-#define SWFDEC_SECURITY_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_SECURITY, SwfdecSecurityClass))
-
-struct _SwfdecSecurity
-{
-  GObject		object;
-};
-
-struct _SwfdecSecurityClass
-{
-  GObjectClass		object_class;
-
-  gboolean		(* allow)			(SwfdecSecurity *	guard,
-							 SwfdecSecurity *	key);
-};
-
-GType			swfdec_security_get_type	(void);
-
-gboolean		swfdec_security_allow		(SwfdecSecurity *	guard,
-							 SwfdecSecurity *	key);
-
-
-G_END_DECLS
-#endif
diff --git a/libswfdec/swfdec_security_allow.c b/libswfdec/swfdec_security_allow.c
deleted file mode 100644
index fb678b4..0000000
--- a/libswfdec/swfdec_security_allow.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include "swfdec_security_allow.h"
-#include "swfdec_debug.h"
-
-
-G_DEFINE_TYPE (SwfdecSecurityAllow, swfdec_security_allow, SWFDEC_TYPE_SECURITY)
-
-static gboolean
-swfdec_security_allow_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
-{
-  return TRUE;
-}
-
-static void
-swfdec_security_allow_class_init (SwfdecSecurityAllowClass *klass)
-{
-  SwfdecSecurityClass *security_class = SWFDEC_SECURITY_CLASS (klass);
-
-  security_class->allow = swfdec_security_allow_allow;
-}
-
-static void
-swfdec_security_allow_init (SwfdecSecurityAllow *security_allow)
-{
-}
-
-/**
- * swfdec_security_allow_new:
- *
- * Creates a new Security object that allows everything. These objects are used 
- * by default when no other security object is in use. This is particularly 
- * useful for script engines that are not security sensitive or code injection
- * via debugging.
- *
- * Returns: a new #SwfdecSecurity object
- **/
-SwfdecSecurity *
-swfdec_security_allow_new (void)
-{
-  static SwfdecSecurity *singleton = NULL;
-  
-  /* FIXME: not threadsafe */
-  if (singleton)
-    return g_object_ref (singleton);
-
-  singleton = g_object_new (SWFDEC_TYPE_SECURITY_ALLOW, NULL);
-  g_object_add_weak_pointer (G_OBJECT (singleton), (gpointer) &singleton);
-  return singleton;
-}
diff --git a/libswfdec/swfdec_security_allow.h b/libswfdec/swfdec_security_allow.h
deleted file mode 100644
index 108ed72..0000000
--- a/libswfdec/swfdec_security_allow.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifndef _SWFDEC_SECURITY_ALLOW_H_
-#define _SWFDEC_SECURITY_ALLOW_H_
-
-#include <libswfdec/swfdec_security.h>
-
-G_BEGIN_DECLS
-
-typedef struct _SwfdecSecurityAllow SwfdecSecurityAllow;
-typedef struct _SwfdecSecurityAllowClass SwfdecSecurityAllowClass;
-
-#define SWFDEC_TYPE_SECURITY_ALLOW                    (swfdec_security_allow_get_type())
-#define SWFDEC_IS_SECURITY_ALLOW(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_SECURITY_ALLOW))
-#define SWFDEC_IS_SECURITY_ALLOW_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_SECURITY_ALLOW))
-#define SWFDEC_SECURITY_ALLOW(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_SECURITY_ALLOW, SwfdecSecurityAllow))
-#define SWFDEC_SECURITY_ALLOW_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_SECURITY_ALLOW, SwfdecSecurityAllowClass))
-#define SWFDEC_SECURITY_ALLOW_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_SECURITY_ALLOW, SwfdecSecurityAllowClass))
-
-struct _SwfdecSecurityAllow
-{
-  SwfdecSecurity	security;
-};
-
-struct _SwfdecSecurityAllowClass
-{
-  SwfdecSecurityClass 	security_class;
-};
-
-GType			swfdec_security_allow_get_type	(void);
-
-SwfdecSecurity *	swfdec_security_allow_new	(void);
-
-
-G_END_DECLS
-#endif
diff --git a/libswfdec/swfdec_sprite_movie_as.c b/libswfdec/swfdec_sprite_movie_as.c
index 223d3b1..987a97e 100644
--- a/libswfdec/swfdec_sprite_movie_as.c
+++ b/libswfdec/swfdec_sprite_movie_as.c
@@ -867,7 +867,7 @@ swfdec_sprite_movie_setMask (SwfdecAsContext *cx, SwfdecAsObject *object,
 }
 
 void
-swfdec_sprite_movie_init_context (SwfdecPlayer *player, guint version)
+swfdec_sprite_movie_init_context (SwfdecPlayer *player)
 {
   SwfdecPlayerPrivate *priv = player->priv;
   SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player);
diff --git a/libswfdec/swfdec_system_security.c b/libswfdec/swfdec_system_security.c
index f6b20e9..284eea1 100644
--- a/libswfdec/swfdec_system_security.c
+++ b/libswfdec/swfdec_system_security.c
@@ -24,7 +24,6 @@
 #include "swfdec_as_internal.h"
 #include "swfdec_debug.h"
 #include "swfdec_as_strings.h"
-#include "swfdec_flash_security.h"
 #include "swfdec_resource.h"
 #include "swfdec_player_internal.h"
 
@@ -80,7 +79,7 @@ swfdec_system_security_get_sandboxType (SwfdecAsContext *cx,
     SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
     SwfdecAsValue *ret)
 {
-  switch (SWFDEC_FLASH_SECURITY (SWFDEC_PLAYER (cx)->priv->resource)->sandbox) {
+  switch (SWFDEC_SANDBOX (cx->global)->type) {
     case SWFDEC_SANDBOX_REMOTE:
       SWFDEC_AS_VALUE_SET_STRING (ret, SWFDEC_AS_STR_remote);
       break;
diff --git a/libswfdec/swfdec_video_movie_as.c b/libswfdec/swfdec_video_movie_as.c
index 833c634..91f9c7e 100644
--- a/libswfdec/swfdec_video_movie_as.c
+++ b/libswfdec/swfdec_video_movie_as.c
@@ -61,7 +61,7 @@ swfdec_video_clear (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
 }
 
 void
-swfdec_video_movie_init_context (SwfdecPlayer *player, guint version)
+swfdec_video_movie_init_context (SwfdecPlayer *player)
 {
   SwfdecAsContext *context;
   SwfdecAsObject *video, *proto;
@@ -83,12 +83,6 @@ swfdec_video_movie_init_context (SwfdecPlayer *player, guint version)
   swfdec_as_object_set_variable_and_flags (video, SWFDEC_AS_STR_prototype, &val,
       SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
   /* set the right properties on the Video.prototype object */
-  if (version >= 6) {
-    swfdec_as_object_add_function (proto, SWFDEC_AS_STR_attachVideo,
-	SWFDEC_TYPE_VIDEO_MOVIE, swfdec_video_attach_video, 0);
-    swfdec_as_object_add_function (proto, SWFDEC_AS_STR_clear,
-	SWFDEC_TYPE_VIDEO_MOVIE, swfdec_video_clear, 0);
-  }
   SWFDEC_AS_VALUE_SET_OBJECT (&val, video);
   swfdec_as_object_set_variable_and_flags (proto, SWFDEC_AS_STR_constructor,
       &val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
diff --git a/test/swfdec_test.c b/test/swfdec_test.c
index 6e1e1d6..3974f4b 100644
--- a/test/swfdec_test.c
+++ b/test/swfdec_test.c
@@ -111,7 +111,7 @@ main (int argc, char **argv)
     return EXIT_FAILURE;
 
   context = g_object_new (SWFDEC_TYPE_AS_CONTEXT, NULL);
-  swfdec_as_context_startup (context, SWFDEC_TEST_VERSION);
+  swfdec_as_context_startup (context);
 
   SWFDEC_AS_VALUE_SET_BOOLEAN (&val, dump);
   swfdec_as_object_set_variable (context->global,
diff --git a/vivified/core/vivi_application.c b/vivified/core/vivi_application.c
index c52bf1e..40051aa 100644
--- a/vivified/core/vivi_application.c
+++ b/vivified/core/vivi_application.c
@@ -153,7 +153,7 @@ vivi_application_new (void)
   ViviApplication *app;
 
   app = g_object_new (VIVI_TYPE_APPLICATION, NULL);
-  swfdec_as_context_startup (SWFDEC_AS_CONTEXT (app), 8);
+  swfdec_as_context_startup (SWFDEC_AS_CONTEXT (app));
   vivi_function_init_context (app);
   return app;
 }
commit 26341ec1a740e9eb0db4f296c747359a6ee57ff9
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Jan 18 15:08:46 2008 +0100

    add functions to use SwfdecURL as a hash table key

diff --git a/libswfdec/swfdec_url.c b/libswfdec/swfdec_url.c
index 6cdb54f..6243f75 100644
--- a/libswfdec/swfdec_url.c
+++ b/libswfdec/swfdec_url.c
@@ -469,3 +469,85 @@ swfdec_url_is_local (const SwfdecURL *url)
   /* FIXME: If we ever support gnome-vfs, this might become tricky */
   return swfdec_url_has_protocol (url, "file");
 }
+
+/**
+ * swfdec_url_equal:
+ * @a: a #SwfdecURL
+ * @b: a #SwfdecURL
+ *
+ * Compares the 2 given URLs for equality. 2 URLs are considered equal, when
+ * they point to the same resource. This function is intended to be 
+ * used together with swfdec_url_hash() in a #GHashtable.
+ *
+ * Returns: %TRUE if the 2 given urls point to the same resource, %FALSE 
+ *          otherwise.
+ **/
+gboolean
+swfdec_url_equal (gconstpointer a, gconstpointer b)
+{
+  const SwfdecURL *urla = a;
+  const SwfdecURL *urlb = b;
+
+  if (!swfdec_url_has_protocol (urla, urlb->protocol))
+    return FALSE;
+
+  if (urla->host == NULL) {
+    if (urlb->host != NULL)
+      return FALSE;
+  } else {
+    if (urlb->host == NULL || 
+	!g_str_equal (urla->host, urlb->host))
+      return FALSE;
+  }
+
+  if (urla->port != urlb->port)
+    return FALSE;
+
+  if (urla->path == NULL) {
+    if (urlb->path != NULL)
+      return FALSE;
+  } else {
+    if (urlb->path == NULL || 
+	!g_str_equal (urla->path, urlb->path))
+      return FALSE;
+  }
+
+  /* FIXME: include query strings? */
+  if (urla->query == NULL) {
+    if (urlb->query != NULL)
+      return FALSE;
+  } else {
+    if (urlb->query == NULL || 
+	!g_str_equal (urla->query, urlb->query))
+      return FALSE;
+  }
+
+  return TRUE;
+}
+
+/**
+ * swfdec_url_hash:
+ * @url: a #SwfdecURL
+ *
+ * Creates a hash value for the given @url. This function is intended to be 
+ * used together with swfdec_url_equal() in a #GHashtable.
+ *
+ * Returns: a hash value
+ **/
+guint
+swfdec_url_hash (gconstpointer url)
+{
+  const SwfdecURL *u = url;
+  guint ret;
+
+  /* random hash function, feel free to improve it */
+  ret = g_str_hash (u->protocol);
+  if (u->host)
+    ret ^= g_str_hash (u->host);
+  ret ^= u->port;
+  if (u->path)
+    ret ^= g_str_hash (u->path);
+  /* queries aren't used often in hashed urls, so ignore them */
+  return ret;
+}
+
diff --git a/libswfdec/swfdec_url.h b/libswfdec/swfdec_url.h
index 5eaa306..36a0dab 100644
--- a/libswfdec/swfdec_url.h
+++ b/libswfdec/swfdec_url.h
@@ -54,6 +54,10 @@ gboolean		swfdec_url_has_protocol		(const SwfdecURL *	url,
 gboolean		swfdec_url_is_parent		(const SwfdecURL *	parent,
 							 const SwfdecURL *	child);
 gboolean		swfdec_url_is_local		(const SwfdecURL *	url);
+
+gboolean		swfdec_url_equal		(gconstpointer		a,
+							 gconstpointer		b);
+guint			swfdec_url_hash			(gconstpointer		url);
 							 
 
 G_END_DECLS
commit 0ea23a5cd401ac0dcdb546f223b4fea310eddaaf
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Jan 17 23:35:16 2008 +0100

    only copy the loader if one exists

diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index d269b6a..f76f891 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -526,7 +526,8 @@ swfdec_resource_do_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean al
   resource->version = load->resource->version;
   SWFDEC_FLASH_SECURITY (resource)->player = player;
   resource->target = g_strdup (load->target);
-  resource->clip_loader = g_object_ref (load->loader);
+  if (load->loader)
+    resource->clip_loader = g_object_ref (load->loader);
   swfdec_player_root (player, resource, (GFunc) swfdec_resource_mark);
 
   if (!allowed) {
commit 8d7f1cd768a66565b79936bea8dd31074ddd5dab
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Jan 17 23:30:57 2008 +0100

    reimplement resource loading - it compiles

diff --git a/libswfdec-gtk/swfdec_gtk_loader.c b/libswfdec-gtk/swfdec_gtk_loader.c
index 479e6ad..26823cc 100644
--- a/libswfdec-gtk/swfdec_gtk_loader.c
+++ b/libswfdec-gtk/swfdec_gtk_loader.c
@@ -141,13 +141,13 @@ swfdec_gtk_loader_dispose (GObject *object)
 
 static void
 swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecLoader *parent,
-    SwfdecLoaderRequest request, const char *data, gsize data_len)
+    SwfdecLoaderRequest request, SwfdecBuffer *buffer)
 {
   const SwfdecURL *url = swfdec_loader_get_url (loader);
 
   if (g_ascii_strcasecmp (swfdec_url_get_protocol (url), "http") != 0 &&
       g_ascii_strcasecmp (swfdec_url_get_protocol (url), "https") != 0) {
-    SWFDEC_LOADER_CLASS (swfdec_gtk_loader_parent_class)->load (loader, parent, request, data, data_len);
+    SWFDEC_LOADER_CLASS (swfdec_gtk_loader_parent_class)->load (loader, parent, request, buffer);
   } else {
     SwfdecGtkLoader *gtk = SWFDEC_GTK_LOADER (loader);
     SwfdecGtkLoaderClass *klass = SWFDEC_GTK_LOADER_GET_CLASS (gtk);
@@ -157,9 +157,9 @@ swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecLoader *parent,
     soup_message_set_flags (gtk->message, SOUP_MESSAGE_OVERWRITE_CHUNKS);
     g_signal_connect (gtk->message, "got-chunk", G_CALLBACK (swfdec_gtk_loader_push), gtk);
     g_signal_connect (gtk->message, "finished", G_CALLBACK (swfdec_gtk_loader_finished), gtk);
-    if (data)
+    if (buffer)
       soup_message_set_request (gtk->message, "appliation/x-www-urlencoded",
-	  SOUP_BUFFER_USER_OWNED, (char *) data, data_len);
+	  SOUP_BUFFER_USER_OWNED, (char *) buffer->data, buffer->length);
     g_object_ref (gtk->message);
     soup_session_queue_message (klass->session, gtk->message, NULL, NULL);
   }
@@ -225,6 +225,6 @@ swfdec_gtk_loader_new (const char *uri)
   url = swfdec_url_new (uri);
   loader = g_object_new (SWFDEC_TYPE_GTK_LOADER, "url", url, NULL);
   swfdec_url_free (url);
-  swfdec_gtk_loader_load (loader, NULL, SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);
+  swfdec_gtk_loader_load (loader, NULL, SWFDEC_LOADER_REQUEST_DEFAULT, NULL);
   return loader;
 }
diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index 6316a0b..aa2c1c1 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -116,7 +116,6 @@ libswfdec_source_files = \
 	swfdec_rect.c \
 	swfdec_rectangle.c \
 	swfdec_resource.c \
-	swfdec_resource_request.c \
 	swfdec_ringbuffer.c \
 	swfdec_script.c \
 	swfdec_security.c \
@@ -267,7 +266,6 @@ noinst_HEADERS = \
 	swfdec_policy_file.h \
 	swfdec_rect.h \
 	swfdec_resource.h \
-	swfdec_resource_request.h \
 	swfdec_ringbuffer.h \
 	swfdec_script_internal.h \
 	swfdec_security.h \
diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index 24a822c..813c1ce 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -45,7 +45,6 @@
 #include "swfdec_sprite.h"
 #include "swfdec_sprite_movie.h"
 #include "swfdec_resource.h"
-#include "swfdec_resource_request.h"
 #include "swfdec_text_field_movie.h" // for typeof
 
 /* Define this to get SWFDEC_WARN'd about missing properties of objects.
@@ -1149,13 +1148,9 @@ swfdec_action_get_url (SwfdecAsContext *cx, guint action, const guint8 *data, gu
   }
   if (!SWFDEC_IS_PLAYER (cx)) {
     SWFDEC_ERROR ("GetURL without a SwfdecPlayer");
-  } else if (swfdec_player_request_fscommand (SWFDEC_PLAYER (cx), url, target)) {
-    /* nothing to do here */
-  } else if (swfdec_player_get_level (SWFDEC_PLAYER (cx), target) >= 0) {
-    swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, 
-	SWFDEC_LOADER_REQUEST_DEFAULT, NULL, NULL);
   } else {
-    swfdec_player_launch (SWFDEC_PLAYER (cx), SWFDEC_LOADER_REQUEST_DEFAULT, url, target, NULL);
+    swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, 
+	SWFDEC_LOADER_REQUEST_DEFAULT, NULL, NULL, FALSE);
   }
   g_free (url);
   g_free (target);
@@ -1200,21 +1195,16 @@ swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, g
 
   if (!SWFDEC_IS_PLAYER (cx)) {
     SWFDEC_ERROR ("GetURL2 action requires a SwfdecPlayer");
-  } else if (swfdec_player_request_fscommand (SWFDEC_PLAYER (cx), url, target)) {
-    /* nothing to do here */
   } else if (variables) {
     SwfdecMovie *movie;
     
     movie = swfdec_player_get_movie_from_string (SWFDEC_PLAYER (cx), target);
     if (movie != NULL) {
-      swfdec_load_object_new (SWFDEC_AS_OBJECT (movie), url, method, NULL, NULL,
+      swfdec_load_object_create (SWFDEC_AS_OBJECT (movie), url, method, NULL, NULL,
 	  swfdec_as_interpret_load_variables_on_finish);
     }
-  } else if (internal) {
-    swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, method, NULL, NULL);
   } else {
-    /* load an external file */
-    swfdec_player_launch (SWFDEC_PLAYER (cx), method, url, target, NULL);
+    swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, method, NULL, NULL, internal);
   }
 
   swfdec_as_stack_pop_n (cx, 2);
diff --git a/libswfdec/swfdec_file_loader.c b/libswfdec/swfdec_file_loader.c
index 1b498ac..a393185 100644
--- a/libswfdec/swfdec_file_loader.c
+++ b/libswfdec/swfdec_file_loader.c
@@ -38,12 +38,11 @@
 G_DEFINE_TYPE (SwfdecFileLoader, swfdec_file_loader, SWFDEC_TYPE_LOADER)
 
 static void
-swfdec_file_loader_load (SwfdecLoader *loader, SwfdecLoader *parent, SwfdecLoaderRequest request, 
-    const char *data, gsize data_len)
+swfdec_file_loader_load (SwfdecLoader *loader, SwfdecLoader *parent, 
+    SwfdecLoaderRequest request, SwfdecBuffer *buffer)
 {
   SwfdecStream *stream = SWFDEC_STREAM (loader);
   const SwfdecURL *url;
-  SwfdecBuffer *buffer;
   GError *error = NULL;
   char *real;
 
diff --git a/libswfdec/swfdec_flash_security.h b/libswfdec/swfdec_flash_security.h
index 8ee888d..3af3442 100644
--- a/libswfdec/swfdec_flash_security.h
+++ b/libswfdec/swfdec_flash_security.h
@@ -61,7 +61,6 @@ GType			swfdec_flash_security_get_type		(void);
 
 void			swfdec_flash_security_set_url		(SwfdecFlashSecurity *	sec,
 								 const SwfdecURL *	url);
-void			swfdec_flash_security_free_pending	(SwfdecFlashSecurity *	sec);
 
 
 G_END_DECLS
diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index a7d3fd2..3d3d0ec 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -1,5 +1,5 @@
 /* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org>
  *               2007 Pekka Lampila <pekka.lampila at iki.fi>
  *
  * This library is free software; you can redistribute it and/or
@@ -30,7 +30,6 @@
 #include "swfdec_loader_internal.h"
 #include "swfdec_stream_target.h"
 #include "swfdec_player_internal.h"
-#include "swfdec_resource_request.h"
 
 /*** SWFDEC_STREAM_TARGET ***/
 
@@ -114,33 +113,25 @@ swfdec_load_object_stream_target_init (SwfdecStreamTargetInterface *iface)
 
 /*** SWFDEC_LOAD_OBJECT ***/
 
-G_DEFINE_TYPE_WITH_CODE (SwfdecLoadObject, swfdec_load_object, SWFDEC_TYPE_AS_OBJECT,
+G_DEFINE_TYPE_WITH_CODE (SwfdecLoadObject, swfdec_load_object, G_TYPE_OBJECT,
     G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_load_object_stream_target_init))
 
 static void
-swfdec_load_object_reset (SwfdecLoadObject *load_object)
-{
-  if (load_object->loader) {
-    swfdec_stream_set_target (SWFDEC_STREAM (load_object->loader), NULL);
-    g_object_unref (load_object->loader);
-    load_object->loader = NULL;
-  }
-}
-
-static void
-swfdec_load_object_mark (SwfdecAsObject *object)
-{
-  swfdec_as_object_mark (SWFDEC_LOAD_OBJECT (object)->target);
-
-  SWFDEC_AS_OBJECT_CLASS (swfdec_load_object_parent_class)->mark (object);
-}
-
-static void
 swfdec_load_object_dispose (GObject *object)
 {
-  SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (object);
+  SwfdecLoadObject *load = SWFDEC_LOAD_OBJECT (object);
 
-  swfdec_load_object_reset (load_object);
+  if (load->loader) {
+    swfdec_stream_set_target (SWFDEC_STREAM (load->loader), NULL);
+    g_object_unref (load->loader);
+    load->loader = NULL;
+  }
+  if (load->buffer) {
+    swfdec_buffer_unref (load->buffer);
+    load->buffer = NULL;
+  }
+  g_object_unref (load->resource);
+  load->resource = NULL;
 
   G_OBJECT_CLASS (swfdec_load_object_parent_class)->dispose (object);
 }
@@ -149,11 +140,8 @@ static void
 swfdec_load_object_class_init (SwfdecLoadObjectClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  SwfdecAsObjectClass *as_object_class = SWFDEC_AS_OBJECT_CLASS (klass);
 
   object_class->dispose = swfdec_load_object_dispose;
-
-  as_object_class->mark = swfdec_load_object_mark;
 }
 
 static void
@@ -162,70 +150,99 @@ swfdec_load_object_init (SwfdecLoadObject *load_object)
 }
 
 static void
-swfdec_load_object_got_loader (SwfdecPlayer *player, SwfdecLoader *loader, gpointer obj)
+swfdec_load_object_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean allow, gpointer obj)
 {
-  SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (obj);
+  SwfdecLoadObject *load = SWFDEC_LOAD_OBJECT (obj);
+
+  if (!allow) {
+    SWFDEC_WARNING ("SECURITY: no access to %s from %s",
+	load->url, swfdec_url_get_url (SWFDEC_FLASH_SECURITY (load->resource)->url));
 
-  if (loader == NULL) {
+    /* FIXME: call finish? */
+
+    /* unroot */
+    swfdec_player_unroot (player, load);
     return;
   }
-  load_object->loader = loader;
 
-  swfdec_stream_set_target (SWFDEC_STREAM (loader),
-      SWFDEC_STREAM_TARGET (load_object));
-  swfdec_loader_set_data_type (loader, SWFDEC_LOADER_DATA_TEXT);
+  load->loader = swfdec_loader_load (load->resource->loader, url, load->request, load->buffer);
+
+  swfdec_stream_set_target (SWFDEC_STREAM (load->loader), SWFDEC_STREAM_TARGET (load));
+  swfdec_loader_set_data_type (load->loader, SWFDEC_LOADER_DATA_TEXT);
 }
 
-static gboolean
-swfdec_load_object_load (SwfdecLoadObject *load_object, const char *url, 
-    SwfdecLoaderRequest request, SwfdecBuffer *data)
+/* perform security checks */
+static void
+swfdec_load_object_request (gpointer objectp, gpointer playerp)
 {
-  SwfdecPlayer *player;
-  SwfdecSecurity *sec;
-
-  g_return_val_if_fail (SWFDEC_IS_LOAD_OBJECT (load_object), FALSE);
-  g_return_val_if_fail (url != NULL, FALSE);
-
-  player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (load_object)->context);
-  swfdec_load_object_reset (load_object);
+  SwfdecLoadObject *load = SWFDEC_LOAD_OBJECT (objectp);
+  SwfdecPlayer *player = SWFDEC_PLAYER (playerp);
+  SwfdecURL *url;
+
+  /* FIXME: or is this relative to the player? */
+  url = swfdec_url_new_relative (SWFDEC_FLASH_SECURITY (load->resource)->url, load->url);
+  switch (SWFDEC_FLASH_SECURITY (load->resource)->sandbox) {
+    case SWFDEC_SANDBOX_REMOTE:
+    case SWFDEC_SANDBOX_LOCAL_NETWORK:
+    case SWFDEC_SANDBOX_LOCAL_TRUSTED:
+      if (swfdec_url_is_local (url)) {
+	swfdec_load_object_load (player, url, swfdec_url_is_local (url), load);
+      } else {
+	SwfdecURL *load_url = swfdec_url_new_components (
+	    swfdec_url_get_protocol (url), swfdec_url_get_host (url), 
+	    swfdec_url_get_port (url), "crossdomain.xml", NULL);
+	swfdec_player_allow_or_load (player, url, load_url,
+	  swfdec_load_object_load, load);
+	swfdec_url_free (load_url);
+      }
+      break;
+    case SWFDEC_SANDBOX_LOCAL_FILE:
+      swfdec_load_object_load (player, url, swfdec_url_is_local (url), load);
+      break;
+    case SWFDEC_SANDBOX_NONE:
+    default:
+      g_assert_not_reached ();
+      break;
+  }
 
-  /* get the current security */
-  g_assert (SWFDEC_AS_CONTEXT (player)->frame);
-  sec = SWFDEC_AS_CONTEXT (player)->frame->security;
+  swfdec_url_free (url);
+}
 
-  g_object_ref (load_object);
-  swfdec_player_request_resource (player, sec, url, request, data,
-      swfdec_load_object_got_loader, load_object, g_object_unref);
+static void
+swfdec_load_object_mark (gpointer object, gpointer player)
+{
+  SwfdecLoadObject *load = object;
 
-  return TRUE;
+  if (load->url)
+    swfdec_as_string_mark (load->url);
+  swfdec_as_object_mark (load->target);
 }
 
-SwfdecAsObject *
-swfdec_load_object_new (SwfdecAsObject *target, const char *url,
+void
+swfdec_load_object_create (SwfdecAsObject *target, const char *url,
     SwfdecLoaderRequest request, SwfdecBuffer *data,
     SwfdecLoadObjectProgress progress, SwfdecLoadObjectFinish finish)
 {
-  SwfdecLoadObject *load_object;
-
-  g_return_val_if_fail (SWFDEC_IS_AS_OBJECT (target), NULL);
-  g_return_val_if_fail (url != NULL, NULL);
-  g_return_val_if_fail (finish != NULL, NULL);
-
-  if (!swfdec_as_context_use_mem (target->context, sizeof (SwfdecLoadObject)))
-    return NULL;
-  load_object = SWFDEC_LOAD_OBJECT (g_object_new (
-	SWFDEC_TYPE_LOAD_OBJECT, NULL));
-  swfdec_as_object_add (SWFDEC_AS_OBJECT (load_object), target->context,
-      sizeof (SwfdecLoadObject));
-
-  load_object->target = target;
-  load_object->progress = progress;
-  load_object->finish = finish;
-
-  if (!swfdec_load_object_load (load_object, url, request, data))
-    return NULL;
-
-  swfdec_player_root (SWFDEC_PLAYER (target->context), load_object, (GFunc) swfdec_as_object_mark);
-
-  return SWFDEC_AS_OBJECT (load_object);
+  SwfdecPlayer *player;
+  SwfdecLoadObject *load;
+
+  g_return_if_fail (SWFDEC_IS_AS_OBJECT (target));
+  g_return_if_fail (url != NULL);
+  g_return_if_fail (finish != NULL);
+
+  player = SWFDEC_PLAYER (target->context);
+  load = g_object_new (SWFDEC_TYPE_LOAD_OBJECT, NULL);
+  swfdec_player_root_full (player, load, swfdec_load_object_mark, g_object_unref);
+
+  load->target = target;
+  load->url = url;
+  load->request = request;
+  load->buffer = data;
+  load->progress = progress;
+  load->finish = finish;
+  /* get the current security */
+  g_assert (SWFDEC_AS_CONTEXT (player)->frame);
+  load->resource = g_object_ref (SWFDEC_AS_CONTEXT (player)->frame->security);
+  g_assert (SWFDEC_IS_RESOURCE (load->resource));
+  swfdec_player_request_resource (player, swfdec_load_object_request, load, NULL);
 }
diff --git a/libswfdec/swfdec_load_object.h b/libswfdec/swfdec_load_object.h
index 00f4451..5f36625 100644
--- a/libswfdec/swfdec_load_object.h
+++ b/libswfdec/swfdec_load_object.h
@@ -1,5 +1,5 @@
 /* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org>
  *               2007 Pekka Lampila <pekka.lampila at iki.fi>
  *
  * This library is free software; you can redistribute it and/or
@@ -23,6 +23,7 @@
 
 #include <libswfdec/swfdec.h>
 #include <libswfdec/swfdec_as_object.h>
+#include <libswfdec/swfdec_resource.h>
 
 G_BEGIN_DECLS
 
@@ -43,22 +44,26 @@ typedef void (* SwfdecLoadObjectFinish) (SwfdecAsObject *target,
 #define SWFDEC_LOAD_OBJECT_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_LOAD_OBJECT, SwfdecLoadObjectClass))
 
 struct _SwfdecLoadObject {
-  SwfdecAsObject	object;
+  GObject			object;
+  
+  const char *			url;		/* GC'ed url to request */
+  SwfdecLoaderRequest		request;	/* type of request */
+  SwfdecBuffer *		buffer;		/* data to send */
+  SwfdecLoader *		loader;		/* loader when loading or NULL */
 
-  SwfdecLoader *	loader;		/* loader when loading or NULL */
-
-  SwfdecAsObject	*target;	/* target object */
-  SwfdecLoadObjectProgress progress;
-  SwfdecLoadObjectFinish finish;
+  SwfdecResource *		resource;	/* resource that inited the loading */
+  SwfdecAsObject *		target;		/* target object */
+  SwfdecLoadObjectProgress	progress;	/* progress callback */
+  SwfdecLoadObjectFinish	finish;		/* finish callback */
 };
 
 struct _SwfdecLoadObjectClass {
-  SwfdecAsObjectClass	object_class;
+  GObjectClass			object_class;
 };
 
 GType		swfdec_load_object_get_type	(void);
 
-SwfdecAsObject *swfdec_load_object_new		(SwfdecAsObject *		target,
+void		swfdec_load_object_create     	(SwfdecAsObject *		target,
 						 const char *			url,
 						 SwfdecLoaderRequest		request,
 						 SwfdecBuffer *			data,
diff --git a/libswfdec/swfdec_load_object_as.c b/libswfdec/swfdec_load_object_as.c
index 51656d5..012249e 100644
--- a/libswfdec/swfdec_load_object_as.c
+++ b/libswfdec/swfdec_load_object_as.c
@@ -65,30 +65,27 @@ swfdec_load_object_on_progress (SwfdecAsObject *target, glong size,
 
 SWFDEC_AS_NATIVE (301, 0, swfdec_load_object_as_load)
 void
-swfdec_load_object_as_load (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc,
+swfdec_load_object_as_load (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
     SwfdecAsValue *argv, SwfdecAsValue *rval)
 {
   SwfdecAsValue val;
   const char *url;
 
-  if (argc < 1 || obj == NULL) {
-    SWFDEC_AS_VALUE_SET_BOOLEAN (rval, FALSE);
-    return;
-  }
+  SWFDEC_AS_VALUE_SET_BOOLEAN (rval, FALSE);
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_AS_OBJECT, &object, "s", &url);
 
-  url = swfdec_as_value_to_string (cx, &argv[0]);
-  swfdec_load_object_new (obj, url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL,
+  swfdec_load_object_create (object, url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL,
       swfdec_load_object_on_progress, swfdec_load_object_on_finish);
 
   SWFDEC_AS_VALUE_SET_INT (&val, 0);
-  swfdec_as_object_set_variable_and_flags (obj, SWFDEC_AS_STR__bytesLoaded,
+  swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR__bytesLoaded,
       &val, SWFDEC_AS_VARIABLE_HIDDEN);
   SWFDEC_AS_VALUE_SET_UNDEFINED (&val);
-  swfdec_as_object_set_variable_and_flags (obj, SWFDEC_AS_STR__bytesTotal,
+  swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR__bytesTotal,
       &val, SWFDEC_AS_VARIABLE_HIDDEN);
 
   SWFDEC_AS_VALUE_SET_BOOLEAN (&val, FALSE);
-  swfdec_as_object_set_variable_and_flags (obj, SWFDEC_AS_STR_loaded, &val,
+  swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR_loaded, &val,
       SWFDEC_AS_VARIABLE_HIDDEN);
 
   SWFDEC_AS_VALUE_SET_BOOLEAN (rval, TRUE);
@@ -107,36 +104,27 @@ void
 swfdec_load_object_as_sendAndLoad (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
 {
-  const char *url, *data;
+  const char *url, *data, *method_string;
   SwfdecAsObject *target;
   SwfdecAsValue val;
   SwfdecBuffer *buffer;
+  SwfdecLoaderRequest method;
 
-  if (object == NULL)
-    return;
-
-  if (argc < 2)
-    return;
-
-  url = swfdec_as_value_to_string (cx, &argv[0]);
-  target = swfdec_as_value_to_object (cx, &argv[0]);
-  if (target == NULL)
-    return;
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_AS_OBJECT, &object, "sO|s", &url, &target, &method_string);
 
-  // FIXME: support for contentType is missing
+  SWFDEC_FIXME ("support for contentType is missing");
 
-  swfdec_as_object_call (object, SWFDEC_AS_STR_toString, 0, NULL, &val);
-  data = swfdec_as_value_to_string (cx, &val);
-  if (strlen (data) > 0) {
-    buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (data) + 1),
-	strlen (data));
-    swfdec_load_object_new (target, url, SWFDEC_LOADER_REQUEST_POST, buffer,
-	swfdec_load_object_on_progress, swfdec_load_object_on_finish);
-    swfdec_buffer_unref (buffer);
+  if (method_string == NULL || g_ascii_strcasecmp (method_string, "get") == 0) {
+    method = SWFDEC_LOADER_REQUEST_GET;
   } else {
-    swfdec_load_object_new (target, url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL,
-	swfdec_load_object_on_progress, swfdec_load_object_on_finish);
+    method = SWFDEC_LOADER_REQUEST_POST;
   }
+  SWFDEC_AS_VALUE_SET_OBJECT (&val, object);
+  data = swfdec_as_value_to_string (cx, &val);
+  buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (data) + 1),
+      strlen (data) + 1);
+  swfdec_load_object_create (target, url, method, buffer,
+      swfdec_load_object_on_progress, swfdec_load_object_on_finish);
 
   SWFDEC_AS_VALUE_SET_INT (&val, 0);
   swfdec_as_object_set_variable_and_flags (target, SWFDEC_AS_STR__bytesLoaded,
diff --git a/libswfdec/swfdec_loader.c b/libswfdec/swfdec_loader.c
index 6b51e61..acf6944 100644
--- a/libswfdec/swfdec_loader.c
+++ b/libswfdec/swfdec_loader.c
@@ -208,19 +208,18 @@ swfdec_loader_init (SwfdecLoader *loader)
 
 SwfdecLoader *
 swfdec_loader_load (SwfdecLoader *loader, const SwfdecURL *url,
-    SwfdecLoaderRequest request, const char *data, gsize data_len)
+    SwfdecLoaderRequest request, SwfdecBuffer *buffer)
 {
   SwfdecLoader *ret;
   SwfdecLoaderClass *klass;
 
   g_return_val_if_fail (SWFDEC_IS_LOADER (loader), NULL);
   g_return_val_if_fail (url != NULL, NULL);
-  g_return_val_if_fail (data != NULL || data_len == 0, NULL);
 
   klass = SWFDEC_LOADER_GET_CLASS (loader);
   g_return_val_if_fail (klass->load != NULL, NULL);
   ret = g_object_new (G_OBJECT_CLASS_TYPE (klass), "url", url, NULL);
-  klass->load (ret, loader, request, data, data_len);
+  klass->load (ret, loader, request, buffer);
   return ret;
 }
 
diff --git a/libswfdec/swfdec_loader.h b/libswfdec/swfdec_loader.h
index f668fca..e22cabd 100644
--- a/libswfdec/swfdec_loader.h
+++ b/libswfdec/swfdec_loader.h
@@ -72,8 +72,7 @@ struct _SwfdecLoaderClass
   void			(* load)	(SwfdecLoader *			loader, 
 					 SwfdecLoader *			parent,
 					 SwfdecLoaderRequest		request,
-					 const char *			data,
-					 gsize				data_len);
+					 SwfdecBuffer *	           	buffer);
 };
 
 GType		swfdec_loader_get_type		(void);
diff --git a/libswfdec/swfdec_loader_internal.h b/libswfdec/swfdec_loader_internal.h
index 444610c..bb7bf67 100644
--- a/libswfdec/swfdec_loader_internal.h
+++ b/libswfdec/swfdec_loader_internal.h
@@ -36,8 +36,7 @@ void			swfdec_stream_set_target	(SwfdecStream *		stream,
 SwfdecLoader *		swfdec_loader_load		(SwfdecLoader *		loader,
 							 const SwfdecURL *    	url,
 							 SwfdecLoaderRequest	request,
-							 const char *		data,
-							 gsize			data_len);
+							 SwfdecBuffer *		buffer);
 void			swfdec_loader_set_data_type	(SwfdecLoader *		loader,
 							 SwfdecLoaderDataType	type);
 char *			swfdec_loader_get_text		(SwfdecLoader *		loader,
diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c
index 90147a3..3dd6902 100644
--- a/libswfdec/swfdec_movie.c
+++ b/libswfdec/swfdec_movie.c
@@ -43,7 +43,6 @@
 #include "swfdec_resource.h"
 #include "swfdec_system.h"
 #include "swfdec_utils.h"
-#include "swfdec_load_object.h"
 #include "swfdec_as_internal.h"
 
 /*** MOVIE ***/
diff --git a/libswfdec/swfdec_movie_clip_loader.c b/libswfdec/swfdec_movie_clip_loader.c
index f3b9500..77d8704 100644
--- a/libswfdec/swfdec_movie_clip_loader.c
+++ b/libswfdec/swfdec_movie_clip_loader.c
@@ -29,7 +29,6 @@
 #include "swfdec_decoder.h"
 #include "swfdec_player_internal.h"
 #include "swfdec_resource.h"
-#include "swfdec_resource_request.h"
 
 
 G_DEFINE_TYPE (SwfdecMovieClipLoader, swfdec_movie_clip_loader, SWFDEC_TYPE_AS_OBJECT)
@@ -75,7 +74,8 @@ swfdec_movie_clip_loader_loadClip (SwfdecAsContext *cx, SwfdecAsObject *object,
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "ss", &url, &target);
 
-  swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader);
+  swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, 
+      SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader, TRUE);
 }
 
 SWFDEC_AS_NATIVE (112, 102, swfdec_movie_clip_loader_unloadClip)
@@ -88,7 +88,8 @@ swfdec_movie_clip_loader_unloadClip (SwfdecAsContext *cx, SwfdecAsObject *object
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "s", &target);
 
-  swfdec_resource_load (SWFDEC_PLAYER (cx), target, "", SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader);
+  swfdec_resource_load (SWFDEC_PLAYER (cx), target, "", 
+      SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader, TRUE);
 }
 
 SWFDEC_AS_NATIVE (112, 101, swfdec_movie_clip_loader_getProgress)
diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c
index 324da0f..5a1e935 100644
--- a/libswfdec/swfdec_net_stream.c
+++ b/libswfdec/swfdec_net_stream.c
@@ -28,9 +28,11 @@
 #include "swfdec_as_strings.h"
 #include "swfdec_audio_flv.h"
 #include "swfdec_debug.h"
+#include "swfdec_flash_security.h"
 #include "swfdec_loader_internal.h"
+#include "swfdec_player_internal.h"
+#include "swfdec_resource.h"
 #include "swfdec_stream_target.h"
-#include "swfdec_resource_request.h"
 
 /* NB: code and level must be rooted gc-strings */
 static void
@@ -468,31 +470,65 @@ swfdec_net_stream_new (SwfdecNetConnection *conn)
 }
 
 static void
-swfdec_net_stream_request_callback (SwfdecPlayer *player, SwfdecLoader *loader,
-    gpointer data)
+swfdec_net_stream_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean allowed, gpointer streamp)
 {
-  SwfdecNetStream *stream = data;
+  SwfdecNetStream *stream = streamp;
+  SwfdecLoader *loader;
 
-  if (loader) {
+  if (allowed) {
+    loader = swfdec_loader_load (player->priv->resource->loader, url, 
+	SWFDEC_LOADER_REQUEST_DEFAULT, NULL);
     swfdec_net_stream_set_loader (stream, loader);
     g_object_unref (loader);
+  } else {
+    SWFDEC_WARNING ("SECURITY: no access to %s from NetStream",
+	swfdec_url_get_url (url));
   }
 }
 
 void
-swfdec_net_stream_set_url (SwfdecNetStream *stream, const char *url)
+swfdec_net_stream_set_url (SwfdecNetStream *stream, const char *url_string)
 {
+  SwfdecPlayer *player;
   SwfdecAsContext *cx;
+  SwfdecURL *url;
 
   g_return_if_fail (SWFDEC_IS_NET_STREAM (stream));
   g_return_if_fail (url != NULL);
 
-  /* FIXME: use the connection once connections are implemented */
   cx = SWFDEC_AS_OBJECT (stream)->context;
+  player = SWFDEC_PLAYER (cx);
   g_assert (cx->frame);
-  swfdec_player_request_resource_now (SWFDEC_PLAYER (cx), cx->frame->security, 
-      url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL,
-      swfdec_net_stream_request_callback, NULL, stream);
+  url = swfdec_url_new_relative (SWFDEC_FLASH_SECURITY (player->priv->resource)->url, url_string);
+  if (swfdec_url_is_local (url)) {
+    swfdec_net_stream_load (player, url, TRUE, stream);
+  } else {
+    switch (SWFDEC_FLASH_SECURITY (cx->frame->security)->sandbox) {
+      case SWFDEC_SANDBOX_REMOTE:
+	swfdec_net_stream_load (player, url, TRUE, stream);
+	break;
+      case SWFDEC_SANDBOX_LOCAL_NETWORK:
+      case SWFDEC_SANDBOX_LOCAL_TRUSTED:
+	{
+	  SwfdecURL *load_url = swfdec_url_new_components (
+	      swfdec_url_get_protocol (url), swfdec_url_get_host (url), 
+	      swfdec_url_get_port (url), "crossdomain.xml", NULL);
+	  swfdec_player_allow_or_load (player, url, load_url,
+	    swfdec_net_stream_load, stream);
+	  swfdec_url_free (load_url);
+	}
+	break;
+      case SWFDEC_SANDBOX_LOCAL_FILE:
+	swfdec_net_stream_load (player, url, FALSE, stream);
+	break;
+      case SWFDEC_SANDBOX_NONE:
+      default:
+	g_assert_not_reached ();
+	break;
+    }
+  }
+
+  swfdec_url_free (url);
 }
 
 void
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index eef2dce..7bcce79 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -44,7 +44,6 @@
 #include "swfdec_marshal.h"
 #include "swfdec_movie.h"
 #include "swfdec_resource.h"
-#include "swfdec_resource_request.h"
 #include "swfdec_script_internal.h"
 #include "swfdec_sprite_movie.h"
 #include "swfdec_utils.h"
@@ -873,7 +872,7 @@ swfdec_player_dispose (GObject *object)
   guint i;
 
   swfdec_player_stop_all_sounds (player);
-  swfdec_player_resource_request_finish (player);
+  swfdec_function_list_clear (&priv->resource_requests);
   g_hash_table_destroy (priv->registered_classes);
   g_hash_table_destroy (priv->scripting_callbacks);
 
@@ -887,8 +886,6 @@ swfdec_player_dispose (GObject *object)
   while (priv->roots)
     swfdec_movie_destroy (priv->roots->data);
   if (priv->resource) {
-    swfdec_flash_security_free_pending (
-	SWFDEC_FLASH_SECURITY (priv->resource));
     g_object_unref (priv->resource);
     priv->resource = NULL;
   }
@@ -1345,7 +1342,7 @@ swfdec_player_iterate (SwfdecTimeout *timeout)
       swfdec_movie_destroy (cur);
   }
   swfdec_player_execute_on_load_init (player);
-  swfdec_player_resource_request_perform (player);
+  swfdec_function_list_execute_and_clear (&priv->resource_requests, player);
   swfdec_player_perform_actions (player);
 }
 
@@ -1735,6 +1732,7 @@ swfdec_player_class_init (SwfdecPlayerClass *klass)
    * for keyboard shortcuts or similar.</para></listitem>
    * </itemizedlist>
    */
+  /* FIXME: document fscommand:toggle */
   signals[FSCOMMAND] = g_signal_new ("fscommand", G_TYPE_FROM_CLASS (klass),
       G_SIGNAL_RUN_LAST, 0, NULL, NULL, swfdec_marshal_VOID__STRING_STRING,
       G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);
@@ -1798,8 +1796,6 @@ swfdec_player_init (SwfdecPlayer *player)
   priv->iterate_timeout.callback = swfdec_player_iterate;
   priv->stage_width = -1;
   priv->stage_height = -1;
-
-  swfdec_player_resource_request_init (player);
 }
 
 void
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index bb59e8e..dd9184b 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -42,7 +42,7 @@ typedef enum {
 
 typedef void (* SwfdecActionFunc) (gpointer object, gpointer data);
 typedef gboolean (* SwfdecAudioRemoveFunc) (SwfdecAudio *audio, gpointer data);
-typedef void (* SwfdecPolicyFunc) (SwfdecPlayer *player, gboolean allow, gpointer data);
+typedef void (* SwfdecPolicyFunc) (SwfdecPlayer *player, const SwfdecURL *url, gboolean allow, gpointer data);
 
 typedef struct _SwfdecTimeout SwfdecTimeout;
 struct _SwfdecTimeout {
@@ -64,7 +64,6 @@ struct _SwfdecPlayerPrivate
   guint			width;			/* width of movie */
   guint			height;			/* height of movie */
   GList *		roots;			/* all the root movies */
-  GSList *		resource_requests;	/* all external requested URIs - see swfdec_resource_request.[ch] */
   SwfdecCache *		cache;			/* player cache */
   gboolean		bgcolor_set;		/* TRUE if the background color has been set */
   SwfdecColor		bgcolor;		/* background color */
@@ -87,6 +86,7 @@ struct _SwfdecPlayerPrivate
   int			offset_x;		/* x offset from top left edge after scaling */
   int			offset_y;		/* y offset from top left edge after scaling */
 
+  SwfdecFunctionList	resource_requests;	/* all external requested URIs - see swfdec_resource_request.[ch] */
   guint			unnamed_count;		/* variable used for naming unnamed movies */
   /* ActionScript */
   SwfdecFunctionList	rooted;	  		/* all the objects we keep track of */
@@ -159,8 +159,12 @@ void		swfdec_player_perform_actions	(SwfdecPlayer *		player);
 
 #define swfdec_player_root(player, data, mark_func) \
     swfdec_function_list_add (&(player)->priv->rooted, (mark_func), (data), NULL)
+#define swfdec_player_root_full(player, data, mark_func, destroy_notify) \
+    swfdec_function_list_add (&(player)->priv->rooted, (mark_func), (data), (destroy_notify))
 #define swfdec_player_unroot(player, data) \
     swfdec_function_list_remove (&(player)->priv->rooted, (data))
+#define swfdec_player_request_resource(player, request_func, data, destroy_notify) \
+    swfdec_function_list_add (&(player)->priv->resource_requests, (request_func), (data), (destroy_notify))
 SwfdecAsObject *swfdec_player_get_export_class	(SwfdecPlayer *		player,
 						 const char *		name);
 void		swfdec_player_set_export_class	(SwfdecPlayer *		player,
diff --git a/libswfdec/swfdec_policy_file.c b/libswfdec/swfdec_policy_file.c
index dd4e0ca..9fbb768 100644
--- a/libswfdec/swfdec_policy_file.c
+++ b/libswfdec/swfdec_policy_file.c
@@ -147,7 +147,7 @@ swfdec_policy_file_finished_loading (SwfdecPolicyFile *file, const char *text)
     for (walk = file->requests; walk; walk = walk->next) {
       SwfdecPolicyFileRequest *request = walk->data;
       gboolean allow = swfdec_player_allow_now (file->player, request->url);
-      request->func (file->player, allow, request->data);
+      request->func (file->player, request->url, allow, request->data);
       swfdec_policy_file_request_free (request);
     }
     g_slist_free (file->requests);
@@ -251,7 +251,7 @@ swfdec_policy_file_new (SwfdecPlayer *player, const SwfdecURL *url)
     SWFDEC_FIXME ("implement xmlsocket: protocol");
   } else {
     file->stream = SWFDEC_STREAM (swfdec_loader_load (player->priv->resource->loader,
-	  url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0));
+	  url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL));
     swfdec_stream_set_target (file->stream, SWFDEC_STREAM_TARGET (file));
   }
   player->priv->loading_policy_files = 
@@ -329,7 +329,7 @@ swfdec_player_allow_or_load (SwfdecPlayer *player, const SwfdecURL *url,
   g_return_if_fail (func);
 
   if (swfdec_player_allow_now (player, url)) {
-    func (player, TRUE, data);
+    func (player, url, TRUE, data);
     return;
   }
   if (load_url)
@@ -337,7 +337,7 @@ swfdec_player_allow_or_load (SwfdecPlayer *player, const SwfdecURL *url,
 
   priv = player->priv;
   if (priv->loading_policy_files == NULL) {
-    func (player, FALSE, data);
+    func (player, url, FALSE, data);
     return;
   }
   request = g_slice_new (SwfdecPolicyFileRequest);
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index 08113e3..d269b6a 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -37,7 +37,6 @@
 #include "swfdec_loader_internal.h"
 #include "swfdec_movie_clip_loader.h"
 #include "swfdec_player_internal.h"
-#include "swfdec_resource_request.h"
 #include "swfdec_script.h"
 #include "swfdec_sprite.h"
 #include "swfdec_stream_target.h"
@@ -481,44 +480,137 @@ swfdec_resource_add_export (SwfdecResource *instance, SwfdecCharacter *character
   g_hash_table_insert (instance->export_names, g_object_ref (character), g_strdup (name));
 }
 
+typedef struct _SwfdecResourceLoad SwfdecResourceLoad;
+struct _SwfdecResourceLoad {
+  SwfdecResource *		resource;
+  char *			target;
+  char *			url;
+  SwfdecLoaderRequest		request;
+  SwfdecBuffer *		buffer;
+  SwfdecMovieClipLoader *	loader;
+  gboolean			target_is_movie;
+};
+
+static void
+swfdec_resource_load_free (gpointer loadp)
+{
+  SwfdecResourceLoad *load = loadp;
+
+  swfdec_player_unroot (SWFDEC_FLASH_SECURITY (load->resource)->player, load);
+  g_object_unref (load->resource);
+  g_free (load->url);
+  g_free (load->target);
+  if (load->buffer)
+    swfdec_buffer_unref (load->buffer);
+  g_slice_free (SwfdecResourceLoad, load);
+}
+
 static void
-swfdec_resource_do_load (SwfdecPlayer *player, SwfdecLoader *loader, gpointer resourcep)
+swfdec_resource_load_mark (gpointer loadp, gpointer playerp)
 {
-  SwfdecResource *resource = SWFDEC_RESOURCE (resourcep);
+  SwfdecResourceLoad *load = loadp;
 
-  if (loader == NULL) {
-    /* *** Security Sandbox Violation *** */
+  swfdec_resource_mark (load->resource);
+  if (load->loader)
+    swfdec_as_object_mark (SWFDEC_AS_OBJECT (load->loader));
+}
+
+static void
+swfdec_resource_do_load (SwfdecPlayer *player, const SwfdecURL *url, gboolean allowed, gpointer loadp)
+{
+  SwfdecResourceLoad *load = loadp;
+  SwfdecResource *resource;
+  SwfdecLoader *loader;
+  
+  resource = g_object_new (SWFDEC_TYPE_RESOURCE, NULL);
+  resource->version = load->resource->version;
+  SWFDEC_FLASH_SECURITY (resource)->player = player;
+  resource->target = g_strdup (load->target);
+  resource->clip_loader = g_object_ref (load->loader);
+  swfdec_player_root (player, resource, (GFunc) swfdec_resource_mark);
+
+  if (!allowed) {
+    SWFDEC_WARNING ("SECURITY: no access to %s from %s",
+	load->url, swfdec_url_get_url (SWFDEC_FLASH_SECURITY (load->resource)->url));
+    /* FIXME: is replacing correct? */
     swfdec_resource_emit_error (resource, SWFDEC_AS_STR_IllegalRequest);
+    g_object_unref (resource);
     return;
   }
+
+  loader = swfdec_loader_load (load->resource->loader, url, load->request, load->buffer);
   swfdec_resource_set_loader (resource, loader);
   g_object_unref (loader);
 }
 
 static void
-swfdec_resource_do_unload (SwfdecPlayer *player, const char *target, gpointer resourcep)
+swfdec_resource_load_request (gpointer loadp, gpointer playerp)
 {
-  SwfdecResource *resource = SWFDEC_RESOURCE (resourcep);
-  SwfdecSpriteMovie *movie;
-  
-  movie = (SwfdecSpriteMovie *) swfdec_action_lookup_object (
-      SWFDEC_AS_CONTEXT (player), player->priv->roots->data, 
-      target, target + strlen (target));
-  if (!SWFDEC_IS_SPRITE_MOVIE (movie)) {
-    SWFDEC_DEBUG ("no movie, not unloading");
+  SwfdecResourceLoad *load = loadp;
+  SwfdecPlayer *player = playerp;
+  SwfdecURL *url;
+
+  /* empty URL means unload (yay!) */
+  if (load->url[0] == '\0') {
+    SwfdecSpriteMovie *movie;
+      
+    movie = (SwfdecSpriteMovie *) swfdec_action_lookup_object (
+	SWFDEC_AS_CONTEXT (player), player->priv->roots->data, 
+	load->target, load->target + strlen (load->target));
+    if (!SWFDEC_IS_SPRITE_MOVIE (movie)) {
+      SWFDEC_DEBUG ("no movie, not unloading");
+      return;
+    }
+    swfdec_resource_replace_movie (movie, load->resource);
+    return;
+  }
+
+  /* fscommand? */
+  if (g_ascii_strncasecmp (load->url, "FSCommand:", 10) == 0) {
+    char *command = load->url + 10;
+    g_signal_emit_by_name (player, "fscommand", command, load->target);
+    return;
+  }
+
+  /* LAUNCH command (aka getURL) */
+  if (!load->target_is_movie && swfdec_player_get_level (player, load->target) < 0) {
+    swfdec_player_launch (player, load->request, load->url,load->target, load->buffer);
     return;
   }
-  swfdec_resource_replace_movie (movie, resource);
+
+  url = swfdec_url_new_relative (SWFDEC_FLASH_SECURITY (player->priv->resource)->url, load->url);
+  switch (SWFDEC_FLASH_SECURITY (load->resource)->sandbox) {
+    case SWFDEC_SANDBOX_REMOTE:
+      swfdec_resource_do_load (player, url, !swfdec_url_is_local (url), load);
+      break;
+    case SWFDEC_SANDBOX_LOCAL_NETWORK:
+    case SWFDEC_SANDBOX_LOCAL_TRUSTED:
+      if (!swfdec_url_is_local (url)) {
+	SWFDEC_FIXME ("Adobe claims you need to be allowed by policy files now, "
+	    "we don't check that though");
+      }
+      swfdec_resource_do_load (player, url, TRUE, load);
+      break;
+    case SWFDEC_SANDBOX_LOCAL_FILE:
+      swfdec_resource_do_load (player, url, swfdec_url_is_local (url), load);
+      break;
+    case SWFDEC_SANDBOX_NONE:
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+  swfdec_url_free (url);
 }
 
 /* NB: must be called from a script */
+/* FIXME: 7 arguments?! */
 void
 swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url, 
-    SwfdecLoaderRequest request, SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader)
+    SwfdecLoaderRequest request, SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader,
+    gboolean target_is_movie)
 {
   SwfdecSpriteMovie *movie;
-  SwfdecResource *resource;
-  char *path;
+  SwfdecResourceLoad *load;
 
   g_return_if_fail (SWFDEC_IS_PLAYER (player));
   g_return_if_fail (target != NULL);
@@ -526,32 +618,30 @@ swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url,
   g_return_if_fail (loader == NULL || SWFDEC_IS_MOVIE_CLIP_LOADER (loader));
 
   g_assert (SWFDEC_AS_CONTEXT (player)->frame != NULL);
-  movie = (SwfdecSpriteMovie *) swfdec_player_get_movie_from_string (player, target);
-  if (SWFDEC_IS_SPRITE_MOVIE (movie)) {
-    path = swfdec_movie_get_path (SWFDEC_MOVIE (movie), TRUE);
-  } else if (swfdec_player_get_level (player, target) >= 0) {
-    path = g_strdup (target);
-  } else {
-    SWFDEC_WARNING ("%s does not reference a movie, not loading %s", target, url);
-    return;
-  }
-  if (url[0] == '\0') {
-    if (movie) {
-      resource = g_object_ref (SWFDEC_MOVIE (movie)->resource);
-      swfdec_player_request_unload (player, path, swfdec_resource_do_unload, resource, g_object_unref);
+  load = g_slice_new (SwfdecResourceLoad);
+
+  if (target_is_movie) {
+    movie = (SwfdecSpriteMovie *) swfdec_player_get_movie_from_string (player, target);
+    if (SWFDEC_IS_SPRITE_MOVIE (movie)) {
+      load->target = swfdec_movie_get_path (SWFDEC_MOVIE (movie), TRUE);
+    } else if (swfdec_player_get_level (player, target) >= 0) {
+      load->target = g_strdup (target);
+    } else {
+      SWFDEC_WARNING ("%s does not reference a movie, not loading %s", target, url);
+      return;
     }
-    g_free (path);
   } else {
-    resource = g_object_new (SWFDEC_TYPE_RESOURCE, NULL);
-    resource->version = SWFDEC_AS_CONTEXT (player)->version;
-    SWFDEC_FLASH_SECURITY (resource)->player = player;
-    resource->target = path;
-    if (loader)
-      resource->clip_loader = g_object_ref (loader);
-    swfdec_player_root (player, resource, (GFunc) swfdec_resource_mark);
-    swfdec_player_request_resource (player, SWFDEC_AS_CONTEXT (player)->frame->security, 
-	url, request, buffer, swfdec_resource_do_load, resource, g_object_unref);
+    load->target = g_strdup (target);
   }
+  load->resource = SWFDEC_RESOURCE (g_object_ref (SWFDEC_AS_CONTEXT (player)->frame->security));
+  load->url = g_strdup (url);
+  load->request = request;
+  load->buffer = buffer;
+  load->loader = loader;
+  load->target_is_movie = target_is_movie;
+
+  swfdec_player_root (player, load, swfdec_resource_load_mark);
+  swfdec_player_request_resource (player, swfdec_resource_load_request, load, swfdec_resource_load_free);
 }
 
 gboolean
diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h
index 178ae5a..5de9c9b 100644
--- a/libswfdec/swfdec_resource.h
+++ b/libswfdec/swfdec_resource.h
@@ -73,6 +73,7 @@ GType		swfdec_resource_get_type	  	(void);
 SwfdecResource *swfdec_resource_new			(SwfdecPlayer *		player,
 							 SwfdecLoader *		loader,
 							 const char *		variables);
+
 void		swfdec_resource_mark			(SwfdecResource *	resource);
 
 gboolean	swfdec_resource_emit_on_load_init	(SwfdecResource *	resource);
@@ -89,7 +90,8 @@ void		swfdec_resource_load			(SwfdecPlayer *		player,
 							 const char *		url,
 							 SwfdecLoaderRequest	request,
 							 SwfdecBuffer *		buffer,
-							 SwfdecMovieClipLoader *loader);
+							 SwfdecMovieClipLoader *loader,
+							 gboolean		target_is_movie);
 
 
 G_END_DECLS
diff --git a/libswfdec/swfdec_resource_request.c b/libswfdec/swfdec_resource_request.c
deleted file mode 100644
index e367993..0000000
--- a/libswfdec/swfdec_resource_request.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include "swfdec_resource_request.h"
-#include "swfdec_as_interpret.h"
-#include "swfdec_debug.h"
-#include "swfdec_loader_internal.h"
-#include "swfdec_player_internal.h"
-#include "swfdec_resource.h"
-#include "swfdec_sprite_movie.h"
-
-static void
-swfdec_resource_request_free (SwfdecResourceRequest *request)
-{
-  g_return_if_fail (request != NULL);
-
-  if (request->security)
-    g_object_unref (request->security);
-  if (request->destroy)
-    request->destroy (request->data);
-  g_free (request->url);
-  if (request->buffer)
-    swfdec_buffer_unref (request->buffer);
-  g_free (request->command);
-  g_free (request->value);
-  g_free (request->target);
-  g_slice_free (SwfdecResourceRequest, request);
-}
-
-typedef struct {
-  SwfdecPlayer *		player;
-  SwfdecLoaderRequest		request;
-  SwfdecBuffer *		buffer;
-  SwfdecResourceFunc		callback;
-  SwfdecResourceAbortFunc	abort;
-  gpointer			user_data;
-} AllowCallbackData;
-
-static void
-swfdec_player_request_resource_allow_callback (const SwfdecURL *url,
-    int status, gpointer data_)
-{
-  AllowCallbackData *data = data_;
-  SwfdecLoader *loader;
-
-  if (status < 0) {
-    if (data->abort != NULL)
-      data->abort (data->player, data->user_data);
-    g_free (data);
-    return;
-  }
-
-  if (status == 0) {
-    SWFDEC_ERROR ("not allowing access to %s", swfdec_url_get_url (url));
-    loader = NULL;
-  } else {
-    if (data->buffer) {
-      loader = swfdec_loader_load (data->player->priv->resource->loader, url,
-	  data->request, (const char *) data->buffer->data,
-	  data->buffer->length);
-    } else {
-      loader = swfdec_loader_load (data->player->priv->resource->loader, url,
-	  data->request, NULL, 0);
-    }
-  }
-
-  data->callback (data->player, loader, data->user_data);
-
-  g_free (data);
-}
-
-void
-swfdec_player_request_resource_now (SwfdecPlayer *player,
-    SwfdecSecurity *security, const char *url, SwfdecLoaderRequest req,
-    SwfdecBuffer *buffer, SwfdecResourceFunc callback,
-    SwfdecResourceAbortFunc abort, gpointer user_data)
-{
-  SwfdecURL *absolute;
-  AllowCallbackData *data;
-
-  g_assert (SWFDEC_IS_PLAYER (player));
-  g_assert (SWFDEC_IS_SECURITY (security));
-  g_assert (url != NULL);
-
-  data = g_new (AllowCallbackData, 1);
-  data->player = player;
-  data->request = req;
-  data->buffer = buffer;
-  data->callback = callback;
-  data->abort = abort;
-  data->user_data = user_data;
-
-  /* create absolute url first */
-  absolute = swfdec_url_new_relative (swfdec_loader_get_url (player->priv->resource->loader), url);
-
-  swfdec_player_request_resource_allow_callback (absolute, TRUE, data);
-
-  swfdec_url_free (absolute);
-}
-
-static void
-swfdec_request_resource_perform_fscommand (SwfdecPlayer *player, SwfdecResourceRequest *request)
-{
-  g_signal_emit_by_name (player, "fscommand", request->command, request->value);
-  swfdec_resource_request_free (request);
-}
-
-static void
-swfdec_request_resource_perform_load_callback (SwfdecPlayer *player,
-    SwfdecLoader *loader, gpointer data)
-{
-  SwfdecResourceRequest *request = data;
-
-  request->func (player, loader, request->data);
-  swfdec_resource_request_free (request);
-}
-
-static void
-swfdec_request_resource_perform_load_abort_callback (SwfdecPlayer *player,
-    gpointer data)
-{
-  SwfdecResourceRequest *request = data;
-
-  swfdec_resource_request_free (request);
-}
-
-static void
-swfdec_request_resource_perform_load (SwfdecPlayer *player, SwfdecResourceRequest *request)
-{
-  g_assert (player->priv->resource);
-  swfdec_player_request_resource_now (player, request->security,
-      request->url, request->request, request->buffer,
-      swfdec_request_resource_perform_load_callback,
-      swfdec_request_resource_perform_load_abort_callback, request);
-}
-
-static void
-swfdec_request_resource_perform_unload (SwfdecPlayer *player, SwfdecResourceRequest *request)
-{
-  request->unload (player, request->target, request->data);
-  swfdec_resource_request_free (request);
-}
-
-static void
-swfdec_request_resource_perform_one (gpointer requestp, gpointer player)
-{
-  SwfdecResourceRequest *request = requestp;
-
-  switch (request->type) {
-    case SWFDEC_RESOURCE_REQUEST_LOAD:
-      swfdec_request_resource_perform_load (player, request);
-      break;
-    case SWFDEC_RESOURCE_REQUEST_FSCOMMAND:
-      swfdec_request_resource_perform_fscommand (player, request);
-      break;
-    case SWFDEC_RESOURCE_REQUEST_UNLOAD:
-      swfdec_request_resource_perform_unload (player, request);
-      break;
-    default:
-      g_assert_not_reached ();
-      swfdec_resource_request_free (request);
-      break;
-  }
-}
-
-void
-swfdec_player_resource_request_perform (SwfdecPlayer *player)
-{
-  GSList *list;
-
-  g_return_if_fail (SWFDEC_IS_PLAYER (player));
-
-  list = player->priv->resource_requests;
-  player->priv->resource_requests = NULL;
-  g_slist_foreach (list, swfdec_request_resource_perform_one, player);
-  g_slist_free (list);
-}
-
-void
-swfdec_player_request_resource (SwfdecPlayer *player, SwfdecSecurity *security,
-    const char *url, SwfdecLoaderRequest req, SwfdecBuffer *buffer, 
-    SwfdecResourceFunc func, gpointer data, GDestroyNotify destroy)
-{
-  SwfdecResourceRequest *request;
-
-  g_return_if_fail (SWFDEC_IS_PLAYER (player));
-  g_return_if_fail (SWFDEC_IS_SECURITY (security));
-  g_return_if_fail (url != NULL);
-  g_return_if_fail (func != NULL);
-
-  request = g_slice_new0 (SwfdecResourceRequest);
-  request->type = SWFDEC_RESOURCE_REQUEST_LOAD;
-  request->security = g_object_ref (security);
-  request->url = g_strdup (url);
-  request->request = req;
-  if (buffer)
-    request->buffer = swfdec_buffer_ref (buffer);
-  request->func = func;
-  request->destroy = destroy;
-  request->data = data;
-
-  player->priv->resource_requests = g_slist_append (player->priv->resource_requests, request);
-}
-
-static gboolean
-is_ascii (const char *s)
-{
-  while (*s) {
-    if (*s & 0x80)
-      return FALSE;
-    s++;
-  }
-  return TRUE;
-}
-
-/**
- * swfdec_player_request_fscommand:
- * @player: a #SwfdecPlayer
- * @command: the command to parse
- * @value: the value passed to the command
- *
- * Checks if @command is an FSCommand and if so, queues emission of the 
- * SwfdecPlayer::fscommand signal. 
- *
- * Returns: %TRUE if an fscommand was found and the signal emitted, %FALSE 
- *          otherwise.
- **/
-gboolean
-swfdec_player_request_fscommand (SwfdecPlayer *player, const char *command,
-    const char *value)
-{
-  SwfdecResourceRequest *request;
-
-  g_return_val_if_fail (SWFDEC_IS_PLAYER (player), FALSE);
-  g_return_val_if_fail (command != NULL, FALSE);
-  g_return_val_if_fail (value != NULL, FALSE);
-
-  if (g_ascii_strncasecmp (command, "FSCommand:", 10) != 0)
-    return FALSE;
-
-  command += 10;
-  if (!is_ascii (command)) {
-    SWFDEC_ERROR ("command \"%s\" are not ascii, skipping fscommand", command);
-    return TRUE;
-  }
-  request = g_slice_new0 (SwfdecResourceRequest);
-  request->type = SWFDEC_RESOURCE_REQUEST_FSCOMMAND;
-  request->command = g_ascii_strdown (command, -1);
-  request->value = g_strdup (value);
-
-  player->priv->resource_requests = g_slist_append (player->priv->resource_requests, request);
-  return TRUE;
-}
-
-void
-swfdec_player_request_unload (SwfdecPlayer *player, const char *target,
-    SwfdecResourceUnloadFunc func, gpointer data, GDestroyNotify destroy)
-{
-  SwfdecResourceRequest *request;
-
-  g_return_if_fail (SWFDEC_IS_PLAYER (player));
-  g_return_if_fail (target != NULL);
-
-  request = g_slice_new0 (SwfdecResourceRequest);
-  request->type = SWFDEC_RESOURCE_REQUEST_UNLOAD;
-  request->target = g_strdup (target);
-  request->unload = func;
-  request->data = data;
-  request->destroy = destroy;
-
-  player->priv->resource_requests = g_slist_append (player->priv->resource_requests, request);
-}
-
-void
-swfdec_player_resource_request_init (SwfdecPlayer *player)
-{
-  /* empty */
-}
-
-void
-swfdec_player_resource_request_finish (SwfdecPlayer *player)
-{
-  g_return_if_fail (SWFDEC_IS_PLAYER (player));
-
-  g_slist_foreach (player->priv->resource_requests, (GFunc) swfdec_resource_request_free, NULL);
-  g_slist_free (player->priv->resource_requests);
-  player->priv->resource_requests = NULL;
-}
-
diff --git a/libswfdec/swfdec_resource_request.h b/libswfdec/swfdec_resource_request.h
deleted file mode 100644
index af9c7c7..0000000
--- a/libswfdec/swfdec_resource_request.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifndef _SWFDEC_RESOURCE_REQUEST_H_
-#define _SWFDEC_RESOURCE_REQUEST_H_
-
-#include <libswfdec/swfdec.h>
-#include <libswfdec/swfdec_security.h>
-
-G_BEGIN_DECLS
-
-typedef struct _SwfdecResourceRequest SwfdecResourceRequest;
-typedef void (* SwfdecResourceFunc) (SwfdecPlayer *player, SwfdecLoader *loader, gpointer data);
-typedef void (* SwfdecResourceAbortFunc) (SwfdecPlayer *player, gpointer data);
-typedef void (* SwfdecResourceUnloadFunc) (SwfdecPlayer *player, const char *target, gpointer data);
-
-typedef enum {
-  SWFDEC_RESOURCE_REQUEST_LOAD,
-  SWFDEC_RESOURCE_REQUEST_FSCOMMAND,
-  SWFDEC_RESOURCE_REQUEST_UNLOAD
-} SwfdecResourceRequestType;
-
-/* FIXME: make this a union? */
-struct _SwfdecResourceRequest
-{
-  SwfdecResourceRequestType	type;	/* type of request */
-
-  GDestroyNotify	destroy;	/* function to call on player dispose */
-  gpointer		data;		/* function to pass to the above functions */
-
-  /* LOAD */
-  SwfdecSecurity *	security;     	/* security context when loading or NULL for fscommand */
-  char *		url;		/* URL we're gonna load */
-  SwfdecLoaderRequest	request;	/* how are we goona load this URL? */
-  SwfdecBuffer *	buffer;		/* data to pass to load request or NULL */
-  SwfdecResourceFunc	func;		/* function to call when we got a loader (or an error) */
-
-  /* FSCOMMAND */
-  char *		command;	/* fscommand to execute */
-  char *		value;		/* value to pass to fscommand */
-
-  /* UNLOAD */
-  char *	      	target;		/* the target to unload */
-  SwfdecResourceUnloadFunc	unload;	/* function to call when we got a loader (or an error) */
-};
-
-/* public api for swfdec */
-
-void		swfdec_player_request_resource		(SwfdecPlayer *		player,
-							 SwfdecSecurity *	security,
-							 const char *		url,
-							 SwfdecLoaderRequest	req,
-							 SwfdecBuffer *		buffer,
-							 SwfdecResourceFunc	func,
-							 gpointer		data,
-							 GDestroyNotify		destroy);
-void		swfdec_player_request_resource_now	(SwfdecPlayer *		player,
-							 SwfdecSecurity *	security,
-							 const char *		url,
-							 SwfdecLoaderRequest	req,
-							 SwfdecBuffer *		buffer,
-							 SwfdecResourceFunc	callback,
-							 SwfdecResourceAbortFunc	abort,
-							 gpointer		user_data);
-void		swfdec_player_request_unload		(SwfdecPlayer *		player,
-							 const char *		target,
-							 SwfdecResourceUnloadFunc func,
-							 gpointer		data,
-							 GDestroyNotify		destroy);
-gboolean	swfdec_player_request_fscommand		(SwfdecPlayer *		player,
-							 const char *		command,
-							 const char *		value);
-
-/* private api for swfdec_player.c */
-void		swfdec_player_resource_request_init	(SwfdecPlayer *		player);
-void		swfdec_player_resource_request_perform	(SwfdecPlayer *		player);
-void		swfdec_player_resource_request_finish	(SwfdecPlayer *		player);
-
-G_END_DECLS
-#endif
diff --git a/libswfdec/swfdec_security.h b/libswfdec/swfdec_security.h
index cdc0717..0211301 100644
--- a/libswfdec/swfdec_security.h
+++ b/libswfdec/swfdec_security.h
@@ -28,8 +28,6 @@ G_BEGIN_DECLS
 typedef struct _SwfdecSecurity SwfdecSecurity;
 typedef struct _SwfdecSecurityClass SwfdecSecurityClass;
 
-typedef void (* SwfdecURLAllowFunc) (const SwfdecURL *url, int status, gpointer data);
-
 #define SWFDEC_TYPE_SECURITY                    (swfdec_security_get_type())
 #define SWFDEC_IS_SECURITY(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_SECURITY))
 #define SWFDEC_IS_SECURITY_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_SECURITY))
commit 7e5ebb199b18bc408f2ee4738b1d7fe8caa3eddb
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Jan 17 23:29:43 2008 +0100

    keep track of the security we were called with

diff --git a/libswfdec/swfdec_interval.c b/libswfdec/swfdec_interval.c
index 1d98b2b..c4caa21 100644
--- a/libswfdec/swfdec_interval.c
+++ b/libswfdec/swfdec_interval.c
@@ -26,9 +26,12 @@
 
 #include "swfdec_interval.h"
 #include "swfdec_as_context.h"
+#include "swfdec_as_frame_internal.h"
 #include "swfdec_as_function.h"
+#include "swfdec_as_internal.h"
 #include "swfdec_debug.h"
 #include "swfdec_player_internal.h"
+#include "swfdec_resource.h"
 
 G_DEFINE_TYPE (SwfdecInterval, swfdec_interval, SWFDEC_TYPE_AS_OBJECT)
 
@@ -39,6 +42,7 @@ swfdec_interval_mark (SwfdecAsObject *object)
   SwfdecInterval *interval = SWFDEC_INTERVAL (object);
 
   swfdec_as_object_mark (interval->object);
+  swfdec_resource_mark (interval->resource);
   if (interval->fun_name)
     swfdec_as_string_mark (interval->fun_name);
   for (i = 0; i < interval->n_args; i++) {
@@ -60,6 +64,10 @@ swfdec_interval_dispose (GObject *object)
     swfdec_player_remove_timeout (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (object)->context), &interval->timeout);
     interval->timeout.callback = NULL;
   }
+  if (interval->resource) {
+    g_object_unref (interval->resource);
+    interval->resource = NULL;
+  }
 
   G_OBJECT_CLASS (swfdec_interval_parent_class)->dispose (object);
 }
@@ -97,8 +105,8 @@ swfdec_interval_trigger (SwfdecTimeout *timeout)
     interval->timeout.callback = NULL;
   }
   if (interval->fun_name) {
-    swfdec_as_object_call (interval->object, interval->fun_name, 
-	interval->n_args, interval->args, &ret);
+    swfdec_as_object_call_with_security (interval->object, SWFDEC_SECURITY (interval->resource),
+	interval->fun_name, interval->n_args, interval->args, &ret);
   } else {
     swfdec_as_function_call (SWFDEC_AS_FUNCTION (interval->object), NULL, 
 	interval->n_args, interval->args, &ret);
@@ -123,6 +131,7 @@ swfdec_interval_new (SwfdecPlayer *player, guint msecs, gboolean repeat,
   swfdec_as_object_add (SWFDEC_AS_OBJECT (interval), context, size);
 
   interval->id = ++player->priv->interval_id;
+  interval->resource = SWFDEC_RESOURCE (g_object_ref (context->frame->security));
   interval->msecs = msecs;
   interval->repeat = repeat;
   interval->object = object;
diff --git a/libswfdec/swfdec_interval.h b/libswfdec/swfdec_interval.h
index 07da0c9..40a61cc 100644
--- a/libswfdec/swfdec_interval.h
+++ b/libswfdec/swfdec_interval.h
@@ -40,6 +40,7 @@ struct _SwfdecInterval {
   SwfdecAsObject	asobject;
 
   SwfdecTimeout		timeout;
+  SwfdecResource *	resource;	/* resouce that initiated this interval */
   guint			id;		/* id this interval is identified with */
   guint			msecs;		/* interval in milliseconds */
   gboolean		repeat;		/* TRUE for calling in intervals, FALSE for single-shot */
commit b8e849b598af072124b6eb3c9eadd645832dadd5
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Jan 16 17:07:08 2008 +0100

    send the terminating \0, too

diff --git a/libswfdec/swfdec_load_object_as.c b/libswfdec/swfdec_load_object_as.c
index de92fe8..51656d5 100644
--- a/libswfdec/swfdec_load_object_as.c
+++ b/libswfdec/swfdec_load_object_as.c
@@ -128,7 +128,7 @@ swfdec_load_object_as_sendAndLoad (SwfdecAsContext *cx, SwfdecAsObject *object,
   swfdec_as_object_call (object, SWFDEC_AS_STR_toString, 0, NULL, &val);
   data = swfdec_as_value_to_string (cx, &val);
   if (strlen (data) > 0) {
-    buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (data)),
+    buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (data) + 1),
 	strlen (data));
     swfdec_load_object_new (target, url, SWFDEC_LOADER_REQUEST_POST, buffer,
 	swfdec_load_object_on_progress, swfdec_load_object_on_finish);
commit ab96aeb0e7242f131bd4d4cf19ecb3c2ebb7026d
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Jan 16 16:49:33 2008 +0100

    really do the merge

diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index bfeb0bb..eef2dce 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -2098,6 +2098,36 @@ swfdec_player_set_export_class (SwfdecPlayer *player, const char *name, SwfdecAs
   }
 }
 
+/**
+ * swfdec_player_create_socket:
+ * @player: a #SwfdecPlayer
+ * @hostname: the host name to connect to.
+ * @port: the port to connect to
+ *
+ * Creates a new socket connecting to the given hostname and port.
+ *
+ * Returns: a new socket or %NULL if no socket implementation exists
+ **/
+/* FIXME: always return a socket? */
+SwfdecSocket *
+swfdec_player_create_socket (SwfdecPlayer *player, const char *hostname, guint port)
+{
+  SwfdecSocket *sock;
+  SwfdecSocketClass *klass;
+
+  g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
+  g_return_val_if_fail (hostname != NULL, NULL);
+  g_return_val_if_fail (port > 0, NULL);
+
+  if (player->priv->socket_type == 0)
+    return NULL;
+  klass = g_type_class_ref (player->priv->socket_type);
+  sock = klass->create (hostname, port);
+  g_type_class_unref (klass);
+
+  return sock;
+}
+
 /** PUBLIC API ***/
 
 /**
diff --git a/libswfdec/swfdec_policy_file.c b/libswfdec/swfdec_policy_file.c
index e275119..dd4e0ca 100644
--- a/libswfdec/swfdec_policy_file.c
+++ b/libswfdec/swfdec_policy_file.c
@@ -113,10 +113,10 @@ swfdec_policy_file_parse (SwfdecPolicyFile *file, const char *text)
   }
 }
 
-/*** SWFDEC_LOADER_TARGET ***/
+/*** SWFDEC_STREAM_TARGET ***/
 
 static SwfdecPlayer *
-swfdec_policy_file_target_get_player (SwfdecLoaderTarget *target)
+swfdec_policy_file_target_get_player (SwfdecStreamTarget *target)
 {
   return SWFDEC_POLICY_FILE (target)->player;
 }
@@ -128,7 +128,7 @@ swfdec_policy_file_finished_loading (SwfdecPolicyFile *file, const char *text)
   SwfdecPolicyFile *next;
   GList *link;
 
-  swfdec_loader_set_target (file->stream, NULL);
+  swfdec_stream_set_target (file->stream, NULL);
   file->stream = NULL;
 
   if (text)
@@ -156,8 +156,8 @@ swfdec_policy_file_finished_loading (SwfdecPolicyFile *file, const char *text)
 }
 
 static void
-swfdec_policy_file_target_error (SwfdecLoaderTarget *target,
-    SwfdecLoader *loader)
+swfdec_policy_file_target_error (SwfdecStreamTarget *target,
+    SwfdecStream *stream)
 {
   SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (target);
 
@@ -165,15 +165,20 @@ swfdec_policy_file_target_error (SwfdecLoaderTarget *target,
 }
 
 static void
-swfdec_policy_file_target_eof (SwfdecLoaderTarget *target,
-    SwfdecLoader *loader)
+swfdec_policy_file_target_close (SwfdecStreamTarget *target,
+    SwfdecStream *stream)
 {
   SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (target);
   char *text;
 
-  swfdec_loader_set_target (loader, NULL);
+  swfdec_stream_set_target (stream, NULL);
   file->stream = NULL;
-  text = swfdec_loader_get_text (loader, 8);
+  if (SWFDEC_IS_LOADER (stream)) {
+    text = swfdec_loader_get_text (SWFDEC_LOADER (stream), 8);
+  } else {
+    SWFDEC_FIXME ("rewrite swfdec_loader_get_text() to swfdec_buffer_queue_get_text()");
+    text = NULL;
+  }
 
   if (text == NULL) {
     SWFDEC_ERROR ("couldn't get text from crossdomain policy file %s", 
@@ -184,17 +189,17 @@ swfdec_policy_file_target_eof (SwfdecLoaderTarget *target,
 }
 
 static void
-swfdec_policy_file_loader_target_init (SwfdecLoaderTargetInterface *iface)
+swfdec_policy_file_stream_target_init (SwfdecStreamTargetInterface *iface)
 {
   iface->get_player = swfdec_policy_file_target_get_player;
-  iface->eof = swfdec_policy_file_target_eof;
+  iface->close = swfdec_policy_file_target_close;
   iface->error = swfdec_policy_file_target_error;
 }
 
 /*** SWFDEC_POLICY_FILE ***/
 
 G_DEFINE_TYPE_WITH_CODE (SwfdecPolicyFile, swfdec_policy_file, G_TYPE_OBJECT,
-    G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_policy_file_loader_target_init))
+    G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_policy_file_stream_target_init))
 
 static void
 swfdec_policy_file_dispose (GObject *object)
@@ -202,7 +207,7 @@ swfdec_policy_file_dispose (GObject *object)
   SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (object);
 
   if (file->stream) {
-    swfdec_loader_set_target (file->stream, NULL);
+    swfdec_stream_set_target (file->stream, NULL);
     g_object_unref (file->stream);
     file->stream = NULL;
     g_slist_foreach (file->requests, (GFunc) swfdec_policy_file_request_free, NULL);
@@ -245,9 +250,9 @@ swfdec_policy_file_new (SwfdecPlayer *player, const SwfdecURL *url)
   if (swfdec_url_has_protocol (url, "xmlsocket")) {
     SWFDEC_FIXME ("implement xmlsocket: protocol");
   } else {
-    file->stream = swfdec_loader_load (player->priv->resource->loader, url, 
-	SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);
-    swfdec_loader_set_target (file->stream, SWFDEC_LOADER_TARGET (file));
+    file->stream = SWFDEC_STREAM (swfdec_loader_load (player->priv->resource->loader,
+	  url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0));
+    swfdec_stream_set_target (file->stream, SWFDEC_STREAM_TARGET (file));
   }
   player->priv->loading_policy_files = 
     g_list_prepend (player->priv->loading_policy_files, file);
diff --git a/libswfdec/swfdec_policy_file.h b/libswfdec/swfdec_policy_file.h
index 9a89f81..b849562 100644
--- a/libswfdec/swfdec_policy_file.h
+++ b/libswfdec/swfdec_policy_file.h
@@ -42,7 +42,7 @@ struct _SwfdecPolicyFile {
   SwfdecPlayer *	player;		/* player we're loaded from */
   SwfdecURL *		load_url;	/* url we're loaded from */
   SwfdecURL *		url;		/* parent url we check with */
-  SwfdecLoader *	stream;		/* stream we are loading or NULL if done loading */
+  SwfdecStream *	stream;		/* stream we are loading or NULL if done loading */
   GSList *		allowed_hosts;	/* list of GPatternSpec of the allowed hosts */
 
   GSList *		requests;	/* requests waiting for this file to finish loading */
diff --git a/libswfdec/swfdec_xml_socket.c b/libswfdec/swfdec_xml_socket.c
index bff72c7..2978a2f 100644
--- a/libswfdec/swfdec_xml_socket.c
+++ b/libswfdec/swfdec_xml_socket.c
@@ -46,7 +46,7 @@ swfdec_xml_socket_ensure_closed (SwfdecXmlSocket *xml)
   g_object_unref (xml->socket);
   xml->socket = NULL;
 
-  swfdec_player_unroot_object (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (xml)->context), G_OBJECT (xml));
+  swfdec_player_unroot (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (xml)->context), xml);
   cur = g_object_get_qdata (G_OBJECT (xml->target), xml_socket_quark);
   if (cur != xml)
     g_object_set_qdata (G_OBJECT (xml->target), xml_socket_quark, cur);
@@ -201,7 +201,7 @@ swfdec_xml_socket_create (SwfdecAsObject *target, const char *hostname, guint po
 
   xml = g_object_new (SWFDEC_TYPE_XML_SOCKET, NULL);
   swfdec_as_object_add (SWFDEC_AS_OBJECT (xml), cx, sizeof (SwfdecXmlSocket));
-  swfdec_player_root_object (SWFDEC_PLAYER (cx), G_OBJECT (xml));
+  swfdec_player_root (SWFDEC_PLAYER (cx), xml, (GFunc) swfdec_as_object_mark);
 
   xml->target = target;
   xml->socket = sock;
commit 5f2bdfd1e50aafe4971779fdf428f39360c55788
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Jan 16 16:34:23 2008 +0100

    add public API functions

diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index af87562..bfeb0bb 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -877,6 +877,9 @@ swfdec_player_dispose (GObject *object)
   g_hash_table_destroy (priv->registered_classes);
   g_hash_table_destroy (priv->scripting_callbacks);
 
+  g_list_foreach (priv->loading_policy_files, (GFunc) g_object_unref, NULL);
+  g_list_free (priv->loading_policy_files);
+  priv->loading_policy_files = NULL;
   g_slist_foreach (priv->policy_files, (GFunc) g_object_unref, NULL);
   g_slist_free (priv->policy_files);
   priv->policy_files = NULL;
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index 09aaf33..bb59e8e 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -42,6 +42,7 @@ typedef enum {
 
 typedef void (* SwfdecActionFunc) (gpointer object, gpointer data);
 typedef gboolean (* SwfdecAudioRemoveFunc) (SwfdecAudio *audio, gpointer data);
+typedef void (* SwfdecPolicyFunc) (SwfdecPlayer *player, gboolean allow, gpointer data);
 
 typedef struct _SwfdecTimeout SwfdecTimeout;
 struct _SwfdecTimeout {
@@ -135,7 +136,8 @@ struct _SwfdecPlayerPrivate
   SwfdecRingBuffer *	actions[SWFDEC_PLAYER_N_ACTION_QUEUES]; /* all actions we've queued up so far */
 
   /* security */
-  GSList *		policy_files;		/* list of SwfdecPolicyLoader objects, most recent first */
+  GList *		loading_policy_files;	/* list of loading SwfdecPlayerLoader - newest first */
+  GSList *		policy_files;		/* list of SwfdecPolicyLoader that finished loading */
 };
 
 void		swfdec_player_initialize	(SwfdecPlayer *		player,
@@ -227,6 +229,15 @@ void		swfdec_player_global_to_stage	(SwfdecPlayer *		player,
 						 double *		x,
 						 double *		y);
 void		swfdec_player_update_scale	(SwfdecPlayer *		player);
+
+/* in swfdec_policy_file.c */
+gboolean	swfdec_player_allow_now		(SwfdecPlayer *		player,
+						 const SwfdecURL *	url);
+void	      	swfdec_player_allow_or_load	(SwfdecPlayer *		player,
+						 const SwfdecURL *	url,
+						 const SwfdecURL *	load_url,
+						 SwfdecPolicyFunc	func,
+						 gpointer		data);
 /* in swfdec_as_interpret.c */
 SwfdecMovie *	swfdec_player_get_movie_from_value 
 						(SwfdecPlayer *		player,
diff --git a/libswfdec/swfdec_policy_file.c b/libswfdec/swfdec_policy_file.c
index d0f3e90..e275119 100644
--- a/libswfdec/swfdec_policy_file.c
+++ b/libswfdec/swfdec_policy_file.c
@@ -34,6 +34,20 @@
 #include "swfdec_xml.h"
 #include "swfdec_xml_node.h"
 
+typedef struct _SwfdecPolicyFileRequest SwfdecPolicyFileRequest;
+struct _SwfdecPolicyFileRequest {
+  SwfdecURL *	  	url;		/* URL we are supposed to check */
+  SwfdecPolicyFunc	func;		/* function to call when we know if access is (not) allowed */
+  gpointer		data;		/* data to pass to func */
+};
+
+static void
+swfdec_policy_file_request_free (SwfdecPolicyFileRequest *request)
+{
+  swfdec_url_free (request->url);
+  g_slice_free (SwfdecPolicyFileRequest, request);
+}
+
 /*** PARSING THE FILE ***/
 
 static void
@@ -108,13 +122,46 @@ swfdec_policy_file_target_get_player (SwfdecLoaderTarget *target)
 }
 
 static void
+swfdec_policy_file_finished_loading (SwfdecPolicyFile *file, const char *text)
+{
+  SwfdecPlayerPrivate *priv;
+  SwfdecPolicyFile *next;
+  GList *link;
+
+  swfdec_loader_set_target (file->stream, NULL);
+  file->stream = NULL;
+
+  if (text)
+    swfdec_policy_file_parse (file, text);
+
+  priv = file->player->priv;
+  link = g_list_find (priv->loading_policy_files, file);
+  next = link->next ? link->next->data : NULL;
+  priv->loading_policy_files = g_list_delete_link (priv->loading_policy_files, link);
+  priv->policy_files = g_slist_prepend (priv->policy_files, file);
+  if (next) {
+    next->requests = g_slist_concat (next->requests, file->requests);
+  } else {
+    GSList *walk;
+
+    for (walk = file->requests; walk; walk = walk->next) {
+      SwfdecPolicyFileRequest *request = walk->data;
+      gboolean allow = swfdec_player_allow_now (file->player, request->url);
+      request->func (file->player, allow, request->data);
+      swfdec_policy_file_request_free (request);
+    }
+    g_slist_free (file->requests);
+  }
+  file->requests = NULL;
+}
+
+static void
 swfdec_policy_file_target_error (SwfdecLoaderTarget *target,
     SwfdecLoader *loader)
 {
   SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (target);
 
-  swfdec_loader_set_target (loader, NULL);
-  file->stream = NULL;
+  swfdec_policy_file_finished_loading (file, NULL);
 }
 
 static void
@@ -131,10 +178,8 @@ swfdec_policy_file_target_eof (SwfdecLoaderTarget *target,
   if (text == NULL) {
     SWFDEC_ERROR ("couldn't get text from crossdomain policy file %s", 
 	swfdec_url_get_url (file->load_url));
-    return;
   }
-
-  swfdec_policy_file_parse (file, text);
+  swfdec_policy_file_finished_loading (file, text);
   g_free (text);
 }
 
@@ -160,6 +205,11 @@ swfdec_policy_file_dispose (GObject *object)
     swfdec_loader_set_target (file->stream, NULL);
     g_object_unref (file->stream);
     file->stream = NULL;
+    g_slist_foreach (file->requests, (GFunc) swfdec_policy_file_request_free, NULL);
+    g_slist_free (file->requests);
+    file->requests = NULL;
+  } else {
+    g_assert (file->requests == NULL);
   }
   swfdec_url_free (file->load_url);
   swfdec_url_free (file->url);
@@ -199,7 +249,8 @@ swfdec_policy_file_new (SwfdecPlayer *player, const SwfdecURL *url)
 	SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);
     swfdec_loader_set_target (file->stream, SWFDEC_LOADER_TARGET (file));
   }
-  player->priv->policy_files = g_slist_prepend (player->priv->policy_files, file);
+  player->priv->loading_policy_files = 
+    g_list_prepend (player->priv->loading_policy_files, file);
 
   return file;
 }
@@ -243,15 +294,53 @@ swfdec_policy_file_allow (SwfdecPolicyFile *file, const SwfdecURL *url)
   return FALSE;
 }
 
-void
-swfdec_player_load_policy_file (SwfdecPlayer *player, const SwfdecURL *url)
+/*** PLAYER API ***/
+
+gboolean
+swfdec_player_allow_now (SwfdecPlayer *player, const SwfdecURL *url)
 {
-  SWFDEC_FIXME ("implement");
+  GSList *walk;
+
+  g_return_val_if_fail (SWFDEC_IS_PLAYER (player), FALSE);
+  g_return_val_if_fail (url != NULL, FALSE);
+
+  for (walk = player->priv->policy_files; walk; walk = walk->next) {
+    if (swfdec_policy_file_allow (walk->data, url))
+      return TRUE;
+  }
+  return FALSE;
 }
 
 void
-swfdec_player_check_policy_files (SwfdecPlayer *player, 
-    SwfdecPolicyFileFunc func, gpointer data)
+swfdec_player_allow_or_load (SwfdecPlayer *player, const SwfdecURL *url, 
+    const SwfdecURL *load_url, SwfdecPolicyFunc func, gpointer data)
 {
-  SWFDEC_FIXME ("implement");
+  SwfdecPlayerPrivate *priv;
+  SwfdecPolicyFileRequest *request;
+  SwfdecPolicyFile *file;
+
+  g_return_if_fail (SWFDEC_IS_PLAYER (player));
+  g_return_if_fail (url != NULL);
+  g_return_if_fail (func);
+
+  if (swfdec_player_allow_now (player, url)) {
+    func (player, TRUE, data);
+    return;
+  }
+  if (load_url)
+    swfdec_policy_file_new (player, load_url);
+
+  priv = player->priv;
+  if (priv->loading_policy_files == NULL) {
+    func (player, FALSE, data);
+    return;
+  }
+  request = g_slice_new (SwfdecPolicyFileRequest);
+  request->url = swfdec_url_copy (url);
+  request->func = func;
+  request->data = data;
+
+  file = priv->loading_policy_files->data;
+  file->requests = g_slist_append (file->requests, request);
 }
+
diff --git a/libswfdec/swfdec_policy_file.h b/libswfdec/swfdec_policy_file.h
index 5342983..9a89f81 100644
--- a/libswfdec/swfdec_policy_file.h
+++ b/libswfdec/swfdec_policy_file.h
@@ -28,7 +28,6 @@ G_BEGIN_DECLS
 
 typedef struct _SwfdecPolicyFile SwfdecPolicyFile;
 typedef struct _SwfdecPolicyFileClass SwfdecPolicyFileClass;
-typedef void (* SwfdecPolicyFileFunc) (SwfdecPlayer *player, gboolean allow, gpointer data);
 
 #define SWFDEC_TYPE_POLICY_FILE                    (swfdec_policy_file_get_type())
 #define SWFDEC_IS_POLICY_FILE(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_POLICY_FILE))
@@ -45,6 +44,8 @@ struct _SwfdecPolicyFile {
   SwfdecURL *		url;		/* parent url we check with */
   SwfdecLoader *	stream;		/* stream we are loading or NULL if done loading */
   GSList *		allowed_hosts;	/* list of GPatternSpec of the allowed hosts */
+
+  GSList *		requests;	/* requests waiting for this file to finish loading */
 };
 
 struct _SwfdecPolicyFileClass {
@@ -59,12 +60,6 @@ gboolean	swfdec_policy_file_is_loading	(SwfdecPolicyFile *	file);
 gboolean	swfdec_policy_file_allow	(SwfdecPolicyFile *	file,
 						 const SwfdecURL *	url);
 
-void		swfdec_player_load_policy_file	(SwfdecPlayer *		player,
-						 const SwfdecURL *	url);
-void		swfdec_player_check_policy_files(SwfdecPlayer *		player,
-						 SwfdecPolicyFileFunc	func,
-						 gpointer		data);
-
 
 G_END_DECLS
 #endif
commit 031c01a4b787d908bc85291b65228bef9e6518bf
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Jan 16 11:10:53 2008 +0100

    add initial (compiling) bunch of code that changes policy files handling
    
    Everythng compiles, nothing works

diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index 7da1ba0..6316a0b 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -112,7 +112,7 @@ libswfdec_source_files = \
 	swfdec_player_as.c \
 	swfdec_player_scripting.c \
 	swfdec_print_job.c \
-	swfdec_policy_loader.c \
+	swfdec_policy_file.c \
 	swfdec_rect.c \
 	swfdec_rectangle.c \
 	swfdec_resource.c \
@@ -264,7 +264,7 @@ noinst_HEADERS = \
 	swfdec_path.h \
 	swfdec_pattern.h \
 	swfdec_player_internal.h \
-	swfdec_policy_loader.h \
+	swfdec_policy_file.h \
 	swfdec_rect.h \
 	swfdec_resource.h \
 	swfdec_resource_request.h \
diff --git a/libswfdec/swfdec_flash_security.c b/libswfdec/swfdec_flash_security.c
index 21fe688..ae7fce0 100644
--- a/libswfdec/swfdec_flash_security.c
+++ b/libswfdec/swfdec_flash_security.c
@@ -23,7 +23,6 @@
 
 #include <string.h>
 #include "swfdec_flash_security.h"
-#include "swfdec_policy_loader.h"
 #include "swfdec_debug.h"
 #include "swfdec_security_allow.h"
 
@@ -47,227 +46,10 @@ swfdec_flash_security_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
   }
 }
 
-static gboolean
-swfdec_flash_security_match_domain (const SwfdecURL *guard, const SwfdecURL *key)
-{
-  return g_ascii_strcasecmp (swfdec_url_get_host (guard), swfdec_url_get_host (key)) == 0;
-}
-
-typedef struct {
-  SwfdecURL *		url;
-  SwfdecURLAllowFunc	callback;
-  gpointer		user_data;
-} SwfdecAllowURLPending;
-
-static void
-swfdec_flash_security_call_pending (SwfdecFlashSecurity *sec, const char *host,
-    gboolean allow)
-{
-  GSList *iter, *prev, *next;
-  SwfdecAllowURLPending *pending;
-
-  g_return_if_fail (SWFDEC_IS_FLASH_SECURITY (sec));
-  g_return_if_fail (host != NULL);
-
-  prev = NULL;
-  for (iter = sec->allow_url_pending; iter != NULL; iter = next) {
-    next = iter->next;
-    pending = iter->data;
-
-    if (!g_ascii_strcasecmp (swfdec_url_get_host (pending->url), host)) {
-      pending->callback (pending->url, allow, pending->user_data);
-      swfdec_url_free (pending->url);
-      g_free (pending);
-      g_slist_free_1 (iter);
-
-      if (prev != NULL) {
-	prev->next = iter->next;
-	iter = prev;
-	iter->next = next;
-      } else {
-	iter = NULL;
-	sec->allow_url_pending = next;
-      }
-    }
-
-    prev = iter;
-  }
-}
-
-static void
-swfdec_flash_security_policy_loader_done (SwfdecPolicyLoader *policy_loader,
-    gboolean allow)
-{
-  SwfdecFlashSecurity *sec = policy_loader->sec;
-  char *host = g_strdup (policy_loader->host);
-
-  if (allow) {
-    sec->crossdomain_allowed = g_slist_prepend (sec->crossdomain_allowed, host);
-  } else {
-    sec->crossdomain_denied = g_slist_prepend (sec->crossdomain_denied, host);
-  }
-
-  sec->policy_loaders = g_slist_remove (sec->policy_loaders, policy_loader);
-
-  swfdec_flash_security_call_pending (sec, host, allow);
-
-  swfdec_policy_loader_free (policy_loader);
-}
-
-static void
-swfdec_flash_security_get_cross_domain_policy (SwfdecFlashSecurity *sec,
-    const char *host)
-{
-  GSList *iter;
-  SwfdecPolicyLoader *policy_loader;
-
-  g_return_if_fail (SWFDEC_IS_FLASH_SECURITY (sec));
-  g_return_if_fail (host != NULL);
-
-  for (iter = sec->policy_loaders; iter != NULL; iter = iter->next) {
-    policy_loader = iter->data;
-
-    if (!g_ascii_strcasecmp (policy_loader->host, host))
-      return;
-  }
-
-  policy_loader = swfdec_policy_loader_new (sec, host,
-      swfdec_flash_security_policy_loader_done);
-  if (policy_loader == NULL) {
-    sec->crossdomain_denied = g_slist_prepend (sec->crossdomain_denied,
-	g_strdup (host));
-    swfdec_flash_security_call_pending (sec, host, FALSE);
-    return;
-  }
-
-  sec->policy_loaders = g_slist_prepend (sec->policy_loaders, policy_loader);
-}
-
-static void
-swfdec_flash_security_allow_cross_domain (SwfdecFlashSecurity *sec,
-    const SwfdecURL *url, SwfdecURLAllowFunc callback, gpointer user_data)
-{
-  SwfdecAllowURLPending *pending;
-  const char *host;
-
-  g_assert (SWFDEC_IS_FLASH_SECURITY (sec));
-  g_assert (url != NULL);
-  g_assert (callback != NULL);
-
-  host = swfdec_url_get_host (url);
-
-  if (g_slist_find_custom (sec->crossdomain_allowed, host,
-	(GCompareFunc)g_ascii_strcasecmp)) {
-    callback (url, 1, user_data);
-    return;
-  }
-
-  if (g_slist_find_custom (sec->crossdomain_denied, host,
-	(GCompareFunc)g_ascii_strcasecmp)) {
-    callback (url, 0, user_data);
-    return;
-  }
-
-  pending = g_new (SwfdecAllowURLPending, 1);
-  pending->url = swfdec_url_copy (url);
-  pending->callback = callback;
-  pending->user_data = user_data;
-
-  sec->allow_url_pending = g_slist_prepend (sec->allow_url_pending, pending);
-
-  swfdec_flash_security_get_cross_domain_policy (sec, host);
-}
-
-static void
-swfdec_flash_security_allow_url (SwfdecSecurity *guard, const SwfdecURL *url,
-    SwfdecURLAllowFunc callback, gpointer user_data)
-{
-  SwfdecFlashSecurity *sec = SWFDEC_FLASH_SECURITY (guard);
-  int status;
-
-  switch (sec->sandbox) {
-    case SWFDEC_SANDBOX_NONE:
-      status = 0;
-      break;
-    case SWFDEC_SANDBOX_REMOTE:
-      if (swfdec_url_is_local (url)) {
-	status = 0;
-      } else if (swfdec_flash_security_match_domain (sec->url, url)) {
-	status = 1;
-      } else {
-	swfdec_flash_security_allow_cross_domain (sec, url, callback,
-	    user_data);
-	return;
-      }
-      break;
-    case SWFDEC_SANDBOX_LOCAL_FILE:
-      if (swfdec_url_is_local (url)) {
-	status = 1;
-      } else {
-	status = 0;
-      }
-      break;
-    case SWFDEC_SANDBOX_LOCAL_NETWORK:
-      if (swfdec_url_is_local (url)) {
-	status = 0;
-      } else {
-	swfdec_flash_security_allow_cross_domain (sec, url, callback,
-	    user_data);
-	return;
-      }
-      break;
-    case SWFDEC_SANDBOX_LOCAL_TRUSTED:
-      status = 1;
-      break;
-    default:
-      g_assert_not_reached ();
-      status = 0;
-      break;
-  }
-
-  callback (url, status, user_data);
-}
-
-void
-swfdec_flash_security_free_pending (SwfdecFlashSecurity *sec)
-{
-  GSList *iter;
-
-  for (iter = sec->allow_url_pending; iter != NULL; iter = iter->next) {
-    SwfdecAllowURLPending *pending = iter->data;
-    pending->callback (pending->url, -1, pending->user_data);
-    swfdec_url_free (pending->url);
-    g_free (pending);
-  }
-  g_slist_free (sec->allow_url_pending);
-  sec->allow_url_pending = NULL;
-}
-
 static void
 swfdec_flash_security_dispose (GObject *object)
 {
   SwfdecFlashSecurity *sec = SWFDEC_FLASH_SECURITY (object);
-  GSList *iter;
-
-  g_assert (sec->allow_url_pending == NULL);
-
-  for (iter = sec->policy_loaders; iter != NULL; iter = iter->next) {
-    swfdec_policy_loader_free (iter->data);
-  }
-  g_slist_free (sec->policy_loaders);
-  sec->policy_loaders = NULL;
-
-  for (iter = sec->crossdomain_allowed; iter != NULL; iter = iter->next) {
-    g_free (iter->data);
-  }
-  g_slist_free (sec->crossdomain_allowed);
-  sec->crossdomain_allowed = NULL;
-
-  for (iter = sec->crossdomain_denied; iter != NULL; iter = iter->next) {
-    g_free (iter->data);
-  }
-  g_slist_free (sec->crossdomain_denied);
-  sec->crossdomain_denied = NULL;
 
   if (sec->url) {
     swfdec_url_free (sec->url);
@@ -287,7 +69,6 @@ swfdec_flash_security_class_init (SwfdecFlashSecurityClass *klass)
   object_class->dispose = swfdec_flash_security_dispose;
 
   security_class->allow = swfdec_flash_security_allow;
-  security_class->allow_url = swfdec_flash_security_allow_url;
 }
 
 static void
diff --git a/libswfdec/swfdec_flash_security.h b/libswfdec/swfdec_flash_security.h
index fcb2aaf..8ee888d 100644
--- a/libswfdec/swfdec_flash_security.h
+++ b/libswfdec/swfdec_flash_security.h
@@ -50,12 +50,6 @@ struct _SwfdecFlashSecurity
   SwfdecPlayer		*player;
   SwfdecSandboxType	sandbox;	/* sandbox we are operating in */
   SwfdecURL *		url;		/* url this security was loaded from */
-
-  GSList *		policy_loaders;
-  GSList *		crossdomain_allowed;
-  GSList *		crossdomain_denied;
-
-  GSList *		allow_url_pending;
 };
 
 struct _SwfdecFlashSecurityClass
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 4ff88a8..af87562 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -877,6 +877,10 @@ swfdec_player_dispose (GObject *object)
   g_hash_table_destroy (priv->registered_classes);
   g_hash_table_destroy (priv->scripting_callbacks);
 
+  g_slist_foreach (priv->policy_files, (GFunc) g_object_unref, NULL);
+  g_slist_free (priv->policy_files);
+  priv->policy_files = NULL;
+
   while (priv->roots)
     swfdec_movie_destroy (priv->roots->data);
   if (priv->resource) {
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index cbe49ec..09aaf33 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -133,6 +133,9 @@ struct _SwfdecPlayerPrivate
   /* iterating */
   GList *		movies;			/* list of all movies that want to be iterated */
   SwfdecRingBuffer *	actions[SWFDEC_PLAYER_N_ACTION_QUEUES]; /* all actions we've queued up so far */
+
+  /* security */
+  GSList *		policy_files;		/* list of SwfdecPolicyLoader objects, most recent first */
 };
 
 void		swfdec_player_initialize	(SwfdecPlayer *		player,
diff --git a/libswfdec/swfdec_policy_file.c b/libswfdec/swfdec_policy_file.c
new file mode 100644
index 0000000..d0f3e90
--- /dev/null
+++ b/libswfdec/swfdec_policy_file.c
@@ -0,0 +1,257 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *               2007 Pekka Lampila <pekka.lampila at iki.fi>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include "swfdec_policy_file.h"
+#include "swfdec_flash_security.h"
+#include "swfdec_resource.h"
+#include "swfdec_as_strings.h"
+#include "swfdec_debug.h"
+#include "swfdec_loader_internal.h"
+#include "swfdec_player_internal.h"
+#include "swfdec_xml.h"
+#include "swfdec_xml_node.h"
+
+/*** PARSING THE FILE ***/
+
+static void
+swfdec_policy_file_parse (SwfdecPolicyFile *file, const char *text)
+{
+  SwfdecXml *xml;
+  gint32 i, j;
+
+  g_return_if_fail (SWFDEC_IS_POLICY_FILE (file));
+  g_return_if_fail (text != NULL);
+
+  xml = swfdec_xml_new_no_properties (SWFDEC_AS_CONTEXT (file->player), text, TRUE);
+
+  if (xml == NULL) {
+    SWFDEC_ERROR ("failed to create an XML object for crossdomain policy");
+    return;
+  }
+
+  if (SWFDEC_XML_NODE (xml)->type != SWFDEC_XML_NODE_ELEMENT) {
+    SWFDEC_LOG ("empty crossdomain policy file");
+    return;
+  }
+
+  for (i = 0; i < swfdec_xml_node_num_children (SWFDEC_XML_NODE (xml)); i++) {
+    SwfdecXmlNode *node_cdp =
+      swfdec_xml_node_get_child (SWFDEC_XML_NODE (xml), i);
+
+    if (node_cdp->type != SWFDEC_XML_NODE_ELEMENT)
+      continue;
+
+    if (g_ascii_strcasecmp (node_cdp->name, "cross-domain-policy") != 0)
+      continue;
+
+    for (j = 0; j < swfdec_xml_node_num_children (node_cdp); j++) {
+      SwfdecXmlNode *node_aaf = swfdec_xml_node_get_child (node_cdp, j);
+      const char *value;
+      GPatternSpec *pattern;
+      char *value_lower;
+
+      if (node_aaf->type != SWFDEC_XML_NODE_ELEMENT)
+	continue;
+
+      if (g_ascii_strcasecmp (node_aaf->name, "allow-access-from") != 0)
+	continue;
+
+      // FIXME: secure attribute?
+
+      value = swfdec_xml_node_get_attribute (node_aaf, SWFDEC_AS_STR_domain);
+      if (value == NULL)
+	continue;
+
+      if (strchr (value, '?') != NULL) {
+	SWFDEC_WARNING ("'?' in allowed domain attribute for %s", value);
+	continue;
+      }
+
+      value_lower = g_ascii_strdown (value, -1);
+      pattern = g_pattern_spec_new (value_lower);
+      g_free (value_lower);
+
+      file->allowed_hosts = g_slist_prepend (file->allowed_hosts, pattern);
+    }
+  }
+}
+
+/*** SWFDEC_LOADER_TARGET ***/
+
+static SwfdecPlayer *
+swfdec_policy_file_target_get_player (SwfdecLoaderTarget *target)
+{
+  return SWFDEC_POLICY_FILE (target)->player;
+}
+
+static void
+swfdec_policy_file_target_error (SwfdecLoaderTarget *target,
+    SwfdecLoader *loader)
+{
+  SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (target);
+
+  swfdec_loader_set_target (loader, NULL);
+  file->stream = NULL;
+}
+
+static void
+swfdec_policy_file_target_eof (SwfdecLoaderTarget *target,
+    SwfdecLoader *loader)
+{
+  SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (target);
+  char *text;
+
+  swfdec_loader_set_target (loader, NULL);
+  file->stream = NULL;
+  text = swfdec_loader_get_text (loader, 8);
+
+  if (text == NULL) {
+    SWFDEC_ERROR ("couldn't get text from crossdomain policy file %s", 
+	swfdec_url_get_url (file->load_url));
+    return;
+  }
+
+  swfdec_policy_file_parse (file, text);
+  g_free (text);
+}
+
+static void
+swfdec_policy_file_loader_target_init (SwfdecLoaderTargetInterface *iface)
+{
+  iface->get_player = swfdec_policy_file_target_get_player;
+  iface->eof = swfdec_policy_file_target_eof;
+  iface->error = swfdec_policy_file_target_error;
+}
+
+/*** SWFDEC_POLICY_FILE ***/
+
+G_DEFINE_TYPE_WITH_CODE (SwfdecPolicyFile, swfdec_policy_file, G_TYPE_OBJECT,
+    G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_policy_file_loader_target_init))
+
+static void
+swfdec_policy_file_dispose (GObject *object)
+{
+  SwfdecPolicyFile *file = SWFDEC_POLICY_FILE (object);
+
+  if (file->stream) {
+    swfdec_loader_set_target (file->stream, NULL);
+    g_object_unref (file->stream);
+    file->stream = NULL;
+  }
+  swfdec_url_free (file->load_url);
+  swfdec_url_free (file->url);
+
+  G_OBJECT_CLASS (swfdec_policy_file_parent_class)->dispose (object);
+}
+
+static void
+swfdec_policy_file_class_init (SwfdecPolicyFileClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->dispose = swfdec_policy_file_dispose;
+}
+
+static void
+swfdec_policy_file_init (SwfdecPolicyFile *policy_file)
+{
+}
+
+SwfdecPolicyFile *
+swfdec_policy_file_new (SwfdecPlayer *player, const SwfdecURL *url)
+{
+  SwfdecPolicyFile *file;
+
+  g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
+  g_return_val_if_fail (url != NULL, NULL);
+
+  file = g_object_new (SWFDEC_TYPE_POLICY_FILE, NULL);
+  file->player = player;
+  file->load_url = swfdec_url_copy (url);
+  file->url = swfdec_url_new_parent (url);
+  if (swfdec_url_has_protocol (url, "xmlsocket")) {
+    SWFDEC_FIXME ("implement xmlsocket: protocol");
+  } else {
+    file->stream = swfdec_loader_load (player->priv->resource->loader, url, 
+	SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);
+    swfdec_loader_set_target (file->stream, SWFDEC_LOADER_TARGET (file));
+  }
+  player->priv->policy_files = g_slist_prepend (player->priv->policy_files, file);
+
+  return file;
+}
+
+gboolean
+swfdec_policy_file_is_loading (SwfdecPolicyFile *file)
+{
+  g_return_val_if_fail (SWFDEC_IS_POLICY_FILE (file), FALSE);
+
+  return file->stream != NULL;
+}
+
+gboolean
+swfdec_policy_file_allow (SwfdecPolicyFile *file, const SwfdecURL *url)
+{
+  GSList *walk;
+  gsize len;
+  char *emantsoh;
+  const char *hostname;
+
+  g_return_val_if_fail (SWFDEC_IS_POLICY_FILE (file), FALSE);
+  g_return_val_if_fail (url != NULL, FALSE);
+
+  hostname = swfdec_url_get_host (url);
+  /* This is a hack that simplifies the following code. As the pattern can not
+   * contain any ?, the only pattern that matches the string "?" is the pattern
+   * "*" 
+   */
+  if (hostname == NULL)
+    hostname = "?";
+  len = strlen (hostname);
+  emantsoh = g_utf8_strreverse (emantsoh, len);
+  for (walk = file->allowed_hosts; walk; walk = walk->next) {
+    GPatternSpec *pattern = walk->data;
+    if (g_pattern_match (pattern, len, hostname, emantsoh)) {
+      g_free (emantsoh);
+      return TRUE;
+    }
+  }
+  g_free (emantsoh);
+  return FALSE;
+}
+
+void
+swfdec_player_load_policy_file (SwfdecPlayer *player, const SwfdecURL *url)
+{
+  SWFDEC_FIXME ("implement");
+}
+
+void
+swfdec_player_check_policy_files (SwfdecPlayer *player, 
+    SwfdecPolicyFileFunc func, gpointer data)
+{
+  SWFDEC_FIXME ("implement");
+}
diff --git a/libswfdec/swfdec_policy_file.h b/libswfdec/swfdec_policy_file.h
new file mode 100644
index 0000000..5342983
--- /dev/null
+++ b/libswfdec/swfdec_policy_file.h
@@ -0,0 +1,70 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *               2007 Pekka Lampila <pekka.lampila at iki.fi>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifndef _SWFDEC_FLASH_SECURITY_POLICY_H_
+#define _SWFDEC_FLASH_SECURITY_POLICY_H_
+
+#include <libswfdec/swfdec.h>
+#include <libswfdec/swfdec_player.h>
+
+G_BEGIN_DECLS
+
+typedef struct _SwfdecPolicyFile SwfdecPolicyFile;
+typedef struct _SwfdecPolicyFileClass SwfdecPolicyFileClass;
+typedef void (* SwfdecPolicyFileFunc) (SwfdecPlayer *player, gboolean allow, gpointer data);
+
+#define SWFDEC_TYPE_POLICY_FILE                    (swfdec_policy_file_get_type())
+#define SWFDEC_IS_POLICY_FILE(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_POLICY_FILE))
+#define SWFDEC_IS_POLICY_FILE_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_POLICY_FILE))
+#define SWFDEC_POLICY_FILE(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_POLICY_FILE, SwfdecPolicyFile))
+#define SWFDEC_POLICY_FILE_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_POLICY_FILE, SwfdecPolicyFileClass))
+#define SWFDEC_POLICY_FILE_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_POLICY_FILE, SwfdecPolicyFileClass))
+
+struct _SwfdecPolicyFile {
+  GObject		object;
+
+  SwfdecPlayer *	player;		/* player we're loaded from */
+  SwfdecURL *		load_url;	/* url we're loaded from */
+  SwfdecURL *		url;		/* parent url we check with */
+  SwfdecLoader *	stream;		/* stream we are loading or NULL if done loading */
+  GSList *		allowed_hosts;	/* list of GPatternSpec of the allowed hosts */
+};
+
+struct _SwfdecPolicyFileClass {
+  GObjectClass		object_class;
+};
+
+GType		swfdec_policy_file_get_type	(void);
+
+SwfdecPolicyFile *swfdec_policy_file_new	(SwfdecPlayer *		player,
+						 const SwfdecURL *	url);
+gboolean	swfdec_policy_file_is_loading	(SwfdecPolicyFile *	file);
+gboolean	swfdec_policy_file_allow	(SwfdecPolicyFile *	file,
+						 const SwfdecURL *	url);
+
+void		swfdec_player_load_policy_file	(SwfdecPlayer *		player,
+						 const SwfdecURL *	url);
+void		swfdec_player_check_policy_files(SwfdecPlayer *		player,
+						 SwfdecPolicyFileFunc	func,
+						 gpointer		data);
+
+
+G_END_DECLS
+#endif
diff --git a/libswfdec/swfdec_policy_loader.c b/libswfdec/swfdec_policy_loader.c
deleted file mode 100644
index ae722b6..0000000
--- a/libswfdec/swfdec_policy_loader.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *               2007 Pekka Lampila <pekka.lampila at iki.fi>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "swfdec_policy_loader.h"
-#include "swfdec_flash_security.h"
-#include "swfdec_resource.h"
-#include "swfdec_as_strings.h"
-#include "swfdec_debug.h"
-#include "swfdec_loader_internal.h"
-#include "swfdec_player_internal.h"
-#include "swfdec_xml.h"
-#include "swfdec_xml_node.h"
-
-/*** SWFDEC_STREAM_TARGET ***/
-
-static SwfdecPlayer *
-swfdec_policy_stream_target_get_player (SwfdecStreamTarget *target)
-{
-  return SWFDEC_POLICY_LOADER (target)->sec->player;
-}
-
-static void
-swfdec_policy_stream_target_error (SwfdecStreamTarget *target,
-    SwfdecStream *stream)
-{
-  SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (target);
-
-  policy_loader->func (policy_loader, FALSE);
-}
-
-static gboolean
-swfdec_policy_loader_check (SwfdecAsContext *context, const char *text,
-    const char *host)
-{
-  SwfdecXml *xml;
-  gint32 i, j;
-  char *host_lower;
-
-  g_return_val_if_fail (SWFDEC_IS_AS_CONTEXT (context), FALSE);
-  g_return_val_if_fail (text != NULL, FALSE);
-
-  xml = swfdec_xml_new_no_properties (context, text, TRUE);
-
-  if (xml == NULL) {
-    SWFDEC_ERROR ("failed to create an XML object for crossdomain policy");
-    return FALSE;
-  }
-
-  if (SWFDEC_XML_NODE (xml)->type != SWFDEC_XML_NODE_ELEMENT) {
-    SWFDEC_LOG ("empty crossdomain policy file");
-    return FALSE;
-  }
-
-  if (host != NULL) {
-    host_lower = g_ascii_strdown (host, -1);
-  } else {
-    host_lower = NULL;
-  }
-
-  for (i = 0; i < swfdec_xml_node_num_children (SWFDEC_XML_NODE (xml)); i++) {
-    SwfdecXmlNode *node_cdp =
-      swfdec_xml_node_get_child (SWFDEC_XML_NODE (xml), i);
-
-    if (node_cdp->type != SWFDEC_XML_NODE_ELEMENT)
-      continue;
-
-    if (g_ascii_strcasecmp (node_cdp->name, "cross-domain-policy") != 0)
-      continue;
-
-    for (j = 0; j < swfdec_xml_node_num_children (node_cdp); j++) {
-      SwfdecXmlNode *node_aaf = swfdec_xml_node_get_child (node_cdp, j);
-      const char *value;
-      GPatternSpec *pattern;
-      char *value_lower;
-
-      if (node_aaf->type != SWFDEC_XML_NODE_ELEMENT)
-	continue;
-
-      if (g_ascii_strcasecmp (node_aaf->name, "allow-access-from") != 0)
-	continue;
-
-      // FIXME: secure attribute?
-
-      value = swfdec_xml_node_get_attribute (node_aaf, SWFDEC_AS_STR_domain);
-      if (value == NULL)
-	continue;
-
-      if (host != NULL) {
-	// GPatternSpec uses ? as a wildcard character, but we won't
-	// And there can't be a host that has ? character
-	if (strchr (value, '?') != NULL)
-	  continue;
-
-	value_lower = g_ascii_strdown (value, -1);
-	pattern = g_pattern_spec_new (value_lower);
-	g_free (value_lower);
-
-	if (g_pattern_match_string (pattern, host_lower)) {
-	  g_free (host_lower);
-	  g_pattern_spec_free (pattern);
-	  return TRUE;
-	}
-
-	g_pattern_spec_free (pattern);
-      } else {
-	// in case we don't have a host name, only match asterisks
-	if (value[strspn (value, "*")] == '\0')
-	  return TRUE;
-      }
-    }
-  }
-
-  g_free (host_lower);
-
-  return FALSE;
-}
-
-static void
-swfdec_policy_stream_target_close (SwfdecStreamTarget *target,
-    SwfdecStream *stream)
-{
-  SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (target);
-  gboolean allow;
-  char *text;
-
-  text = swfdec_loader_get_text (policy_loader->loader, 8);
-
-  if (text == NULL) {
-    SWFDEC_ERROR ("couldn't get text from crossdomain policy");
-    allow = FALSE;
-  } else {
-    allow = swfdec_policy_loader_check (
-	SWFDEC_AS_CONTEXT (policy_loader->sec->player), text,
-	swfdec_url_get_host (policy_loader->sec->url));
-  }
-
-  g_free (text);
-
-  SWFDEC_LOG ("crossdomain policy %s access from %s to %s",
-      (allow ? "allows" : "doesn't allow"),
-      swfdec_url_get_host (policy_loader->sec->url), policy_loader->host);
-
-  policy_loader->func (policy_loader, allow);
-}
-
-static void
-swfdec_policy_loader_stream_target_init (SwfdecStreamTargetInterface *iface)
-{
-  iface->get_player = swfdec_policy_stream_target_get_player;
-  iface->close = swfdec_policy_stream_target_close;
-  iface->error = swfdec_policy_stream_target_error;
-}
-
-/*** SWFDEC_POLICY_LOADER ***/
-
-G_DEFINE_TYPE_WITH_CODE (SwfdecPolicyLoader, swfdec_policy_loader, G_TYPE_OBJECT,
-    G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_policy_loader_stream_target_init))
-
-static void
-swfdec_policy_loader_dispose (GObject *object)
-{
-  SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (object);
-
-  g_assert (policy_loader->loader);
-  swfdec_stream_set_target (SWFDEC_STREAM (policy_loader->loader), NULL);
-  g_object_unref (policy_loader->loader);
-  policy_loader->loader = NULL;
-
-  g_assert (policy_loader->host);
-  g_free (policy_loader->host);
-
-  G_OBJECT_CLASS (swfdec_policy_loader_parent_class)->dispose (object);
-}
-
-static void
-swfdec_policy_loader_class_init (SwfdecPolicyLoaderClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-  object_class->dispose = swfdec_policy_loader_dispose;
-}
-
-static void
-swfdec_policy_loader_init (SwfdecPolicyLoader *policy_loader)
-{
-}
-
-SwfdecPolicyLoader *
-swfdec_policy_loader_new (SwfdecFlashSecurity *sec, const char *host,
-    SwfdecPolicyLoaderFunc func)
-{
-  SwfdecPolicyLoader *policy_loader;
-  SwfdecURL *url;
-  char *url_str;
-
-  g_return_val_if_fail (SWFDEC_IS_FLASH_SECURITY (sec), NULL);
-  g_return_val_if_fail (host != NULL, NULL);
-  g_return_val_if_fail (func != NULL, NULL);
-
-  policy_loader = SWFDEC_POLICY_LOADER (g_object_new (
-	SWFDEC_TYPE_POLICY_LOADER, NULL));
-
-  url_str = g_strdup_printf ("http://%s/crossdomain.xml", host);
-  url = swfdec_url_new (url_str);
-  g_free (url_str);
-  policy_loader->loader = swfdec_loader_load (sec->player->priv->resource->loader,
-      url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0);
-  swfdec_url_free (url);
-
-  if (!policy_loader->loader) {
-    g_free (policy_loader);
-    return NULL;
-  }
-
-  policy_loader->sec = sec;
-  policy_loader->host = g_strdup (host);
-  policy_loader->func = func;
-
-  swfdec_stream_set_target (SWFDEC_STREAM (policy_loader->loader),
-      SWFDEC_STREAM_TARGET (policy_loader));
-  swfdec_loader_set_data_type (policy_loader->loader, SWFDEC_LOADER_DATA_XML);
-
-  return policy_loader;
-}
-
-void
-swfdec_policy_loader_free (SwfdecPolicyLoader *policy_loader)
-{
-  g_return_if_fail (SWFDEC_IS_POLICY_LOADER (policy_loader));
-
-  g_object_unref (policy_loader);
-}
diff --git a/libswfdec/swfdec_policy_loader.h b/libswfdec/swfdec_policy_loader.h
deleted file mode 100644
index 525f48e..0000000
--- a/libswfdec/swfdec_policy_loader.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *               2007 Pekka Lampila <pekka.lampila at iki.fi>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifndef _SWFDEC_FLASH_SECURITY_POLICY_H_
-#define _SWFDEC_FLASH_SECURITY_POLICY_H_
-
-#include <libswfdec/swfdec.h>
-#include <libswfdec/swfdec_as_object.h>
-#include <libswfdec/swfdec_flash_security.h>
-
-G_BEGIN_DECLS
-
-typedef struct _SwfdecPolicyLoader SwfdecPolicyLoader;
-typedef struct _SwfdecPolicyLoaderClass SwfdecPolicyLoaderClass;
-typedef void (* SwfdecPolicyLoaderFunc) (SwfdecPolicyLoader *policy_loader, gboolean allow);
-
-#define SWFDEC_TYPE_POLICY_LOADER                    (swfdec_policy_loader_get_type())
-#define SWFDEC_IS_POLICY_LOADER(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_POLICY_LOADER))
-#define SWFDEC_IS_POLICY_LOADER_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_POLICY_LOADER))
-#define SWFDEC_POLICY_LOADER(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_POLICY_LOADER, SwfdecPolicyLoader))
-#define SWFDEC_POLICY_LOADER_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_POLICY_LOADER, SwfdecPolicyLoaderClass))
-#define SWFDEC_POLICY_LOADER_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_POLICY_LOADER, SwfdecPolicyLoaderClass))
-
-struct _SwfdecPolicyLoader {
-  GObject		object;
-
-  SwfdecLoader *	loader;
-
-  SwfdecFlashSecurity *	sec;
-  char *		host;
-  SwfdecPolicyLoaderFunc func;
-};
-
-struct _SwfdecPolicyLoaderClass {
-  GObjectClass		object_class;
-};
-
-GType		swfdec_policy_loader_get_type	(void);
-
-SwfdecPolicyLoader *swfdec_policy_loader_new	(SwfdecFlashSecurity *	sec,
-						 const char *		host,
-						 SwfdecPolicyLoaderFunc	func);
-void		swfdec_policy_loader_free	(SwfdecPolicyLoader *	policy_loader);
-
-G_END_DECLS
-#endif
diff --git a/libswfdec/swfdec_resource_request.c b/libswfdec/swfdec_resource_request.c
index 8c3ddbf..e367993 100644
--- a/libswfdec/swfdec_resource_request.c
+++ b/libswfdec/swfdec_resource_request.c
@@ -114,8 +114,7 @@ swfdec_player_request_resource_now (SwfdecPlayer *player,
   /* create absolute url first */
   absolute = swfdec_url_new_relative (swfdec_loader_get_url (player->priv->resource->loader), url);
 
-  swfdec_security_allow_url (security, absolute,
-      swfdec_player_request_resource_allow_callback, data);
+  swfdec_player_request_resource_allow_callback (absolute, TRUE, data);
 
   swfdec_url_free (absolute);
 }
diff --git a/libswfdec/swfdec_security.c b/libswfdec/swfdec_security.c
index a41f510..ae431a0 100644
--- a/libswfdec/swfdec_security.c
+++ b/libswfdec/swfdec_security.c
@@ -61,26 +61,3 @@ swfdec_security_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
   return klass->allow (guard, key);
 }
 
-/**
- * swfdec_security_allow_url:
- * @guard: security that is in effect
- * @url: URL that should be accessed
- *
- * Asks @guard to check if the given @url may be accessed.
- *
- * Returns: %TRUE if @url may be accessed.
- **/
-void
-swfdec_security_allow_url (SwfdecSecurity *guard, const SwfdecURL *url,
-    SwfdecURLAllowFunc callback, gpointer user_data)
-{
-  SwfdecSecurityClass *klass;
-
-  g_assert (SWFDEC_IS_SECURITY (guard));
-  g_assert (url != NULL);
-
-  klass = SWFDEC_SECURITY_GET_CLASS (guard);
-  g_assert (klass->allow_url);
-  klass->allow_url (guard, url, callback, user_data);
-}
-
diff --git a/libswfdec/swfdec_security.h b/libswfdec/swfdec_security.h
index 2933b44..cdc0717 100644
--- a/libswfdec/swfdec_security.h
+++ b/libswfdec/swfdec_security.h
@@ -47,21 +47,13 @@ struct _SwfdecSecurityClass
   GObjectClass		object_class;
 
   gboolean		(* allow)			(SwfdecSecurity *	guard,
-							 SwfdecSecurity *	from);
-  void			(* allow_url)			(SwfdecSecurity *	guard,
-							 const SwfdecURL *	url,
-							 SwfdecURLAllowFunc	callback,
-							 gpointer		user_data);
+							 SwfdecSecurity *	key);
 };
 
 GType			swfdec_security_get_type	(void);
 
 gboolean		swfdec_security_allow		(SwfdecSecurity *	guard,
 							 SwfdecSecurity *	key);
-void			swfdec_security_allow_url	(SwfdecSecurity *	guard,
-							 const SwfdecURL *	url,
-							 SwfdecURLAllowFunc	callback,
-							 gpointer		user_data);
 
 
 G_END_DECLS
diff --git a/libswfdec/swfdec_security_allow.c b/libswfdec/swfdec_security_allow.c
index e60a949..fb678b4 100644
--- a/libswfdec/swfdec_security_allow.c
+++ b/libswfdec/swfdec_security_allow.c
@@ -35,19 +35,11 @@ swfdec_security_allow_allow (SwfdecSecurity *guard, SwfdecSecurity *key)
 }
 
 static void
-swfdec_security_allow_allow_url (SwfdecSecurity *guard, const SwfdecURL *url,
-    SwfdecURLAllowFunc callback, gpointer user_data)
-{
-  callback (url, TRUE, user_data);
-}
-
-static void
 swfdec_security_allow_class_init (SwfdecSecurityAllowClass *klass)
 {
   SwfdecSecurityClass *security_class = SWFDEC_SECURITY_CLASS (klass);
 
   security_class->allow = swfdec_security_allow_allow;
-  security_class->allow_url = swfdec_security_allow_allow_url;
 }
 
 static void
commit 39778f967e2829a6e9552c2e68cff17d0814b86a
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Jan 15 10:52:03 2008 +0100

    add more functions to SwfdecURL (untested)
    
    These functions are needed by policy file handling

diff --git a/libswfdec/swfdec_url.c b/libswfdec/swfdec_url.c
index 3d57c54..6cdb54f 100644
--- a/libswfdec/swfdec_url.c
+++ b/libswfdec/swfdec_url.c
@@ -50,9 +50,9 @@
 
 struct _SwfdecURL {
   char *	url;			/* the complete url */
-  char *	protocol;		/* http, file, rtmp, ... */
-  char *	host;			/* can be NULL for files */
-  guint		port;			/* can be NULL */
+  char *	protocol;		/* lowercase, http, file, rtmp, ... */
+  char *	host;			/* lowercase, can be NULL for files */
+  guint		port;			/* can be 0 */
   char *	path;	  		/* can be NULL for root path */
   char *	query;			/* can be NULL */
 };
@@ -111,16 +111,16 @@ swfdec_url_new (const char *string)
   string = s + 3;
   s = strchr (string, '/');
   if (s == NULL) {
-    url->host = g_strdup (string);
+    url->host = g_ascii_strdown (string, -1);
     return url;
   }
   if (s != string) {
     char *colon = swfdec_memrchr (string, ':', s - string);
     if (colon) {
       url->port = strtoul (colon + 1, &colon, 10);
-      url->host = g_strndup (string, colon - string);
+      url->host = g_ascii_strdown (string, colon - string);
     } else {
-      url->host = g_strndup (string, s - string);
+      url->host = g_ascii_strdown (string, s - string);
     }
   }
   string = s + 1;
@@ -137,6 +137,63 @@ swfdec_url_new (const char *string)
 }
 
 /**
+ * swfdec_url_new_components:
+ * @protocol: protocol to use
+ * @hostname: hostname or IP address or %NULL
+ * @port: port number or 0. Must be 0 if no hostname is given
+ * @path: a path or %NULL
+ * @query: the query string or %NULL
+ *
+ * Creates a new URL from the given components.
+ *
+ * Returns: a new url pointing to the url from the given components
+ **/
+SwfdecURL *
+swfdec_url_new_components (const char *protocol, const char *hostname, 
+    guint port, const char *path, const char *query)
+{
+  GString *url;
+  SwfdecURL *result;
+
+  g_return_val_if_fail (protocol != NULL, NULL);
+  g_return_val_if_fail (hostname != NULL || port == 0, NULL);
+  g_return_val_if_fail (port < 65536, NULL);
+
+  url = g_string_new (protocol);
+  g_string_append (url, "://");
+  if (hostname) {
+    g_string_append (url, hostname);
+    if (port) {
+      g_string_append_printf (url, ":%u", port);
+    }
+  }
+  g_string_append (url, "/");
+  if (path)
+    g_string_append (url, path);
+  if (query) {
+    g_string_append (url, "?");
+    g_string_append (url, query);
+  }
+  result = swfdec_url_new (url->str);
+  g_string_free (url, TRUE);
+  return result;
+}
+
+/**
+ * swfdec_url_new_parent:
+ * @url: a #SwfdecURL
+ *
+ * Creates a new url that is the parent of @url.
+ *
+ * Returns: a new url pointing to the parent of @url.
+ **/
+SwfdecURL *
+swfdec_url_new_parent (const SwfdecURL *url)
+{
+  return swfdec_url_new_relative (url, "");
+}
+
+/**
  * swfdec_url_new_relative:
  * @url: a #SwfdecURL
  * @string: a relative or absolute URL path
@@ -206,6 +263,7 @@ swfdec_url_copy (const SwfdecURL *url)
   copy->url = g_strdup (url->url);
   copy->protocol = g_strdup (url->protocol);
   copy->host = g_strdup (url->host);
+  copy->port = url->port;
   copy->path = g_strdup (url->path);
   copy->query = g_strdup (url->query);
 
@@ -288,7 +346,7 @@ swfdec_url_has_protocol (const SwfdecURL *url, const char *protocol)
  * swfdec_url_get_host:
  * @url: a #SwfdecURL
  *
- * Gets the host for @url. 
+ * Gets the host for @url as a lower case string.
  *
  * Returns: the host or %NULL if none (typically for file URLs).
  **/
@@ -354,6 +412,47 @@ swfdec_url_get_query (const SwfdecURL *url)
 }
 
 /**
+ * swfdec_url_is_parent:
+ * @parent: the supposed parent url
+ * @child: the supposed child url
+ *
+ * Checks if the given @parent url is a parent url of the given @child url. The
+ * algorithm used is the same as checking policy files if hey apply. If @parent
+ * equals @child, %TRUE is returned. This function does not compare query 
+ * strings.
+ *
+ * Returns: %TRUE if @parent is a parent of @child, %FALSE otherwise.
+ **/
+gboolean
+swfdec_url_is_parent (const SwfdecURL *parent, const SwfdecURL *child)
+{
+  gsize len;
+
+  g_return_val_if_fail (parent != NULL, FALSE);
+  g_return_val_if_fail (child != NULL, FALSE);
+
+  if (!g_str_equal (parent->protocol, child->protocol))
+    return FALSE;
+  if (parent->host == NULL) {
+    if (child->host != NULL)
+      return FALSE;
+  } else {
+    if (child->host == NULL || !g_str_equal (parent->host, child->host))
+      return FALSE;
+  }
+  if (parent->port != child->port)
+    return FALSE;
+  if (parent->path == NULL)
+    return TRUE;
+  if (child->path == NULL)
+    return TRUE;
+  len = strlen (parent->path);
+  if (strncmp (parent->path, child->path, len) != 0)
+    return FALSE;
+  return child->path[len] == '\0' || child->path[len] == '/';
+}
+
+/**
  * swfdec_url_is_local:
  * @url: the url to check
  *
diff --git a/libswfdec/swfdec_url.h b/libswfdec/swfdec_url.h
index 3ac0b88..5eaa306 100644
--- a/libswfdec/swfdec_url.h
+++ b/libswfdec/swfdec_url.h
@@ -30,6 +30,12 @@ typedef struct _SwfdecURL SwfdecURL;
 GType			swfdec_url_get_type		(void) G_GNUC_CONST;
 
 SwfdecURL *		swfdec_url_new			(const char *		string);
+SwfdecURL *		swfdec_url_new_components	(const char *		protocol,
+							 const char *		hostname, 
+							 guint			port,
+							 const char *		path,
+							 const char *		query);
+SwfdecURL *		swfdec_url_new_parent	      	(const SwfdecURL *	url);
 SwfdecURL *		swfdec_url_new_relative	      	(const SwfdecURL *	url,
 							 const char *		string);
 SwfdecURL *		swfdec_url_copy			(const SwfdecURL *      url);
@@ -45,6 +51,8 @@ const char *		swfdec_url_get_query		(const SwfdecURL *      url);
 gboolean		swfdec_url_has_protocol		(const SwfdecURL *	url,
 							 const char *		protocol);
 
+gboolean		swfdec_url_is_parent		(const SwfdecURL *	parent,
+							 const SwfdecURL *	child);
 gboolean		swfdec_url_is_local		(const SwfdecURL *	url);
 							 
 
commit be36299778c70baf6d7e84260d95bd6e69b79076
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Jan 15 10:51:40 2008 +0100

    g_object_notify next-event after a call to advance()

diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index feb0638..4ff88a8 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -1399,6 +1399,7 @@ swfdec_player_do_advance (SwfdecPlayer *player, gulong msecs, guint audio_sample
   }
   g_assert (audio_samples == 0);
   
+  g_object_notify (G_OBJECT (player), "next-event");
   swfdec_player_unlock (player);
 }
 
@@ -1578,7 +1579,7 @@ swfdec_player_class_init (SwfdecPlayerClass *klass)
       g_param_spec_enum ("mouse-cursor", "mouse cursor", "how the mouse pointer should be presented",
 	  SWFDEC_TYPE_MOUSE_CURSOR, SWFDEC_MOUSE_CURSOR_NONE, G_PARAM_READABLE));
   g_object_class_install_property (object_class, PROP_NEXT_EVENT,
-      g_param_spec_long ("next-event", "next event", "how many milliseconds until the next event or 0 when no event pending",
+      g_param_spec_long ("next-event", "next event", "how many milliseconds until the next event or -1 when no event pending",
 	  -1, G_MAXLONG, -1, G_PARAM_READABLE));
   g_object_class_install_property (object_class, PROP_CACHE_SIZE,
       g_param_spec_uint ("cache-size", "cache size", "maximum cache size in bytes",
commit b018fc217e22901b562d51b3c9b808b9a0f6f4a2
Author: Benjamin Otte <otte at gnome.org>
Date:   Sat Jan 12 00:23:51 2008 +0100

    parse ports seperately

diff --git a/libswfdec/swfdec_url.c b/libswfdec/swfdec_url.c
index fe9ca0a..3d57c54 100644
--- a/libswfdec/swfdec_url.c
+++ b/libswfdec/swfdec_url.c
@@ -20,7 +20,10 @@
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
+
+#include <stdlib.h>
 #include <string.h>
+
 #include "swfdec_url.h"
 #include "swfdec_debug.h"
 
@@ -49,6 +52,7 @@ struct _SwfdecURL {
   char *	url;			/* the complete url */
   char *	protocol;		/* http, file, rtmp, ... */
   char *	host;			/* can be NULL for files */
+  guint		port;			/* can be NULL */
   char *	path;	  		/* can be NULL for root path */
   char *	query;			/* can be NULL */
 };
@@ -65,6 +69,19 @@ swfdec_url_get_type (void)
   return type;
 }
 
+static void *
+swfdec_memrchr (const void *s, int c, size_t n)
+{
+  void *cur, *next;
+
+  cur = memchr (s, c, n);
+  if (cur == NULL)
+    return NULL;
+  while ((next = memchr (cur, c, n)))
+    cur = next;
+  return cur;
+}
+
 /**
  * swfdec_url_new:
  * @string: a full-qualified URL encoded in UTF-8
@@ -81,6 +98,7 @@ swfdec_url_new (const char *string)
 
   g_return_val_if_fail (string != NULL, NULL);
 
+  /* FIXME: error checking? */
   SWFDEC_DEBUG ("new url: %s", string);
   url = g_slice_new0 (SwfdecURL);
   url->url = g_strdup (string);
@@ -96,8 +114,15 @@ swfdec_url_new (const char *string)
     url->host = g_strdup (string);
     return url;
   }
-  if (s != string)
-    url->host = g_strndup (string, s - string);
+  if (s != string) {
+    char *colon = swfdec_memrchr (string, ':', s - string);
+    if (colon) {
+      url->port = strtoul (colon + 1, &colon, 10);
+      url->host = g_strndup (string, colon - string);
+    } else {
+      url->host = g_strndup (string, s - string);
+    }
+  }
   string = s + 1;
   s = strchr (string, '?');
   if (s == NULL) {
@@ -263,8 +288,7 @@ swfdec_url_has_protocol (const SwfdecURL *url, const char *protocol)
  * swfdec_url_get_host:
  * @url: a #SwfdecURL
  *
- * Gets the host for @url. If the host includes a portnumber, it will be present
- * in the returned string.
+ * Gets the host for @url. 
  *
  * Returns: the host or %NULL if none (typically for file URLs).
  **/
@@ -277,6 +301,23 @@ swfdec_url_get_host (const SwfdecURL *url)
 }
 
 /**
+ * swfdec_url_get_port:
+ * @url: a #SwfdecURL
+ *
+ * Gets the port number specified by the given @url. If the @url does not 
+ * specify a port number, 0 will be returned.
+ *
+ * Returns: the specified port or 0 if none was given.
+ **/
+guint
+swfdec_url_get_port (const SwfdecURL *url)
+{
+  g_return_val_if_fail (url != NULL, 0);
+
+  return url->port;
+}
+
+/**
  * swfdec_url_get_path:
  * @url: a #SwfdecURL
  *
diff --git a/libswfdec/swfdec_url.h b/libswfdec/swfdec_url.h
index 7a94039..3ac0b88 100644
--- a/libswfdec/swfdec_url.h
+++ b/libswfdec/swfdec_url.h
@@ -38,6 +38,7 @@ void			swfdec_url_free			(SwfdecURL *		url);
 const char *		swfdec_url_get_url		(const SwfdecURL *      url);
 const char *		swfdec_url_get_protocol		(const SwfdecURL *      url);
 const char *		swfdec_url_get_host		(const SwfdecURL *      url);
+guint			swfdec_url_get_port		(const SwfdecURL *	url);
 const char *		swfdec_url_get_path		(const SwfdecURL *      url);
 const char *		swfdec_url_get_query		(const SwfdecURL *      url);
 
commit 506c18b1eb4111743480be75fa30c7a230742070
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Jan 11 13:56:38 2008 +0100

    get rid of swfdec_movie_load_variables() API and call it directly

diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index 24ed902..24a822c 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -39,6 +39,7 @@
 #include <math.h>
 #include <string.h>
 #include "swfdec_decoder.h"
+#include "swfdec_load_object.h"
 #include "swfdec_movie.h"
 #include "swfdec_player_internal.h"
 #include "swfdec_sprite.h"
@@ -1161,6 +1162,18 @@ swfdec_action_get_url (SwfdecAsContext *cx, guint action, const guint8 *data, gu
 }
 
 static void
+swfdec_as_interpret_load_variables_on_finish (SwfdecAsObject *target,
+    const char *text)
+{
+  if (text != NULL)
+    swfdec_as_object_decode (target, text);
+
+  // only call onData for sprite movies
+  // FIXME: is it called even when loading fails?
+  swfdec_movie_queue_script (SWFDEC_MOVIE (target), SWFDEC_EVENT_DATA);
+}
+
+static void
 swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, guint len)
 {
   const char *target, *url;
@@ -1193,8 +1206,10 @@ swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, g
     SwfdecMovie *movie;
     
     movie = swfdec_player_get_movie_from_string (SWFDEC_PLAYER (cx), target);
-    if (movie != NULL)
-      swfdec_movie_load_variables (movie, url, method, NULL);
+    if (movie != NULL) {
+      swfdec_load_object_new (SWFDEC_AS_OBJECT (movie), url, method, NULL, NULL,
+	  swfdec_as_interpret_load_variables_on_finish);
+    }
   } else if (internal) {
     swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, method, NULL, NULL);
   } else {
diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c
index 547155b..90147a3 100644
--- a/libswfdec/swfdec_movie.c
+++ b/libswfdec/swfdec_movie.c
@@ -1724,35 +1724,6 @@ swfdec_movie_duplicate (SwfdecMovie *movie, const char *name, int depth)
   return copy;
 }
 
-static void
-swfdec_movie_load_variables_on_finish (SwfdecAsObject *target,
-    const char *text)
-{
-  if (text != NULL)
-    swfdec_as_object_decode (target, text);
-
-  // only call onData for sprite movies
-  // FIXME: is it called even when loading fails?
-  if (target->context->version >= 6 && SWFDEC_IS_SPRITE_MOVIE (target))
-    swfdec_as_object_call (target, SWFDEC_AS_STR_onData, 0, NULL, NULL);
-}
-
-void
-swfdec_movie_load_variables (SwfdecMovie *movie, const char *url,
-    SwfdecLoaderRequest request, SwfdecBuffer *data)
-{
-  g_return_if_fail (SWFDEC_IS_MOVIE (movie));
-  g_return_if_fail (url != NULL);
-
-  if (request != SWFDEC_LOADER_REQUEST_DEFAULT) {
-    SWFDEC_FIXME ("loadVariables: Different request-modes not supported");
-    return;
-  }
-
-  swfdec_load_object_new (SWFDEC_AS_OBJECT (movie), url, request, data, NULL,
-      swfdec_movie_load_variables_on_finish);
-}
-
 char *
 swfdec_movie_get_path (SwfdecMovie *movie, gboolean dot)
 {
diff --git a/libswfdec/swfdec_movie.h b/libswfdec/swfdec_movie.h
index 6b5b001..623707f 100644
--- a/libswfdec/swfdec_movie.h
+++ b/libswfdec/swfdec_movie.h
@@ -278,10 +278,6 @@ void		swfdec_movie_execute		(SwfdecMovie *		movie,
 						 SwfdecEventType	condition);
 void		swfdec_movie_queue_script	(SwfdecMovie *		movie,
   						 SwfdecEventType	condition);
-void		swfdec_movie_load_variables	(SwfdecMovie *		movie,
-						 const char *		url,
-						 SwfdecLoaderRequest	request,
-						 SwfdecBuffer *		data);
 
 int		swfdec_movie_compare_depths	(gconstpointer		a,
 						 gconstpointer		b);
commit ddcdff6d0156b0de3002572e905577a0ccf42f2c
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Jan 10 19:51:13 2008 +0100

    use a function list for the player's rooted objects

diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index 72c1ceb..a7d3fd2 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -69,8 +69,8 @@ swfdec_load_object_stream_target_error (SwfdecStreamTarget *target,
   load_object->finish (load_object->target, NULL);
 
   /* unroot */
-  swfdec_player_unroot_object (SWFDEC_PLAYER (
-	SWFDEC_AS_OBJECT (load_object)->context), G_OBJECT (load_object));
+  swfdec_player_unroot (SWFDEC_PLAYER (
+	SWFDEC_AS_OBJECT (load_object)->context), load_object);
 }
 
 static void
@@ -99,8 +99,8 @@ swfdec_load_object_stream_target_close (SwfdecStreamTarget *target,
   }
 
   /* unroot */
-  swfdec_player_unroot_object (SWFDEC_PLAYER (
-	SWFDEC_AS_OBJECT (load_object)->context), G_OBJECT (load_object));
+  swfdec_player_unroot (SWFDEC_PLAYER (
+	SWFDEC_AS_OBJECT (load_object)->context), load_object);
 }
 
 static void
@@ -225,8 +225,7 @@ swfdec_load_object_new (SwfdecAsObject *target, const char *url,
   if (!swfdec_load_object_load (load_object, url, request, data))
     return NULL;
 
-  swfdec_player_root_object (SWFDEC_PLAYER (target->context),
-      G_OBJECT (load_object));
+  swfdec_player_root (SWFDEC_PLAYER (target->context), load_object, (GFunc) swfdec_as_object_mark);
 
   return SWFDEC_AS_OBJECT (load_object);
 }
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 2e2b728..feb0638 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -885,9 +885,8 @@ swfdec_player_dispose (GObject *object)
     g_object_unref (priv->resource);
     priv->resource = NULL;
   }
-  while (priv->rooted_objects)
-    swfdec_player_unroot_object (player, priv->rooted_objects->data);
 
+  swfdec_function_list_clear (&priv->rooted);
   /* we do this here so references to GC'd objects get freed */
   G_OBJECT_CLASS (swfdec_player_parent_class)->dispose (object);
 
@@ -1515,16 +1514,6 @@ swfdec_player_mark_string_object (gpointer key, gpointer value, gpointer data)
 }
 
 static void
-swfdec_player_mark_rooted_object (gpointer object, gpointer unused)
-{
-  if (SWFDEC_IS_RESOURCE (object)) {
-    swfdec_resource_mark (object);
-  } else if (SWFDEC_IS_AS_OBJECT (object)) {
-    swfdec_as_object_mark (object);
-  }
-}
-
-static void
 swfdec_player_mark (SwfdecAsContext *context)
 {
   SwfdecPlayer *player = SWFDEC_PLAYER (context);
@@ -1536,7 +1525,7 @@ swfdec_player_mark (SwfdecAsContext *context)
   swfdec_as_object_mark (priv->Video);
   g_list_foreach (priv->roots, (GFunc) swfdec_as_object_mark, NULL);
   g_list_foreach (priv->intervals, (GFunc) swfdec_as_object_mark, NULL);
-  g_list_foreach (priv->rooted_objects, swfdec_player_mark_rooted_object, NULL);
+  swfdec_function_list_execute (&priv->rooted, player);
 
   SWFDEC_AS_CONTEXT_CLASS (swfdec_player_parent_class)->mark (context);
 }
@@ -2101,68 +2090,6 @@ swfdec_player_set_export_class (SwfdecPlayer *player, const char *name, SwfdecAs
   }
 }
 
-/* FIXME:
- * I don't like the idea of rooting arbitrary objects very much. And so far, 
- * this API is only necessary for the objects used for loading data. So it seems
- * like a good idea to revisit the refcounting and GCing of resources.
- */
-void
-swfdec_player_root_object (SwfdecPlayer *player, GObject *object)
-{
-  SwfdecPlayerPrivate *priv;
-
-  g_return_if_fail (SWFDEC_IS_PLAYER (player));
-  g_return_if_fail (G_IS_OBJECT (object));
-
-  priv = player->priv;
-  g_object_ref (object);
-  priv->rooted_objects = g_list_prepend (priv->rooted_objects, object);
-}
-
-void
-swfdec_player_unroot_object (SwfdecPlayer *player, GObject *object)
-{
-  SwfdecPlayerPrivate *priv = player->priv;
-  GList *entry;
-
-  g_return_if_fail (SWFDEC_IS_PLAYER (player));
-  g_return_if_fail (G_IS_OBJECT (object));
-  entry = g_list_find (priv->rooted_objects, object);
-  g_return_if_fail (entry != NULL);
-  g_object_unref (object);
-  priv->rooted_objects = g_list_delete_link (priv->rooted_objects, entry);
-}
-
-/**
- * swfdec_player_create_socket:
- * @player: a #SwfdecPlayer
- * @hostname: the host name to connect to.
- * @port: the port to connect to
- *
- * Creates a new socket connecting to the given hostname and port.
- *
- * Returns: a new socket or %NULL if no socket implementation exists
- **/
-/* FIXME: always return a socket? */
-SwfdecSocket *
-swfdec_player_create_socket (SwfdecPlayer *player, const char *hostname, guint port)
-{
-  SwfdecSocket *sock;
-  SwfdecSocketClass *klass;
-
-  g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
-  g_return_val_if_fail (hostname != NULL, NULL);
-  g_return_val_if_fail (port > 0, NULL);
-
-  if (player->priv->socket_type == 0)
-    return NULL;
-  klass = g_type_class_ref (player->priv->socket_type);
-  sock = klass->create (hostname, port);
-  g_type_class_unref (klass);
-
-  return sock;
-}
-
 /** PUBLIC API ***/
 
 /**
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index fbbac20..cbe49ec 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -23,6 +23,7 @@
 #include <libswfdec/swfdec_player.h>
 #include <libswfdec/swfdec_audio.h>
 #include <libswfdec/swfdec_event.h>
+#include <libswfdec/swfdec_function_list.h>
 #include <libswfdec/swfdec_player_scripting.h>
 #include <libswfdec/swfdec_rect.h>
 #include <libswfdec/swfdec_ringbuffer.h>
@@ -62,7 +63,6 @@ struct _SwfdecPlayerPrivate
   guint			width;			/* width of movie */
   guint			height;			/* height of movie */
   GList *		roots;			/* all the root movies */
-  GList *		rooted_objects;		/* all the objects we keep track of */
   GSList *		resource_requests;	/* all external requested URIs - see swfdec_resource_request.[ch] */
   SwfdecCache *		cache;			/* player cache */
   gboolean		bgcolor_set;		/* TRUE if the background color has been set */
@@ -88,6 +88,7 @@ struct _SwfdecPlayerPrivate
 
   guint			unnamed_count;		/* variable used for naming unnamed movies */
   /* ActionScript */
+  SwfdecFunctionList	rooted;	  		/* all the objects we keep track of */
   guint			interval_id;		/* id returned from setInterval call */
   GList *		intervals;		/* all currently running intervals */
   GHashTable *		registered_classes;	/* name => SwfdecAsObject constructor */
@@ -151,10 +152,10 @@ void		swfdec_player_unlock		(SwfdecPlayer *		player);
 void		swfdec_player_unlock_soft	(SwfdecPlayer *		player);
 void		swfdec_player_perform_actions	(SwfdecPlayer *		player);
 
-void		swfdec_player_root_object	(SwfdecPlayer *		player,
-						 GObject *		object);
-void		swfdec_player_unroot_object	(SwfdecPlayer *		player,
-						 GObject *		object);
+#define swfdec_player_root(player, data, mark_func) \
+    swfdec_function_list_add (&(player)->priv->rooted, (mark_func), (data), NULL)
+#define swfdec_player_unroot(player, data) \
+    swfdec_function_list_remove (&(player)->priv->rooted, (data))
 SwfdecAsObject *swfdec_player_get_export_class	(SwfdecPlayer *		player,
 						 const char *		name);
 void		swfdec_player_set_export_class	(SwfdecPlayer *		player,
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index 6a8b3b4..08113e3 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -210,7 +210,7 @@ swfdec_resource_create_movie (SwfdecResource *resource)
       SWFDEC_WARNING ("%s does not reference a movie, not loading %s", resource->target,
 	  swfdec_url_get_url (swfdec_loader_get_url (resource->loader)));
       swfdec_stream_close (SWFDEC_STREAM (resource->loader));
-      swfdec_player_unroot_object (player, G_OBJECT (resource));
+      swfdec_player_unroot (player, resource);
       return FALSE;
     }
     movie = swfdec_player_get_movie_at_level (player, level);
@@ -220,7 +220,7 @@ swfdec_resource_create_movie (SwfdecResource *resource)
   } else {
     movie = swfdec_resource_replace_movie (movie, resource);
   }
-  swfdec_player_unroot_object (player, G_OBJECT (resource));
+  swfdec_player_unroot (player, resource);
   return TRUE;
 }
 
@@ -548,7 +548,7 @@ swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url,
     resource->target = path;
     if (loader)
       resource->clip_loader = g_object_ref (loader);
-    swfdec_player_root_object (player, G_OBJECT (resource));
+    swfdec_player_root (player, resource, (GFunc) swfdec_resource_mark);
     swfdec_player_request_resource (player, SWFDEC_AS_CONTEXT (player)->frame->security, 
 	url, request, buffer, swfdec_resource_do_load, resource, g_object_unref);
   }
commit 2db6a3d2215d8ce37c701943604b405ff804be03
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Jan 10 19:41:36 2008 +0100

    add a SwfdecFunctionList struct
    
    This is supposed to make collecting callbacks easier, as there's a lot of those
    around.
    I'm not sure this API works out, but we can at least try it.

diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index b0efc23..7da1ba0 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -80,6 +80,7 @@ libswfdec_source_files = \
 	swfdec_flash_security.c \
 	swfdec_flv_decoder.c \
 	swfdec_font.c \
+	swfdec_function_list.c \
 	swfdec_glow_filter.c \
 	swfdec_gradient_filter.c \
 	swfdec_gradient_pattern.c \
@@ -242,6 +243,7 @@ noinst_HEADERS = \
 	swfdec_flash_security.h \
 	swfdec_flv_decoder.h \
 	swfdec_font.h \
+	swfdec_function_list.h \
 	swfdec_gradient_pattern.h \
 	swfdec_graphic.h \
 	swfdec_graphic_movie.h \
diff --git a/libswfdec/swfdec_function_list.c b/libswfdec/swfdec_function_list.c
new file mode 100644
index 0000000..0b29b59
--- /dev/null
+++ b/libswfdec/swfdec_function_list.c
@@ -0,0 +1,132 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include "swfdec_function_list.h"
+
+typedef struct _SwfdecFunctionListEntry SwfdecFunctionListEntry;
+struct _SwfdecFunctionListEntry {
+  GFunc			func;
+  gpointer		data;
+  GDestroyNotify	destroy;
+};
+
+void
+swfdec_function_list_clear (SwfdecFunctionList *list)
+{
+  GList *walk;
+
+  g_return_if_fail (list != NULL);
+
+  for (walk = list->list; walk; walk = walk->next) {
+    SwfdecFunctionListEntry *entry = walk->data;
+    if (entry->destroy)
+      entry->destroy (entry->data);
+    g_slice_free (SwfdecFunctionListEntry, entry);
+  }
+  g_list_free (list->list);
+  list->list = NULL;
+}
+
+void
+swfdec_function_list_add (SwfdecFunctionList *list, GFunc func,
+    gpointer data, GDestroyNotify destroy)
+{
+  SwfdecFunctionListEntry *entry;
+
+  g_return_if_fail (list != NULL);
+  g_return_if_fail (func);
+
+  entry = g_slice_new (SwfdecFunctionListEntry);
+  entry->func = func;
+  entry->data = data;
+  entry->destroy = destroy;
+
+  list->list = g_list_append (list->list, entry);
+}
+
+static int
+swfdec_function_list_entry_compare (gconstpointer a, gconstpointer b)
+{
+  a = ((const SwfdecFunctionListEntry *) a)->data;
+  b = ((const SwfdecFunctionListEntry *) b)->data;
+
+  if (a < b)
+    return -1;
+  if (a > b)
+    return 1;
+  return 0;
+}
+
+void
+swfdec_function_list_remove (SwfdecFunctionList *list, gpointer data)
+{
+  SwfdecFunctionListEntry entry = { NULL, data, NULL };
+  SwfdecFunctionListEntry *e;
+  GList *node;
+
+  g_return_if_fail (list != NULL);
+
+  node = g_list_find_custom (list->list, &entry,
+      swfdec_function_list_entry_compare);
+  e = node->data;
+  if (e->destroy)
+    e->destroy (data);
+  g_slice_free (SwfdecFunctionListEntry, e);
+  list->list = g_list_delete_link (list->list, node);
+}
+
+void
+swfdec_function_list_execute (SwfdecFunctionList *list, gpointer data)
+{
+  SwfdecFunctionListEntry *entry;
+  GList *walk;
+
+  g_return_if_fail (list != NULL);
+
+  for (walk = list->list; walk; walk = walk->next) {
+    entry = walk->data;
+    entry->func (entry->data, data);
+  }
+}
+
+void
+swfdec_function_list_execute_and_clear (SwfdecFunctionList *list, gpointer data)
+{
+  SwfdecFunctionListEntry *entry;
+  GList *old, *walk;
+
+  g_return_if_fail (list != NULL);
+
+  old = list->list;
+  list->list = NULL;
+  for (walk = old; walk; walk = walk->next) {
+    entry = walk->data;
+    entry->func (entry->data, data);
+    if (entry->destroy)
+      entry->destroy (entry->data);
+    g_slice_free (SwfdecFunctionListEntry, entry);
+  }
+  g_list_free (old);
+}
+
diff --git a/libswfdec/swfdec_function_list.h b/libswfdec/swfdec_function_list.h
new file mode 100644
index 0000000..f7e8691
--- /dev/null
+++ b/libswfdec/swfdec_function_list.h
@@ -0,0 +1,50 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifndef __SWFDEC_FUNCTION_LIST_H__
+#define __SWFDEC_FUNCTION_LIST_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+
+typedef struct _SwfdecFunctionList SwfdecFunctionList;
+struct _SwfdecFunctionList {
+  GList *	list;
+};
+
+void		  	swfdec_function_list_clear	(SwfdecFunctionList *	list);
+
+void			swfdec_function_list_add	(SwfdecFunctionList *	list,
+							 GFunc			func,
+							 gpointer		data,
+							 GDestroyNotify 	destroy);
+void			swfdec_function_list_remove	(SwfdecFunctionList *	list,
+							 gpointer		data);
+
+void			swfdec_function_list_execute	(SwfdecFunctionList *	list,
+							 gpointer		data);
+void			swfdec_function_list_execute_and_clear
+							(SwfdecFunctionList *   list,
+							 gpointer		data);
+
+G_END_DECLS
+
+#endif
commit b51d972972da4aef91d54099a1f85bd614a35c96
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Jan 10 18:33:44 2008 +0100

    add copyright headers

diff --git a/libswfdec/swfdec_ringbuffer.c b/libswfdec/swfdec_ringbuffer.c
index acc8ba1..6d3dd04 100644
--- a/libswfdec/swfdec_ringbuffer.c
+++ b/libswfdec/swfdec_ringbuffer.c
@@ -1,3 +1,21 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/libswfdec/swfdec_ringbuffer.h b/libswfdec/swfdec_ringbuffer.h
index d7aad1b..3f02851 100644
--- a/libswfdec/swfdec_ringbuffer.h
+++ b/libswfdec/swfdec_ringbuffer.h
@@ -1,3 +1,21 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
 
 #ifndef __SWFDEC_RING_BUFFER_H__
 #define __SWFDEC_RING_BUFFER_H__
commit ab2cdc38c16b4df99c12d4b65a43372fa01c842b
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Jan 9 23:47:55 2008 +0100

    dump current changes here
    
    The next round of changes needs a revamped load request system

diff --git a/libswfdec/swfdec_as_strings.c b/libswfdec/swfdec_as_strings.c
index 0729919..7f880aa 100644
--- a/libswfdec/swfdec_as_strings.c
+++ b/libswfdec/swfdec_as_strings.c
@@ -485,5 +485,7 @@ const char swfdec_as_strings[] =
   SWFDEC_AS_CONSTANT_STRING ("y")
   SWFDEC_AS_CONSTANT_STRING ("idMap")
   SWFDEC_AS_CONSTANT_STRING ("id")
+  SWFDEC_AS_CONSTANT_STRING ("onClose")
+  SWFDEC_AS_CONSTANT_STRING ("onConnect")
   /* add more here */
 ;
diff --git a/libswfdec/swfdec_xml_socket.c b/libswfdec/swfdec_xml_socket.c
index 89bfaae..bff72c7 100644
--- a/libswfdec/swfdec_xml_socket.c
+++ b/libswfdec/swfdec_xml_socket.c
@@ -1,5 +1,5 @@
 /* Swfdec
- * Copyright (C) 2007 Pekka Lampila <pekka.lampila at iki.fi>
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -21,14 +21,210 @@
 #include "config.h"
 #endif
 
+#include <string.h>
+
+#include "swfdec_xml_socket.h"
 #include "swfdec_as_internal.h"
+#include "swfdec_as_strings.h"
+#include "swfdec_buffer.h"
 #include "swfdec_debug.h"
+#include "swfdec_loader_internal.h"
+#include "swfdec_movie.h"
+#include "swfdec_player_internal.h"
+
+static GQuark xml_socket_quark = 0;
+
+static void
+swfdec_xml_socket_ensure_closed (SwfdecXmlSocket *xml)
+{
+  gpointer cur;
+
+  if (xml->socket == NULL)
+    return;
+
+  swfdec_stream_set_target (SWFDEC_STREAM (xml->socket), NULL);
+  g_object_unref (xml->socket);
+  xml->socket = NULL;
+
+  swfdec_player_unroot_object (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (xml)->context), G_OBJECT (xml));
+  cur = g_object_get_qdata (G_OBJECT (xml->target), xml_socket_quark);
+  if (cur != xml)
+    g_object_set_qdata (G_OBJECT (xml->target), xml_socket_quark, cur);
+  xml->target = NULL;
+}
+
+/*** SWFDEC_STREAM_TARGET ***/
+
+static SwfdecPlayer *
+swfdec_xml_socket_stream_target_get_player (SwfdecStreamTarget *target)
+{
+  return SWFDEC_PLAYER (SWFDEC_AS_OBJECT (target)->context);
+}
+
+static void
+swfdec_xml_socket_stream_target_error (SwfdecStreamTarget *target,
+    SwfdecStream *stream)
+{
+  SwfdecXmlSocket *xml = SWFDEC_XML_SOCKET (target);
+
+  if (xml->open) {
+    SWFDEC_FIXME ("is onClose emitted on error?");
+    swfdec_as_object_call (xml->target, SWFDEC_AS_STR_onClose, 0, NULL, NULL);
+  } else {
+    SwfdecAsValue value;
+
+    SWFDEC_AS_VALUE_SET_BOOLEAN (&value, FALSE);
+    swfdec_as_object_call (xml->target, SWFDEC_AS_STR_onConnect, 1, &value, NULL);
+  }
+
+  swfdec_xml_socket_ensure_closed (xml);
+}
+
+static void
+swfdec_xml_socket_stream_target_parse (SwfdecStreamTarget *target,
+    SwfdecStream *stream)
+{
+  SwfdecXmlSocket *xml = SWFDEC_XML_SOCKET (target);
+  SwfdecBufferQueue *queue;
+  SwfdecBuffer *buffer;
+  gsize len;
+
+  /* parse until next 0 byte or take everything */
+  queue = swfdec_stream_get_queue (stream);
+  while ((buffer = swfdec_buffer_queue_peek_buffer (queue))) {
+    guchar *nul = memchr (buffer->data, 0, buffer->length);
+    
+    len = nul ? (gsize) (nul - buffer->data + 1) : buffer->length;
+    g_assert (len > 0);
+    swfdec_buffer_unref (buffer);
+    buffer = swfdec_buffer_queue_pull (queue, len);
+    swfdec_buffer_queue_push (xml->queue, buffer);
+    if (nul) {
+      len = swfdec_buffer_queue_get_depth (xml->queue);
+      g_assert (len > 0);
+      buffer = swfdec_buffer_queue_pull (xml->queue, len);
+      if (!g_utf8_validate ((char *) buffer->data, len, NULL)) {
+	SWFDEC_FIXME ("invalid utf8 sent through socket, what now?");
+      } else {
+	SwfdecAsValue val;
+
+	SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_get_string (
+	      SWFDEC_AS_OBJECT (xml)->context, (char *) buffer->data));
+	swfdec_as_object_call (xml->target, SWFDEC_AS_STR_onData, 1, &val, NULL);
+      }
+    }
+  }
+}
+
+static void
+swfdec_xml_socket_stream_target_close (SwfdecStreamTarget *target,
+    SwfdecStream *stream)
+{
+  SwfdecXmlSocket *xml = SWFDEC_XML_SOCKET (target);
+
+  if (swfdec_buffer_queue_get_depth (xml->queue)) {
+    SWFDEC_FIXME ("data left in socket, what now?");
+  }
+
+  swfdec_as_object_call (xml->target, SWFDEC_AS_STR_onClose, 0, NULL, NULL);
+
+  swfdec_xml_socket_ensure_closed (xml);
+}
+
+static void
+swfdec_xml_socket_stream_target_init (SwfdecStreamTargetInterface *iface)
+{
+  iface->get_player = swfdec_xml_socket_stream_target_get_player;
+  iface->parse = swfdec_xml_socket_stream_target_parse;
+  iface->close = swfdec_xml_socket_stream_target_close;
+  iface->error = swfdec_xml_socket_stream_target_error;
+}
+
+/*** SWFDEC_XML_SOCKET ***/
+
+G_DEFINE_TYPE_WITH_CODE (SwfdecXmlSocket, swfdec_xml_socket, SWFDEC_TYPE_AS_OBJECT,
+    G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_xml_socket_stream_target_init))
+
+static void
+swfdec_xml_socket_mark (SwfdecAsObject *object)
+{
+  swfdec_as_object_mark (SWFDEC_XML_SOCKET (object)->target);
+
+  SWFDEC_AS_OBJECT_CLASS (swfdec_xml_socket_parent_class)->mark (object);
+}
+
+static void
+swfdec_xml_socket_dispose (GObject *object)
+{
+  SwfdecXmlSocket *xml = SWFDEC_XML_SOCKET (object);
+
+  swfdec_xml_socket_ensure_closed (xml);
+  if (xml->queue) {
+    swfdec_buffer_queue_unref (xml->queue);
+    xml->queue = NULL;
+  }
+
+  G_OBJECT_CLASS (swfdec_xml_socket_parent_class)->dispose (object);
+}
+
+static void
+swfdec_xml_socket_class_init (SwfdecXmlSocketClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  SwfdecAsObjectClass *as_object_class = SWFDEC_AS_OBJECT_CLASS (klass);
+
+  object_class->dispose = swfdec_xml_socket_dispose;
+
+  as_object_class->mark = swfdec_xml_socket_mark;
+}
+
+static void
+swfdec_xml_socket_init (SwfdecXmlSocket *xml)
+{
+  xml->queue = swfdec_buffer_queue_new ();
+}
+
+static SwfdecXmlSocket *
+swfdec_xml_socket_create (SwfdecAsObject *target, const char *hostname, guint port)
+{
+  SwfdecAsContext *cx = target->context;
+  SwfdecXmlSocket *xml;
+  SwfdecSocket *sock;
+
+  if (!swfdec_as_context_use_mem (cx, sizeof (SwfdecXmlSocket)))
+    return NULL;
+
+  SWFDEC_FIXME ("implement security checks please");
+  sock = swfdec_player_create_socket (SWFDEC_PLAYER (cx), hostname, port);
+  if (sock == NULL)
+    return NULL;
+
+  xml = g_object_new (SWFDEC_TYPE_XML_SOCKET, NULL);
+  swfdec_as_object_add (SWFDEC_AS_OBJECT (xml), cx, sizeof (SwfdecXmlSocket));
+  swfdec_player_root_object (SWFDEC_PLAYER (cx), G_OBJECT (xml));
+
+  xml->target = target;
+  xml->socket = sock;
+
+  return xml;
+}
+
+/*** AS CODE ***/
 
 SWFDEC_AS_NATIVE (400, 0, swfdec_xml_socket_connect)
 void
 swfdec_xml_socket_connect (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
+  const char *host;
+  int port;
+
+  SWFDEC_AS_CHECK (0, NULL, "si", host, port);
+
+  if (SWFDEC_IS_MOVIE (object) || object == NULL)
+    return;
+
+  swfdec_xml_socket_create (object, host, port);
   SWFDEC_STUB ("XMLSocket.connect");
 }
 
commit 41cadc7536fe8c353fcbb2f375a4f2ff700ae3ea
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Jan 9 22:59:41 2008 +0100

    actually ref the connection to keep it
    
    Also use the pointer of the connection as its name

diff --git a/test/rtmp/rtmp_server.c b/test/rtmp/rtmp_server.c
index 9efc6da..ec431e8 100644
--- a/test/rtmp/rtmp_server.c
+++ b/test/rtmp/rtmp_server.c
@@ -30,7 +30,7 @@ socket_print (SoupSocket *sock, const char *format, ...)
 {
   va_list varargs;
 
-  g_print ("%s ", (char *) g_object_get_data (G_OBJECT (sock), "name"));
+  g_print ("%p ", sock);
   va_start (varargs, format);
   g_vprintf (format, varargs);
   va_end (varargs);
@@ -66,17 +66,9 @@ do_read (SoupSocket *conn, gpointer unused)
 }
 
 static void
-assign_name (SoupSocket *sock)
-{
-  static guint count = 0;
-  g_object_set_data_full (G_OBJECT (sock), "name", g_strdup_printf ("%u", ++count), g_free);
-}
-
-static void
 new_connection (SoupSocket *server, SoupSocket *conn, gpointer unused)
 {
-  assign_name (conn);
-  g_object_set (conn, SOUP_SOCKET_FLAG_NONBLOCKING, TRUE, SOUP_SOCKET_FLAG_NODELAY, TRUE, NULL);
+  g_object_ref (conn);
   socket_print (conn, "new connection\n");
   g_signal_connect (conn, "readable", G_CALLBACK (do_read), NULL);
   do_read (conn, NULL);
commit 338c56052e0c6bc5cef599b34d0a2547fdcf8925
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Jan 9 12:41:03 2008 +0100

    print out connection names

diff --git a/test/rtmp/rtmp_server.c b/test/rtmp/rtmp_server.c
index d64fbec..9efc6da 100644
--- a/test/rtmp/rtmp_server.c
+++ b/test/rtmp/rtmp_server.c
@@ -23,6 +23,18 @@
 #include <libsoup/soup.h>
 #include <libsoup/soup-address.h>
 #include <libswfdec/swfdec.h>
+#include <glib/gprintf.h>
+
+static void
+socket_print (SoupSocket *sock, const char *format, ...)
+{
+  va_list varargs;
+
+  g_print ("%s ", (char *) g_object_get_data (G_OBJECT (sock), "name"));
+  va_start (varargs, format);
+  g_vprintf (format, varargs);
+  va_end (varargs);
+}
 
 static void
 hexdump (SwfdecBuffer *buffer)
@@ -44,18 +56,28 @@ do_read (SoupSocket *conn, gpointer unused)
 
   buf = swfdec_buffer_new_and_alloc (16);
   while ((status = soup_socket_read (conn, buf->data, buf->length, &buf->length)) == SOUP_SOCKET_OK) {
+    socket_print (conn, "\n");
     hexdump (buf);
     soup_socket_write (conn, buf->data, buf->length, &buf->length);
     buf->length = 16;
   }
   swfdec_buffer_unref (buf);
-  g_print ("status: %u\n", (guint) status);
+  socket_print (conn, "status: %u\n", (guint) status);
+}
+
+static void
+assign_name (SoupSocket *sock)
+{
+  static guint count = 0;
+  g_object_set_data_full (G_OBJECT (sock), "name", g_strdup_printf ("%u", ++count), g_free);
 }
 
 static void
 new_connection (SoupSocket *server, SoupSocket *conn, gpointer unused)
 {
-  g_print ("WOOT!\n");
+  assign_name (conn);
+  g_object_set (conn, SOUP_SOCKET_FLAG_NONBLOCKING, TRUE, SOUP_SOCKET_FLAG_NODELAY, TRUE, NULL);
+  socket_print (conn, "new connection\n");
   g_signal_connect (conn, "readable", G_CALLBACK (do_read), NULL);
   do_read (conn, NULL);
 }
commit c35d9d03fb66ebeb3c6a347ffc09bd88781a4852
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Jan 6 00:56:09 2008 +0100

    require libsoup when building libswfdec-gtk
    
    too many optional dependencies suck

diff --git a/configure.ac b/configure.ac
index 69504cd..2690e2f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -97,7 +97,7 @@ AC_SUBST(PANGO_CFLAGS)
 
 AC_ARG_ENABLE(gtk,
 	AS_HELP_STRING([--enable-gtk],
-			[enable Gtk integration (default=yes)])],
+			[enable build of libswfdec-gtk (default=yes)])],
 	enable_gtk=$enableval,
 	enable_gtk="yes")
 
@@ -107,12 +107,8 @@ dnl
 GTK_VER=2.8.0
 AC_SUBST(GTK_VER)
 if test "$enable_gtk" = "yes"; then
-	PKG_CHECK_MODULES(GTK, gtk+-2.0 >= $GTK_VER, HAVE_GTK=yes, HAVE_GTK=no)
-	if test "x$HAVE_GTK" = xyes; then
-	  AC_DEFINE(HAVE_GTK, 1, [Define if Gtk is enabled])
-	else
-	  AC_MSG_ERROR([Couldn't find a suitable Gtk version. You need at least version $GTK_VER])
-	fi
+	PKG_CHECK_MODULES(GTK, gtk+-2.0 >= $GTK_VER libsoup-2.2 >= 2.2.0, HAVE_GTK=yes)
+	AC_DEFINE(HAVE_GTK, 1, [Define if Gtk is enabled])
 else
 	AC_MSG_NOTICE([Gtk support was not enabled.])
 fi
@@ -266,24 +262,6 @@ fi
 AM_CONDITIONAL(HAVE_GST, [test "x$HAVE_GST" = xyes])
 
 
-AC_ARG_ENABLE(soup,
-	AS_HELP_STRING([--enable-soup],
-			[enable libsoup HTTP support for swfdec-gtk (default=yes)])],
-	enable_libsoup=$enableval,
-	enable_libsoup="yes")
-
-if test "$enable_libsoup" = "yes"; then
-	PKG_CHECK_MODULES(HTTP, libsoup-2.2 >= 2.2.0, HAVE_HTTP=yes, HAVE_HTTP=no)
-	if test "x$HAVE_HTTP" = xyes; then
-	  AC_DEFINE(HAVE_HTTP, 1, [Define if libsoup is enabled])
-	else
-	  AC_MSG_ERROR([Couldn't find libsoup-2.2.])
-	fi
-else
-	AC_MSG_NOTICE([libsoup HTTP support was not enabled.])
-fi
-AM_CONDITIONAL(HAVE_HTTP, [test "x$HAVE_HTTP" = xyes])
-
 AC_ARG_ENABLE(vivified,
 	AS_HELP_STRING([--enable-vivified],
 			[enable Vivified Flash debugger (default=no)])],
diff --git a/libswfdec-gtk/Makefile.am b/libswfdec-gtk/Makefile.am
index b94616c..4f724cf 100644
--- a/libswfdec-gtk/Makefile.am
+++ b/libswfdec-gtk/Makefile.am
@@ -23,12 +23,12 @@ noinst_HEADERS = \
 
 libswfdec_gtk_ at SWFDEC_MAJORMINOR@_la_CFLAGS = \
 	-I$(top_srcdir) $(GLOBAL_CFLAGS) $(SWFDEC_CFLAGS) $(GTK_CFLAGS) \
-	$(AUDIO_CFLAGS) $(HTTP_CFLAGS) \
+	$(AUDIO_CFLAGS) \
 	-DG_LOG_DOMAIN=\"Swfdec-Gtk\"
 libswfdec_gtk_ at SWFDEC_MAJORMINOR@_la_LDFLAGS = \
 	-version-info $(SWFDEC_LIBVERSION) \
 	-export-symbols-regex '^(swfdec_.*)' \
-	$(GTK_LIBS) $(SWFDEC_LIBS) $(AUDIO_LIBS) $(HTTP_LIBS)
+	$(GTK_LIBS) $(SWFDEC_LIBS) $(AUDIO_LIBS) 
 libswfdec_ at SWFDEC_MAJORMINOR@includedir = $(includedir)/swfdec- at SWFDEC_MAJORMINOR@/libswfdec-gtk
 libswfdec_ at SWFDEC_MAJORMINOR@include_HEADERS = \
 	swfdec-gtk.h \
diff --git a/libswfdec-gtk/swfdec_gtk_loader.c b/libswfdec-gtk/swfdec_gtk_loader.c
index 26979ce..479e6ad 100644
--- a/libswfdec-gtk/swfdec_gtk_loader.c
+++ b/libswfdec-gtk/swfdec_gtk_loader.c
@@ -21,10 +21,8 @@
 #include "config.h"
 #endif
 
-#ifdef HAVE_HTTP
 #include <libsoup/soup.h>
 #include <errno.h>
-#endif
 #include <stdlib.h>
 #include <string.h>
 #include "swfdec_gtk_loader.h"
@@ -55,25 +53,20 @@ struct _SwfdecGtkLoader
 {
   SwfdecLoader		loader;
 
-#ifdef HAVE_HTTP
   SoupMessage *		message;	/* the message we're sending */
   gboolean		opened;		/* set after first bytes of data have arrived */
-#endif
 };
 
 struct _SwfdecGtkLoaderClass {
   SwfdecLoaderClass	loader_class;
 
-#ifdef HAVE_HTTP
   SoupSession *		session;	/* the session used by the loader */
-#endif
 };
 
 /*** SwfdecGtkLoader ***/
 
 G_DEFINE_TYPE (SwfdecGtkLoader, swfdec_gtk_loader, SWFDEC_TYPE_FILE_LOADER)
 
-#ifdef HAVE_HTTP
 static void
 swfdec_gtk_loader_set_size (SwfdecGtkLoader *gtk)
 {
@@ -145,20 +138,16 @@ swfdec_gtk_loader_dispose (GObject *object)
 
   G_OBJECT_CLASS (swfdec_gtk_loader_parent_class)->dispose (object);
 }
-#endif
 
 static void
 swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecLoader *parent,
     SwfdecLoaderRequest request, const char *data, gsize data_len)
 {
-#ifdef HAVE_HTTP
   const SwfdecURL *url = swfdec_loader_get_url (loader);
 
   if (g_ascii_strcasecmp (swfdec_url_get_protocol (url), "http") != 0 &&
       g_ascii_strcasecmp (swfdec_url_get_protocol (url), "https") != 0) {
-#endif
     SWFDEC_LOADER_CLASS (swfdec_gtk_loader_parent_class)->load (loader, parent, request, data, data_len);
-#ifdef HAVE_HTTP
   } else {
     SwfdecGtkLoader *gtk = SWFDEC_GTK_LOADER (loader);
     SwfdecGtkLoaderClass *klass = SWFDEC_GTK_LOADER_GET_CLASS (gtk);
@@ -174,10 +163,8 @@ swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecLoader *parent,
     g_object_ref (gtk->message);
     soup_session_queue_message (klass->session, gtk->message, NULL, NULL);
   }
-#endif
 }
 
-#ifdef HAVE_HTTP
 static void
 swfdec_gtk_loader_close (SwfdecStream *stream)
 {
@@ -196,12 +183,10 @@ swfdec_gtk_loader_close (SwfdecStream *stream)
     }
   }
 }
-#endif
 
 static void
 swfdec_gtk_loader_class_init (SwfdecGtkLoaderClass *klass)
 {
-#ifdef HAVE_HTTP
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
   SwfdecStreamClass *stream_class = SWFDEC_STREAM_CLASS (klass);
   SwfdecLoaderClass *loader_class = SWFDEC_LOADER_CLASS (klass);
@@ -213,7 +198,6 @@ swfdec_gtk_loader_class_init (SwfdecGtkLoaderClass *klass)
   loader_class->load = swfdec_gtk_loader_load;
   
   klass->session = soup_session_async_new ();
-#endif
 }
 
 static void
diff --git a/test/rtmp/Makefile.am b/test/rtmp/Makefile.am
index a0c4546..cfe8416 100644
--- a/test/rtmp/Makefile.am
+++ b/test/rtmp/Makefile.am
@@ -3,6 +3,6 @@ noinst_PROGRAMS = rtmp-server
 TESTS = $(check_PROGRAMS)
 
 rtmp_server_SOURCES = rtmp_server.c
-rtmp_server_CFLAGS = $(GLOBAL_CFLAGS) $(HTTP_CFLAGS) $(SWFDEC_CFLAGS) $(CAIRO_CFLAGS)
-rtmp_server_LDFLAGS = $(SWFDEC_LIBS) $(HTTP_LIBS) $(CAIRO_LIBS)
+rtmp_server_CFLAGS = $(GLOBAL_CFLAGS) $(GTK_CFLAGS) $(SWFDEC_CFLAGS) $(CAIRO_CFLAGS)
+rtmp_server_LDFLAGS = $(SWFDEC_LIBS) $(GTK_LIBS) $(CAIRO_LIBS)
 
commit 2c1ca1e740444ab00c55d2cb280979a6d59191fd
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Jan 6 00:46:25 2008 +0100

    use a SwfdecGtkSocket by default inside the SwfdecGtkPlayer

diff --git a/libswfdec-gtk/swfdec_gtk_player.c b/libswfdec-gtk/swfdec_gtk_player.c
index c494a71..e9b8cd4 100644
--- a/libswfdec-gtk/swfdec_gtk_player.c
+++ b/libswfdec-gtk/swfdec_gtk_player.c
@@ -23,6 +23,7 @@
 
 #include "libswfdec-gtk/swfdec_gtk_loader.h"
 #include "libswfdec-gtk/swfdec_gtk_player.h"
+#include "libswfdec-gtk/swfdec_gtk_socket.h"
 #include "libswfdec-gtk/swfdec_playback.h"
 #include "libswfdec-gtk/swfdec_source.h"
 
@@ -172,7 +173,9 @@ swfdec_gtk_player_new (SwfdecAsDebugger *debugger)
   SwfdecPlayer *player;
 
   swfdec_init ();
-  player = g_object_new (SWFDEC_TYPE_GTK_PLAYER, "debugger", debugger, NULL);
+  player = g_object_new (SWFDEC_TYPE_GTK_PLAYER, 
+      "socket-type", SWFDEC_TYPE_GTK_SOCKET,
+      "debugger", debugger, NULL);
 
   return player;
 }
commit c0fe44171c57fdb4724ab600fce4ee867098c2dc
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Jan 6 00:46:00 2008 +0100

    a variable I didn't catch when renaming
    
    sometimes using refactoring tools might be useful...

diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c
index 22de7fb..324da0f 100644
--- a/libswfdec/swfdec_net_stream.c
+++ b/libswfdec/swfdec_net_stream.c
@@ -266,7 +266,7 @@ swfdec_net_stream_stream_target_parse (SwfdecStreamTarget *target,
   if (ns->flvdecoder == NULL) {
     /* FIXME: add mp3 support */
     ns->flvdecoder = g_object_new (SWFDEC_TYPE_FLV_DECODER, NULL);
-    SWFDEC_DECODER (ns->flvdecoder)->player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (stream)->context);
+    SWFDEC_DECODER (ns->flvdecoder)->player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (ns)->context);
     swfdec_net_stream_onstatus (ns, SWFDEC_AS_STR_NetStream_Play_Start,
 	SWFDEC_AS_STR_status);
     swfdec_loader_set_data_type (SWFDEC_LOADER (stream), SWFDEC_LOADER_DATA_FLV);
commit b17a272be5f83ec675cd97d91055bda26f890281
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Jan 6 00:42:28 2008 +0100

    add a socket implementation using libsoup

diff --git a/libswfdec-gtk/Makefile.am b/libswfdec-gtk/Makefile.am
index c3c140f..b94616c 100644
--- a/libswfdec-gtk/Makefile.am
+++ b/libswfdec-gtk/Makefile.am
@@ -14,6 +14,7 @@ libswfdec_gtk_ at SWFDEC_MAJORMINOR@_la_SOURCES = \
 	swfdec_gtk_keys.c \
 	swfdec_gtk_loader.c \
 	swfdec_gtk_player.c \
+	swfdec_gtk_socket.c \
 	swfdec_gtk_widget.c
 
 noinst_HEADERS = \
@@ -34,6 +35,7 @@ libswfdec_ at SWFDEC_MAJORMINOR@include_HEADERS = \
 	swfdec_gtk_keys.h \
 	swfdec_gtk_loader.h \
 	swfdec_gtk_player.h \
+	swfdec_gtk_socket.h \
 	swfdec_gtk_widget.h
 
 EXTRA_DIST = \
diff --git a/libswfdec-gtk/swfdec-gtk.h b/libswfdec-gtk/swfdec-gtk.h
index de4f723..b64cf83 100644
--- a/libswfdec-gtk/swfdec-gtk.h
+++ b/libswfdec-gtk/swfdec-gtk.h
@@ -23,6 +23,7 @@
 #include <libswfdec-gtk/swfdec_gtk_keys.h>
 #include <libswfdec-gtk/swfdec_gtk_loader.h>
 #include <libswfdec-gtk/swfdec_gtk_player.h>
+#include <libswfdec-gtk/swfdec_gtk_socket.h>
 #include <libswfdec-gtk/swfdec_gtk_widget.h>
 
 #endif
diff --git a/libswfdec-gtk/swfdec_gtk_socket.c b/libswfdec-gtk/swfdec_gtk_socket.c
new file mode 100644
index 0000000..08cbb76
--- /dev/null
+++ b/libswfdec-gtk/swfdec_gtk_socket.c
@@ -0,0 +1,220 @@
+/* Swfdec
+ * Copyright (C) 2006 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "swfdec_gtk_socket.h"
+#include <libsoup/soup.h>
+#include <libsoup/soup-address.h>
+
+/*** GTK-DOC ***/
+
+/**
+ * SECTION:SwfdecGtkSocket
+ * @title: SwfdecGtkSocket
+ * @short_description: a socket implementation integrating into the Gtk main loop
+ * @see_also: #SwfdecSocket, #SwfdecGtkPlayer
+ *
+ * #SwfdecGtkSocket is a #SwfdecSocket that is a socket implementation that 
+ * uses libsoup and integrates with the Gtk main loop. It is used by default
+ * by the #SwfecGtkPlayer.
+ */
+
+/**
+ * SwfdecGtkSocket:
+ *
+ * This is the object used to represent a socket. It is completely private.
+ */
+
+struct _SwfdecGtkSocket
+{
+  SwfdecSocket		socket;
+
+  SoupSocket *		sock;		/* libsoup socket we're using */
+  gboolean		sock_writable;	/* FALSE if writing would block */
+  SwfdecBufferQueue *	queue;		/* buffers we still need to push */
+};
+
+struct _SwfdecGtkSocketClass {
+  SwfdecSocketClass	socket_class;
+};
+
+/*** SwfdecGtkSocket ***/
+
+G_DEFINE_TYPE (SwfdecGtkSocket, swfdec_gtk_socket, SWFDEC_TYPE_SOCKET)
+
+static void
+swfdec_gtk_socket_close (SwfdecStream *stream)
+{
+  SwfdecGtkSocket *gtk = SWFDEC_GTK_SOCKET (stream);
+
+  soup_socket_disconnect (gtk->sock);
+}
+
+static void
+swfdec_gtk_socket_do_connect (SoupSocket *sock, int status, SwfdecGtkSocket *gtk)
+{
+  if (SOUP_STATUS_IS_SUCCESSFUL (status))
+    swfdec_stream_open (SWFDEC_STREAM (gtk));
+  else
+    swfdec_stream_error (SWFDEC_STREAM (gtk), "error connecting");
+
+}
+
+static void
+swfdec_gtk_socket_do_disconnect (SoupSocket *sock, SwfdecGtkSocket *gtk)
+{
+  swfdec_stream_eof (SWFDEC_STREAM (gtk));
+}
+
+static void
+swfdec_gtk_socket_do_read (SoupSocket *sock, SwfdecGtkSocket *gtk)
+{
+#define SWFDEC_GTK_SOCKET_BLOCK_SIZE 1024
+  SwfdecBuffer *buffer;
+  SoupSocketIOStatus status;
+  gsize len;
+
+  do {
+    buffer = swfdec_buffer_new_and_alloc (SWFDEC_GTK_SOCKET_BLOCK_SIZE);
+    status = soup_socket_read (sock, buffer, SWFDEC_GTK_SOCKET_BLOCK_SIZE, &len);
+    buffer->length = len;
+    switch (status) {
+      case SOUP_SOCKET_OK:
+	swfdec_stream_push (SWFDEC_STREAM (gtk), buffer);
+	break;
+      case SOUP_SOCKET_WOULD_BLOCK:
+      case SOUP_SOCKET_EOF:
+	swfdec_buffer_unref (buffer);
+	break;
+      case SOUP_SOCKET_ERROR:
+	swfdec_buffer_unref (buffer);
+	swfdec_stream_error (SWFDEC_STREAM (gtk), "error reading data");
+	break;
+      default:
+	g_warning ("unhandled status code %u from soup_socket_read()", (guint) status);
+	break;
+    }
+  } while (status == SOUP_SOCKET_OK);
+}
+
+static void
+swfdec_gtk_socket_do_write (SoupSocket *sock, SwfdecGtkSocket *gtk)
+{
+  SwfdecBuffer *buffer;
+  SoupSocketIOStatus status;
+  gsize len;
+
+  gtk->sock_writable = TRUE;
+  while ((buffer = swfdec_buffer_queue_peek_buffer (gtk->queue))) {
+    status = soup_socket_write (sock, buffer->data, buffer->length, &len);
+    swfdec_buffer_unref (buffer);
+    switch (status) {
+      case SOUP_SOCKET_OK:
+	buffer = swfdec_buffer_queue_pull (gtk->queue, len);
+	swfdec_buffer_unref (buffer);
+	break;
+      case SOUP_SOCKET_WOULD_BLOCK:
+      case SOUP_SOCKET_EOF:
+	gtk->sock_writable = FALSE;
+	break;
+      case SOUP_SOCKET_ERROR:
+	swfdec_stream_error (SWFDEC_STREAM (gtk), "error writing data");
+	break;
+      default:
+	g_warning ("unhandled status code %u from soup_socket_read()", (guint) status);
+	break;
+    }
+  };
+}
+
+static SwfdecSocket *
+swfdec_gtk_socket_create (const char *hostname, guint port)
+{
+  SwfdecGtkSocket *sock = g_object_new (SWFDEC_TYPE_GTK_SOCKET, NULL);
+  SoupAddress *addr;
+
+  addr = soup_address_new (hostname, port);
+  sock->sock = soup_socket_new (SOUP_SOCKET_FLAG_NONBLOCKING, TRUE,
+      /* FIXME: we should set nodelay, no? */
+      SOUP_SOCKET_FLAG_NODELAY, TRUE, NULL);
+  g_signal_connect (sock->sock, "connect-result", 
+      G_CALLBACK (swfdec_gtk_socket_do_connect), socket);
+  g_signal_connect (sock->sock, "disconnect", 
+      G_CALLBACK (swfdec_gtk_socket_do_disconnect), socket);
+  g_signal_connect (sock->sock, "readable", 
+      G_CALLBACK (swfdec_gtk_socket_do_read), socket);
+  g_signal_connect (sock->sock, "writable", 
+      G_CALLBACK (swfdec_gtk_socket_do_write), socket);
+
+  return SWFDEC_SOCKET (sock);
+}
+
+static void
+swfdec_gtk_socket_send (SwfdecSocket *sock, SwfdecBuffer *buffer)
+{
+  SwfdecGtkSocket *gtk = SWFDEC_GTK_SOCKET (sock);
+
+  swfdec_buffer_queue_push (gtk->queue, buffer);
+  if (gtk->sock_writable)
+    swfdec_gtk_socket_do_write (gtk->sock, gtk);
+}
+
+static void
+swfdec_gtk_socket_dispose (GObject *object)
+{
+  SwfdecGtkSocket *gtk = SWFDEC_GTK_SOCKET (object);
+
+  if (gtk->sock) {
+    g_signal_handlers_disconnect_matched (gtk->sock, G_SIGNAL_MATCH_DATA,
+      0, 0, NULL, NULL, gtk);
+    g_object_unref (gtk->sock);
+    gtk->sock = NULL;
+  }
+  if (gtk->queue) {
+    swfdec_buffer_queue_unref (gtk->queue);
+    gtk->queue = NULL;
+  }
+  G_OBJECT_CLASS (swfdec_gtk_socket_parent_class)->dispose (object);
+}
+
+static void
+swfdec_gtk_socket_class_init (SwfdecGtkSocketClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  SwfdecStreamClass *stream_class = SWFDEC_STREAM_CLASS (klass);
+  SwfdecSocketClass *socket_class = SWFDEC_SOCKET_CLASS (klass);
+
+  object_class->dispose = swfdec_gtk_socket_dispose;
+
+  stream_class->close = swfdec_gtk_socket_close;
+
+  socket_class->create = swfdec_gtk_socket_create;
+  socket_class->send = swfdec_gtk_socket_send;
+}
+
+static void
+swfdec_gtk_socket_init (SwfdecGtkSocket *gtk)
+{
+  gtk->sock_writable = TRUE;
+  gtk->queue = swfdec_buffer_queue_new ();
+}
+
diff --git a/libswfdec-gtk/swfdec_gtk_socket.h b/libswfdec-gtk/swfdec_gtk_socket.h
new file mode 100644
index 0000000..62bb546
--- /dev/null
+++ b/libswfdec-gtk/swfdec_gtk_socket.h
@@ -0,0 +1,42 @@
+/* Swfdec
+ * Copyright (C) 2006 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifndef _SWFDEC_GTK_SOCKET_H_
+#define _SWFDEC_GTK_SOCKET_H_
+
+#include <libswfdec/swfdec.h>
+
+G_BEGIN_DECLS
+
+
+typedef struct _SwfdecGtkSocket SwfdecGtkSocket;
+typedef struct _SwfdecGtkSocketClass SwfdecGtkSocketClass;
+
+#define SWFDEC_TYPE_GTK_SOCKET                    (swfdec_gtk_socket_get_type())
+#define SWFDEC_IS_GTK_SOCKET(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_GTK_SOCKET))
+#define SWFDEC_IS_GTK_SOCKET_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_GTK_SOCKET))
+#define SWFDEC_GTK_SOCKET(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_GTK_SOCKET, SwfdecGtkSocket))
+#define SWFDEC_GTK_SOCKET_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_GTK_SOCKET, SwfdecGtkSocketClass))
+#define SWFDEC_GTK_SOCKET_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_GTK_SOCKET, SwfdecGtkSocketClass))
+
+GType		swfdec_gtk_socket_get_type   	(void);
+
+
+G_END_DECLS
+#endif
commit deb4ba14ce8e1b6ca1d560cc3ddf4b66a4e0228a
Author: Benjamin Otte <otte at gnome.org>
Date:   Sat Jan 5 23:46:08 2008 +0100

    send back every received buffer

diff --git a/test/rtmp/rtmp_server.c b/test/rtmp/rtmp_server.c
index 2a26675..d64fbec 100644
--- a/test/rtmp/rtmp_server.c
+++ b/test/rtmp/rtmp_server.c
@@ -45,6 +45,7 @@ do_read (SoupSocket *conn, gpointer unused)
   buf = swfdec_buffer_new_and_alloc (16);
   while ((status = soup_socket_read (conn, buf->data, buf->length, &buf->length)) == SOUP_SOCKET_OK) {
     hexdump (buf);
+    soup_socket_write (conn, buf->data, buf->length, &buf->length);
     buf->length = 16;
   }
   swfdec_buffer_unref (buf);
commit 96ed3681c530049fedd67fb28a664f5a08752940
Author: Benjamin Otte <otte at gnome.org>
Date:   Sat Jan 5 23:45:53 2008 +0100

    add a socket-type property

diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 45ce8a9..2e2b728 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -621,7 +621,8 @@ enum {
   PROP_SCALE,
   PROP_SCRIPTING,
   PROP_SYSTEM,
-  PROP_MAX_RUNTIME
+  PROP_MAX_RUNTIME,
+  PROP_SOCKET_TYPE
 };
 
 G_DEFINE_TYPE (SwfdecPlayer, swfdec_player, SWFDEC_TYPE_AS_CONTEXT)
@@ -735,6 +736,9 @@ swfdec_player_get_property (GObject *object, guint param_id, GValue *value,
     case PROP_MAX_RUNTIME:
       g_value_set_ulong (value, priv->max_runtime);
       break;
+    case PROP_SOCKET_TYPE:
+      g_value_set_gtype (value, priv->socket_type);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
       break;
@@ -852,6 +856,9 @@ swfdec_player_set_property (GObject *object, guint param_id, const GValue *value
     case PROP_MAX_RUNTIME:
       swfdec_player_set_maximum_runtime (player, g_value_get_ulong (value));
       break;
+    case PROP_SOCKET_TYPE:
+      priv->socket_type = g_value_get_gtype (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
       break;
@@ -1611,6 +1618,9 @@ swfdec_player_class_init (SwfdecPlayerClass *klass)
   g_object_class_install_property (object_class, PROP_MAX_RUNTIME,
       g_param_spec_ulong ("max-runtime", "maximum runtime", "maximum time in msecs scripts may run in the player before aborting",
 	  0, G_MAXULONG, 10 * 1000, G_PARAM_READWRITE));
+  g_object_class_install_property (object_class, PROP_SOCKET_TYPE,
+      g_param_spec_gtype ("socket type", "socket type", "type to use for creating sockets",
+	  SWFDEC_TYPE_SOCKET, G_PARAM_READWRITE));
 
   /**
    * SwfdecPlayer::invalidate:
@@ -1780,6 +1790,7 @@ swfdec_player_init (SwfdecPlayer *player)
   priv->external_actions = swfdec_ring_buffer_new_for_type (SwfdecPlayerExternalAction, 8);
   priv->cache = swfdec_cache_new (50 * 1024 * 1024); /* 100 MB */
   priv->bgcolor = SWFDEC_COLOR_COMBINE (0xFF, 0xFF, 0xFF, 0xFF);
+  priv->socket_type = SWFDEC_TYPE_SOCKET;
 
   priv->runtime = g_timer_new ();
   g_timer_stop (priv->runtime);
commit 270a2138f7e98c603a8688eb383143b0e376c046
Author: Benjamin Otte <otte at gnome.org>
Date:   Sat Jan 5 22:36:52 2008 +0100

    add a socket class

diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index 17d18ce..b0efc23 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -124,6 +124,7 @@ libswfdec_source_files = \
 	swfdec_shape.c \
 	swfdec_shape_parser.c \
 	swfdec_shared_object.c \
+	swfdec_socket.c \
 	swfdec_sound.c \
 	swfdec_sound_object.c \
 	swfdec_sprite.c \
@@ -194,6 +195,7 @@ public_headers = \
 	swfdec_player_scripting.h \
 	swfdec_rectangle.h \
 	swfdec_script.h \
+	swfdec_socket.h \
 	swfdec_stream.h \
 	swfdec_system.h \
 	swfdec_url.h
diff --git a/libswfdec/swfdec.h b/libswfdec/swfdec.h
index 8cb955a..e2432eb 100644
--- a/libswfdec/swfdec.h
+++ b/libswfdec/swfdec.h
@@ -40,6 +40,7 @@
 #include <libswfdec/swfdec_player.h>
 #include <libswfdec/swfdec_player_scripting.h>
 #include <libswfdec/swfdec_rectangle.h>
+#include <libswfdec/swfdec_socket.h>
 #include <libswfdec/swfdec_stream.h>
 #include <libswfdec/swfdec_system.h>
 #include <libswfdec/swfdec_url.h>
diff --git a/libswfdec/swfdec_loader_internal.h b/libswfdec/swfdec_loader_internal.h
index 2a3439f..444610c 100644
--- a/libswfdec/swfdec_loader_internal.h
+++ b/libswfdec/swfdec_loader_internal.h
@@ -43,6 +43,10 @@ void			swfdec_loader_set_data_type	(SwfdecLoader *		loader,
 char *			swfdec_loader_get_text		(SwfdecLoader *		loader,
 							 guint			version);
 
+/* swfdec_socket.c */
+void			swfdec_socket_send		(SwfdecSocket *		sock,
+							 SwfdecBuffer *		buffer);
+
 
 G_END_DECLS
 #endif
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 215d604..45ce8a9 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -2122,6 +2122,36 @@ swfdec_player_unroot_object (SwfdecPlayer *player, GObject *object)
   priv->rooted_objects = g_list_delete_link (priv->rooted_objects, entry);
 }
 
+/**
+ * swfdec_player_create_socket:
+ * @player: a #SwfdecPlayer
+ * @hostname: the host name to connect to.
+ * @port: the port to connect to
+ *
+ * Creates a new socket connecting to the given hostname and port.
+ *
+ * Returns: a new socket or %NULL if no socket implementation exists
+ **/
+/* FIXME: always return a socket? */
+SwfdecSocket *
+swfdec_player_create_socket (SwfdecPlayer *player, const char *hostname, guint port)
+{
+  SwfdecSocket *sock;
+  SwfdecSocketClass *klass;
+
+  g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
+  g_return_val_if_fail (hostname != NULL, NULL);
+  g_return_val_if_fail (port > 0, NULL);
+
+  if (player->priv->socket_type == 0)
+    return NULL;
+  klass = g_type_class_ref (player->priv->socket_type);
+  sock = klass->create (hostname, port);
+  g_type_class_unref (klass);
+
+  return sock;
+}
+
 /** PUBLIC API ***/
 
 /**
diff --git a/libswfdec/swfdec_player_internal.h b/libswfdec/swfdec_player_internal.h
index f3fbb60..fbbac20 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -27,6 +27,7 @@
 #include <libswfdec/swfdec_rect.h>
 #include <libswfdec/swfdec_ringbuffer.h>
 #include <libswfdec/swfdec_security.h>
+#include <libswfdec/swfdec_socket.h>
 #include <libswfdec/swfdec_system.h>
 
 G_BEGIN_DECLS
@@ -69,6 +70,7 @@ struct _SwfdecPlayerPrivate
   SwfdecResource *	resource;		/* initial resource loaded */
   SwfdecPlayerScripting *scripting;		/* scripting object */
   GHashTable *		scripting_callbacks;	/* GC string => SwfdecAsFunction mapping of script callbacks */
+  GType			socket_type;		/* type to use for creating sockets */
   /* stage properties */
   guint			internal_width;		/* width used by the scripting engine */
   guint			internal_height;	/* height used by the scripting engine */
@@ -159,6 +161,10 @@ void		swfdec_player_set_export_class	(SwfdecPlayer *		player,
 						 const char *		name,
 						 SwfdecAsObject *	object);
 
+SwfdecSocket *	swfdec_player_create_socket	(SwfdecPlayer *		player,
+						 const char *		hostname,
+						 guint			port);
+
 #define swfdec_player_is_mouse_pressed(player) ((player)->priv->mouse_button & 1)
 void		swfdec_player_invalidate	(SwfdecPlayer *		player,
 						 const SwfdecRect *	rect);
diff --git a/libswfdec/swfdec_socket.c b/libswfdec/swfdec_socket.c
new file mode 100644
index 0000000..723050c
--- /dev/null
+++ b/libswfdec/swfdec_socket.c
@@ -0,0 +1,99 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "swfdec_socket.h"
+#include "swfdec_loader_internal.h"
+
+/*** GTK-DOC ***/
+
+/**
+ * SECTION:SwfdecSocket
+ * @title: SwfdecSocket
+ * @short_description: object used for network connections
+ *
+ * SwfdecSockets are used to implement TCP streams. These are for example used 
+ * to implement RTMP support or the XMLSocket script class. Backends are 
+ * supposed to provide an implementation for this, as by default this class is
+ * unimplemented. However, libswfdec-gtk or other convenience libraries provide
+ * a socket implementation by default. 
+ *
+ * The socket implementation used by a #SwfdecPlayer can be set with the 
+ * SwfdecPlayer:socket-type property.
+ */
+
+/**
+ * SwfdecSocket:
+ *
+ * This is the base object used for providing input. It is abstract, create a 
+ * subclass to provide your own socket implementation. All members are 
+ * considered private.
+ */
+
+/**
+ * SwfdecSocketClass:
+ * @create: Create a new socket for the given hostname and port. This function 
+ *          must return a new socket, returning %NULL is not allowed. If you
+ *          encounter an error, create a new socket and call 
+ *          swfdec_stream_error() on it.
+ * @send: Called to send data down the given socket. This function will only be
+ *        called when the socket is open. You get passed a reference to the 
+ *        buffer, so it is your responsibility to call swfdec_buffer_unref() on
+ *        it when you are done with it.
+ *
+ * This is the socket class. When you create a subclass, you need to implement 
+ * the functions listed above.
+ */
+
+/*** SWFDEC_SOCKET ***/
+
+G_DEFINE_ABSTRACT_TYPE (SwfdecSocket, swfdec_socket, SWFDEC_TYPE_STREAM)
+
+static void
+swfdec_socket_class_init (SwfdecSocketClass *klass)
+{
+}
+
+static void
+swfdec_socket_init (SwfdecSocket *socket)
+{
+}
+
+/**
+ * swfdec_socket_send:
+ * @sock: a #SwfdecSocket
+ * @buffer: data to send to the stream
+ *
+ * Pushes the given @buffer down the stream.
+ **/
+void
+swfdec_socket_send (SwfdecSocket *sock, SwfdecBuffer *buffer)
+{
+  SwfdecSocketClass *klass;
+
+  g_return_if_fail (SWFDEC_IS_SOCKET (sock));
+  g_return_if_fail (buffer != NULL);
+
+  klass = SWFDEC_SOCKET_GET_CLASS (sock);
+  klass->send (sock, buffer);
+}
+
diff --git a/libswfdec/swfdec_socket.h b/libswfdec/swfdec_socket.h
new file mode 100644
index 0000000..7e062ca
--- /dev/null
+++ b/libswfdec/swfdec_socket.h
@@ -0,0 +1,58 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifndef _SWFDEC_SOCKET_H_
+#define _SWFDEC_SOCKET_H_
+
+#include <glib-object.h>
+#include <libswfdec/swfdec_stream.h>
+
+G_BEGIN_DECLS
+
+typedef struct _SwfdecSocket SwfdecSocket;
+typedef struct _SwfdecSocketClass SwfdecSocketClass;
+
+#define SWFDEC_TYPE_SOCKET                    (swfdec_socket_get_type())
+#define SWFDEC_IS_SOCKET(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_SOCKET))
+#define SWFDEC_IS_SOCKET_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_SOCKET))
+#define SWFDEC_SOCKET(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_SOCKET, SwfdecSocket))
+#define SWFDEC_SOCKET_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_SOCKET, SwfdecSocketClass))
+#define SWFDEC_SOCKET_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_SOCKET, SwfdecSocketClass))
+
+struct _SwfdecSocket
+{
+  SwfdecStream		stream;
+};
+
+struct _SwfdecSocketClass
+{
+  SwfdecStreamClass   	stream_class;
+
+  SwfdecSocket *	(* create)		(const char *	hostname,
+						 guint		port);
+
+  void			(* send)		(SwfdecSocket *	socket,
+						 SwfdecBuffer *	buffer);
+};
+
+GType		swfdec_socket_get_type		(void);
+
+
+G_END_DECLS
+#endif
commit 996dd227f81d79077dd76517d3a20dbc13228457
Author: Benjamin Otte <otte at gnome.org>
Date:   Sat Jan 5 13:35:49 2008 +0100

    update tests to new loaders

diff --git a/test/sound/sound.c b/test/sound/sound.c
index 1a4eac7..5715ce7 100644
--- a/test/sound/sound.c
+++ b/test/sound/sound.c
@@ -233,9 +233,11 @@ run_test (const char *filename)
   g_free (basename);
 
   loader = swfdec_file_loader_new (filename);
-  if (loader->error) {
-    g_print ("  ERROR: %s\n", loader->error);
+  g_object_get (loader, "error", &basename, NULL);
+  if (basename) {
+    g_print ("  ERROR: %s\n", basename);
     g_object_unref (loader);
+    g_free (basename);
     goto error;
   }
   player = swfdec_player_new (NULL);
commit 8e34d5a44e1d8c89938fb80f1bbb922812cd7911
Author: Benjamin Otte <otte at gnome.org>
Date:   Sat Jan 5 13:35:37 2008 +0100

    no sound test in here

diff --git a/test/rtmp/Makefile.am b/test/rtmp/Makefile.am
index c9c633b..a0c4546 100644
--- a/test/rtmp/Makefile.am
+++ b/test/rtmp/Makefile.am
@@ -1,6 +1,5 @@
 noinst_PROGRAMS = rtmp-server
 
-check_PROGRAMS = sound
 TESTS = $(check_PROGRAMS)
 
 rtmp_server_SOURCES = rtmp_server.c
commit f08ee88e4018cf43d6275b74aa698ea508fc9536
Author: Benjamin Otte <otte at gnome.org>
Date:   Sat Jan 5 13:28:47 2008 +0100

    get rid of the slow loader
    
    The current loader design does not really allow writing a proxy loader the
    way it was written. And since the slow loader does the wrong thing technically
    (It should cnfigure the bandwidth, not the loading duration) I decided to get
    rid of it.
    If anyone wants to write a new one, It should probably implement the
    SwfdecStreamTarget interface.

diff --git a/player/Makefile.am b/player/Makefile.am
index 53e52c1..605e409 100644
--- a/player/Makefile.am
+++ b/player/Makefile.am
@@ -1,7 +1,6 @@
 noinst_PROGRAMS = swfplay 
 
 swfplay_SOURCES = \
-	swfdec_slow_loader.c \
 	swfplay.c 
 
 #swfdebug_SOURCES = \
@@ -12,9 +11,6 @@ swfplay_SOURCES = \
 #	swfdec_player_manager.c \
 #	swfdec_debug_widget.c
 
-noinst_HEADERS = \
-	swfdec_slow_loader.h
-
 swfplay_CFLAGS = $(GLOBAL_CFLAGS) $(GTK_CFLAGS) $(SWFDEC_GTK_CFLAGS)
 swfplay_LDFLAGS = $(SWFDEC_GTK_LIBS) $(GTK_LIBS)
 
diff --git a/player/swfdec_slow_loader.c b/player/swfdec_slow_loader.c
deleted file mode 100644
index 4261800..0000000
--- a/player/swfdec_slow_loader.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/* Swfdec
- * Copyright (C) 2006 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "swfdec_slow_loader.h"
-#include <libswfdec-gtk/swfdec-gtk.h>
-
-/*** SwfdecSlowLoader ***/
-
-G_DEFINE_TYPE (SwfdecSlowLoader, swfdec_slow_loader, SWFDEC_TYPE_LOADER)
-
-static void
-swfdec_slow_loader_notify_cb (SwfdecLoader *child, GParamSpec *pspec, SwfdecLoader *loader)
-{
-  if (g_str_equal (pspec->name, "size")) {
-    swfdec_loader_set_size (loader, swfdec_loader_get_size (child));
-  }
-}
-
-static void
-swfdec_slow_loader_dispose (GObject *object)
-{
-  SwfdecSlowLoader *slow = SWFDEC_SLOW_LOADER (object);
-
-  g_signal_handlers_disconnect_by_func (slow->loader, swfdec_slow_loader_notify_cb, slow);
-  g_object_unref (slow->loader);
-  if (slow->timeout_id) {
-    g_source_remove (slow->timeout_id);
-    slow->timeout_id = 0;
-  }
-
-  G_OBJECT_CLASS (swfdec_slow_loader_parent_class)->dispose (object);
-}
-
-static gboolean
-swfdec_slow_loader_tick (gpointer data)
-{
-  SwfdecSlowLoader *slow = data;
-  SwfdecBuffer *buffer;
-  guint total, amount;
-
-  amount = swfdec_buffer_queue_get_depth (slow->loader->queue);
-  if (amount > 0) {
-    total = swfdec_buffer_queue_get_offset (slow->loader->queue);
-    total += amount;
-    total *= slow->tick_time;
-    total += slow->duration - 1; /* rounding */
-    amount = MIN (amount, total / slow->duration);
-    buffer = swfdec_buffer_queue_pull (slow->loader->queue, amount);
-#if 0
-    g_print ("pushing %u bytes (%u/%u total)\n",
-	amount, swfdec_buffer_queue_get_offset (slow->loader->queue),
-	swfdec_buffer_queue_get_offset (slow->loader->queue) + 
-	swfdec_buffer_queue_get_depth (slow->loader->queue));
-#endif
-    swfdec_loader_push (SWFDEC_LOADER (slow), buffer);
-    if (swfdec_buffer_queue_get_depth (slow->loader->queue) > 0)
-      return TRUE;
-  }
-
-  if (slow->loader->error) {
-    swfdec_loader_error (SWFDEC_LOADER (slow), slow->loader->error);
-    slow->timeout_id = 0;
-    return FALSE;
-  } else {
-    gboolean eof;
-    g_object_get (slow->loader, "eof", &eof, NULL);
-    if (eof) {
-      swfdec_loader_eof (SWFDEC_LOADER (slow));
-      slow->timeout_id = 0;
-      return FALSE;
-    } else {
-      return TRUE;
-    }
-  }
-}
-
-static void
-swfdec_slow_loader_initialize (SwfdecSlowLoader *slow, SwfdecLoader *loader, guint duration)
-{
-  glong size;
-
-  slow->tick_time = 100;
-  slow->duration = duration * 1000;
-  slow->loader = loader;
-  g_signal_connect (loader, "notify", G_CALLBACK (swfdec_slow_loader_notify_cb), slow);
-  size = swfdec_loader_get_size (loader);
-  if (size >= 0)
-    swfdec_loader_set_size (SWFDEC_LOADER (slow), size);
-  slow->timeout_id = g_timeout_add (slow->tick_time, swfdec_slow_loader_tick, slow);
-  swfdec_loader_open (SWFDEC_LOADER (slow), 0);
-}
-
-static void
-swfdec_slow_loader_load (SwfdecLoader *loader, SwfdecLoader *parent,
-    SwfdecLoaderRequest request, const char *data, gsize data_len)
-{
-  SwfdecSlowLoader *slow = SWFDEC_SLOW_LOADER (loader);
-  SwfdecLoader *new;
-
-  /* FIXME: include request and data */
-  new = swfdec_gtk_loader_new (swfdec_url_get_url (swfdec_loader_get_url (loader)));
-  swfdec_slow_loader_initialize (slow, new, SWFDEC_SLOW_LOADER (parent)->duration / 1000);
-}
-
-static void
-swfdec_slow_loader_class_init (SwfdecSlowLoaderClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  SwfdecLoaderClass *loader_class = SWFDEC_LOADER_CLASS (klass);
-
-  object_class->dispose = swfdec_slow_loader_dispose;
-
-  loader_class->load = swfdec_slow_loader_load;
-}
-
-static void
-swfdec_slow_loader_init (SwfdecSlowLoader *slow_loader)
-{
-}
-
-SwfdecLoader *
-swfdec_slow_loader_new (SwfdecLoader *loader, guint duration)
-{
-  SwfdecSlowLoader *ret;
-
-  g_return_val_if_fail (SWFDEC_IS_LOADER (loader), NULL);
-  g_return_val_if_fail (duration > 0, NULL);
-
-  ret = g_object_new (SWFDEC_TYPE_SLOW_LOADER, "url", loader->url, NULL);
-  swfdec_slow_loader_initialize (ret, loader, duration);
-  return SWFDEC_LOADER (ret);
-}
-
diff --git a/player/swfdec_slow_loader.h b/player/swfdec_slow_loader.h
deleted file mode 100644
index d10ce93..0000000
--- a/player/swfdec_slow_loader.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Swfdec
- * Copyright (C) 2006 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifndef _SWFDEC_SLOW_LOADER_H_
-#define _SWFDEC_SLOW_LOADER_H_
-
-#include <libswfdec/swfdec.h>
-
-G_BEGIN_DECLS
-
-
-typedef struct _SwfdecSlowLoader SwfdecSlowLoader;
-typedef struct _SwfdecSlowLoaderClass SwfdecSlowLoaderClass;
-
-#define SWFDEC_TYPE_SLOW_LOADER                    (swfdec_slow_loader_get_type())
-#define SWFDEC_IS_SLOW_LOADER(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_SLOW_LOADER))
-#define SWFDEC_IS_SLOW_LOADER_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_SLOW_LOADER))
-#define SWFDEC_SLOW_LOADER(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_SLOW_LOADER, SwfdecSlowLoader))
-#define SWFDEC_SLOW_LOADER_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_SLOW_LOADER, SwfdecSlowLoaderClass))
-#define SWFDEC_SLOW_LOADER_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_SLOW_LOADER, SwfdecSlowLoaderClass))
-
-struct _SwfdecSlowLoader
-{
-  SwfdecLoader		parent;
-
-  SwfdecLoader *	loader;		/* what we load */
-  guint			tick_time;	/* how many msecs each tick takes */
-  guint			duration;	/* total duration in msecs for loading */
-  guint			timeout_id;	/* id from g_timeout_add */
-};
-
-struct _SwfdecSlowLoaderClass
-{
-  SwfdecLoaderClass	loader_class;
-};
-
-GType		swfdec_slow_loader_get_type   	(void);
-
-SwfdecLoader *	swfdec_slow_loader_new	  	(SwfdecLoader *	loader,
-						 guint		duration);
-					 
-
-G_END_DECLS
-#endif
diff --git a/player/swfplay.c b/player/swfplay.c
index 79978be..a21586e 100644
--- a/player/swfplay.c
+++ b/player/swfplay.c
@@ -26,8 +26,6 @@
 
 #include <libswfdec-gtk/swfdec-gtk.h>
 
-#include "swfdec_slow_loader.h"
-
 static GMainLoop *loop = NULL;
 
 static void
@@ -101,7 +99,6 @@ sanitize_url (const char *s)
 int 
 main (int argc, char *argv[])
 {
-  int delay = 0;
   int speed = 100;
   int max_runtime = 0;
   SwfdecLoader *loader;
@@ -116,7 +113,6 @@ main (int argc, char *argv[])
 
   GOptionEntry options[] = {
     { "always-gc", 'g', 0, G_OPTION_ARG_NONE, &gc, "run the garbage collector as often as possible", NULL },
-    { "delay", 'd', 0, G_OPTION_ARG_INT, &delay, "make loading of resources take time", "SECS" },
     { "image", 'i', 0, G_OPTION_ARG_NONE, &use_image, "use an intermediate image surface for drawing", NULL },
     { "max-runtime", 0, 0, G_OPTION_ARG_INT, &max_runtime, "maximum time scripts run before aborting the player", "SECS" },
     { "no-scripts", 0, 0, G_OPTION_ARG_NONE, &no_scripts, "don't execute scripts affecting the application", NULL },
@@ -151,9 +147,11 @@ main (int argc, char *argv[])
   s = sanitize_url (argv[1]);
   loader = swfdec_gtk_loader_new (s);
   g_free (s);
-  if (loader->error) {
-    g_printerr ("Couldn't open file \"%s\": %s\n", argv[1], loader->error);
+  g_object_get (loader, "error", &s, NULL);
+  if (s) {
+    g_printerr ("Couldn't open file \"%s\": %s\n", argv[1], s);
     g_object_unref (loader);
+    g_free (s);
     return 1;
   }
   loop = g_main_loop_new (NULL, TRUE);
@@ -178,9 +176,6 @@ main (int argc, char *argv[])
   if (!no_scripts)
     g_signal_connect (player, "fscommand", G_CALLBACK (do_fscommand), window);
   
-  if (delay) 
-    loader = swfdec_slow_loader_new (loader, delay);
-
   swfdec_player_set_loader_with_variables (player, loader, variables);
 
   swfdec_gtk_player_set_playing (SWFDEC_GTK_PLAYER (player), TRUE);
commit 03d96dece1a5aef7f3212d4999b8a3ff71fff43f
Author: Benjamin Otte <otte at gnome.org>
Date:   Sat Jan 5 13:25:13 2008 +0100

    make SwfdecLoader a SwfecStream

diff --git a/libswfdec-gtk/swfdec_gtk_loader.c b/libswfdec-gtk/swfdec_gtk_loader.c
index 80d95c7..26979ce 100644
--- a/libswfdec-gtk/swfdec_gtk_loader.c
+++ b/libswfdec-gtk/swfdec_gtk_loader.c
@@ -100,7 +100,8 @@ swfdec_gtk_loader_ensure_open (SwfdecGtkLoader *gtk)
 
   real_uri = soup_uri_to_string (soup_message_get_uri (gtk->message), FALSE);
   swfdec_gtk_loader_set_size (gtk);
-  swfdec_loader_open (SWFDEC_LOADER (gtk), real_uri);
+  swfdec_loader_set_url (SWFDEC_LOADER (gtk), real_uri);
+  swfdec_stream_open (SWFDEC_STREAM (gtk));
   gtk->opened = TRUE;
   g_free (real_uri);
 }
@@ -114,7 +115,7 @@ swfdec_gtk_loader_push (SoupMessage *msg, gpointer loader)
   swfdec_gtk_loader_ensure_open (gtk);
   buffer = swfdec_buffer_new_and_alloc (msg->response.length);
   memcpy (buffer->data, msg->response.body, msg->response.length);
-  swfdec_loader_push (loader, buffer);
+  swfdec_stream_push (loader, buffer);
 }
 
 static void
@@ -122,10 +123,10 @@ swfdec_gtk_loader_finished (SoupMessage *msg, gpointer loader)
 {
   if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
     swfdec_gtk_loader_ensure_open (loader);
-    swfdec_loader_eof (loader);
+    swfdec_stream_eof (loader);
   } else {
     char *s = g_strdup_printf ("%u %s", msg->status_code, msg->reason_phrase);
-    swfdec_loader_error (loader, s);
+    swfdec_stream_error (loader, s);
     g_free (s);
   }
 }
@@ -178,14 +179,14 @@ swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecLoader *parent,
 
 #ifdef HAVE_HTTP
 static void
-swfdec_gtk_loader_close (SwfdecLoader *loader)
+swfdec_gtk_loader_close (SwfdecStream *stream)
 {
-  SwfdecGtkLoader *gtk = SWFDEC_GTK_LOADER (loader);
+  SwfdecGtkLoader *gtk = SWFDEC_GTK_LOADER (stream);
 
   if (gtk->message) {
     gboolean eof;
 
-    g_object_get (loader, "eof", &eof, NULL);
+    g_object_get (stream, "eof", &eof, NULL);
     if (!eof) {
       SwfdecGtkLoaderClass *klass = SWFDEC_GTK_LOADER_GET_CLASS (gtk);
 
@@ -202,12 +203,14 @@ swfdec_gtk_loader_class_init (SwfdecGtkLoaderClass *klass)
 {
 #ifdef HAVE_HTTP
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  SwfdecStreamClass *stream_class = SWFDEC_STREAM_CLASS (klass);
   SwfdecLoaderClass *loader_class = SWFDEC_LOADER_CLASS (klass);
 
   object_class->dispose = swfdec_gtk_loader_dispose;
 
+  stream_class->close = swfdec_gtk_loader_close;
+
   loader_class->load = swfdec_gtk_loader_load;
-  loader_class->close = swfdec_gtk_loader_close;
   
   klass->session = soup_session_async_new ();
 #endif
diff --git a/libswfdec-gtk/swfdec_playback_alsa.c b/libswfdec-gtk/swfdec_playback_alsa.c
index dd539c5..bddd189 100644
--- a/libswfdec-gtk/swfdec_playback_alsa.c
+++ b/libswfdec-gtk/swfdec_playback_alsa.c
@@ -118,7 +118,7 @@ try_write (Stream *stream)
 }
 
 static void
-swfdec_stream_remove_handlers (Stream *stream)
+swfdec_playback_stream_remove_handlers (Stream *stream)
 {
   guint i;
 
@@ -131,7 +131,7 @@ swfdec_stream_remove_handlers (Stream *stream)
   }
 }
 
-static void swfdec_stream_start (Stream *stream);
+static void swfdec_playback_stream_start (Stream *stream);
 static gboolean
 handle_stream (GIOChannel *source, GIOCondition cond, gpointer data)
 {
@@ -140,7 +140,7 @@ handle_stream (GIOChannel *source, GIOCondition cond, gpointer data)
 
   state = snd_pcm_state (stream->pcm);
   if (state != SND_PCM_STATE_RUNNING) {
-    swfdec_stream_start (stream);
+    swfdec_playback_stream_start (stream);
   } else {
     try_write (stream);
   }
@@ -148,7 +148,7 @@ handle_stream (GIOChannel *source, GIOCondition cond, gpointer data)
 }
 
 static void
-swfdec_stream_install_handlers (Stream *stream)
+swfdec_playback_stream_install_handlers (Stream *stream)
 {
   GIOChannel *channel;
 
@@ -172,7 +172,7 @@ swfdec_stream_install_handlers (Stream *stream)
 }
 
 static void
-swfdec_stream_start (Stream *stream)
+swfdec_playback_stream_start (Stream *stream)
 {
   snd_pcm_state_t state = snd_pcm_state (stream->pcm);
   switch (state) {
@@ -186,7 +186,7 @@ swfdec_stream_start (Stream *stream)
       //g_print ("offset: %u (delay: %ld)\n", sound->offset, delay);
       if (try_write (stream)) {
 	ALSA_ERROR (snd_pcm_start (stream->pcm), "error starting",);
-	swfdec_stream_install_handlers (stream);
+	swfdec_playback_stream_install_handlers (stream);
       }
       break;
     case SND_PCM_STATE_OPEN:
@@ -201,7 +201,7 @@ swfdec_stream_start (Stream *stream)
 }
 
 static void
-swfdec_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
+swfdec_playback_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
 {
   Stream *stream;
   snd_pcm_t *ret;
@@ -259,7 +259,7 @@ swfdec_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
   if (stream->n_sources > 0)
     stream->sources = g_new0 (GSource *, stream->n_sources);
   sound->streams = g_list_prepend (sound->streams, stream);
-  swfdec_stream_start (stream);
+  swfdec_playback_stream_start (stream);
   return;
 
 fail:
@@ -267,10 +267,10 @@ fail:
 }
 
 static void
-swfdec_stream_close (Stream *stream)
+swfdec_playback_stream_close (Stream *stream)
 {
   ALSA_TRY (snd_pcm_close (stream->pcm), "failed closing");
-  swfdec_stream_remove_handlers (stream);
+  swfdec_playback_stream_remove_handlers (stream);
   g_free (stream->sources);
   stream->sound->streams = g_list_remove (stream->sound->streams, stream);
   g_object_unref (stream->audio);
@@ -298,7 +298,7 @@ advance_before (SwfdecPlayer *player, guint msecs, guint audio_samples, gpointer
 static void
 audio_added (SwfdecPlayer *player, SwfdecAudio *audio, SwfdecPlayback *sound)
 {
-  swfdec_stream_open (sound, audio);
+  swfdec_playback_stream_open (sound, audio);
 }
 
 static void
@@ -309,7 +309,7 @@ audio_removed (SwfdecPlayer *player, SwfdecAudio *audio, SwfdecPlayback *sound)
   for (walk = sound->streams; walk; walk = walk->next) {
     Stream *stream = walk->data;
     if (stream->audio == audio) {
-      swfdec_stream_close (stream);
+      swfdec_playback_stream_close (stream);
       return;
     }
   }
@@ -330,7 +330,7 @@ swfdec_playback_open (SwfdecPlayer *player, GMainContext *context)
   g_signal_connect (player, "audio-added", G_CALLBACK (audio_added), sound);
   g_signal_connect (player, "audio-removed", G_CALLBACK (audio_removed), sound);
   for (walk = swfdec_player_get_audio (player); walk; walk = walk->next) {
-    swfdec_stream_open (sound, walk->data);
+    swfdec_playback_stream_open (sound, walk->data);
   }
   g_main_context_ref (context);
   sound->context = context;
@@ -349,7 +349,7 @@ swfdec_playback_close (SwfdecPlayback *sound)
 #define REMOVE_HANDLER(obj,func,data) REMOVE_HANDLER_FULL (obj, func, data, 1)
 
   while (sound->streams)
-    swfdec_stream_close (sound->streams->data);
+    swfdec_playback_stream_close (sound->streams->data);
   REMOVE_HANDLER (sound->player, advance_before, sound);
   REMOVE_HANDLER (sound->player, audio_added, sound);
   REMOVE_HANDLER (sound->player, audio_removed, sound);
diff --git a/libswfdec-gtk/swfdec_playback_oss.c b/libswfdec-gtk/swfdec_playback_oss.c
index 9c94252..c2eb493 100644
--- a/libswfdec-gtk/swfdec_playback_oss.c
+++ b/libswfdec-gtk/swfdec_playback_oss.c
@@ -108,7 +108,7 @@ handle_stream (GIOChannel *source, GIOCondition cond, gpointer data)
 }
 
 static void
-swfdec_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
+swfdec_playback_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
 {
   GIOChannel *channel;
   Stream *stream;
@@ -171,7 +171,7 @@ swfdec_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
 }
 
 static void
-swfdec_stream_close (Stream *stream)
+swfdec_playback_stream_close (Stream *stream)
 {
   close (stream->dsp_fd);
   g_source_destroy (stream->source);
@@ -202,7 +202,7 @@ advance_before (SwfdecPlayer *player, guint msecs, guint audio_samples, gpointer
 static void
 audio_added (SwfdecPlayer *player, SwfdecAudio *audio, SwfdecPlayback *sound)
 {
-  swfdec_stream_open (sound, audio);
+  swfdec_playback_stream_open (sound, audio);
 }
 
 static void
@@ -213,7 +213,7 @@ audio_removed (SwfdecPlayer *player, SwfdecAudio *audio, SwfdecPlayback *sound)
   for (walk = sound->streams; walk; walk = walk->next) {
     Stream *stream = walk->data;
     if (stream->audio == audio) {
-      swfdec_stream_close (stream);
+      swfdec_playback_stream_close (stream);
       return;
     }
   }
@@ -235,7 +235,7 @@ swfdec_playback_open (SwfdecPlayer *player, GMainContext *context)
   g_signal_connect (player, "audio-added", G_CALLBACK (audio_added), sound);
   g_signal_connect (player, "audio-removed", G_CALLBACK (audio_removed), sound);
   for (walk = swfdec_player_get_audio (player); walk; walk = walk->next) {
-    swfdec_stream_open (sound, walk->data);
+    swfdec_playback_stream_open (sound, walk->data);
   }
   g_main_context_ref (context);
   sound->context = context;
@@ -254,7 +254,7 @@ swfdec_playback_close (SwfdecPlayback *sound)
 #define REMOVE_HANDLER(obj,func,data) REMOVE_HANDLER_FULL (obj, func, data, 1)
 
   while (sound->streams)
-    swfdec_stream_close (sound->streams->data);
+    swfdec_playback_stream_close (sound->streams->data);
   REMOVE_HANDLER (sound->player, advance_before, sound);
   REMOVE_HANDLER (sound->player, audio_added, sound);
   REMOVE_HANDLER (sound->player, audio_removed, sound);
diff --git a/libswfdec-gtk/swfdec_playback_pa.c b/libswfdec-gtk/swfdec_playback_pa.c
index 825775b..755b033 100644
--- a/libswfdec-gtk/swfdec_playback_pa.c
+++ b/libswfdec-gtk/swfdec_playback_pa.c
@@ -112,7 +112,7 @@ stream_drain_complete (pa_stream *pa, int success, void *data)
 }
 
 static void
-swfdec_stream_close (Stream *stream)
+swfdec_playback_stream_close (Stream *stream)
 {
   /* Pull it off of the active stream list. */
   stream->sound->streams = g_list_remove (stream->sound->streams, stream);
@@ -148,7 +148,7 @@ stream_state_callback (pa_stream *pa, void *data)
 }
 
 static void
-swfdec_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
+swfdec_playback_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
 {
   Stream *stream;
   pa_sample_spec spec = {
@@ -178,7 +178,7 @@ swfdec_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
 			     );
   if (stream->pa == NULL) {
     g_printerr("Failed to create PA stream\n");
-    swfdec_stream_close(stream);
+    swfdec_playback_stream_close(stream);
     return;
   }
 
@@ -200,7 +200,7 @@ swfdec_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio)
   if (err != 0) {
     g_printerr ("Failed to connect PA stream: %s\n",
 		pa_strerror(pa_context_errno(sound->pa)));
-    swfdec_stream_close(stream);
+    swfdec_playback_stream_close(stream);
     return;
   }
 }
@@ -226,7 +226,7 @@ advance_before (SwfdecPlayer *player, guint msecs, guint audio_samples, gpointer
 static void
 audio_added (SwfdecPlayer *player, SwfdecAudio *audio, SwfdecPlayback *sound)
 {
-  swfdec_stream_open (sound, audio);
+  swfdec_playback_stream_open (sound, audio);
 }
 
 static void
@@ -237,7 +237,7 @@ audio_removed (SwfdecPlayer *player, SwfdecAudio *audio, SwfdecPlayback *sound)
   for (walk = sound->streams; walk; walk = walk->next) {
     Stream *stream = walk->data;
     if (stream->audio == audio) {
-      swfdec_stream_close (stream);
+      swfdec_playback_stream_close (stream);
       return;
     }
   }
@@ -299,7 +299,7 @@ swfdec_playback_open (SwfdecPlayer *player, GMainContext *context)
 		      );
 
   for (walk = swfdec_player_get_audio (player); walk; walk = walk->next) {
-    swfdec_stream_open (sound, walk->data);
+    swfdec_playback_stream_open (sound, walk->data);
   }
   g_main_context_ref (context);
   sound->context = context;
@@ -327,7 +327,7 @@ swfdec_playback_close (SwfdecPlayback *sound)
 #define REMOVE_HANDLER(obj,func,data) REMOVE_HANDLER_FULL (obj, func, data, 1)
 
   while (sound->streams)
-    swfdec_stream_close (sound->streams->data);
+    swfdec_playback_stream_close (sound->streams->data);
   REMOVE_HANDLER (sound->player, advance_before, sound);
   REMOVE_HANDLER (sound->player, audio_added, sound);
   REMOVE_HANDLER (sound->player, audio_removed, sound);
diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index a8e2cf6..17d18ce 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -92,7 +92,6 @@ libswfdec_source_files = \
 	swfdec_load_object.c \
 	swfdec_load_object_as.c \
 	swfdec_loader.c \
-	swfdec_loadertarget.c \
 	swfdec_loadvars_as.c \
 	swfdec_local_connection.c \
 	swfdec_microphone.c \
@@ -251,7 +250,6 @@ noinst_HEADERS = \
 	swfdec_interval.h \
 	swfdec_load_object.h \
 	swfdec_loader_internal.h \
-	swfdec_loadertarget.h \
 	swfdec_marshal.h \
 	swfdec_morph_movie.h \
 	swfdec_morphshape.h \
diff --git a/libswfdec/swfdec_file_loader.c b/libswfdec/swfdec_file_loader.c
index 53c7bb8..1b498ac 100644
--- a/libswfdec/swfdec_file_loader.c
+++ b/libswfdec/swfdec_file_loader.c
@@ -25,7 +25,6 @@
 #include "swfdec_loader_internal.h"
 #include "swfdec_buffer.h"
 #include "swfdec_debug.h"
-#include "swfdec_loadertarget.h"
 #include "swfdec_player_internal.h"
 
 /**
@@ -42,6 +41,7 @@ static void
 swfdec_file_loader_load (SwfdecLoader *loader, SwfdecLoader *parent, SwfdecLoaderRequest request, 
     const char *data, gsize data_len)
 {
+  SwfdecStream *stream = SWFDEC_STREAM (loader);
   const SwfdecURL *url;
   SwfdecBuffer *buffer;
   GError *error = NULL;
@@ -49,11 +49,11 @@ swfdec_file_loader_load (SwfdecLoader *loader, SwfdecLoader *parent, SwfdecLoade
 
   url = swfdec_loader_get_url (loader);
   if (!g_str_equal (swfdec_url_get_protocol (url), "file")) {
-    swfdec_loader_error (loader, "Don't know how to handle this protocol");
+    swfdec_stream_error (stream, "Don't know how to handle this protocol");
     return;
   }
   if (swfdec_url_get_host (url)) {
-    swfdec_loader_error (loader, "filenames cannot have hostnames");
+    swfdec_stream_error (stream, "filenames cannot have hostnames");
     return;
   }
 
@@ -62,13 +62,13 @@ swfdec_file_loader_load (SwfdecLoader *loader, SwfdecLoader *parent, SwfdecLoade
   buffer = swfdec_buffer_new_from_file (real, &error);
   g_free (real);
   if (buffer == NULL) {
-    swfdec_loader_error (loader, error->message);
+    swfdec_stream_error (stream, error->message);
     g_error_free (error);
   } else {
     swfdec_loader_set_size (loader, buffer->length);
-    swfdec_loader_open (loader, 0);
-    swfdec_loader_push (loader, buffer);
-    swfdec_loader_eof (loader);
+    swfdec_stream_open (stream);
+    swfdec_stream_push (stream, buffer);
+    swfdec_stream_eof (stream);
   }
 }
 
@@ -99,6 +99,7 @@ swfdec_file_loader_new (const char *filename)
 {
   SwfdecBuffer *buf;
   SwfdecLoader *loader;
+  SwfdecStream *stream;
   GError *error = NULL;
   char *url_string;
   SwfdecURL *url;
@@ -121,15 +122,16 @@ swfdec_file_loader_new (const char *filename)
   url = swfdec_url_new (url_string);
   g_free (url_string);
   loader = g_object_new (SWFDEC_TYPE_FILE_LOADER, "url", url, NULL);
+  stream = SWFDEC_STREAM (loader);
   swfdec_url_free (url);
   if (buf == NULL) {
-    swfdec_loader_error (loader, error->message);
+    swfdec_stream_error (stream, error->message);
     g_error_free (error);
   } else {
     swfdec_loader_set_size (loader, buf->length);
-    swfdec_loader_open (loader, 0);
-    swfdec_loader_push (loader, buf);
-    swfdec_loader_eof (loader);
+    swfdec_stream_open (stream);
+    swfdec_stream_push (stream, buf);
+    swfdec_stream_eof (stream);
   }
   return loader;
 }
diff --git a/libswfdec/swfdec_load_object.c b/libswfdec/swfdec_load_object.c
index 5b659f2..72c1ceb 100644
--- a/libswfdec/swfdec_load_object.c
+++ b/libswfdec/swfdec_load_object.c
@@ -28,22 +28,23 @@
 #include "swfdec_as_strings.h"
 #include "swfdec_debug.h"
 #include "swfdec_loader_internal.h"
-#include "swfdec_loadertarget.h"
+#include "swfdec_stream_target.h"
 #include "swfdec_player_internal.h"
 #include "swfdec_resource_request.h"
 
-/*** SWFDEC_LOADER_TARGET ***/
+/*** SWFDEC_STREAM_TARGET ***/
 
 static SwfdecPlayer *
-swfdec_load_object_loader_target_get_player (SwfdecLoaderTarget *target)
+swfdec_load_object_stream_target_get_player (SwfdecStreamTarget *target)
 {
   return SWFDEC_PLAYER (SWFDEC_AS_OBJECT (target)->context);
 }
 
 static void
-swfdec_load_object_loader_target_parse (SwfdecLoaderTarget *target,
-    SwfdecLoader *loader)
+swfdec_load_object_stream_target_parse (SwfdecStreamTarget *target,
+    SwfdecStream *stream)
 {
+  SwfdecLoader *loader = SWFDEC_LOADER (stream);
   SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (target);
 
   if (load_object->progress != NULL) {
@@ -53,13 +54,14 @@ swfdec_load_object_loader_target_parse (SwfdecLoaderTarget *target,
 }
 
 static void
-swfdec_load_object_loader_target_error (SwfdecLoaderTarget *target,
-    SwfdecLoader *loader)
+swfdec_load_object_stream_target_error (SwfdecStreamTarget *target,
+    SwfdecStream *stream)
 {
+  SwfdecLoader *loader = SWFDEC_LOADER (stream);
   SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (target);
 
   /* break reference to the loader */
-  swfdec_loader_set_target (loader, NULL);
+  swfdec_stream_set_target (SWFDEC_STREAM (loader), NULL);
   load_object->loader = NULL;
   g_object_unref (loader);
 
@@ -72,9 +74,10 @@ swfdec_load_object_loader_target_error (SwfdecLoaderTarget *target,
 }
 
 static void
-swfdec_load_object_loader_target_eof (SwfdecLoaderTarget *target,
-    SwfdecLoader *loader)
+swfdec_load_object_stream_target_close (SwfdecStreamTarget *target,
+    SwfdecStream *stream)
 {
+  SwfdecLoader *loader = SWFDEC_LOADER (stream);
   SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (target);
   char *text;
 
@@ -83,7 +86,7 @@ swfdec_load_object_loader_target_eof (SwfdecLoaderTarget *target,
     swfdec_loader_get_text (loader, load_object->target->context->version);
 
   /* break reference to the loader */
-  swfdec_loader_set_target (loader, NULL);
+  swfdec_stream_set_target (stream, NULL);
   load_object->loader = NULL;
   g_object_unref (loader);
 
@@ -101,24 +104,24 @@ swfdec_load_object_loader_target_eof (SwfdecLoaderTarget *target,
 }
 
 static void
-swfdec_load_object_loader_target_init (SwfdecLoaderTargetInterface *iface)
+swfdec_load_object_stream_target_init (SwfdecStreamTargetInterface *iface)
 {
-  iface->get_player = swfdec_load_object_loader_target_get_player;
-  iface->parse = swfdec_load_object_loader_target_parse;
-  iface->eof = swfdec_load_object_loader_target_eof;
-  iface->error = swfdec_load_object_loader_target_error;
+  iface->get_player = swfdec_load_object_stream_target_get_player;
+  iface->parse = swfdec_load_object_stream_target_parse;
+  iface->close = swfdec_load_object_stream_target_close;
+  iface->error = swfdec_load_object_stream_target_error;
 }
 
 /*** SWFDEC_LOAD_OBJECT ***/
 
 G_DEFINE_TYPE_WITH_CODE (SwfdecLoadObject, swfdec_load_object, SWFDEC_TYPE_AS_OBJECT,
-    G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_load_object_loader_target_init))
+    G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_load_object_stream_target_init))
 
 static void
 swfdec_load_object_reset (SwfdecLoadObject *load_object)
 {
   if (load_object->loader) {
-    swfdec_loader_set_target (load_object->loader, NULL);
+    swfdec_stream_set_target (SWFDEC_STREAM (load_object->loader), NULL);
     g_object_unref (load_object->loader);
     load_object->loader = NULL;
   }
@@ -168,9 +171,9 @@ swfdec_load_object_got_loader (SwfdecPlayer *player, SwfdecLoader *loader, gpoin
   }
   load_object->loader = loader;
 
-  swfdec_loader_set_target (load_object->loader,
-      SWFDEC_LOADER_TARGET (load_object));
-  swfdec_loader_set_data_type (load_object->loader, SWFDEC_LOADER_DATA_TEXT);
+  swfdec_stream_set_target (SWFDEC_STREAM (loader),
+      SWFDEC_STREAM_TARGET (load_object));
+  swfdec_loader_set_data_type (loader, SWFDEC_LOADER_DATA_TEXT);
 }
 
 static gboolean
diff --git a/libswfdec/swfdec_load_object_as.c b/libswfdec/swfdec_load_object_as.c
index 42d4be3..de92fe8 100644
--- a/libswfdec/swfdec_load_object_as.c
+++ b/libswfdec/swfdec_load_object_as.c
@@ -28,7 +28,6 @@
 #include "swfdec_as_strings.h"
 #include "swfdec_debug.h"
 #include "swfdec_loader_internal.h"
-#include "swfdec_loadertarget.h"
 #include "swfdec_player_internal.h"
 
 static void
diff --git a/libswfdec/swfdec_loader.c b/libswfdec/swfdec_loader.c
index e089eef..6b51e61 100644
--- a/libswfdec/swfdec_loader.c
+++ b/libswfdec/swfdec_loader.c
@@ -25,7 +25,6 @@
 #include "swfdec_loader_internal.h"
 #include "swfdec_buffer.h"
 #include "swfdec_debug.h"
-#include "swfdec_loadertarget.h"
 #include "swfdec_player_internal.h"
 
 /*** gtk-doc ***/
@@ -35,14 +34,13 @@
  * @title: SwfdecLoader
  * @short_description: object used for input
  *
- * SwfdecLoader is the base class used for input. Since developers normally 
- * need to adapt input to the needs of their application, this class is 
- * provided to be adapted to their needs.
+ * SwfdecLoader is the base class used for reading input. Since developers 
+ * normally need to adapt input to the needs of their application, this class 
+ * is provided to be adapted to their needs. It is used both for HTTP and
+ * RTMP access.
  *
  * Since Flash files can load new resources while operating, a #SwfdecLoader
- * can be instructed to load another resource. It's the loader's responsibility
- * to make sure the player is allowed to access the resource and provide its
- * data.
+ * can be instructed to load another resource.
  *
  * For convenience, a #SwfdecLoader for file access is provided by Swfdec.
  */
@@ -50,11 +48,20 @@
 /**
  * SwfdecLoader:
  *
- * This is the base class used for providing input. It is abstract, use a 
+ * This is the base object used for providing input. It is abstract, use a 
  * subclass to provide your input.
  */
 
 /**
+ * SwfdecLoaderClass:
+ * @load: initialize a new loader based on a parent loader object. The new 
+ *        loader will already have its URL set.
+ *
+ * This is the base class used for input. If you create a subclass, you are 
+ * supposed to set the function pointers listed above.
+ */
+
+/**
  * SwfdecLoaderDataType:
  * @SWFDEC_LOADER_DATA_UNKNOWN: Unidentified data or data that cannot be 
  *                              identified.
@@ -87,15 +94,19 @@
 
 enum {
   PROP_0,
-  PROP_ERROR,
-  PROP_EOF,
   PROP_DATA_TYPE,
   PROP_SIZE,
   PROP_LOADED,
   PROP_URL
 };
 
-G_DEFINE_ABSTRACT_TYPE (SwfdecLoader, swfdec_loader, G_TYPE_OBJECT)
+G_DEFINE_ABSTRACT_TYPE (SwfdecLoader, swfdec_loader, SWFDEC_TYPE_STREAM)
+
+static const char *
+swfdec_loader_describe (SwfdecStream *stream)
+{
+  return swfdec_url_get_url (SWFDEC_LOADER (stream)->url);
+}
 
 static void
 swfdec_loader_get_property (GObject *object, guint param_id, GValue *value, 
@@ -104,12 +115,6 @@ swfdec_loader_get_property (GObject *object, guint param_id, GValue *value,
   SwfdecLoader *loader = SWFDEC_LOADER (object);
   
   switch (param_id) {
-    case PROP_ERROR:
-      g_value_set_string (value, loader->error);
-      break;
-    case PROP_EOF:
-      g_value_set_boolean (value, loader->state == SWFDEC_LOADER_STATE_EOF);
-      break;
     case PROP_DATA_TYPE:
       g_value_set_enum (value, loader->data_type);
       break;
@@ -135,9 +140,6 @@ swfdec_loader_set_property (GObject *object, guint param_id, const GValue *value
   SwfdecLoader *loader = SWFDEC_LOADER (object);
 
   switch (param_id) {
-    case PROP_ERROR:
-      swfdec_loader_error (loader, g_value_get_string (value));
-      break;
     case PROP_SIZE:
       if (loader->size == -1 && g_value_get_long (value) >= 0)
 	swfdec_loader_set_size (loader, g_value_get_long (value));
@@ -160,11 +162,10 @@ swfdec_loader_dispose (GObject *object)
 {
   SwfdecLoader *loader = SWFDEC_LOADER (object);
 
-  /* targets are supposed to keep a reference around */
-  g_assert (loader->target == NULL);
-  swfdec_buffer_queue_unref (loader->queue);
-  swfdec_url_free (loader->url);
-  g_free (loader->error);
+  if (loader->url) {
+    swfdec_url_free (loader->url);
+    loader->url = NULL;
+  }
 
   G_OBJECT_CLASS (swfdec_loader_parent_class)->dispose (object);
 }
@@ -173,17 +174,12 @@ static void
 swfdec_loader_class_init (SwfdecLoaderClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  SwfdecStreamClass *stream_class = SWFDEC_STREAM_CLASS (klass);
 
   object_class->dispose = swfdec_loader_dispose;
   object_class->get_property = swfdec_loader_get_property;
   object_class->set_property = swfdec_loader_set_property;
 
-  g_object_class_install_property (object_class, PROP_ERROR,
-      g_param_spec_string ("error", "error", "NULL when no error or string describing error",
-	  NULL, G_PARAM_READABLE));
-  g_object_class_install_property (object_class, PROP_EOF,
-      g_param_spec_boolean ("eof", "eof", "TRUE when all data has been handed to the loader",
-	  FALSE, G_PARAM_READABLE));
   g_object_class_install_property (object_class, PROP_DATA_TYPE,
       g_param_spec_enum ("data-type", "data type", "the data's type as identified by Swfdec",
 	  SWFDEC_TYPE_LOADER_DATA_TYPE, SWFDEC_LOADER_DATA_UNKNOWN, G_PARAM_READABLE));
@@ -196,12 +192,13 @@ swfdec_loader_class_init (SwfdecLoaderClass *klass)
   g_object_class_install_property (object_class, PROP_URL,
       g_param_spec_boxed ("url", "url", "URL for this file",
 	  SWFDEC_TYPE_URL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+  stream_class->describe = swfdec_loader_describe;
 }
 
 static void
 swfdec_loader_init (SwfdecLoader *loader)
 {
-  loader->queue = swfdec_buffer_queue_new ();
   loader->data_type = SWFDEC_LOADER_DATA_UNKNOWN;
 
   loader->size = -1;
@@ -209,53 +206,6 @@ swfdec_loader_init (SwfdecLoader *loader)
 
 /*** INTERNAL API ***/
 
-static void
-swfdec_loader_process (gpointer loaderp, gpointer unused)
-{
-  SwfdecLoader *loader = loaderp;
-
-  g_assert (loader->target != NULL);
-
-  loader->queued = FALSE;
-  if (loader->state == loader->processed_state)
-    return;
-  g_assert (loader->state != SWFDEC_LOADER_STATE_CLOSED);
-  if (loader->state == SWFDEC_LOADER_STATE_ERROR) {
-    swfdec_loader_target_error (loader->target, loader);
-    return;
-  }
-  g_object_ref (loader);
-  while (loader->state != loader->processed_state) {
-    if (loader->processed_state == SWFDEC_LOADER_STATE_NEW) {
-      loader->processed_state = SWFDEC_LOADER_STATE_OPEN;
-      swfdec_loader_target_open (loader->target, loader);
-    } else if (loader->processed_state == SWFDEC_LOADER_STATE_OPEN) {
-      loader->processed_state = SWFDEC_LOADER_STATE_READING;
-      swfdec_loader_target_parse (loader->target, loader);
-    } else if (loader->processed_state == SWFDEC_LOADER_STATE_READING) {
-      loader->processed_state = SWFDEC_LOADER_STATE_EOF;
-      swfdec_loader_target_eof (loader->target, loader);
-    }
-    /* stupid reentrancy */
-    if (loader->processed_state == SWFDEC_LOADER_STATE_NEW)
-      break;
-  }
-  g_object_unref (loader);
-}
-
-static void
-swfdec_loader_queue_processing (SwfdecLoader *loader)
-{
-  if (loader->queued)
-    return;
-  loader->queued = TRUE;
-  if (loader->target) {
-    g_assert (loader->player);
-    swfdec_player_add_external_action (loader->player, loader,
-	swfdec_loader_process, NULL);
-  }
-}
-
 SwfdecLoader *
 swfdec_loader_load (SwfdecLoader *loader, const SwfdecURL *url,
     SwfdecLoaderRequest request, const char *data, gsize data_len)
@@ -274,142 +224,9 @@ swfdec_loader_load (SwfdecLoader *loader, const SwfdecURL *url,
   return ret;
 }
 
-void
-swfdec_loader_close (SwfdecLoader *loader)
-{
-  SwfdecLoaderClass *klass;
-
-  g_return_if_fail (SWFDEC_IS_LOADER (loader));
-  klass = SWFDEC_LOADER_GET_CLASS (loader);
-  
-  if (klass->close)
-    klass->close (loader);
-  if (loader->state != SWFDEC_LOADER_STATE_ERROR) {
-    loader->state = SWFDEC_LOADER_STATE_CLOSED;
-    loader->processed_state = SWFDEC_LOADER_STATE_CLOSED;
-  }
-}
-
-void
-swfdec_loader_set_target (SwfdecLoader *loader, SwfdecLoaderTarget *target)
-{
-  g_return_if_fail (SWFDEC_IS_LOADER (loader));
-  g_return_if_fail (target == NULL || SWFDEC_IS_LOADER_TARGET (target));
-
-  if (loader->target) {
-    swfdec_player_remove_all_external_actions (loader->player, loader);
-  }
-  loader->queued = FALSE;
-  loader->target = target;
-  loader->processed_state = SWFDEC_LOADER_STATE_NEW;
-  if (target) {
-    loader->player = swfdec_loader_target_get_player (target);
-    swfdec_loader_queue_processing (loader);
-  } else {
-    loader->player = NULL;
-  }
-}
-
 /** PUBLIC API ***/
 
 /**
- * swfdec_loader_error:
- * @loader: a #SwfdecLoader
- * @error: a string describing the error
- *
- * Moves the loader in the error state if it wasn't before. A loader that is in
- * the error state will not process any more data. Also, internal error 
- * handling scripts may be executed.
- **/
-void
-swfdec_loader_error (SwfdecLoader *loader, const char *error)
-{
-  g_return_if_fail (SWFDEC_IS_LOADER (loader));
-  g_return_if_fail (error != NULL);
-
-  if (loader->error) {
-    SWFDEC_ERROR ("another error in loader for %s: %s", swfdec_url_get_url (loader->url), error);
-    return;
-  }
-
-  SWFDEC_ERROR ("error in loader for %s: %s", swfdec_url_get_url (loader->url), error);
-  loader->state = SWFDEC_LOADER_STATE_ERROR;
-  loader->error = g_strdup (error);
-  swfdec_loader_queue_processing (loader);
-}
-
-/**
- * swfdec_loader_open:
- * @loader: a #SwfdecLoader
- * @url: the real URL used for this loader if it has changed (e.g. after HTTP 
- *       redirects) or %NULL if it hasn't changed
- *
- * Call this function when your loader opened the resulting file. For HTTP this
- * is when having received the headers. You must call this function before 
- * swfdec_laoder_push() can be called.
- **/
-void
-swfdec_loader_open (SwfdecLoader *loader, const char *url)
-{
-  g_return_if_fail (SWFDEC_IS_LOADER (loader));
-  g_return_if_fail (loader->state == SWFDEC_LOADER_STATE_NEW);
-
-  loader->state = SWFDEC_LOADER_STATE_OPEN;
-  if (url) {
-    swfdec_url_free (loader->url);
-    loader->url = swfdec_url_new (url);
-    g_object_notify (G_OBJECT (loader), "url");
-  }
-  swfdec_loader_queue_processing (loader);
-}
-
-/**
- * swfdec_loader_push:
- * @loader: a #SwfdecLoader
- * @buffer: new data to make available. The loader takes the reference
- *          to the buffer.
- *
- * Makes the data in @buffer available to @loader and processes it. The @loader
- * must be open.
- **/
-void
-swfdec_loader_push (SwfdecLoader *loader, SwfdecBuffer *buffer)
-{
-  g_return_if_fail (SWFDEC_IS_LOADER (loader));
-  g_return_if_fail (loader->state == SWFDEC_LOADER_STATE_OPEN || loader->state == SWFDEC_LOADER_STATE_READING);
-  g_return_if_fail (buffer != NULL);
-
-  swfdec_buffer_queue_push (loader->queue, buffer);
-  g_object_notify (G_OBJECT (loader), "loaded");
-  loader->state = SWFDEC_LOADER_STATE_READING;
-  if (loader->processed_state == SWFDEC_LOADER_STATE_READING)
-    loader->processed_state = SWFDEC_LOADER_STATE_OPEN;
-  swfdec_loader_queue_processing (loader);
-}
-
-/**
- * swfdec_loader_eof:
- * @loader: a #SwfdecLoader
- *
- * Indicates to @loader that no more data will follow. The loader must be open.
- **/
-void
-swfdec_loader_eof (SwfdecLoader *loader)
-{
-  g_return_if_fail (SWFDEC_IS_LOADER (loader));
-  g_return_if_fail (loader->state == SWFDEC_LOADER_STATE_OPEN || loader->state == SWFDEC_LOADER_STATE_READING);
-
-  if (loader->size == 0) {
-    gulong bytes = swfdec_loader_get_loaded (loader);
-    if (bytes)
-      swfdec_loader_set_size (loader, bytes);
-  }
-  g_object_notify (G_OBJECT (loader), "eof");
-  loader->state = SWFDEC_LOADER_STATE_EOF;
-  swfdec_loader_queue_processing (loader);
-}
-
-/**
  * swfdec_loader_get_filename:
  * @loader: a #SwfdecLoader
  *
@@ -458,6 +275,27 @@ swfdec_loader_get_filename (SwfdecLoader *loader)
 }
 
 /**
+ * swfdec_loader_set_url:
+ * @loader: the loader to update
+ * @url: string specifying the new URL. The url must be a valid absolute URL.
+ *
+ * Updates the url of the given @loader to point to the new @url. This is useful
+ * whe encountering HTTP redirects, as the loader is supposed to reference the
+ * final URL after all rdirections.
+ * This function may not be called after calling swfdec_loader_open().
+ **/
+void
+swfdec_loader_set_url (SwfdecLoader *loader, const char *url)
+{
+  g_return_if_fail (SWFDEC_IS_LOADER (loader));
+  g_return_if_fail (url != NULL);
+  /* g_return_if_fail (LOADER_IS_NOT_OPEN_YET) */
+
+  swfdec_url_free (loader->url);
+  loader->url = swfdec_url_new (url);
+}
+
+/**
  * swfdec_loader_get_url:
  * @loader: a #SwfdecLoader
  *
@@ -550,10 +388,13 @@ swfdec_loader_get_size (SwfdecLoader *loader)
 gulong
 swfdec_loader_get_loaded (SwfdecLoader *loader)
 {
+  SwfdecBufferQueue *queue;
+
   g_return_val_if_fail (SWFDEC_IS_LOADER (loader), 0);
 
-  return swfdec_buffer_queue_get_depth (loader->queue) + 
-    swfdec_buffer_queue_get_offset (loader->queue);
+  queue = swfdec_stream_get_queue (SWFDEC_STREAM (loader));
+  return swfdec_buffer_queue_get_depth (queue) + 
+    swfdec_buffer_queue_get_offset (queue);
 }
 
 /**
@@ -605,18 +446,20 @@ static ByteOrderMark boms[] = {
 char *
 swfdec_loader_get_text (SwfdecLoader *loader, guint version)
 {
+  SwfdecBufferQueue *queue;
   SwfdecBuffer *buffer;
   char *text;
   guint size, i, j;
 
   /* get the text from the loader */
-  size = swfdec_buffer_queue_get_depth (loader->queue);
+  queue = swfdec_stream_get_queue (SWFDEC_STREAM (loader));
+  size = swfdec_buffer_queue_get_depth (queue);
   if (size == 0) {
     SWFDEC_LOG ("empty loader, returning empty string");
     return g_strdup ("");
   }
 
-  buffer = swfdec_buffer_queue_peek (loader->queue, size);
+  buffer = swfdec_buffer_queue_peek (queue, size);
   if (!buffer)
     return NULL;
 
@@ -662,45 +505,3 @@ swfdec_loader_get_text (SwfdecLoader *loader, guint version)
   return text;
 }
 
-/*** X-WWW-FORM-URLENCODED ***/
-
-/* if speed ever gets an issue, use a 256 byte array instead of strchr */
-static const char *urlencode_unescaped="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_.,:/()'";
-static void
-swfdec_urlencode_append_string (GString *str, const char *s)
-{
-  g_assert (s != NULL);
-  while (*s) {
-    if (strchr (urlencode_unescaped, *s))
-      g_string_append_c (str, *s);
-    else if (*s == ' ')
-      g_string_append_c (str, '+');
-    else
-      g_string_append_printf (str, "%%%02X", (guint) *s);
-    s++;
-  }
-}
-
-/**
- * swfdec_string_append_urlencoded:
- * @str: a #GString
- * @name: name of the property to append
- * @value: value of property to append or NULL for empty
- *
- * Appends a name/value pair in encoded as 'application/x-www-form-urlencoded' 
- * to the given @str
- **/
-void
-swfdec_string_append_urlencoded (GString *str, const char *name, const char *value)
-{
-  g_return_if_fail (str != NULL);
-  g_return_if_fail (name != NULL);
-
-  if (str->len > 0)
-    g_string_append_c (str, '&');
-  swfdec_urlencode_append_string (str, name);
-  g_string_append_c (str, '=');
-  if (value)
-    swfdec_urlencode_append_string (str, value);
-}
-
diff --git a/libswfdec/swfdec_loader.h b/libswfdec/swfdec_loader.h
index 0d0c6a4..f668fca 100644
--- a/libswfdec/swfdec_loader.h
+++ b/libswfdec/swfdec_loader.h
@@ -22,6 +22,7 @@
 
 #include <glib-object.h>
 #include <libswfdec/swfdec_buffer.h>
+#include <libswfdec/swfdec_stream.h>
 #include <libswfdec/swfdec_url.h>
 
 G_BEGIN_DECLS
@@ -55,24 +56,17 @@ typedef struct _SwfdecLoaderClass SwfdecLoaderClass;
 
 struct _SwfdecLoader
 {
-  GObject		object;
+  SwfdecStream		stream;
 
   /*< private >*/
-  guint			state;		/* SwfdecLoaderState the loader is currently in */
-  guint			processed_state;/* SwfdecLoaderState the target knows about */
-  gboolean		queued;		/* TRUE if we have queued an action already */
   SwfdecURL *		url;		/* the URL for this loader in UTF-8 - must be set on creation */
   glong			size;		/* number of bytes in stream or -1 if unknown */
-  char *		error;		/* error message if in error state or NULL */
-  gpointer		target;		/* SwfdecLoaderTarget that gets notified about loading progress */
-  gpointer		player;		/* SwfdecPlayer belonging to target or %NULL */
-  SwfdecBufferQueue *	queue;		/* SwfdecBufferQueue managing the input buffers */
   SwfdecLoaderDataType	data_type;	/* type this stream is in (identified by swfdec) */
 };
 
 struct _SwfdecLoaderClass
 {
-  GObjectClass		object_class;
+  SwfdecStreamClass	stream_class;
 
   /* initialize the loader. The URL will be set already. */
   void			(* load)	(SwfdecLoader *			loader, 
@@ -80,19 +74,12 @@ struct _SwfdecLoaderClass
 					 SwfdecLoaderRequest		request,
 					 const char *			data,
 					 gsize				data_len);
-  /* if open, close the loader. NB: you may not call push() or eof() after the loader has been closed */
-  void			(* close)	(SwfdecLoader *			loader);
 };
 
 GType		swfdec_loader_get_type		(void);
 
-void		swfdec_loader_open		(SwfdecLoader *		loader,
+void		swfdec_loader_set_url		(SwfdecLoader *		loader,
 						 const char *		url);
-void		swfdec_loader_push		(SwfdecLoader *		loader,
-						 SwfdecBuffer *		buffer);
-void		swfdec_loader_eof		(SwfdecLoader *		loader);
-void		swfdec_loader_error		(SwfdecLoader *		loader,
-						 const char *		error);
 const SwfdecURL *
 		swfdec_loader_get_url		(SwfdecLoader *		loader);
 void		swfdec_loader_set_size		(SwfdecLoader *		loader,
diff --git a/libswfdec/swfdec_loader_internal.h b/libswfdec/swfdec_loader_internal.h
index 0a835d4..2a3439f 100644
--- a/libswfdec/swfdec_loader_internal.h
+++ b/libswfdec/swfdec_loader_internal.h
@@ -21,21 +21,12 @@
 #define _SWFDEC_LOADER_INTERNAL_H_
 
 #include "swfdec_loader.h"
-#include "swfdec_loadertarget.h"
 #include "swfdec_stream_target.h"
 
 G_BEGIN_DECLS
 
-typedef enum {
-  SWFDEC_LOADER_STATE_NEW = 0,		/* loader is new and has not been opened yet */
-  SWFDEC_LOADER_STATE_OPEN,		/* loader is opened and has got the HTTP headers */
-  SWFDEC_LOADER_STATE_READING,		/* loader has read some bytes of data and is still reading */
-  SWFDEC_LOADER_STATE_EOF,		/* swfdec_loader_eof() has been called */
-  SWFDEC_LOADER_STATE_CLOSED,		/* loader has been closed by Swfdec */
-  SWFDEC_LOADER_STATE_ERROR		/* loader is in error state */
-} SwfdecLoaderState;
-
 /* swfdec_stream.c */
+SwfdecBufferQueue *	swfdec_stream_get_queue		(SwfdecStream *		stream);
 const char *		swfdec_stream_describe		(SwfdecStream *		stream);
 void			swfdec_stream_close		(SwfdecStream *		stream);
 void			swfdec_stream_set_target	(SwfdecStream *		stream,
@@ -47,17 +38,11 @@ SwfdecLoader *		swfdec_loader_load		(SwfdecLoader *		loader,
 							 SwfdecLoaderRequest	request,
 							 const char *		data,
 							 gsize			data_len);
-void			swfdec_loader_close		(SwfdecLoader *		loader);
-void			swfdec_loader_set_target	(SwfdecLoader *		loader,
-							 SwfdecLoaderTarget *	target);
 void			swfdec_loader_set_data_type	(SwfdecLoader *		loader,
 							 SwfdecLoaderDataType	type);
 char *			swfdec_loader_get_text		(SwfdecLoader *		loader,
 							 guint			version);
 
-void			swfdec_string_append_urlencoded	(GString *		str,
-							 const char *		name,
-							 const char *		value);
 
 G_END_DECLS
 #endif
diff --git a/libswfdec/swfdec_loadertarget.c b/libswfdec/swfdec_loadertarget.c
deleted file mode 100644
index 39bc745..0000000
--- a/libswfdec/swfdec_loadertarget.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "swfdec_loadertarget.h"
-#include "swfdec_debug.h"
-#include "swfdec_loader_internal.h"
-#include "swfdec_player_internal.h"
-#include "swfdec_swf_decoder.h" /* HACK */
-
-static void
-swfdec_loader_target_base_init (gpointer g_class)
-{
-  static gboolean initialized = FALSE;
-
-  if (G_UNLIKELY (!initialized)) {
-    initialized = TRUE;
-  }
-}
-
-GType
-swfdec_loader_target_get_type (void)
-{
-  static GType loader_target_type = 0;
-  
-  if (!loader_target_type) {
-    static const GTypeInfo loader_target_info = {
-      sizeof (SwfdecLoaderTargetInterface),
-      swfdec_loader_target_base_init,
-      NULL,
-      NULL,
-      NULL,
-      NULL,
-      0,
-      0,
-      NULL,
-    };
-    
-    loader_target_type = g_type_register_static (G_TYPE_INTERFACE,
-        "SwfdecLoaderTarget", &loader_target_info, 0);
-    g_type_interface_add_prerequisite (loader_target_type, G_TYPE_OBJECT);
-  }
-  
-  return loader_target_type;
-}
-
-SwfdecPlayer *
-swfdec_loader_target_get_player (SwfdecLoaderTarget *target)
-{
-  SwfdecLoaderTargetInterface *iface;
-  
-  g_return_val_if_fail (SWFDEC_IS_LOADER_TARGET (target), NULL);
-
-  iface = SWFDEC_LOADER_TARGET_GET_INTERFACE (target);
-  g_assert (iface->get_player != NULL);
-  return iface->get_player (target);
-}
-
-void
-swfdec_loader_target_open (SwfdecLoaderTarget *target, SwfdecLoader *loader)
-{
-  SwfdecLoaderTargetInterface *iface;
-  
-  g_return_if_fail (SWFDEC_IS_LOADER_TARGET (target));
-  g_return_if_fail (SWFDEC_IS_LOADER (loader));
-
-  SWFDEC_LOG ("opening %p (state %u)", loader, loader->state);
-
-  iface = SWFDEC_LOADER_TARGET_GET_INTERFACE (target);
-  if (iface->open)
-    iface->open (target, loader);
-}
-
-void
-swfdec_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *loader)
-{
-  SwfdecLoaderTargetInterface *iface;
-  
-  g_return_if_fail (SWFDEC_IS_LOADER_TARGET (target));
-  g_return_if_fail (SWFDEC_IS_LOADER (loader));
-
-  SWFDEC_LOG ("parsing %p (state %u)", loader, loader->state);
-
-  iface = SWFDEC_LOADER_TARGET_GET_INTERFACE (target);
-  if (iface->parse)
-    iface->parse (target, loader);
-}
-
-void
-swfdec_loader_target_eof (SwfdecLoaderTarget *target, SwfdecLoader *loader)
-{
-  SwfdecLoaderTargetInterface *iface;
-  
-  g_return_if_fail (SWFDEC_IS_LOADER_TARGET (target));
-  g_return_if_fail (SWFDEC_IS_LOADER (loader));
-
-  SWFDEC_LOG ("eof on %p (state %u)", loader, loader->state);
-
-  iface = SWFDEC_LOADER_TARGET_GET_INTERFACE (target);
-  if (iface->eof)
-    iface->eof (target, loader);
-}
-
-void
-swfdec_loader_target_error (SwfdecLoaderTarget *target, SwfdecLoader *loader)
-{
-  SwfdecLoaderTargetInterface *iface;
-  
-  g_return_if_fail (SWFDEC_IS_LOADER_TARGET (target));
-  g_return_if_fail (SWFDEC_IS_LOADER (loader));
-
-  SWFDEC_LOG ("error on %p (state %u)", loader, loader->state);
-
-  iface = SWFDEC_LOADER_TARGET_GET_INTERFACE (target);
-  if (iface->error)
-    iface->error (target, loader);
-}
-
diff --git a/libswfdec/swfdec_loadertarget.h b/libswfdec/swfdec_loadertarget.h
deleted file mode 100644
index 1e9c523..0000000
--- a/libswfdec/swfdec_loadertarget.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifndef __SWFDEC_LOADER_TARGET_H__
-#define __SWFDEC_LOADER_TARGET_H__
-
-#include <libswfdec/swfdec.h>
-#include <libswfdec/swfdec_decoder.h>
-
-G_BEGIN_DECLS
-
-#define SWFDEC_TYPE_LOADER_TARGET                (swfdec_loader_target_get_type ())
-#define SWFDEC_LOADER_TARGET(obj)                (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_LOADER_TARGET, SwfdecLoaderTarget))
-#define SWFDEC_IS_LOADER_TARGET(obj)             (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_LOADER_TARGET))
-#define SWFDEC_LOADER_TARGET_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), SWFDEC_TYPE_LOADER_TARGET, SwfdecLoaderTargetInterface))
-
-typedef struct _SwfdecLoaderTarget SwfdecLoaderTarget; /* dummy object */
-typedef struct _SwfdecLoaderTargetInterface SwfdecLoaderTargetInterface;
-
-struct _SwfdecLoaderTargetInterface {
-  GTypeInterface	parent;
-
-  /* mandatory vfunc */
-  SwfdecPlayer *	(* get_player)      	(SwfdecLoaderTarget *	target);
-  /* optional vfuncs */
-  void			(* open)		(SwfdecLoaderTarget *   target,
-						 SwfdecLoader *		loader);
-  void			(* parse)		(SwfdecLoaderTarget *   target,
-						 SwfdecLoader *		loader);
-  void			(* eof)			(SwfdecLoaderTarget *   target,
-						 SwfdecLoader *		loader);
-  void			(* error)		(SwfdecLoaderTarget *   target,
-						 SwfdecLoader *		loader);
-};
-
-GType		swfdec_loader_target_get_type		(void) G_GNUC_CONST;
-
-SwfdecPlayer *	swfdec_loader_target_get_player		(SwfdecLoaderTarget *	target);
-void		swfdec_loader_target_open		(SwfdecLoaderTarget *	target,
-							 SwfdecLoader *		loader);
-void		swfdec_loader_target_parse		(SwfdecLoaderTarget *	target,
-							 SwfdecLoader *		loader);
-void		swfdec_loader_target_eof		(SwfdecLoaderTarget *	target,
-							 SwfdecLoader *		loader);
-void		swfdec_loader_target_error		(SwfdecLoaderTarget *	target,
-							 SwfdecLoader *		loader);
-
-G_END_DECLS
-
-#endif /* __SWFDEC_LOADER_TARGET_H__ */
diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c
index 36e0d9c..22de7fb 100644
--- a/libswfdec/swfdec_net_stream.c
+++ b/libswfdec/swfdec_net_stream.c
@@ -29,7 +29,7 @@
 #include "swfdec_audio_flv.h"
 #include "swfdec_debug.h"
 #include "swfdec_loader_internal.h"
-#include "swfdec_loadertarget.h"
+#include "swfdec_stream_target.h"
 #include "swfdec_resource_request.h"
 
 /* NB: code and level must be rooted gc-strings */
@@ -216,27 +216,27 @@ swfdec_net_stream_update_playing (SwfdecNetStream *stream)
   }
 }
 
-/*** SWFDEC_LOADER_TARGET interface ***/
+/*** SWFDEC_STREAM_TARGET interface ***/
 
 static SwfdecPlayer *
-swfdec_net_stream_loader_target_get_player (SwfdecLoaderTarget *target)
+swfdec_net_stream_stream_target_get_player (SwfdecStreamTarget *target)
 {
   return SWFDEC_PLAYER (SWFDEC_AS_OBJECT (target)->context);
 }
 
 static void
-swfdec_net_stream_loader_target_error (SwfdecLoaderTarget *target, 
-    SwfdecLoader *loader)
+swfdec_net_stream_stream_target_error (SwfdecStreamTarget *target, 
+    SwfdecStream *stream)
 {
-  SwfdecNetStream *stream = SWFDEC_NET_STREAM (target);
+  SwfdecNetStream *ns = SWFDEC_NET_STREAM (target);
 
-  if (stream->flvdecoder == NULL)
-    swfdec_net_stream_onstatus (stream, SWFDEC_AS_STR_NetStream_Play_StreamNotFound,
+  if (ns->flvdecoder == NULL)
+    swfdec_net_stream_onstatus (ns, SWFDEC_AS_STR_NetStream_Play_StreamNotFound,
 	SWFDEC_AS_STR_error);
 }
 
 static void
-swfdec_net_stream_loader_target_recheck (SwfdecNetStream *stream)
+swfdec_net_stream_stream_target_recheck (SwfdecNetStream *stream)
 {
   if (stream->buffering) {
     guint first, last;
@@ -256,65 +256,63 @@ swfdec_net_stream_loader_target_recheck (SwfdecNetStream *stream)
 }
 
 static void
-swfdec_net_stream_loader_target_parse (SwfdecLoaderTarget *target, 
-    SwfdecLoader *loader)
+swfdec_net_stream_stream_target_parse (SwfdecStreamTarget *target, 
+    SwfdecStream *stream)
 {
-  SwfdecNetStream *stream = SWFDEC_NET_STREAM (target);
+  SwfdecNetStream *ns = SWFDEC_NET_STREAM (target);
+  SwfdecBufferQueue *queue;
   SwfdecStatus status;
   
-  if (loader->state != SWFDEC_LOADER_STATE_EOF && swfdec_buffer_queue_get_depth (loader->queue) == 0) {
-    SWFDEC_INFO ("nothing to do");
-    return;
-  }
-  if (stream->flvdecoder == NULL) {
+  if (ns->flvdecoder == NULL) {
     /* FIXME: add mp3 support */
-    stream->flvdecoder = g_object_new (SWFDEC_TYPE_FLV_DECODER, NULL);
-    SWFDEC_DECODER (stream->flvdecoder)->player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (stream)->context);
-    swfdec_net_stream_onstatus (stream, SWFDEC_AS_STR_NetStream_Play_Start,
+    ns->flvdecoder = g_object_new (SWFDEC_TYPE_FLV_DECODER, NULL);
+    SWFDEC_DECODER (ns->flvdecoder)->player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (stream)->context);
+    swfdec_net_stream_onstatus (ns, SWFDEC_AS_STR_NetStream_Play_Start,
 	SWFDEC_AS_STR_status);
-    swfdec_loader_set_data_type (loader, SWFDEC_LOADER_DATA_FLV);
+    swfdec_loader_set_data_type (SWFDEC_LOADER (stream), SWFDEC_LOADER_DATA_FLV);
   }
 
   status = SWFDEC_STATUS_OK;
+  queue = swfdec_stream_get_queue (stream);
   do {
-    SwfdecBuffer *buffer = swfdec_buffer_queue_pull_buffer (loader->queue);
+    SwfdecBuffer *buffer = swfdec_buffer_queue_pull_buffer (queue);
     if (buffer == NULL)
       break;
     status &= ~SWFDEC_STATUS_NEEDBITS;
-    status |= swfdec_decoder_parse (SWFDEC_DECODER (stream->flvdecoder), buffer);
+    status |= swfdec_decoder_parse (SWFDEC_DECODER (ns->flvdecoder), buffer);
   } while ((status & (SWFDEC_STATUS_ERROR | SWFDEC_STATUS_EOF)) == 0);
 
   if (status & SWFDEC_STATUS_IMAGE)
-    swfdec_net_stream_loader_target_recheck (stream);
+    swfdec_net_stream_stream_target_recheck (ns);
 }
 
 static void
-swfdec_net_stream_loader_target_eof (SwfdecLoaderTarget *target, 
-    SwfdecLoader *loader)
+swfdec_net_stream_stream_target_close (SwfdecStreamTarget *target, 
+    SwfdecStream *stream)
 {
-  SwfdecNetStream *stream = SWFDEC_NET_STREAM (target);
+  SwfdecNetStream *ns = SWFDEC_NET_STREAM (target);
   guint first, last;
 
-  swfdec_decoder_eof (SWFDEC_DECODER (stream->flvdecoder));
-  swfdec_net_stream_onstatus (stream, SWFDEC_AS_STR_NetStream_Buffer_Flush,
+  swfdec_decoder_eof (SWFDEC_DECODER (ns->flvdecoder));
+  swfdec_net_stream_onstatus (ns, SWFDEC_AS_STR_NetStream_Buffer_Flush,
       SWFDEC_AS_STR_status);
-  swfdec_net_stream_video_goto (stream, stream->current_time);
-  stream->buffering = FALSE;
-  if (swfdec_flv_decoder_get_video_info (stream->flvdecoder, &first, &last) &&
-      stream->current_time + stream->buffer_time <= last) {
-    swfdec_net_stream_onstatus (stream, SWFDEC_AS_STR_NetStream_Buffer_Full,
+  swfdec_net_stream_video_goto (ns, ns->current_time);
+  ns->buffering = FALSE;
+  if (swfdec_flv_decoder_get_video_info (ns->flvdecoder, &first, &last) &&
+      ns->current_time + ns->buffer_time <= last) {
+    swfdec_net_stream_onstatus (ns, SWFDEC_AS_STR_NetStream_Buffer_Full,
 	SWFDEC_AS_STR_status);
   }
-  swfdec_net_stream_loader_target_recheck (stream);
+  swfdec_net_stream_stream_target_recheck (ns);
 }
 
 static void
-swfdec_net_stream_loader_target_init (SwfdecLoaderTargetInterface *iface)
+swfdec_net_stream_stream_target_init (SwfdecStreamTargetInterface *iface)
 {
-  iface->get_player = swfdec_net_stream_loader_target_get_player;
-  iface->parse = swfdec_net_stream_loader_target_parse;
-  iface->eof = swfdec_net_stream_loader_target_eof;
-  iface->error = swfdec_net_stream_loader_target_error;
+  iface->get_player = swfdec_net_stream_stream_target_get_player;
+  iface->parse = swfdec_net_stream_stream_target_parse;
+  iface->close = swfdec_net_stream_stream_target_close;
+  iface->error = swfdec_net_stream_stream_target_error;
 }
 
 /*** SWFDEC VIDEO MOVIE INPUT ***/
@@ -348,7 +346,7 @@ swfdec_net_stream_input_get_image (SwfdecVideoMovieInput *input)
 /*** SWFDEC_NET_STREAM ***/
 
 G_DEFINE_TYPE_WITH_CODE (SwfdecNetStream, swfdec_net_stream, SWFDEC_TYPE_AS_OBJECT,
-    G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_net_stream_loader_target_init))
+    G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_net_stream_stream_target_init))
 
 static void
 swfdec_net_stream_dispose (GObject *object)
@@ -504,9 +502,10 @@ swfdec_net_stream_set_loader (SwfdecNetStream *stream, SwfdecLoader *loader)
   g_return_if_fail (loader == NULL || SWFDEC_IS_LOADER (loader));
 
   if (stream->loader) {
-    swfdec_loader_set_target (stream->loader, NULL);
-    swfdec_loader_close (stream->loader);
-    g_object_unref (stream->loader);
+    SwfdecStream *lstream = SWFDEC_STREAM (loader);
+    swfdec_stream_close (lstream);
+    swfdec_stream_set_target (lstream, NULL);
+    g_object_unref (lstream);
   }
   if (stream->flvdecoder) {
     g_object_unref (stream->flvdecoder);
@@ -516,7 +515,7 @@ swfdec_net_stream_set_loader (SwfdecNetStream *stream, SwfdecLoader *loader)
   stream->buffering = TRUE;
   if (loader) {
     g_object_ref (loader);
-    swfdec_loader_set_target (loader, SWFDEC_LOADER_TARGET (stream));
+    swfdec_stream_set_target (SWFDEC_STREAM (loader), SWFDEC_STREAM_TARGET (stream));
   }
   swfdec_net_stream_set_playing (stream, TRUE);
 }
diff --git a/libswfdec/swfdec_policy_loader.c b/libswfdec/swfdec_policy_loader.c
index 6d04c75..ae722b6 100644
--- a/libswfdec/swfdec_policy_loader.c
+++ b/libswfdec/swfdec_policy_loader.c
@@ -34,17 +34,17 @@
 #include "swfdec_xml.h"
 #include "swfdec_xml_node.h"
 
-/*** SWFDEC_LOADER_TARGET ***/
+/*** SWFDEC_STREAM_TARGET ***/
 
 static SwfdecPlayer *
-swfdec_policy_loader_target_get_player (SwfdecLoaderTarget *target)
+swfdec_policy_stream_target_get_player (SwfdecStreamTarget *target)
 {
   return SWFDEC_POLICY_LOADER (target)->sec->player;
 }
 
 static void
-swfdec_policy_loader_target_error (SwfdecLoaderTarget *target,
-    SwfdecLoader *loader)
+swfdec_policy_stream_target_error (SwfdecStreamTarget *target,
+    SwfdecStream *stream)
 {
   SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (target);
 
@@ -139,8 +139,8 @@ swfdec_policy_loader_check (SwfdecAsContext *context, const char *text,
 }
 
 static void
-swfdec_policy_loader_target_eof (SwfdecLoaderTarget *target,
-    SwfdecLoader *loader)
+swfdec_policy_stream_target_close (SwfdecStreamTarget *target,
+    SwfdecStream *stream)
 {
   SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (target);
   gboolean allow;
@@ -167,17 +167,17 @@ swfdec_policy_loader_target_eof (SwfdecLoaderTarget *target,
 }
 
 static void
-swfdec_policy_loader_loader_target_init (SwfdecLoaderTargetInterface *iface)
+swfdec_policy_loader_stream_target_init (SwfdecStreamTargetInterface *iface)
 {
-  iface->get_player = swfdec_policy_loader_target_get_player;
-  iface->eof = swfdec_policy_loader_target_eof;
-  iface->error = swfdec_policy_loader_target_error;
+  iface->get_player = swfdec_policy_stream_target_get_player;
+  iface->close = swfdec_policy_stream_target_close;
+  iface->error = swfdec_policy_stream_target_error;
 }
 
 /*** SWFDEC_POLICY_LOADER ***/
 
 G_DEFINE_TYPE_WITH_CODE (SwfdecPolicyLoader, swfdec_policy_loader, G_TYPE_OBJECT,
-    G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_policy_loader_loader_target_init))
+    G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_policy_loader_stream_target_init))
 
 static void
 swfdec_policy_loader_dispose (GObject *object)
@@ -185,7 +185,7 @@ swfdec_policy_loader_dispose (GObject *object)
   SwfdecPolicyLoader *policy_loader = SWFDEC_POLICY_LOADER (object);
 
   g_assert (policy_loader->loader);
-  swfdec_loader_set_target (policy_loader->loader, NULL);
+  swfdec_stream_set_target (SWFDEC_STREAM (policy_loader->loader), NULL);
   g_object_unref (policy_loader->loader);
   policy_loader->loader = NULL;
 
@@ -239,9 +239,9 @@ swfdec_policy_loader_new (SwfdecFlashSecurity *sec, const char *host,
   policy_loader->host = g_strdup (host);
   policy_loader->func = func;
 
-  swfdec_loader_set_target (policy_loader->loader,
-      SWFDEC_LOADER_TARGET (policy_loader));
-  swfdec_loader_set_data_type (policy_loader->loader, SWFDEC_LOADER_DATA_TEXT);
+  swfdec_stream_set_target (SWFDEC_STREAM (policy_loader->loader),
+      SWFDEC_STREAM_TARGET (policy_loader));
+  swfdec_loader_set_data_type (policy_loader->loader, SWFDEC_LOADER_DATA_XML);
 
   return policy_loader;
 }
diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c
index cac371a..6a8b3b4 100644
--- a/libswfdec/swfdec_resource.c
+++ b/libswfdec/swfdec_resource.c
@@ -35,21 +35,21 @@
 #include "swfdec_flash_security.h"
 #include "swfdec_image_decoder.h"
 #include "swfdec_loader_internal.h"
-#include "swfdec_loadertarget.h"
 #include "swfdec_movie_clip_loader.h"
 #include "swfdec_player_internal.h"
 #include "swfdec_resource_request.h"
 #include "swfdec_script.h"
 #include "swfdec_sprite.h"
+#include "swfdec_stream_target.h"
 #include "swfdec_swf_decoder.h"
 #include "swfdec_utils.h"
 
 
-static void swfdec_resource_loader_target_init (SwfdecLoaderTargetInterface *iface);
+static void swfdec_resource_stream_target_init (SwfdecStreamTargetInterface *iface);
 G_DEFINE_TYPE_WITH_CODE (SwfdecResource, swfdec_resource, SWFDEC_TYPE_FLASH_SECURITY,
-    G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_LOADER_TARGET, swfdec_resource_loader_target_init))
+    G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_resource_stream_target_init))
 
-/*** SWFDEC_LOADER_TARGET interface ***/
+/*** SWFDEC_STREAM_TARGET interface ***/
 
 static gboolean 
 swfdec_resource_is_root (SwfdecResource *resource)
@@ -61,7 +61,7 @@ swfdec_resource_is_root (SwfdecResource *resource)
 }
 
 static SwfdecPlayer *
-swfdec_resource_loader_target_get_player (SwfdecLoaderTarget *target)
+swfdec_resource_stream_target_get_player (SwfdecStreamTarget *target)
 {
   return SWFDEC_FLASH_SECURITY (target)->player;
 }
@@ -81,7 +81,7 @@ swfdec_resource_check_rights (SwfdecResource *resource)
 }
 
 static void
-swfdec_resource_loader_target_image (SwfdecResource *instance)
+swfdec_resource_stream_target_image (SwfdecResource *instance)
 {
   SwfdecSpriteMovie *movie = instance->movie;
 
@@ -209,7 +209,7 @@ swfdec_resource_create_movie (SwfdecResource *resource)
     if (level < 0) {
       SWFDEC_WARNING ("%s does not reference a movie, not loading %s", resource->target,
 	  swfdec_url_get_url (swfdec_loader_get_url (resource->loader)));
-      swfdec_loader_close (resource->loader);
+      swfdec_stream_close (SWFDEC_STREAM (resource->loader));
       swfdec_player_unroot_object (player, G_OBJECT (resource));
       return FALSE;
     }
@@ -225,8 +225,9 @@ swfdec_resource_create_movie (SwfdecResource *resource)
 }
 
 static void
-swfdec_resource_loader_target_open (SwfdecLoaderTarget *target, SwfdecLoader *loader)
+swfdec_resource_stream_target_open (SwfdecStreamTarget *target, SwfdecStream *stream)
 {
+  SwfdecLoader *loader = SWFDEC_LOADER (stream);
   SwfdecResource *instance = SWFDEC_RESOURCE (target);
   const char *query;
 
@@ -246,18 +247,21 @@ swfdec_resource_loader_target_open (SwfdecLoaderTarget *target, SwfdecLoader *lo
 }
 
 static void
-swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *loader)
+swfdec_resource_stream_target_parse (SwfdecStreamTarget *target, SwfdecStream *stream)
 {
+  SwfdecLoader *loader = SWFDEC_LOADER (stream);
   SwfdecResource *resource = SWFDEC_RESOURCE (target);
+  SwfdecBufferQueue *queue;
   SwfdecBuffer *buffer;
   SwfdecDecoder *dec = resource->decoder;
   SwfdecStatus status;
   guint parsed;
 
-  if (dec == NULL && swfdec_buffer_queue_get_offset (loader->queue) == 0) {
-    if (swfdec_buffer_queue_get_depth (loader->queue) < SWFDEC_DECODER_DETECT_LENGTH)
+  queue = swfdec_stream_get_queue (stream);
+  if (dec == NULL && swfdec_buffer_queue_get_offset (queue) == 0) {
+    if (swfdec_buffer_queue_get_depth (queue) < SWFDEC_DECODER_DETECT_LENGTH)
       return;
-    buffer = swfdec_buffer_queue_peek (loader->queue, 4);
+    buffer = swfdec_buffer_queue_peek (queue, 4);
     dec =
       swfdec_decoder_new (SWFDEC_FLASH_SECURITY (resource)->player, buffer);
     swfdec_buffer_unref (buffer);
@@ -271,19 +275,19 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l
 	dec->bytes_total = total;
     }
   }
-  while (swfdec_buffer_queue_get_depth (loader->queue)) {
+  while (swfdec_buffer_queue_get_depth (queue)) {
     parsed = 0;
     status = 0;
     do {
-      buffer = swfdec_buffer_queue_peek_buffer (loader->queue);
+      buffer = swfdec_buffer_queue_peek_buffer (queue);
       if (buffer == NULL)
 	break;
       if (parsed + buffer->length <= 65536) {
 	swfdec_buffer_unref (buffer);
-	buffer = swfdec_buffer_queue_pull_buffer (loader->queue);
+	buffer = swfdec_buffer_queue_pull_buffer (queue);
       } else {
 	swfdec_buffer_unref (buffer);
-	buffer = swfdec_buffer_queue_pull (loader->queue, 65536 - parsed);
+	buffer = swfdec_buffer_queue_pull (queue, 65536 - parsed);
       }
       parsed += buffer->length;
       if (dec) {
@@ -294,7 +298,7 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l
     } while (parsed < 65536 && (status & (SWFDEC_STATUS_ERROR | SWFDEC_STATUS_EOF)) == 0);
     if (status & SWFDEC_STATUS_ERROR) {
       SWFDEC_ERROR ("parsing error");
-      swfdec_loader_set_target (loader, NULL);
+      swfdec_stream_set_target (SWFDEC_STREAM (loader), NULL);
       return;
     }
     if ((status & SWFDEC_STATUS_INIT)) {
@@ -306,7 +310,7 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l
       }
     }
     if (status & SWFDEC_STATUS_IMAGE)
-      swfdec_resource_loader_target_image (resource);
+      swfdec_resource_stream_target_image (resource);
     swfdec_resource_emit_signal (resource, SWFDEC_AS_STR_onLoadProgress, TRUE, NULL, 0);
     if (status & SWFDEC_STATUS_EOF)
       return;
@@ -314,7 +318,7 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l
 }
 
 static void
-swfdec_resource_loader_target_eof (SwfdecLoaderTarget *target, SwfdecLoader *loader)
+swfdec_resource_stream_target_close (SwfdecStreamTarget *target, SwfdecStream *stream)
 {
   SwfdecResource *resource = SWFDEC_RESOURCE (target);
   SwfdecAsValue val;
@@ -324,7 +328,7 @@ swfdec_resource_loader_target_eof (SwfdecLoaderTarget *target, SwfdecLoader *loa
     SwfdecDecoder *dec = resource->decoder;
     swfdec_decoder_eof (dec);
     if (dec->data_type != SWFDEC_LOADER_DATA_UNKNOWN)
-      swfdec_loader_set_data_type (loader, dec->data_type);
+      swfdec_loader_set_data_type (SWFDEC_LOADER (stream), dec->data_type);
   }
   SWFDEC_AS_VALUE_SET_INT (&val, 0); /* FIXME */
   swfdec_resource_emit_signal (resource, SWFDEC_AS_STR_onLoadComplete, FALSE, &val, 1);
@@ -332,7 +336,7 @@ swfdec_resource_loader_target_eof (SwfdecLoaderTarget *target, SwfdecLoader *loa
 }
 
 static void
-swfdec_resource_loader_target_error (SwfdecLoaderTarget *target, SwfdecLoader *loader)
+swfdec_resource_stream_target_error (SwfdecStreamTarget *target, SwfdecStream *stream)
 {
   SwfdecResource *resource = SWFDEC_RESOURCE (target);
   const char *message;
@@ -356,13 +360,13 @@ swfdec_resource_loader_target_error (SwfdecLoaderTarget *target, SwfdecLoader *l
 }
 
 static void
-swfdec_resource_loader_target_init (SwfdecLoaderTargetInterface *iface)
+swfdec_resource_stream_target_init (SwfdecStreamTargetInterface *iface)
 {
-  iface->get_player = swfdec_resource_loader_target_get_player;
-  iface->open = swfdec_resource_loader_target_open;
-  iface->parse = swfdec_resource_loader_target_parse;
-  iface->error = swfdec_resource_loader_target_error;
-  iface->eof = swfdec_resource_loader_target_eof;
+  iface->get_player = swfdec_resource_stream_target_get_player;
+  iface->open = swfdec_resource_stream_target_open;
+  iface->parse = swfdec_resource_stream_target_parse;
+  iface->error = swfdec_resource_stream_target_error;
+  iface->close = swfdec_resource_stream_target_close;
 }
 
 static void
@@ -371,7 +375,7 @@ swfdec_resource_dispose (GObject *object)
   SwfdecResource *resource = SWFDEC_RESOURCE (object);
 
   if (resource->loader) {
-    swfdec_loader_set_target (resource->loader, NULL);
+    swfdec_stream_set_target (SWFDEC_STREAM (resource->loader), NULL);
     g_object_unref (resource->loader);
     resource->loader = NULL;
   }
@@ -416,7 +420,7 @@ swfdec_resource_set_loader (SwfdecResource *resource, SwfdecLoader *loader)
   g_return_if_fail (resource->loader == NULL);
 
   resource->loader = g_object_ref (loader);
-  swfdec_loader_set_target (resource->loader, SWFDEC_LOADER_TARGET (resource));
+  swfdec_stream_set_target (SWFDEC_STREAM (resource->loader), SWFDEC_STREAM_TARGET (resource));
   swfdec_flash_security_set_url (SWFDEC_FLASH_SECURITY (resource),
       swfdec_loader_get_url (loader));
   resource->state = SWFDEC_RESOURCE_REQUESTED;
diff --git a/libswfdec/swfdec_stream.c b/libswfdec/swfdec_stream.c
index f5e446d..545d0c9 100644
--- a/libswfdec/swfdec_stream.c
+++ b/libswfdec/swfdec_stream.c
@@ -161,7 +161,7 @@ swfdec_stream_class_init (SwfdecStreamClass *klass)
       g_param_spec_string ("error", "error", "NULL when no error or string describing error",
 	  NULL, G_PARAM_READABLE));
   g_object_class_install_property (object_class, PROP_OPEN,
-      g_param_spec_boolean ("eof", "eof", "TRUE while data is flowing",
+      g_param_spec_boolean ("open", "open", "TRUE while data is flowing",
 	  FALSE, G_PARAM_READABLE));
   g_object_class_install_property (object_class, PROP_EOF,
       g_param_spec_boolean ("eof", "eof", "TRUE when all data has been transmitted",
@@ -180,6 +180,14 @@ swfdec_stream_init (SwfdecStream *stream)
 
 /*** INTERNAL API ***/
 
+SwfdecBufferQueue *
+swfdec_stream_get_queue (SwfdecStream *stream)
+{
+  g_return_val_if_fail (SWFDEC_IS_STREAM (stream), NULL);
+
+  return stream->priv->queue;
+}
+
 static void
 swfdec_stream_process (gpointer streamp, gpointer unused)
 {
@@ -192,7 +200,7 @@ swfdec_stream_process (gpointer streamp, gpointer unused)
   if (priv->state == priv->processed_state &&
       priv->state != SWFDEC_STREAM_STATE_OPEN)
     return;
-  g_assert (priv->state != SWFDEC_STREAM_STATE_CLOSED);
+  g_assert (priv->processed_state != SWFDEC_STREAM_STATE_CLOSED);
   g_object_ref (stream);
   if (priv->state == SWFDEC_STREAM_STATE_ERROR) {
     swfdec_stream_target_error (priv->target, stream);
@@ -338,7 +346,7 @@ swfdec_stream_error (SwfdecStream *stream, const char *error)
  * swfdec_stream_push() can be called.
  **/
 void
-swfdec_stream_open (SwfdecStream *stream, const char *url)
+swfdec_stream_open (SwfdecStream *stream)
 {
   g_return_if_fail (SWFDEC_IS_STREAM (stream));
   g_return_if_fail (stream->priv->state == SWFDEC_STREAM_STATE_CONNECTING);
diff --git a/libswfdec/swfdec_stream.h b/libswfdec/swfdec_stream.h
index fb45b53..f971886 100644
--- a/libswfdec/swfdec_stream.h
+++ b/libswfdec/swfdec_stream.h
@@ -22,7 +22,6 @@
 
 #include <glib-object.h>
 #include <libswfdec/swfdec_buffer.h>
-#include <libswfdec/swfdec_player.h>
 
 G_BEGIN_DECLS
 
@@ -57,8 +56,7 @@ struct _SwfdecStreamClass
 
 GType		swfdec_stream_get_type		(void);
 
-void		swfdec_stream_open		(SwfdecStream *		stream,
-						 const char *		url);
+void		swfdec_stream_open		(SwfdecStream *		stream);
 void		swfdec_stream_push		(SwfdecStream *		stream,
 						 SwfdecBuffer *		buffer);
 void		swfdec_stream_eof		(SwfdecStream *		stream);
diff --git a/tools/crashfinder.c b/tools/crashfinder.c
index 3c4a4a7..addf1da 100644
--- a/tools/crashfinder.c
+++ b/tools/crashfinder.c
@@ -93,6 +93,7 @@ main (int argc, char **argv)
   for (i = 0; i < g_strv_length (filenames); i++)
   {
     glong played, advance, elapsed;
+    char *error;
 
     g_print ("Running: %s\n", filenames[i]);
 
@@ -103,9 +104,11 @@ main (int argc, char **argv)
     loader = swfdec_file_loader_new (filenames[i]);
     player = swfdec_player_new (NULL);
 
-    if (loader->error) {
-      g_printerr ("Error loading %s: %s\n", filenames[i], loader->error);
+    g_object_get (loader, "error", &error, NULL);
+    if (error) {
+      g_printerr ("Error loading %s: %s\n", filenames[i], error);
       g_object_unref (loader);
+      g_free (error);
       continue;
     }
 
diff --git a/tools/dump.c b/tools/dump.c
index efea56d..c8c1e1f 100644
--- a/tools/dump.c
+++ b/tools/dump.c
@@ -405,11 +405,6 @@ main (int argc, char *argv[])
   }
 
   player = swfdec_player_new_from_file (argv[1]);
-  if (player->priv->resource->loader->error) {
-    g_printerr ("Couldn't open file \"%s\": %s\n", argv[1], player->priv->resource->loader->error);
-    g_object_unref (player);
-    return 1;
-  }
   /* FIXME: HACK! */
   swfdec_player_advance (player, 0);
   if (!swfdec_player_is_initialized (player)) {
commit d56d2f0996f5f916b1a4b228e78377f4aa6436ac
Author: Benjamin Otte <otte at gnome.org>
Date:   Sat Jan 5 11:32:59 2008 +0100

    make SwfdecStream use a private field

diff --git a/libswfdec/swfdec_stream.c b/libswfdec/swfdec_stream.c
index c6bcc98..f5e446d 100644
--- a/libswfdec/swfdec_stream.c
+++ b/libswfdec/swfdec_stream.c
@@ -74,6 +74,17 @@ typedef enum {
   SWFDEC_STREAM_STATE_ERROR		/* loader is in error state */
 } SwfdecStreamState;
 
+struct _SwfdecStreamPrivate
+{
+  SwfdecPlayer *	player;		/* player to queue target notificaions in */
+  SwfdecStreamTarget *	target;		/* SwfdecStreamTarget that gets notified about loading progress */
+  SwfdecStreamState	state;		/* SwfdecStreamState the stream is currently in */
+  SwfdecStreamState	processed_state;/* SwfdecStreamState the target knows about */
+  gboolean		queued;		/* TRUE if we have queued an action already */
+  char *		error;		/* error message if in error state or NULL */
+  SwfdecBufferQueue *	queue;		/* SwfdecBufferQueue managing the input buffers */
+};
+
 enum {
   PROP_0,
   PROP_ERROR,
@@ -87,7 +98,7 @@ static void
 swfdec_stream_get_property (GObject *object, guint param_id, GValue *value, 
     GParamSpec * pspec)
 {
-  SwfdecStream *stream = SWFDEC_STREAM (object);
+  SwfdecStreamPrivate *stream = SWFDEC_STREAM (object)->priv;
   
   switch (param_id) {
     case PROP_ERROR:
@@ -121,7 +132,7 @@ swfdec_stream_set_property (GObject *object, guint param_id, const GValue *value
 static void
 swfdec_stream_dispose (GObject *object)
 {
-  SwfdecStream *stream = SWFDEC_STREAM (object);
+  SwfdecStreamPrivate *stream = SWFDEC_STREAM (object)->priv;
 
   /* targets are supposed to keep a reference around */
   g_assert (stream->target == NULL);
@@ -140,6 +151,8 @@ swfdec_stream_class_init (SwfdecStreamClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
+  g_type_class_add_private (klass, sizeof (SwfdecStreamPrivate));
+
   object_class->dispose = swfdec_stream_dispose;
   object_class->get_property = swfdec_stream_get_property;
   object_class->set_property = swfdec_stream_set_property;
@@ -158,7 +171,11 @@ swfdec_stream_class_init (SwfdecStreamClass *klass)
 static void
 swfdec_stream_init (SwfdecStream *stream)
 {
-  stream->queue = swfdec_buffer_queue_new ();
+  SwfdecStreamPrivate *priv;
+
+  stream->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE (stream, SWFDEC_TYPE_STREAM, SwfdecStreamPrivate);
+
+  priv->queue = swfdec_buffer_queue_new ();
 }
 
 /*** INTERNAL API ***/
@@ -167,29 +184,31 @@ static void
 swfdec_stream_process (gpointer streamp, gpointer unused)
 {
   SwfdecStream *stream = streamp;
+  SwfdecStreamPrivate *priv = stream->priv;
 
-  g_assert (stream->target != NULL);
+  g_assert (priv->target != NULL);
 
-  stream->queued = FALSE;
-  if (stream->state == stream->processed_state &&
-      stream->state != SWFDEC_STREAM_STATE_OPEN)
+  priv->queued = FALSE;
+  if (priv->state == priv->processed_state &&
+      priv->state != SWFDEC_STREAM_STATE_OPEN)
     return;
-  g_assert (stream->state != SWFDEC_STREAM_STATE_CLOSED);
+  g_assert (priv->state != SWFDEC_STREAM_STATE_CLOSED);
   g_object_ref (stream);
-  if (stream->state == SWFDEC_STREAM_STATE_ERROR) {
-    swfdec_stream_target_error (stream->target, stream);
+  if (priv->state == SWFDEC_STREAM_STATE_ERROR) {
+    swfdec_stream_target_error (priv->target, stream);
   } else {
-    while (stream->state != stream->processed_state) {
-      if (stream->processed_state == SWFDEC_STREAM_STATE_CONNECTING) {
-	stream->processed_state = SWFDEC_STREAM_STATE_OPEN;
-	swfdec_stream_target_open (stream->target, stream);
-      } else if (stream->processed_state == SWFDEC_STREAM_STATE_OPEN) {
-	stream->processed_state = SWFDEC_STREAM_STATE_CLOSED;
-	swfdec_stream_target_close (stream->target, stream);
+    while (priv->state != priv->processed_state) {
+      if (priv->processed_state == SWFDEC_STREAM_STATE_CONNECTING) {
+	priv->processed_state = SWFDEC_STREAM_STATE_OPEN;
+	swfdec_stream_target_open (priv->target, stream);
+      } else if (priv->processed_state == SWFDEC_STREAM_STATE_OPEN) {
+	swfdec_stream_target_parse (priv->target, stream);
+	priv->processed_state = SWFDEC_STREAM_STATE_CLOSED;
+	swfdec_stream_target_close (priv->target, stream);
       }
     }
-    if (stream->processed_state == SWFDEC_STREAM_STATE_OPEN) {
-      swfdec_stream_target_parse (stream->target, stream);
+    if (priv->processed_state == SWFDEC_STREAM_STATE_OPEN) {
+      swfdec_stream_target_parse (priv->target, stream);
     }
   }
   g_object_unref (stream);
@@ -198,12 +217,14 @@ swfdec_stream_process (gpointer streamp, gpointer unused)
 static void
 swfdec_stream_queue_processing (SwfdecStream *stream)
 {
-  if (stream->queued)
+  SwfdecStreamPrivate *priv = stream->priv;
+
+  if (priv->queued)
     return;
-  stream->queued = TRUE;
-  if (stream->target) {
-    g_assert (stream->player);
-    swfdec_player_add_external_action (stream->player, stream,
+  priv->queued = TRUE;
+  if (priv->target) {
+    g_assert (priv->player);
+    swfdec_player_add_external_action (priv->player, stream,
 	swfdec_stream_process, NULL);
   }
 }
@@ -211,42 +232,47 @@ swfdec_stream_queue_processing (SwfdecStream *stream)
 void
 swfdec_stream_close (SwfdecStream *stream)
 {
+  SwfdecStreamPrivate *priv;
   SwfdecStreamClass *klass;
 
   g_return_if_fail (SWFDEC_IS_STREAM (stream));
-  
-  if (stream->state == SWFDEC_STREAM_STATE_ERROR &&
-      stream->state == SWFDEC_STREAM_STATE_CLOSED)
+
+  priv = stream->priv;
+  if (priv->state == SWFDEC_STREAM_STATE_ERROR &&
+      priv->state == SWFDEC_STREAM_STATE_CLOSED)
     return;
 
   klass = SWFDEC_STREAM_GET_CLASS (stream);
 
   if (klass->close)
     klass->close (stream);
-  stream->state = SWFDEC_STREAM_STATE_CLOSED;
-  stream->processed_state = SWFDEC_STREAM_STATE_CLOSED;
+  priv->state = SWFDEC_STREAM_STATE_CLOSED;
+  priv->processed_state = SWFDEC_STREAM_STATE_CLOSED;
 }
 
 void
 swfdec_stream_set_target (SwfdecStream *stream, SwfdecStreamTarget *target)
 {
+  SwfdecStreamPrivate *priv;
+
   g_return_if_fail (SWFDEC_IS_STREAM (stream));
   if (target != NULL) {
-    g_return_if_fail (stream->processed_state == SWFDEC_STREAM_STATE_CONNECTING);
+    g_return_if_fail (stream->priv->processed_state == SWFDEC_STREAM_STATE_CONNECTING);
     g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
   }
 
-  if (stream->target) {
-    swfdec_player_remove_all_external_actions (stream->player, stream);
+  priv = stream->priv;
+  if (priv->target) {
+    swfdec_player_remove_all_external_actions (priv->player, stream);
   }
-  stream->queued = FALSE;
-  stream->target = target;
+  priv->queued = FALSE;
+  priv->target = target;
   if (target) {
-    stream->player = swfdec_stream_target_get_player (target);
-    if (stream->state != SWFDEC_STREAM_STATE_CONNECTING)
+    priv->player = swfdec_stream_target_get_player (target);
+    if (priv->state != SWFDEC_STREAM_STATE_CONNECTING)
       swfdec_stream_queue_processing (stream);
   } else {
-    stream->player = NULL;
+    priv->player = NULL;
   }
 }
 
@@ -286,17 +312,20 @@ swfdec_stream_describe (SwfdecStream *stream)
 void
 swfdec_stream_error (SwfdecStream *stream, const char *error)
 {
+  SwfdecStreamPrivate *priv;
+
   g_return_if_fail (SWFDEC_IS_STREAM (stream));
   g_return_if_fail (error != NULL);
 
-  if (stream->error) {
+  priv = stream->priv;
+  if (priv->error) {
     SWFDEC_ERROR ("another error in stream for %s: %s", swfdec_stream_describe (stream), error);
     return;
   }
 
   SWFDEC_ERROR ("error in stream for %s: %s", swfdec_stream_describe (stream), error);
-  stream->state = SWFDEC_STREAM_STATE_ERROR;
-  stream->error = g_strdup (error);
+  priv->state = SWFDEC_STREAM_STATE_ERROR;
+  priv->error = g_strdup (error);
   swfdec_stream_queue_processing (stream);
 }
 
@@ -312,9 +341,9 @@ void
 swfdec_stream_open (SwfdecStream *stream, const char *url)
 {
   g_return_if_fail (SWFDEC_IS_STREAM (stream));
-  g_return_if_fail (stream->state == SWFDEC_STREAM_STATE_CONNECTING);
+  g_return_if_fail (stream->priv->state == SWFDEC_STREAM_STATE_CONNECTING);
 
-  stream->state = SWFDEC_STREAM_STATE_OPEN;
+  stream->priv->state = SWFDEC_STREAM_STATE_OPEN;
   g_object_notify (G_OBJECT (stream), "open");
   swfdec_stream_queue_processing (stream);
 }
@@ -332,10 +361,10 @@ void
 swfdec_stream_push (SwfdecStream *stream, SwfdecBuffer *buffer)
 {
   g_return_if_fail (SWFDEC_IS_STREAM (stream));
-  g_return_if_fail (stream->state == SWFDEC_STREAM_STATE_OPEN);
+  g_return_if_fail (stream->priv->state == SWFDEC_STREAM_STATE_OPEN);
   g_return_if_fail (buffer != NULL);
 
-  swfdec_buffer_queue_push (stream->queue, buffer);
+  swfdec_buffer_queue_push (stream->priv->queue, buffer);
   /* FIXME */
   if (SWFDEC_IS_LOADER (stream))
     g_object_notify (G_OBJECT (stream), "loaded");
@@ -352,11 +381,11 @@ void
 swfdec_stream_eof (SwfdecStream *stream)
 {
   g_return_if_fail (SWFDEC_IS_STREAM (stream));
-  g_return_if_fail (stream->state == SWFDEC_STREAM_STATE_OPEN);
+  g_return_if_fail (stream->priv->state == SWFDEC_STREAM_STATE_OPEN);
 
+  stream->priv->state = SWFDEC_STREAM_STATE_CLOSED;
   g_object_notify (G_OBJECT (stream), "open");
   g_object_notify (G_OBJECT (stream), "eof");
-  stream->state = SWFDEC_STREAM_STATE_CLOSED;
   swfdec_stream_queue_processing (stream);
 }
 
diff --git a/libswfdec/swfdec_stream.h b/libswfdec/swfdec_stream.h
index 15587fc..fb45b53 100644
--- a/libswfdec/swfdec_stream.h
+++ b/libswfdec/swfdec_stream.h
@@ -28,6 +28,7 @@ G_BEGIN_DECLS
 
 typedef struct _SwfdecStream SwfdecStream;
 typedef struct _SwfdecStreamClass SwfdecStreamClass;
+typedef struct _SwfdecStreamPrivate SwfdecStreamPrivate;
 
 #define SWFDEC_TYPE_STREAM                    (swfdec_stream_get_type())
 #define SWFDEC_IS_STREAM(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_STREAM))
@@ -41,13 +42,7 @@ struct _SwfdecStream
   GObject		object;
 
   /*< private >*/
-  SwfdecPlayer *	player;		/* player to queue target notificaions in */
-  gpointer		target;		/* SwfdecStreamTarget that gets notified about loading progress */
-  guint			state;		/* SwfdecStreamState the stream is currently in */
-  guint			processed_state;/* SwfdecStreamState the target knows about */
-  gboolean		queued;		/* TRUE if we have queued an action already */
-  char *		error;		/* error message if in error state or NULL */
-  SwfdecBufferQueue *	queue;		/* SwfdecBufferQueue managing the input buffers */
+  SwfdecStreamPrivate *	priv;
 };
 
 struct _SwfdecStreamClass
diff --git a/libswfdec/swfdec_stream_target.c b/libswfdec/swfdec_stream_target.c
index 8593fcb..a5d7184 100644
--- a/libswfdec/swfdec_stream_target.c
+++ b/libswfdec/swfdec_stream_target.c
@@ -82,7 +82,7 @@ swfdec_stream_target_open (SwfdecStreamTarget *target, SwfdecStream *stream)
   g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
   g_return_if_fail (SWFDEC_IS_STREAM (stream));
 
-  SWFDEC_LOG ("opening %s (state %u)", swfdec_stream_describe (stream), stream->state);
+  SWFDEC_LOG ("opening %s", swfdec_stream_describe (stream));
 
   iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
   if (iface->open)
@@ -97,7 +97,7 @@ swfdec_stream_target_parse (SwfdecStreamTarget *target, SwfdecStream *stream)
   g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
   g_return_if_fail (SWFDEC_IS_STREAM (stream));
 
-  SWFDEC_LOG ("parsing %s (state %u)", swfdec_stream_describe (stream), stream->state);
+  SWFDEC_LOG ("parsing %s", swfdec_stream_describe (stream));
 
   iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
   if (iface->parse)
@@ -112,7 +112,7 @@ swfdec_stream_target_close (SwfdecStreamTarget *target, SwfdecStream *stream)
   g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
   g_return_if_fail (SWFDEC_IS_STREAM (stream));
 
-  SWFDEC_LOG ("close on %s (state %u)", swfdec_stream_describe (stream), stream->state);
+  SWFDEC_LOG ("close on %s", swfdec_stream_describe (stream));
 
   iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
   if (iface->close)
@@ -127,7 +127,7 @@ swfdec_stream_target_error (SwfdecStreamTarget *target, SwfdecStream *stream)
   g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
   g_return_if_fail (SWFDEC_IS_STREAM (stream));
 
-  SWFDEC_LOG ("error on %s (state %u)", swfdec_stream_describe (stream), stream->state);
+  SWFDEC_LOG ("error on %s", swfdec_stream_describe (stream));
 
   iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
   if (iface->error)
commit ca02fc6414eedfa5c1a851afddfd9cb9f20907ac
Author: Benjamin Otte <otte at gnome.org>
Date:   Sat Jan 5 11:17:54 2008 +0100

    add a new SwfdecStream class
    
    This is supposed to end up as the base class for sockets and loaders

diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index 4f2d438..a8e2cf6 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -127,11 +127,13 @@ libswfdec_source_files = \
 	swfdec_shared_object.c \
 	swfdec_sound.c \
 	swfdec_sound_object.c \
-	swfdec_stroke.c \
 	swfdec_sprite.c \
 	swfdec_sprite_movie.c \
 	swfdec_sprite_movie_as.c \
 	swfdec_stage_as.c \
+	swfdec_stream.c \
+	swfdec_stream_target.c \
+	swfdec_stroke.c \
 	swfdec_style_sheet.c \
 	swfdec_swf_decoder.c \
 	swfdec_system.c \
@@ -193,6 +195,7 @@ public_headers = \
 	swfdec_player_scripting.h \
 	swfdec_rectangle.h \
 	swfdec_script.h \
+	swfdec_stream.h \
 	swfdec_system.h \
 	swfdec_url.h
 
@@ -273,9 +276,10 @@ noinst_HEADERS = \
 	swfdec_sound_object.h \
 	swfdec_sprite.h \
 	swfdec_sprite_movie.h \
-	swfdec_style_sheet.h \
 	swfdec_swf_decoder.h \
+	swfdec_stream_target.h \
 	swfdec_stroke.h \
+	swfdec_style_sheet.h \
 	swfdec_tag.h \
 	swfdec_text.h \
 	swfdec_text_format.h \
diff --git a/libswfdec/swfdec.h b/libswfdec/swfdec.h
index 1a9a4ca..8cb955a 100644
--- a/libswfdec/swfdec.h
+++ b/libswfdec/swfdec.h
@@ -40,6 +40,7 @@
 #include <libswfdec/swfdec_player.h>
 #include <libswfdec/swfdec_player_scripting.h>
 #include <libswfdec/swfdec_rectangle.h>
+#include <libswfdec/swfdec_stream.h>
 #include <libswfdec/swfdec_system.h>
 #include <libswfdec/swfdec_url.h>
 
diff --git a/libswfdec/swfdec_loader_internal.h b/libswfdec/swfdec_loader_internal.h
index 49ab95d..0a835d4 100644
--- a/libswfdec/swfdec_loader_internal.h
+++ b/libswfdec/swfdec_loader_internal.h
@@ -22,6 +22,7 @@
 
 #include "swfdec_loader.h"
 #include "swfdec_loadertarget.h"
+#include "swfdec_stream_target.h"
 
 G_BEGIN_DECLS
 
@@ -34,6 +35,13 @@ typedef enum {
   SWFDEC_LOADER_STATE_ERROR		/* loader is in error state */
 } SwfdecLoaderState;
 
+/* swfdec_stream.c */
+const char *		swfdec_stream_describe		(SwfdecStream *		stream);
+void			swfdec_stream_close		(SwfdecStream *		stream);
+void			swfdec_stream_set_target	(SwfdecStream *		stream,
+							 SwfdecStreamTarget *	target);
+
+/* swfdec_loader.c */
 SwfdecLoader *		swfdec_loader_load		(SwfdecLoader *		loader,
 							 const SwfdecURL *    	url,
 							 SwfdecLoaderRequest	request,
diff --git a/libswfdec/swfdec_stream.c b/libswfdec/swfdec_stream.c
new file mode 100644
index 0000000..c6bcc98
--- /dev/null
+++ b/libswfdec/swfdec_stream.c
@@ -0,0 +1,362 @@
+/* Swfdec
+ * Copyright (C) 2006-2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include "swfdec_loader_internal.h"
+#include "swfdec_buffer.h"
+#include "swfdec_debug.h"
+#include "swfdec_stream_target.h"
+#include "swfdec_player_internal.h"
+
+/*** gtk-doc ***/
+
+/**
+ * SECTION:SwfdecStream
+ * @title: SwfdecStream
+ * @short_description: object used for input
+ *
+ * SwfdecStream is the base class used for communication inside Swfdec. If you
+ * are a UNIX developer, think of this class as the equivalent to a file 
+ * descriptor. #SwfdecLoader and #SwfdecSocket are the subclasses supposed to
+ * be used for files or network sockets, respectively.
+ *
+ * This class provides the functions necessary to implement subclasses of 
+ * streams. None of the functions described in this section should be used by
+ * anything but subclass implementations. Consider them "protected".
+ */
+
+/**
+ * SwfdecStream:
+ *
+ * This is the base object used for providing input. It is abstract, use a 
+ * subclass to provide your input. All members are considered private.
+ */
+
+/**
+ * SwfdecStreamClass:
+ * @describe: Provide a string describing your string. Default implementations
+ *	      of this function exist for both the #SwfdecLoader and 
+ *	      #SwfdecStream subclasses. They return the URL for the stream.
+ * @close: Called when Swfdec requests that the stream be closed. After this
+ *         function was called, Swfdec will consider the stream finished and
+ *         will not ever read data from it again.
+ *
+ * This is the base class used for providing input. You are supposed to create
+ * a subclass that fills in the function pointers mentioned above.
+ */
+
+/*** SwfdecStream ***/
+
+typedef enum {
+  SWFDEC_STREAM_STATE_CONNECTING = 0, 	/* stream is still in the process of establishing a connection */
+  SWFDEC_STREAM_STATE_OPEN,		/* stream is open and data flow is happening */
+  SWFDEC_STREAM_STATE_CLOSED,		/* loader has been closed */
+  SWFDEC_STREAM_STATE_ERROR		/* loader is in error state */
+} SwfdecStreamState;
+
+enum {
+  PROP_0,
+  PROP_ERROR,
+  PROP_OPEN,
+  PROP_EOF
+};
+
+G_DEFINE_ABSTRACT_TYPE (SwfdecStream, swfdec_stream, G_TYPE_OBJECT)
+
+static void
+swfdec_stream_get_property (GObject *object, guint param_id, GValue *value, 
+    GParamSpec * pspec)
+{
+  SwfdecStream *stream = SWFDEC_STREAM (object);
+  
+  switch (param_id) {
+    case PROP_ERROR:
+      g_value_set_string (value, stream->error);
+      break;
+    case PROP_OPEN:
+      g_value_set_boolean (value, stream->state == SWFDEC_STREAM_STATE_OPEN);
+      break;
+    case PROP_EOF:
+      g_value_set_boolean (value, stream->state == SWFDEC_STREAM_STATE_CLOSED);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+      break;
+  }
+}
+
+static void
+swfdec_stream_set_property (GObject *object, guint param_id, const GValue *value,
+    GParamSpec *pspec)
+{
+  //SwfdecStream *stream = SWFDEC_STREAM (object);
+
+  switch (param_id) {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+      break;
+  }
+}
+
+static void
+swfdec_stream_dispose (GObject *object)
+{
+  SwfdecStream *stream = SWFDEC_STREAM (object);
+
+  /* targets are supposed to keep a reference around */
+  g_assert (stream->target == NULL);
+  if (stream->queue) {
+    swfdec_buffer_queue_unref (stream->queue);
+    stream->queue = NULL;
+  }
+  g_free (stream->error);
+  stream->error = NULL;
+
+  G_OBJECT_CLASS (swfdec_stream_parent_class)->dispose (object);
+}
+
+static void
+swfdec_stream_class_init (SwfdecStreamClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->dispose = swfdec_stream_dispose;
+  object_class->get_property = swfdec_stream_get_property;
+  object_class->set_property = swfdec_stream_set_property;
+
+  g_object_class_install_property (object_class, PROP_ERROR,
+      g_param_spec_string ("error", "error", "NULL when no error or string describing error",
+	  NULL, G_PARAM_READABLE));
+  g_object_class_install_property (object_class, PROP_OPEN,
+      g_param_spec_boolean ("eof", "eof", "TRUE while data is flowing",
+	  FALSE, G_PARAM_READABLE));
+  g_object_class_install_property (object_class, PROP_EOF,
+      g_param_spec_boolean ("eof", "eof", "TRUE when all data has been transmitted",
+	  FALSE, G_PARAM_READABLE));
+}
+
+static void
+swfdec_stream_init (SwfdecStream *stream)
+{
+  stream->queue = swfdec_buffer_queue_new ();
+}
+
+/*** INTERNAL API ***/
+
+static void
+swfdec_stream_process (gpointer streamp, gpointer unused)
+{
+  SwfdecStream *stream = streamp;
+
+  g_assert (stream->target != NULL);
+
+  stream->queued = FALSE;
+  if (stream->state == stream->processed_state &&
+      stream->state != SWFDEC_STREAM_STATE_OPEN)
+    return;
+  g_assert (stream->state != SWFDEC_STREAM_STATE_CLOSED);
+  g_object_ref (stream);
+  if (stream->state == SWFDEC_STREAM_STATE_ERROR) {
+    swfdec_stream_target_error (stream->target, stream);
+  } else {
+    while (stream->state != stream->processed_state) {
+      if (stream->processed_state == SWFDEC_STREAM_STATE_CONNECTING) {
+	stream->processed_state = SWFDEC_STREAM_STATE_OPEN;
+	swfdec_stream_target_open (stream->target, stream);
+      } else if (stream->processed_state == SWFDEC_STREAM_STATE_OPEN) {
+	stream->processed_state = SWFDEC_STREAM_STATE_CLOSED;
+	swfdec_stream_target_close (stream->target, stream);
+      }
+    }
+    if (stream->processed_state == SWFDEC_STREAM_STATE_OPEN) {
+      swfdec_stream_target_parse (stream->target, stream);
+    }
+  }
+  g_object_unref (stream);
+}
+
+static void
+swfdec_stream_queue_processing (SwfdecStream *stream)
+{
+  if (stream->queued)
+    return;
+  stream->queued = TRUE;
+  if (stream->target) {
+    g_assert (stream->player);
+    swfdec_player_add_external_action (stream->player, stream,
+	swfdec_stream_process, NULL);
+  }
+}
+
+void
+swfdec_stream_close (SwfdecStream *stream)
+{
+  SwfdecStreamClass *klass;
+
+  g_return_if_fail (SWFDEC_IS_STREAM (stream));
+  
+  if (stream->state == SWFDEC_STREAM_STATE_ERROR &&
+      stream->state == SWFDEC_STREAM_STATE_CLOSED)
+    return;
+
+  klass = SWFDEC_STREAM_GET_CLASS (stream);
+
+  if (klass->close)
+    klass->close (stream);
+  stream->state = SWFDEC_STREAM_STATE_CLOSED;
+  stream->processed_state = SWFDEC_STREAM_STATE_CLOSED;
+}
+
+void
+swfdec_stream_set_target (SwfdecStream *stream, SwfdecStreamTarget *target)
+{
+  g_return_if_fail (SWFDEC_IS_STREAM (stream));
+  if (target != NULL) {
+    g_return_if_fail (stream->processed_state == SWFDEC_STREAM_STATE_CONNECTING);
+    g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
+  }
+
+  if (stream->target) {
+    swfdec_player_remove_all_external_actions (stream->player, stream);
+  }
+  stream->queued = FALSE;
+  stream->target = target;
+  if (target) {
+    stream->player = swfdec_stream_target_get_player (target);
+    if (stream->state != SWFDEC_STREAM_STATE_CONNECTING)
+      swfdec_stream_queue_processing (stream);
+  } else {
+    stream->player = NULL;
+  }
+}
+
+/** PUBLIC API ***/
+
+/**
+ * swfdec_stream_describe:
+ * @stream: a #SwfdecStream
+ *
+ * Describes the stream in a simple string. This is mostly useful for debugging
+ * purposes.
+ *
+ * Returns: a constant string describing the stream
+ **/
+const char *
+swfdec_stream_describe (SwfdecStream *stream)
+{
+  SwfdecStreamClass *klass;
+
+  g_return_val_if_fail (SWFDEC_IS_STREAM (stream), NULL);
+
+  klass = SWFDEC_STREAM_GET_CLASS (stream);
+  g_return_val_if_fail (klass->describe, NULL);
+
+  return klass->describe (stream);
+}
+
+/**
+ * swfdec_stream_error:
+ * @stream: a #SwfdecStream
+ * @error: a string describing the error
+ *
+ * Moves the stream in the error state if it wasn't before. A stream that is in
+ * the error state will not process any more data. Also, internal error 
+ * handling scripts may be executed.
+ **/
+void
+swfdec_stream_error (SwfdecStream *stream, const char *error)
+{
+  g_return_if_fail (SWFDEC_IS_STREAM (stream));
+  g_return_if_fail (error != NULL);
+
+  if (stream->error) {
+    SWFDEC_ERROR ("another error in stream for %s: %s", swfdec_stream_describe (stream), error);
+    return;
+  }
+
+  SWFDEC_ERROR ("error in stream for %s: %s", swfdec_stream_describe (stream), error);
+  stream->state = SWFDEC_STREAM_STATE_ERROR;
+  stream->error = g_strdup (error);
+  swfdec_stream_queue_processing (stream);
+}
+
+/**
+ * swfdec_stream_open:
+ * @stream: a #SwfdecStream
+ *
+ * Call this function when your stream opened the resulting file. For HTTP this
+ * is when having received the headers. You must call this function before 
+ * swfdec_stream_push() can be called.
+ **/
+void
+swfdec_stream_open (SwfdecStream *stream, const char *url)
+{
+  g_return_if_fail (SWFDEC_IS_STREAM (stream));
+  g_return_if_fail (stream->state == SWFDEC_STREAM_STATE_CONNECTING);
+
+  stream->state = SWFDEC_STREAM_STATE_OPEN;
+  g_object_notify (G_OBJECT (stream), "open");
+  swfdec_stream_queue_processing (stream);
+}
+
+/**
+ * swfdec_stream_push:
+ * @stream: a #SwfdecStream
+ * @buffer: new data to make available. The stream takes the reference
+ *          to the buffer.
+ *
+ * Makes the data in @buffer available to @stream and processes it. The @stream
+ * must be open.
+ **/
+void
+swfdec_stream_push (SwfdecStream *stream, SwfdecBuffer *buffer)
+{
+  g_return_if_fail (SWFDEC_IS_STREAM (stream));
+  g_return_if_fail (stream->state == SWFDEC_STREAM_STATE_OPEN);
+  g_return_if_fail (buffer != NULL);
+
+  swfdec_buffer_queue_push (stream->queue, buffer);
+  /* FIXME */
+  if (SWFDEC_IS_LOADER (stream))
+    g_object_notify (G_OBJECT (stream), "loaded");
+  swfdec_stream_queue_processing (stream);
+}
+
+/**
+ * swfdec_stream_eof:
+ * @stream: a #SwfdecStream
+ *
+ * Indicates to @stream that no more data will follow. The stream must be open.
+ **/
+void
+swfdec_stream_eof (SwfdecStream *stream)
+{
+  g_return_if_fail (SWFDEC_IS_STREAM (stream));
+  g_return_if_fail (stream->state == SWFDEC_STREAM_STATE_OPEN);
+
+  g_object_notify (G_OBJECT (stream), "open");
+  g_object_notify (G_OBJECT (stream), "eof");
+  stream->state = SWFDEC_STREAM_STATE_CLOSED;
+  swfdec_stream_queue_processing (stream);
+}
+
diff --git a/libswfdec/swfdec_stream.h b/libswfdec/swfdec_stream.h
new file mode 100644
index 0000000..15587fc
--- /dev/null
+++ b/libswfdec/swfdec_stream.h
@@ -0,0 +1,75 @@
+/* Swfdec
+ * Copyright (C) 2006-2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifndef _SWFDEC_STREAM_H_
+#define _SWFDEC_STREAM_H_
+
+#include <glib-object.h>
+#include <libswfdec/swfdec_buffer.h>
+#include <libswfdec/swfdec_player.h>
+
+G_BEGIN_DECLS
+
+typedef struct _SwfdecStream SwfdecStream;
+typedef struct _SwfdecStreamClass SwfdecStreamClass;
+
+#define SWFDEC_TYPE_STREAM                    (swfdec_stream_get_type())
+#define SWFDEC_IS_STREAM(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_STREAM))
+#define SWFDEC_IS_STREAM_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_STREAM))
+#define SWFDEC_STREAM(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_STREAM, SwfdecStream))
+#define SWFDEC_STREAM_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_STREAM, SwfdecStreamClass))
+#define SWFDEC_STREAM_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_STREAM, SwfdecStreamClass))
+
+struct _SwfdecStream
+{
+  GObject		object;
+
+  /*< private >*/
+  SwfdecPlayer *	player;		/* player to queue target notificaions in */
+  gpointer		target;		/* SwfdecStreamTarget that gets notified about loading progress */
+  guint			state;		/* SwfdecStreamState the stream is currently in */
+  guint			processed_state;/* SwfdecStreamState the target knows about */
+  gboolean		queued;		/* TRUE if we have queued an action already */
+  char *		error;		/* error message if in error state or NULL */
+  SwfdecBufferQueue *	queue;		/* SwfdecBufferQueue managing the input buffers */
+};
+
+struct _SwfdecStreamClass
+{
+  GObjectClass		object_class;
+
+  /* get a nice description string */
+  const char *		(* describe)		(SwfdecStream *		stream);
+  /* close the stream. */
+  void			(* close)		(SwfdecStream *		stream);
+};
+
+GType		swfdec_stream_get_type		(void);
+
+void		swfdec_stream_open		(SwfdecStream *		stream,
+						 const char *		url);
+void		swfdec_stream_push		(SwfdecStream *		stream,
+						 SwfdecBuffer *		buffer);
+void		swfdec_stream_eof		(SwfdecStream *		stream);
+void		swfdec_stream_error		(SwfdecStream *		stream,
+						 const char *		error);
+					 
+
+G_END_DECLS
+#endif
diff --git a/libswfdec/swfdec_stream_target.c b/libswfdec/swfdec_stream_target.c
new file mode 100644
index 0000000..8593fcb
--- /dev/null
+++ b/libswfdec/swfdec_stream_target.c
@@ -0,0 +1,136 @@
+/* Swfdec
+ * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "swfdec_stream_target.h"
+#include "swfdec_debug.h"
+#include "swfdec_loader_internal.h"
+#include "swfdec_player_internal.h"
+
+static void
+swfdec_stream_target_base_init (gpointer g_class)
+{
+  static gboolean initialized = FALSE;
+
+  if (G_UNLIKELY (!initialized)) {
+    initialized = TRUE;
+  }
+}
+
+GType
+swfdec_stream_target_get_type (void)
+{
+  static GType stream_target_type = 0;
+  
+  if (!stream_target_type) {
+    static const GTypeInfo stream_target_info = {
+      sizeof (SwfdecStreamTargetInterface),
+      swfdec_stream_target_base_init,
+      NULL,
+      NULL,
+      NULL,
+      NULL,
+      0,
+      0,
+      NULL,
+    };
+    
+    stream_target_type = g_type_register_static (G_TYPE_INTERFACE,
+        "SwfdecStreamTarget", &stream_target_info, 0);
+    g_type_interface_add_prerequisite (stream_target_type, G_TYPE_OBJECT);
+  }
+  
+  return stream_target_type;
+}
+
+SwfdecPlayer *
+swfdec_stream_target_get_player (SwfdecStreamTarget *target)
+{
+  SwfdecStreamTargetInterface *iface;
+  
+  g_return_val_if_fail (SWFDEC_IS_STREAM_TARGET (target), NULL);
+
+  iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
+  g_assert (iface->get_player != NULL);
+  return iface->get_player (target);
+}
+
+void
+swfdec_stream_target_open (SwfdecStreamTarget *target, SwfdecStream *stream)
+{
+  SwfdecStreamTargetInterface *iface;
+  
+  g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
+  g_return_if_fail (SWFDEC_IS_STREAM (stream));
+
+  SWFDEC_LOG ("opening %s (state %u)", swfdec_stream_describe (stream), stream->state);
+
+  iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
+  if (iface->open)
+    iface->open (target, stream);
+}
+
+void
+swfdec_stream_target_parse (SwfdecStreamTarget *target, SwfdecStream *stream)
+{
+  SwfdecStreamTargetInterface *iface;
+  
+  g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
+  g_return_if_fail (SWFDEC_IS_STREAM (stream));
+
+  SWFDEC_LOG ("parsing %s (state %u)", swfdec_stream_describe (stream), stream->state);
+
+  iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
+  if (iface->parse)
+    iface->parse (target, stream);
+}
+
+void
+swfdec_stream_target_close (SwfdecStreamTarget *target, SwfdecStream *stream)
+{
+  SwfdecStreamTargetInterface *iface;
+  
+  g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
+  g_return_if_fail (SWFDEC_IS_STREAM (stream));
+
+  SWFDEC_LOG ("close on %s (state %u)", swfdec_stream_describe (stream), stream->state);
+
+  iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
+  if (iface->close)
+    iface->close (target, stream);
+}
+
+void
+swfdec_stream_target_error (SwfdecStreamTarget *target, SwfdecStream *stream)
+{
+  SwfdecStreamTargetInterface *iface;
+  
+  g_return_if_fail (SWFDEC_IS_STREAM_TARGET (target));
+  g_return_if_fail (SWFDEC_IS_STREAM (stream));
+
+  SWFDEC_LOG ("error on %s (state %u)", swfdec_stream_describe (stream), stream->state);
+
+  iface = SWFDEC_STREAM_TARGET_GET_INTERFACE (target);
+  if (iface->error)
+    iface->error (target, stream);
+}
+
diff --git a/libswfdec/swfdec_stream_target.h b/libswfdec/swfdec_stream_target.h
new file mode 100644
index 0000000..42b8e16
--- /dev/null
+++ b/libswfdec/swfdec_stream_target.h
@@ -0,0 +1,67 @@
+/* Swfdec
+ * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifndef __SWFDEC_STREAM_TARGET_H__
+#define __SWFDEC_STREAM_TARGET_H__
+
+#include <libswfdec/swfdec.h>
+
+G_BEGIN_DECLS
+
+
+#define SWFDEC_TYPE_STREAM_TARGET                (swfdec_stream_target_get_type ())
+#define SWFDEC_STREAM_TARGET(obj)                (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_STREAM_TARGET, SwfdecStreamTarget))
+#define SWFDEC_IS_STREAM_TARGET(obj)             (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_STREAM_TARGET))
+#define SWFDEC_STREAM_TARGET_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), SWFDEC_TYPE_STREAM_TARGET, SwfdecStreamTargetInterface))
+
+typedef struct _SwfdecStreamTarget SwfdecStreamTarget; /* dummy object */
+typedef struct _SwfdecStreamTargetInterface SwfdecStreamTargetInterface;
+
+struct _SwfdecStreamTargetInterface {
+  GTypeInterface	parent;
+
+  /* mandatory vfunc */
+  SwfdecPlayer *	(* get_player)      	(SwfdecStreamTarget *	target);
+  /* optional vfuncs */
+  void			(* open)		(SwfdecStreamTarget *   target,
+						 SwfdecStream *		stream);
+  void			(* parse)		(SwfdecStreamTarget *   target,
+						 SwfdecStream *		stream);
+  void			(* close)		(SwfdecStreamTarget *   target,
+						 SwfdecStream *		stream);
+  void			(* error)		(SwfdecStreamTarget *   target,
+						 SwfdecStream *		stream);
+};
+
+GType		swfdec_stream_target_get_type		(void) G_GNUC_CONST;
+
+SwfdecPlayer *	swfdec_stream_target_get_player		(SwfdecStreamTarget *	target);
+void		swfdec_stream_target_open		(SwfdecStreamTarget *	target,
+							 SwfdecStream *		stream);
+void		swfdec_stream_target_parse		(SwfdecStreamTarget *	target,
+							 SwfdecStream *		stream);
+void		swfdec_stream_target_close		(SwfdecStreamTarget *	target,
+							 SwfdecStream *		stream);
+void		swfdec_stream_target_error		(SwfdecStreamTarget *	target,
+							 SwfdecStream *		stream);
+
+
+G_END_DECLS
+
+#endif /* __SWFDEC_STREAM_TARGET_H__ */
commit 5c0f95cba76370f852b72592c2f7c43c65f17d00
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Jan 4 19:17:36 2008 +0100

    add rtmp test directory and a first stab at a server application

diff --git a/configure.ac b/configure.ac
index 25bb286..69504cd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -354,6 +354,7 @@ player/Makefile
 test/Makefile
 test/custom/Makefile
 test/image/Makefile
+test/rtmp/Makefile
 test/sound/Makefile
 test/trace/Makefile
 test/various/Makefile
diff --git a/test/rtmp/.gitignore b/test/rtmp/.gitignore
new file mode 100644
index 0000000..804265c
--- /dev/null
+++ b/test/rtmp/.gitignore
@@ -0,0 +1,10 @@
+*~
+.deps
+.libs
+
+Makefile
+Makefile.in
+*.lo
+*.o
+
+rtmp-server
diff --git a/test/rtmp/Makefile.am b/test/rtmp/Makefile.am
new file mode 100644
index 0000000..c9c633b
--- /dev/null
+++ b/test/rtmp/Makefile.am
@@ -0,0 +1,9 @@
+noinst_PROGRAMS = rtmp-server
+
+check_PROGRAMS = sound
+TESTS = $(check_PROGRAMS)
+
+rtmp_server_SOURCES = rtmp_server.c
+rtmp_server_CFLAGS = $(GLOBAL_CFLAGS) $(HTTP_CFLAGS) $(SWFDEC_CFLAGS) $(CAIRO_CFLAGS)
+rtmp_server_LDFLAGS = $(SWFDEC_LIBS) $(HTTP_LIBS) $(CAIRO_LIBS)
+
diff --git a/test/rtmp/rtmp_server.c b/test/rtmp/rtmp_server.c
new file mode 100644
index 0000000..2a26675
--- /dev/null
+++ b/test/rtmp/rtmp_server.c
@@ -0,0 +1,83 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <libsoup/soup.h>
+#include <libsoup/soup-address.h>
+#include <libswfdec/swfdec.h>
+
+static void
+hexdump (SwfdecBuffer *buffer)
+{
+  guint i;
+
+  for (i = 0; i < buffer->length; i++) {
+    g_print ("%02X%s", buffer->data[i], i % 8 == 7 ? "\n" : (i % 4 == 3 ? "  " : " "));
+  }
+  if (i % 8)
+    g_print ("\n");
+}
+
+static void
+do_read (SoupSocket *conn, gpointer unused)
+{
+  SwfdecBuffer *buf;
+  SoupSocketIOStatus status;
+
+  buf = swfdec_buffer_new_and_alloc (16);
+  while ((status = soup_socket_read (conn, buf->data, buf->length, &buf->length)) == SOUP_SOCKET_OK) {
+    hexdump (buf);
+    buf->length = 16;
+  }
+  swfdec_buffer_unref (buf);
+  g_print ("status: %u\n", (guint) status);
+}
+
+static void
+new_connection (SoupSocket *server, SoupSocket *conn, gpointer unused)
+{
+  g_print ("WOOT!\n");
+  g_signal_connect (conn, "readable", G_CALLBACK (do_read), NULL);
+  do_read (conn, NULL);
+}
+
+int
+main (int argc, char **argv)
+{
+  GMainLoop *loop;
+  SoupSocket *server;
+  SoupAddress *address;
+
+  swfdec_init ();
+
+  address = soup_address_new_any (SOUP_ADDRESS_FAMILY_IPV4, 1935);
+  server = soup_socket_new ("non-blocking", TRUE, NULL);
+  soup_socket_listen (server, address);
+  g_signal_connect (server, "new-connection", G_CALLBACK (new_connection), NULL);
+  g_object_unref (address);
+
+  loop = g_main_loop_new (NULL, FALSE);
+  g_main_loop_run (loop);
+  g_main_loop_unref (loop);
+
+  return 0;
+}
+


More information about the Swfdec mailing list