Pekka Lampila
2007-Oct-29 14:10 UTC
[Swfdec] 20 commits - libswfdec/Makefile.am libswfdec/swfdec_as_interpret.c libswfdec/swfdec_html_parser.c libswfdec/swfdec_initialize.as libswfdec/swfdec_initialize.h libswfdec/swfdec_text_field.c libswfdec/swfdec_text_field.h libswfdec/swfdec_text_field_movie_as.c libswfdec/swfdec_text_field_movie.c libswfdec/swfdec_text_field_movie.h libswfdec/swfdec_text_field_movie_html.c libswfdec/swfdec_text_format.c test/dump.c test/trace
libswfdec/Makefile.am | 2 libswfdec/swfdec_as_interpret.c | 19 libswfdec/swfdec_html_parser.c | 474 ----------- libswfdec/swfdec_initialize.as | 11 libswfdec/swfdec_initialize.h | 1118 +++++++++++++-------------- libswfdec/swfdec_text_field.c | 18 libswfdec/swfdec_text_field.h | 2 libswfdec/swfdec_text_field_movie.c | 585 +++----------- libswfdec/swfdec_text_field_movie.h | 18 libswfdec/swfdec_text_field_movie_as.c | 6 libswfdec/swfdec_text_field_movie_html.c | 764 ++++++++++++++++++ libswfdec/swfdec_text_format.c | 154 +-- test/dump.c | 2 test/trace/Makefile.am | 23 test/trace/error-properties-5.swf |binary test/trace/error-properties-5.swf.trace | 23 test/trace/error-properties-6.swf |binary test/trace/error-properties-6.swf.trace | 23 test/trace/error-properties-7.swf |binary test/trace/error-properties-7.swf.trace | 21 test/trace/error-properties-8.swf |binary test/trace/error-properties-8.swf.trace | 21 test/trace/error-properties.as | 12 test/trace/text-field-html-input-6.swf |binary test/trace/text-field-html-input-6.swf.trace | 84 ++ test/trace/text-field-html-input-7.swf |binary test/trace/text-field-html-input-7.swf.trace | 76 + test/trace/text-field-html-input-8.swf |binary test/trace/text-field-html-input-8.swf.trace | 76 + test/trace/text-field-html-input.as | 5 test/trace/try-6.swf |binary test/trace/try-6.swf.trace | 6 test/trace/try-7.swf |binary test/trace/try-7.swf.trace | 6 test/trace/try-8.swf |binary test/trace/try-8.swf.trace | 6 test/trace/try-jump-6.swf |binary test/trace/try-jump-6.swf.trace | 3 test/trace/try-jump-7.swf |binary test/trace/try-jump-7.swf.trace | 3 test/trace/try-jump-8.swf |binary test/trace/try-jump-8.swf.trace | 3 test/trace/try-jump.as | 43 + test/trace/try.as | 27 44 files changed, 2056 insertions(+), 1578 deletions(-) New commits: commit 3d0d44ea8afd4f1d5f5d2adf21d5d57c30eb1cd0 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 16:09:17 2007 +0200 Jump in Try's end block functions, not in swfdec_as_frame_handle_exception diff --git a/libswfdec/swfdec_as_frame.c b/libswfdec/swfdec_as_frame.c index 5913eb1..c101b9c 100644 --- a/libswfdec/swfdec_as_frame.c +++ b/libswfdec/swfdec_as_frame.c @@ -805,7 +805,6 @@ swfdec_as_frame_handle_exception (SwfdecAsFrame *frame) /* pop blocks in the hope that we are inside a Try block */ while (cx->exception && frame->blocks->len) { - frame->pc = frame->block_end; swfdec_as_frame_pop_block (frame); } /* no Try blocks caught it, exit frame */ diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c index 57cf368..143f78b 100644 --- a/libswfdec/swfdec_as_interpret.c +++ b/libswfdec/swfdec_as_interpret.c @@ -2601,8 +2601,8 @@ swfdec_action_try_end_catch (SwfdecAsFrame *frame, gpointer data) if (swfdec_as_context_catch (cx, &val)) { // we got an exception while in catch block: - // create new block for finally, passing the exception - // clear exception from the context + // create new block for finally to pass on the exception + // jump to that block exception_value = g_malloc (sizeof (SwfdecAsValue)); *exception_value = val; @@ -2611,6 +2611,7 @@ swfdec_action_try_end_catch (SwfdecAsFrame *frame, gpointer data) swfdec_as_frame_push_block (frame, try_data->finally_start, try_data->finally_start + try_data->finally_size, swfdec_action_try_end_finally, exception_value); + frame->pc = try_data->finally_start; } swfdec_action_try_data_free (try_data); @@ -2639,8 +2640,8 @@ swfdec_action_try_end_try (SwfdecAsFrame *frame, gpointer data) { // we got an exception while in try block: // set the exception variable - // add new block for catch - // clear exception from context + // add new block for catch and jump to it + if (try_data->use_register) { if (swfdec_action_has_register (cx, try_data->register_number)) { @@ -2680,8 +2681,9 @@ swfdec_action_try_end_try (SwfdecAsFrame *frame, gpointer data) swfdec_as_frame_push_block (frame, try_data->catch_start, try_data->catch_start + try_data->catch_size, swfdec_action_try_end_catch, try_data); - } - else + frame->pc = try_data->catch_start; + } + else { swfdec_action_try_data_free (try_data); } commit 30e92ccded4ad52b46d11192cee525b36f6bd37c Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 16:04:53 2007 +0200 Some small fixes to TextField's size handling diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c index 881327c..f10f529 100644 --- a/libswfdec/swfdec_text_field_movie.c +++ b/libswfdec/swfdec_text_field_movie.c @@ -37,6 +37,8 @@ G_DEFINE_TYPE (SwfdecTextFieldMovie, swfdec_text_field_movie, SWFDEC_TYPE_MOVIE) +#define EXTRA_MARGIN 2 + static void swfdec_text_field_movie_update_extents (SwfdecMovie *movie, SwfdecRect *extents) @@ -611,8 +613,8 @@ swfdec_text_field_movie_render (SwfdecMovie *movie, cairo_t *cr, first = TRUE; linenum = 0; - x = movie->original_extents.x0 + text_movie->hscroll; - y = movie->original_extents.y0 + 1; + x = movie->original_extents.x0 + EXTRA_MARGIN + text_movie->hscroll; + y = movie->original_extents.y0 + EXTRA_MARGIN; cairo_move_to (cr, x, y); for (i = 0; layouts[i].layout != NULL/* && y < limit.y1*/; i++) @@ -755,7 +757,7 @@ swfdec_text_field_movie_update_scroll (SwfdecTextFieldMovie *text, } void -swfdec_text_field_get_size (SwfdecTextFieldMovie *text, int *width, +swfdec_text_field_movie_get_text_size (SwfdecTextFieldMovie *text, int *width, int *height) { SwfdecLayout *layouts; @@ -764,7 +766,7 @@ swfdec_text_field_get_size (SwfdecTextFieldMovie *text, int *width, if (width != NULL) *width = 0; if (height != NULL) - *height = 3; + *height = 0; g_return_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text)); g_return_if_fail (width != NULL || height != NULL); @@ -797,7 +799,9 @@ swfdec_text_field_movie_auto_size (SwfdecTextFieldMovie *text) if (text->text->auto_size == SWFDEC_AUTO_SIZE_NONE) return FALSE; - swfdec_text_field_get_size (text, &width, &height); + swfdec_text_field_movie_get_text_size (text, &width, &height); + width += 2 * EXTRA_MARGIN; + height += 2 * EXTRA_MARGIN; if ((text->text->word_wrap || graphic->extents.x1 - graphic->extents.x0 == width) && diff --git a/libswfdec/swfdec_text_field_movie.h b/libswfdec/swfdec_text_field_movie.h index 15af317..4a03fdd 100644 --- a/libswfdec/swfdec_text_field_movie.h +++ b/libswfdec/swfdec_text_field_movie.h @@ -120,7 +120,7 @@ GType swfdec_text_field_movie_get_type (void); void swfdec_text_field_movie_set_text (SwfdecTextFieldMovie * movie, const char * str, gboolean html); -void swfdec_text_field_get_size (SwfdecTextFieldMovie * text, +void swfdec_text_field_movie_get_text_size (SwfdecTextFieldMovie * text, int * width, int * height); gboolean swfdec_text_field_movie_auto_size (SwfdecTextFieldMovie * text); diff --git a/libswfdec/swfdec_text_field_movie_as.c b/libswfdec/swfdec_text_field_movie_as.c index 3436ffb..dd5203f 100644 --- a/libswfdec/swfdec_text_field_movie_as.c +++ b/libswfdec/swfdec_text_field_movie_as.c @@ -423,7 +423,7 @@ swfdec_text_field_movie_get_textHeight (SwfdecAsContext *cx, SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE, &text, ""); - swfdec_text_field_get_size (text, NULL, &height); + swfdec_text_field_movie_get_text_size (text, NULL, &height); SWFDEC_AS_VALUE_SET_NUMBER (ret, height); } @@ -437,7 +437,7 @@ swfdec_text_field_movie_get_textWidth (SwfdecAsContext *cx, SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE, &text, ""); - swfdec_text_field_get_size (text, &width, NULL); + swfdec_text_field_movie_get_text_size (text, &width, NULL); SWFDEC_AS_VALUE_SET_NUMBER (ret, width); } commit 47923239d370ec9bd96463bbdfcb075048dde80e Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 15:43:20 2007 +0200 Add try-jump test diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am index f1c9938..6762ef1 100644 --- a/test/trace/Makefile.am +++ b/test/trace/Makefile.am @@ -2100,6 +2100,13 @@ EXTRA_DIST = \ try-7.swf.trace \ try-8.swf \ try-8.swf.trace \ + try-jump.as \ + try-jump-6.swf \ + try-jump-6.swf.trace \ + try-jump-7.swf \ + try-jump-7.swf.trace \ + try-jump-8.swf \ + try-jump-8.swf.trace \ try-throw-in-finally.as \ try-throw-in-finally-6.swf \ try-throw-in-finally-6.swf.trace \ diff --git a/test/trace/try-jump-6.swf b/test/trace/try-jump-6.swf new file mode 100644 index 0000000..8463ef8 Binary files /dev/null and b/test/trace/try-jump-6.swf differ diff --git a/test/trace/try-jump-6.swf.trace b/test/trace/try-jump-6.swf.trace new file mode 100644 index 0000000..8350f2f --- /dev/null +++ b/test/trace/try-jump-6.swf.trace @@ -0,0 +1,3 @@ +Test how Try action handles jumping out of the blocks +outside: test +outside: test2 diff --git a/test/trace/try-jump-7.swf b/test/trace/try-jump-7.swf new file mode 100644 index 0000000..64c7733 Binary files /dev/null and b/test/trace/try-jump-7.swf differ diff --git a/test/trace/try-jump-7.swf.trace b/test/trace/try-jump-7.swf.trace new file mode 100644 index 0000000..8350f2f --- /dev/null +++ b/test/trace/try-jump-7.swf.trace @@ -0,0 +1,3 @@ +Test how Try action handles jumping out of the blocks +outside: test +outside: test2 diff --git a/test/trace/try-jump-8.swf b/test/trace/try-jump-8.swf new file mode 100644 index 0000000..271236b Binary files /dev/null and b/test/trace/try-jump-8.swf differ diff --git a/test/trace/try-jump-8.swf.trace b/test/trace/try-jump-8.swf.trace new file mode 100644 index 0000000..8350f2f --- /dev/null +++ b/test/trace/try-jump-8.swf.trace @@ -0,0 +1,3 @@ +Test how Try action handles jumping out of the blocks +outside: test +outside: test2 diff --git a/test/trace/try-jump.as b/test/trace/try-jump.as new file mode 100644 index 0000000..0218750 --- /dev/null +++ b/test/trace/try-jump.as @@ -0,0 +1,43 @@ +// makeswf -v 7 -r 1 -o try-jump-7.swf try-jump.as + +trace ("Test how Try action handles jumping out of the blocks"); + +function test() { + while (true) { + try { + break; + } catch (exception) { + trace ("inside: " + exception); + }; + } + throw new Error ("test"); +} + +function test2() { + var i = 0; + while (true) { + if (i++ > 5) + throw new Error ("test2"); + try { + throw new Error ("catch this"); + } catch (exception) { + continue; + } finally { + trace ("finally"); + }; + } +} + +try { + test (); +} catch (exception) { + trace ("outside: " + exception); +}; + +try { + test2 (); +} catch (exception) { + trace ("outside: " + exception); +}; + +loadMovie ("FSCommand:quit", ""); commit 00b8063d347d78784ec04ed05d37c920c858a8e9 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 15:32:09 2007 +0200 Add a test for Try action diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am index 77f2bb0..f1c9938 100644 --- a/test/trace/Makefile.am +++ b/test/trace/Makefile.am @@ -2093,6 +2093,13 @@ EXTRA_DIST = \ transform2.swf \ transform2.swf.trace \ transform2.swf.trace.org \ + try.as \ + try-6.swf \ + try-6.swf.trace \ + try-7.swf \ + try-7.swf.trace \ + try-8.swf \ + try-8.swf.trace \ try-throw-in-finally.as \ try-throw-in-finally-6.swf \ try-throw-in-finally-6.swf.trace \ diff --git a/test/trace/try-6.swf b/test/trace/try-6.swf new file mode 100644 index 0000000..392a5a0 Binary files /dev/null and b/test/trace/try-6.swf differ diff --git a/test/trace/try-6.swf.trace b/test/trace/try-6.swf.trace new file mode 100644 index 0000000..25142a6 --- /dev/null +++ b/test/trace/try-6.swf.trace @@ -0,0 +1,6 @@ +Test Try action +before +try +catch: try +finally +catch from test: catch diff --git a/test/trace/try-7.swf b/test/trace/try-7.swf new file mode 100644 index 0000000..b36faeb Binary files /dev/null and b/test/trace/try-7.swf differ diff --git a/test/trace/try-7.swf.trace b/test/trace/try-7.swf.trace new file mode 100644 index 0000000..25142a6 --- /dev/null +++ b/test/trace/try-7.swf.trace @@ -0,0 +1,6 @@ +Test Try action +before +try +catch: try +finally +catch from test: catch diff --git a/test/trace/try-8.swf b/test/trace/try-8.swf new file mode 100644 index 0000000..e4135ca Binary files /dev/null and b/test/trace/try-8.swf differ diff --git a/test/trace/try-8.swf.trace b/test/trace/try-8.swf.trace new file mode 100644 index 0000000..25142a6 --- /dev/null +++ b/test/trace/try-8.swf.trace @@ -0,0 +1,6 @@ +Test Try action +before +try +catch: try +finally +catch from test: catch diff --git a/test/trace/try.as b/test/trace/try.as new file mode 100644 index 0000000..4ef5572 --- /dev/null +++ b/test/trace/try.as @@ -0,0 +1,27 @@ +// makeswf -v 7 -r 1 -o try-throw-in-finally-7.swf try-throw-in-finally.as + +trace ("Test Try action"); + +function test() { + trace ("before"); + try { + trace ("try"); + throw new Error ("try"); + trace ("try after throw"); + } catch (exception) { + trace ("catch: " + exception); + throw new Error ("catch"); + trace ("catch after throw"); + } finally { + trace ("finally"); + }; + trace ("after"); +} + +try { + test (); +} catch (exception) { + trace ("catch from test: " + exception); +}; + +loadMovie ("FSCommand:quit", ""); commit 6c6d84700517faca875d6476b02ea4844c8942ba Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 15:30:35 2007 +0200 Jump out of popped block when handling exceptions diff --git a/libswfdec/swfdec_as_frame.c b/libswfdec/swfdec_as_frame.c index c101b9c..5913eb1 100644 --- a/libswfdec/swfdec_as_frame.c +++ b/libswfdec/swfdec_as_frame.c @@ -805,6 +805,7 @@ swfdec_as_frame_handle_exception (SwfdecAsFrame *frame) /* pop blocks in the hope that we are inside a Try block */ while (cx->exception && frame->blocks->len) { + frame->pc = frame->block_end; swfdec_as_frame_pop_block (frame); } /* no Try blocks caught it, exit frame */ commit 59bf5375f4f6e4491d1fa91eb8d49983fc0fdc51 Merge: 452d86f... 6bd8b72... Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 15:08:31 2007 +0200 Merge branch 'master' of ssh://medar at git.freedesktop.org/git/swfdec/swfdec commit 452d86fdc0036dfc773a7e51d6d726bb98f64f91 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 15:05:00 2007 +0200 Add error-properties test diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am index 2086980..ce34916 100644 --- a/test/trace/Makefile.am +++ b/test/trace/Makefile.am @@ -494,6 +494,15 @@ EXTRA_DIST = \ duplicate-names-6.swf.trace \ duplicate-names-7.swf \ duplicate-names-7.swf.trace \ + error-properties.as \ + error-properties-5.swf \ + error-properties-5.swf.trace \ + error-properties-6.swf \ + error-properties-6.swf.trace \ + error-properties-7.swf \ + error-properties-7.swf.trace \ + error-properties-8.swf \ + error-properties-8.swf.trace \ event-order.swf \ empty-function.as \ empty-function-5.swf \ diff --git a/test/trace/error-properties-5.swf b/test/trace/error-properties-5.swf new file mode 100644 index 0000000..18da742 Binary files /dev/null and b/test/trace/error-properties-5.swf differ diff --git a/test/trace/error-properties-5.swf.trace b/test/trace/error-properties-5.swf.trace new file mode 100644 index 0000000..55981f3 --- /dev/null +++ b/test/trace/error-properties-5.swf.trace @@ -0,0 +1,23 @@ +_global.Error = function + __proto__ (hpn) = _global.Object.__proto__ + constructor (hp) = _global.Object.constructor + prototype (hp) = object + __proto__ (hp) = _global.Object.prototype + constructor (hp) = _global.Error + message = string : "Error" + name = string : "Error" + toString = function + __proto__ (hpn) = _global.Object.__proto__ + constructor (hp) = _global.Object.constructor + prototype (hp) = object + __proto__ (hp) = _global.Object.prototype + constructor (hp) = _global.Error.prototype.toString +local.a = object + __constructor__ (hn) = _global.Error + __proto__ (hp) = _global.Error.prototype + constructor (h) = _global.Error +local.b = object + __constructor__ (hn) = _global.Error + __proto__ (hp) = _global.Error.prototype + constructor (h) = _global.Error + message = string : "test" diff --git a/test/trace/error-properties-6.swf b/test/trace/error-properties-6.swf new file mode 100644 index 0000000..99a356f Binary files /dev/null and b/test/trace/error-properties-6.swf differ diff --git a/test/trace/error-properties-6.swf.trace b/test/trace/error-properties-6.swf.trace new file mode 100644 index 0000000..b92653f --- /dev/null +++ b/test/trace/error-properties-6.swf.trace @@ -0,0 +1,23 @@ +_global.Error = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + prototype (hp) = object + __proto__ (hp) = _global.Object.prototype + constructor (hp) = _global.Error + message = string : "Error" + name = string : "Error" + toString = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + prototype (hp) = object + __proto__ (hp) = _global.Object.prototype + constructor (hp) = _global.Error.prototype.toString +local.a = object + __constructor__ (h) = _global.Error + __proto__ (hp) = _global.Error.prototype + constructor (h) = _global.Error +local.b = object + __constructor__ (h) = _global.Error + __proto__ (hp) = _global.Error.prototype + constructor (h) = _global.Error + message = string : "test" diff --git a/test/trace/error-properties-7.swf b/test/trace/error-properties-7.swf new file mode 100644 index 0000000..fee0529 Binary files /dev/null and b/test/trace/error-properties-7.swf differ diff --git a/test/trace/error-properties-7.swf.trace b/test/trace/error-properties-7.swf.trace new file mode 100644 index 0000000..d6cac77 --- /dev/null +++ b/test/trace/error-properties-7.swf.trace @@ -0,0 +1,21 @@ +_global.Error = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + prototype (hp) = object + __proto__ (hp) = _global.Object.prototype + constructor (hp) = _global.Error + message = string : "Error" + name = string : "Error" + toString = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + prototype (hp) = object + __proto__ (hp) = _global.Object.prototype + constructor (hp) = _global.Error.prototype.toString +local.a = object + __constructor__ (h) = _global.Error + __proto__ (hp) = _global.Error.prototype +local.b = object + __constructor__ (h) = _global.Error + __proto__ (hp) = _global.Error.prototype + message = string : "test" diff --git a/test/trace/error-properties-8.swf b/test/trace/error-properties-8.swf new file mode 100644 index 0000000..bc4b7f5 Binary files /dev/null and b/test/trace/error-properties-8.swf differ diff --git a/test/trace/error-properties-8.swf.trace b/test/trace/error-properties-8.swf.trace new file mode 100644 index 0000000..d6cac77 --- /dev/null +++ b/test/trace/error-properties-8.swf.trace @@ -0,0 +1,21 @@ +_global.Error = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + prototype (hp) = object + __proto__ (hp) = _global.Object.prototype + constructor (hp) = _global.Error + message = string : "Error" + name = string : "Error" + toString = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + prototype (hp) = object + __proto__ (hp) = _global.Object.prototype + constructor (hp) = _global.Error.prototype.toString +local.a = object + __constructor__ (h) = _global.Error + __proto__ (hp) = _global.Error.prototype +local.b = object + __constructor__ (h) = _global.Error + __proto__ (hp) = _global.Error.prototype + message = string : "test" diff --git a/test/trace/error-properties.as b/test/trace/error-properties.as new file mode 100644 index 0000000..6908ff2 --- /dev/null +++ b/test/trace/error-properties.as @@ -0,0 +1,12 @@ +// makeswf -v 7 -r 1 -o error-properties-7.swf error-properties.as + +#include "trace_properties.as" + +var a = new Error (); +var b = new Error ("test"); + +trace_properties (_global.Error, "_global", "Error"); +trace_properties (a, "local", "a"); +trace_properties (b, "local", "b"); + +loadMovie ("FSCommand:quit", ""); commit a26ff3c1c2c69ea12a11dc8fe0aeec1e3cfea923 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 15:04:02 2007 +0200 Implement Error class diff --git a/libswfdec/swfdec_initialize.as b/libswfdec/swfdec_initialize.as index 578f2e7..a27b80f 100644 --- a/libswfdec/swfdec_initialize.as +++ b/libswfdec/swfdec_initialize.as @@ -28,6 +28,17 @@ ASSetNativeAccessor = ASnative (4, 1); Object.registerClass = ASnative(101, 8); ASSetPropFlags (Object, null, 7); +/*** Error ***/ + +function Error (msg) { + if (typeof (msg) != "undefined") + this.message = msg; +} +Error.prototype.name = Error.prototype.message = "Error"; +Error.prototype.toString = function () { + return this.message; +}; + /*** ASBROADCASTER ***/ function AsBroadcaster () { }; diff --git a/libswfdec/swfdec_initialize.h b/libswfdec/swfdec_initialize.h index d71cb7a..e70f987 100644 --- a/libswfdec/swfdec_initialize.h +++ b/libswfdec/swfdec_initialize.h @@ -2,563 +2,573 @@ /* compiled from swfdec_initialize.as */ const unsigned char swfdec_initialize[] = { - 0x88, 0xBA, 0x07, 0xBC, 0x00, 0x41, 0x53, 0x53, 0x65, 0x74, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x88, 0xCC, 0x07, 0xBF, 0x00, 0x41, 0x53, 0x53, 0x65, 0x74, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x00, 0x41, 0x53, 0x6E, 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, 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x00, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6C, 0x61, 0x73, 0x73, 0x00, 0x41, 0x53, 0x53, 0x65, 0x74, 0x50, 0x72, 0x6F, 0x70, 0x46, 0x6C, 0x61, 0x67, - 0x73, 0x00, 0x41, 0x73, 0x42, 0x72, 0x6F, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x00, - 0x62, 0x72, 0x6F, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x4D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x00, 0x61, 0x64, 0x64, 0x4C, 0x69, 0x73, 0x74, 0x65, 0x6E, 0x65, 0x72, 0x00, 0x74, 0x68, 0x69, - 0x73, 0x00, 0x78, 0x00, 0x72, 0x65, 0x6D, 0x6F, 0x76, 0x65, 0x4C, 0x69, 0x73, 0x74, 0x65, 0x6E, - 0x65, 0x72, 0x00, 0x5F, 0x6C, 0x69, 0x73, 0x74, 0x65, 0x6E, 0x65, 0x72, 0x73, 0x00, 0x70, 0x75, - 0x73, 0x68, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x00, 0x73, 0x70, - 0x6C, 0x69, 0x63, 0x65, 0x00, 0x69, 0x6E, 0x69, 0x74, 0x69, 0x61, 0x6C, 0x69, 0x7A, 0x65, 0x00, - 0x6F, 0x00, 0x62, 0x72, 0x6F, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x4D, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x2C, 0x61, 0x64, 0x64, 0x4C, 0x69, 0x73, 0x74, 0x65, 0x6E, 0x65, 0x72, 0x2C, 0x72, - 0x65, 0x6D, 0x6F, 0x76, 0x65, 0x4C, 0x69, 0x73, 0x74, 0x65, 0x6E, 0x65, 0x72, 0x2C, 0x5F, 0x6C, - 0x69, 0x73, 0x74, 0x65, 0x6E, 0x65, 0x72, 0x73, 0x00, 0x4B, 0x65, 0x79, 0x00, 0x41, 0x4C, 0x54, - 0x00, 0x42, 0x41, 0x43, 0x4B, 0x53, 0x50, 0x41, 0x43, 0x45, 0x00, 0x43, 0x41, 0x50, 0x53, 0x4C, - 0x4F, 0x43, 0x4B, 0x00, 0x43, 0x4F, 0x4E, 0x54, 0x52, 0x4F, 0x4C, 0x00, 0x44, 0x45, 0x4C, 0x45, - 0x54, 0x45, 0x4B, 0x45, 0x59, 0x00, 0x44, 0x4F, 0x57, 0x4E, 0x00, 0x45, 0x4E, 0x44, 0x00, 0x45, - 0x4E, 0x54, 0x45, 0x52, 0x00, 0x45, 0x53, 0x43, 0x41, 0x50, 0x45, 0x00, 0x48, 0x4F, 0x4D, 0x45, - 0x00, 0x49, 0x4E, 0x53, 0x45, 0x52, 0x54, 0x00, 0x4C, 0x45, 0x46, 0x54, 0x00, 0x50, 0x47, 0x44, - 0x4E, 0x00, 0x50, 0x47, 0x55, 0x50, 0x00, 0x52, 0x49, 0x47, 0x48, 0x54, 0x00, 0x53, 0x48, 0x49, - 0x46, 0x54, 0x00, 0x53, 0x50, 0x41, 0x43, 0x45, 0x00, 0x54, 0x41, 0x42, 0x00, 0x55, 0x50, 0x00, - 0x67, 0x65, 0x74, 0x41, 0x73, 0x63, 0x69, 0x69, 0x2C, 0x67, 0x65, 0x74, 0x43, 0x6F, 0x64, 0x65, - 0x2C, 0x69, 0x73, 0x44, 0x6F, 0x77, 0x6E, 0x00, 0x4D, 0x6F, 0x75, 0x73, 0x65, 0x00, 0x73, 0x68, - 0x6F, 0x77, 0x00, 0x68, 0x69, 0x64, 0x65, 0x00, 0x53, 0x74, 0x61, 0x67, 0x65, 0x00, 0x73, 0x63, - 0x61, 0x6C, 0x65, 0x4D, 0x6F, 0x64, 0x65, 0x2C, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x2C, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x2C, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x00, 0x4C, 0x6F, 0x61, 0x64, 0x56, - 0x61, 0x72, 0x73, 0x00, 0x70, 0x72, 0x6F, 0x74, 0x6F, 0x74, 0x79, 0x70, 0x65, 0x00, 0x63, 0x6F, - 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x54, 0x79, 0x70, 0x65, 0x00, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x78, 0x2D, 0x77, 0x77, 0x77, 0x2D, 0x66, 0x6F, 0x72, 0x6D, - 0x2D, 0x75, 0x72, 0x6C, 0x65, 0x6E, 0x63, 0x6F, 0x64, 0x65, 0x64, 0x00, 0x6C, 0x6F, 0x61, 0x64, - 0x00, 0x64, 0x65, 0x63, 0x6F, 0x64, 0x65, 0x00, 0x6F, 0x6E, 0x4C, 0x6F, 0x61, 0x64, 0x00, 0x6F, - 0x6E, 0x44, 0x61, 0x74, 0x61, 0x00, 0x6C, 0x6F, 0x61, 0x64, 0x65, 0x64, 0x00, 0x73, 0x72, 0x63, - 0x00, 0x74, 0x6F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x73, 0x74, 0x72, 0x00, 0x65, 0x73, - 0x63, 0x61, 0x70, 0x65, 0x00, 0x3D, 0x00, 0x26, 0x00, 0x67, 0x65, 0x74, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x4C, 0x6F, 0x61, 0x64, 0x65, 0x64, 0x00, 0x5F, 0x62, 0x79, 0x74, 0x65, 0x73, 0x4C, 0x6F, - 0x61, 0x64, 0x65, 0x64, 0x00, 0x67, 0x65, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x54, 0x6F, 0x74, - 0x61, 0x6C, 0x00, 0x5F, 0x62, 0x79, 0x74, 0x65, 0x73, 0x54, 0x6F, 0x74, 0x61, 0x6C, 0x00, 0x53, - 0x6F, 0x75, 0x6E, 0x64, 0x00, 0x41, 0x53, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x6F, 0x72, 0x00, 0x73, 0x74, 0x6F, 0x70, 0x2C, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x53, 0x6F, - 0x75, 0x6E, 0x64, 0x2C, 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, 0x58, 0x4D, 0x4C, 0x4E, 0x6F, 0x64, - 0x65, 0x00, 0x63, 0x6C, 0x6F, 0x6E, 0x65, 0x4E, 0x6F, 0x64, 0x65, 0x00, 0x72, 0x65, 0x6D, 0x6F, - 0x76, 0x65, 0x4E, 0x6F, 0x64, 0x65, 0x00, 0x69, 0x6E, 0x73, 0x65, 0x72, 0x74, 0x42, 0x65, 0x66, - 0x6F, 0x72, 0x65, 0x00, 0x61, 0x70, 0x70, 0x65, 0x6E, 0x64, 0x43, 0x68, 0x69, 0x6C, 0x64, 0x00, - 0x68, 0x61, 0x73, 0x43, 0x68, 0x69, 0x6C, 0x64, 0x4E, 0x6F, 0x64, 0x65, 0x73, 0x00, 0x67, 0x65, - 0x74, 0x4E, 0x61, 0x6D, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x6F, 0x72, 0x50, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x00, 0x67, 0x65, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x46, 0x6F, 0x72, - 0x4E, 0x61, 0x6D, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x00, 0x58, 0x4D, 0x4C, 0x00, 0x00, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x65, 0x78, 0x74, 0x4E, 0x6F, 0x64, 0x65, 0x00, 0x70, 0x61, 0x72, 0x73, - 0x65, 0x58, 0x4D, 0x4C, 0x00, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x00, 0x63, 0x61, 0x70, 0x61, - 0x62, 0x69, 0x6C, 0x69, 0x74, 0x69, 0x65, 0x73, 0x00, 0x51, 0x75, 0x65, 0x72, 0x79, 0x00, 0x43, - 0x6F, 0x6C, 0x6F, 0x72, 0x00, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x73, 0x65, 0x74, 0x52, - 0x47, 0x42, 0x2C, 0x73, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x2C, - 0x67, 0x65, 0x74, 0x52, 0x47, 0x42, 0x2C, 0x67, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, - 0x6F, 0x72, 0x6D, 0x00, 0x4D, 0x6F, 0x76, 0x69, 0x65, 0x43, 0x6C, 0x69, 0x70, 0x00, 0x6D, 0x65, - 0x74, 0x68, 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, 0x74, 0x6F, 0x4C, 0x6F, 0x77, 0x65, - 0x72, 0x43, 0x61, 0x73, 0x65, 0x00, 0x6C, 0x6F, 0x77, 0x65, 0x72, 0x00, 0x70, 0x6F, 0x73, 0x74, - 0x00, 0x67, 0x65, 0x74, 0x00, 0x67, 0x65, 0x74, 0x55, 0x52, 0x4C, 0x00, 0x75, 0x6E, 0x64, 0x65, - 0x66, 0x69, 0x6E, 0x65, 0x64, 0x00, 0x74, 0x79, 0x70, 0x65, 0x00, 0x75, 0x72, 0x6C, 0x00, 0x6C, - 0x6F, 0x61, 0x64, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6C, 0x65, 0x73, 0x00, 0x5F, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x00, 0x6C, 0x6F, 0x61, 0x64, 0x4D, 0x6F, 0x76, 0x69, 0x65, 0x00, 0x61, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x4D, 0x6F, 0x76, 0x69, 0x65, 0x00, 0x73, 0x77, 0x61, 0x70, 0x44, - 0x65, 0x70, 0x74, 0x68, 0x73, 0x00, 0x68, 0x69, 0x74, 0x54, 0x65, 0x73, 0x74, 0x00, 0x67, 0x65, - 0x74, 0x42, 0x6F, 0x75, 0x6E, 0x64, 0x73, 0x00, 0x67, 0x65, 0x74, 0x44, 0x65, 0x70, 0x74, 0x68, - 0x00, 0x70, 0x6C, 0x61, 0x79, 0x00, 0x73, 0x74, 0x6F, 0x70, 0x00, 0x6E, 0x65, 0x78, 0x74, 0x46, - 0x72, 0x61, 0x6D, 0x65, 0x00, 0x70, 0x72, 0x65, 0x76, 0x46, 0x72, 0x61, 0x6D, 0x65, 0x00, 0x67, - 0x6F, 0x74, 0x6F, 0x41, 0x6E, 0x64, 0x50, 0x6C, 0x61, 0x79, 0x00, 0x67, 0x6F, 0x74, 0x6F, 0x41, - 0x6E, 0x64, 0x53, 0x74, 0x6F, 0x70, 0x00, 0x64, 0x75, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x4D, 0x6F, 0x76, 0x69, 0x65, 0x43, 0x6C, 0x69, 0x70, 0x00, 0x72, 0x65, 0x6D, 0x6F, 0x76, 0x65, - 0x4D, 0x6F, 0x76, 0x69, 0x65, 0x43, 0x6C, 0x69, 0x70, 0x00, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, - 0x72, 0x61, 0x67, 0x00, 0x73, 0x74, 0x6F, 0x70, 0x44, 0x72, 0x61, 0x67, 0x00, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x65, 0x78, 0x74, 0x46, 0x69, 0x65, 0x6C, 0x64, 0x00, 0x36, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x45, 0x6D, 0x70, 0x74, 0x79, 0x4D, 0x6F, 0x76, 0x69, 0x65, 0x43, 0x6C, - 0x69, 0x70, 0x2C, 0x36, 0x62, 0x65, 0x67, 0x69, 0x6E, 0x46, 0x69, 0x6C, 0x6C, 0x2C, 0x36, 0x62, - 0x65, 0x67, 0x69, 0x6E, 0x47, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6E, 0x74, 0x46, 0x69, 0x6C, 0x6C, - 0x2C, 0x36, 0x6D, 0x6F, 0x76, 0x65, 0x54, 0x6F, 0x2C, 0x36, 0x6C, 0x69, 0x6E, 0x65, 0x54, 0x6F, - 0x2C, 0x36, 0x63, 0x75, 0x72, 0x76, 0x65, 0x54, 0x6F, 0x2C, 0x36, 0x6C, 0x69, 0x6E, 0x65, 0x53, - 0x74, 0x79, 0x6C, 0x65, 0x2C, 0x36, 0x65, 0x6E, 0x64, 0x46, 0x69, 0x6C, 0x6C, 0x2C, 0x36, 0x63, - 0x6C, 0x65, 0x61, 0x72, 0x00, 0x54, 0x65, 0x78, 0x74, 0x46, 0x69, 0x65, 0x6C, 0x64, 0x00, 0x67, - 0x65, 0x74, 0x46, 0x6F, 0x6E, 0x74, 0x4C, 0x69, 0x73, 0x74, 0x00, 0x67, 0x65, 0x74, 0x54, 0x65, - 0x78, 0x74, 0x46, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x00, 0x73, 0x65, 0x74, 0x54, 0x65, 0x78, 0x74, - 0x46, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x00, 0x72, 0x65, 0x6D, 0x6F, 0x76, 0x65, 0x54, 0x65, 0x78, - 0x74, 0x46, 0x69, 0x65, 0x6C, 0x64, 0x00, 0x67, 0x65, 0x74, 0x4E, 0x65, 0x77, 0x54, 0x65, 0x78, - 0x74, 0x46, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x00, 0x73, 0x65, 0x74, 0x4E, 0x65, 0x77, 0x54, 0x65, - 0x78, 0x74, 0x46, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x00, 0x72, 0x65, 0x70, 0x6C, 0x61, 0x63, 0x65, - 0x54, 0x65, 0x78, 0x74, 0x00, 0x54, 0x65, 0x78, 0x74, 0x46, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x00, - 0x53, 0x74, 0x79, 0x6C, 0x65, 0x53, 0x68, 0x65, 0x65, 0x74, 0x00, 0x5F, 0x63, 0x6F, 0x70, 0x79, - 0x00, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x00, 0x6F, 0x5F, 0x6E, 0x65, 0x77, 0x00, 0x70, 0x72, - 0x6F, 0x70, 0x00, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x00, 0x5F, 0x63, 0x73, 0x73, 0x00, 0x5F, 0x73, - 0x74, 0x79, 0x6C, 0x65, 0x73, 0x00, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x00, 0x67, 0x65, 0x74, - 0x53, 0x74, 0x79, 0x6C, 0x65, 0x00, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x73, 0x65, 0x74, 0x53, 0x74, - 0x79, 0x6C, 0x65, 0x00, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x00, 0x64, 0x6F, 0x54, 0x72, 0x61, 0x6E, - 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x00, 0x67, 0x65, 0x74, 0x53, 0x74, 0x79, 0x6C, 0x65, 0x4E, 0x61, - 0x6D, 0x65, 0x73, 0x00, 0x74, 0x6D, 0x70, 0x00, 0x6E, 0x61, 0x6D, 0x65, 0x73, 0x00, 0x74, 0x72, - 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x00, 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x00, 0x74, - 0x65, 0x78, 0x74, 0x41, 0x6C, 0x69, 0x67, 0x6E, 0x00, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x00, 0x66, - 0x6F, 0x6E, 0x74, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x00, 0x62, 0x6F, 0x6C, 0x64, 0x00, 0x6E, - 0x6F, 0x72, 0x6D, 0x61, 0x6C, 0x00, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x00, 0x70, 0x61, 0x72, 0x73, - 0x65, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x00, 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x00, 0x66, - 0x6F, 0x6E, 0x74, 0x46, 0x61, 0x6D, 0x69, 0x6C, 0x79, 0x00, 0x66, 0x6F, 0x6E, 0x74, 0x00, 0x70, - 0x61, 0x72, 0x73, 0x65, 0x43, 0x53, 0x53, 0x46, 0x6F, 0x6E, 0x74, 0x46, 0x61, 0x6D, 0x69, 0x6C, - 0x79, 0x00, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6E, 0x64, 0x65, 0x6E, 0x74, 0x00, 0x69, 0x6E, 0x64, - 0x65, 0x6E, 0x74, 0x00, 0x70, 0x61, 0x72, 0x73, 0x65, 0x49, 0x6E, 0x74, 0x00, 0x66, 0x6F, 0x6E, - 0x74, 0x53, 0x74, 0x79, 0x6C, 0x65, 0x00, 0x69, 0x74, 0x61, 0x6C, 0x69, 0x63, 0x00, 0x6B, 0x65, - 0x72, 0x6E, 0x69, 0x6E, 0x67, 0x00, 0x74, 0x72, 0x75, 0x65, 0x00, 0x66, 0x61, 0x6C, 0x73, 0x65, - 0x00, 0x6C, 0x65, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x00, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x4C, - 0x65, 0x66, 0x74, 0x00, 0x6C, 0x65, 0x66, 0x74, 0x4D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x00, 0x6C, - 0x65, 0x74, 0x74, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x69, 0x6E, 0x67, 0x00, 0x6D, 0x61, 0x72, - 0x67, 0x69, 0x6E, 0x52, 0x69, 0x67, 0x68, 0x74, 0x00, 0x72, 0x69, 0x67, 0x68, 0x74, 0x4D, 0x61, - 0x72, 0x67, 0x69, 0x6E, 0x00, 0x66, 0x6F, 0x6E, 0x74, 0x53, 0x69, 0x7A, 0x65, 0x00, 0x73, 0x69, - 0x7A, 0x65, 0x00, 0x74, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x00, 0x75, 0x6E, 0x64, 0x65, 0x72, 0x6C, 0x69, 0x6E, 0x65, 0x00, 0x6E, 0x6F, 0x6E, 0x65, - 0x00, 0x70, 0x61, 0x72, 0x73, 0x65, 0x43, 0x53, 0x53, 0x00, 0x63, 0x73, 0x73, 0x00, 0x70, 0x61, - 0x72, 0x73, 0x65, 0x43, 0x53, 0x53, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x6E, 0x61, 0x6C, 0x00, 0x72, - 0x65, 0x73, 0x75, 0x6C, 0x74, 0x00, 0x6E, 0x75, 0x6C, 0x6C, 0x00, 0x70, 0x61, 0x72, 0x73, 0x65, - 0x00, 0x37, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 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, 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, 0x9B, 0x12, 0x00, - 0x41, 0x73, 0x42, 0x72, 0x6F, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x9B, 0x0D, 0x00, 0x4C, 0x6F, 0x61, 0x64, 0x56, 0x61, 0x72, 0x73, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x96, 0x13, 0x00, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, - 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x13, 0x00, 0x08, 0x02, 0x07, - 0x01, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, - 0x3D, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x03, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x04, 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, 0x03, 0x1C, 0x96, 0x07, 0x00, 0x07, - 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x13, - 0x00, 0x08, 0x07, 0x07, 0x0C, 0x00, 0x00, 0x00, 0x07, 0x65, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, - 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0x08, 0x9B, 0x07, 0x00, 0x00, 0x01, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0A, - 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0x0B, 0x52, 0x17, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, - 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0C, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x52, - 0x17, 0x96, 0x02, 0x00, 0x05, 0x01, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0x0B, 0x9B, 0x07, 0x00, 0x00, 0x01, 0x00, 0x78, 0x00, 0x8F, 0x00, 0x96, 0x04, 0x00, - 0x08, 0x0E, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0C, 0x4E, 0x3C, 0x96, 0x02, 0x00, 0x08, - 0x0F, 0x41, 0x96, 0x07, 0x00, 0x08, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x99, 0x02, 0x00, - 0x09, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0F, 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x0F, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x10, 0x4E, 0x48, 0x12, 0x9D, - 0x02, 0x00, 0x42, 0x00, 0x96, 0x02, 0x00, 0x08, 0x0E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0F, 0x1C, - 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x23, 0x00, 0x96, 0x07, - 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0F, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x02, 0x00, 0x00, - 0x00, 0x08, 0x0E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x11, 0x52, 0x17, 0x96, 0x02, 0x00, 0x05, 0x01, - 0x3E, 0x99, 0x02, 0x00, 0x9C, 0xFF, 0x96, 0x02, 0x00, 0x05, 0x00, 0x3E, 0x4F, 0x96, 0x02, 0x00, - 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x12, 0x9B, 0x07, 0x00, 0x00, 0x01, 0x00, 0x6F, 0x00, - 0x73, 0x00, 0x96, 0x02, 0x00, 0x08, 0x13, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x07, 0x07, 0x0C, 0x00, - 0x00, 0x00, 0x07, 0x65, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, - 0x96, 0x02, 0x00, 0x08, 0x13, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x08, 0x08, 0x06, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0x08, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x13, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x0B, - 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x13, 0x1C, - 0x96, 0x07, 0x00, 0x08, 0x0C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4F, 0x96, 0x09, 0x00, 0x07, - 0x83, 0x00, 0x00, 0x00, 0x08, 0x14, 0x08, 0x13, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, - 0x00, 0x08, 0x05, 0x3D, 0x17, 0x4F, 0x96, 0x08, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x02, 0x08, - 0x06, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x8C, - 0x00, 0x08, 0x15, 0x08, 0x16, 0x07, 0x12, 0x00, 0x00, 0x00, 0x08, 0x17, 0x07, 0x08, 0x00, 0x00, - 0x00, 0x08, 0x18, 0x07, 0x14, 0x00, 0x00, 0x00, 0x08, 0x19, 0x07, 0x11, 0x00, 0x00, 0x00, 0x08, - 0x1A, 0x07, 0x2E, 0x00, 0x00, 0x00, 0x08, 0x1B, 0x07, 0x28, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x07, - 0x23, 0x00, 0x00, 0x00, 0x08, 0x1D, 0x07, 0x0D, 0x00, 0x00, 0x00, 0x08, 0x1E, 0x07, 0x1B, 0x00, - 0x00, 0x00, 0x08, 0x1F, 0x07, 0x24, 0x00, 0x00, 0x00, 0x08, 0x20, 0x07, 0x2D, 0x00, 0x00, 0x00, - 0x08, 0x21, 0x07, 0x25, 0x00, 0x00, 0x00, 0x08, 0x22, 0x07, 0x22, 0x00, 0x00, 0x00, 0x08, 0x23, - 0x07, 0x21, 0x00, 0x00, 0x00, 0x08, 0x24, 0x07, 0x27, 0x00, 0x00, 0x00, 0x08, 0x25, 0x07, 0x10, - 0x00, 0x00, 0x00, 0x08, 0x26, 0x07, 0x20, 0x00, 0x00, 0x00, 0x08, 0x27, 0x07, 0x09, 0x00, 0x00, - 0x00, 0x08, 0x28, 0x07, 0x26, 0x00, 0x00, 0x00, 0x07, 0x13, 0x00, 0x00, 0x00, 0x43, 0x1D, 0x96, - 0x09, 0x00, 0x08, 0x29, 0x07, 0x20, 0x03, 0x00, 0x00, 0x08, 0x15, 0x1C, 0x96, 0x07, 0x00, 0x07, - 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x15, 0x1C, 0x96, 0x07, - 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x12, 0x52, 0x17, - 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x15, 0x1C, 0x96, 0x07, 0x00, 0x07, - 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x07, 0x00, 0x08, 0x2A, 0x07, 0x00, 0x00, - 0x00, 0x00, 0x43, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x2A, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x2B, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, - 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x2A, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x2C, 0x07, 0x01, 0x00, - 0x00, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, - 0x96, 0x02, 0x00, 0x08, 0x2A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x06, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x12, 0x52, 0x17, 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, - 0x02, 0x08, 0x2A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, - 0x96, 0x07, 0x00, 0x08, 0x2D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1D, 0x96, 0x02, 0x00, 0x08, - 0x2D, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x12, 0x52, 0x17, 0x96, 0x0E, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x2E, 0x07, 0x9A, - 0x02, 0x00, 0x00, 0x08, 0x2D, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x02, - 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x04, - 0x00, 0x08, 0x31, 0x08, 0x32, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x33, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, - 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, - 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x34, 0x07, 0x03, 0x00, 0x00, 0x00, - 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, - 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x35, 0x9B, - 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x36, 0x9B, 0x09, 0x00, 0x00, 0x01, 0x00, 0x73, - 0x72, 0x63, 0x00, 0x64, 0x00, 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x37, - 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x38, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D, - 0x02, 0x00, 0x19, 0x00, 0x96, 0x09, 0x00, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x09, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x35, 0x52, 0x17, 0x99, 0x02, 0x00, 0x2C, 0x00, 0x96, 0x02, 0x00, - 0x08, 0x38, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0x34, 0x52, 0x17, 0x96, 0x09, 0x00, 0x05, 0x01, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, - 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x35, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, - 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x39, 0x9B, 0x05, 0x00, 0x00, 0x00, - 0x00, 0xB3, 0x00, 0x96, 0x03, 0x00, 0x08, 0x3A, 0x02, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x09, 0x46, - 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02, 0x00, 0x91, 0x00, 0x96, 0x04, - 0x00, 0x08, 0x0A, 0x04, 0x00, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x3A, 0x1C, 0x96, 0x01, 0x00, 0x02, - 0x49, 0x9D, 0x02, 0x00, 0x41, 0x00, 0x96, 0x02, 0x00, 0x08, 0x3A, 0x4C, 0x1C, 0x96, 0x04, 0x00, - 0x08, 0x3D, 0x08, 0x0A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x3B, 0x3D, - 0x47, 0x96, 0x02, 0x00, 0x08, 0x3C, 0x47, 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x0A, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x3B, 0x3D, 0x47, - 0x47, 0x1D, 0x99, 0x02, 0x00, 0x33, 0x00, 0x96, 0x04, 0x00, 0x08, 0x3A, 0x08, 0x0A, 0x1C, 0x96, - 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x3B, 0x3D, 0x96, 0x02, 0x00, 0x08, 0x3C, 0x47, - 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, 0x4E, 0x96, 0x07, 0x00, - 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x3B, 0x3D, 0x47, 0x1D, 0x99, 0x02, 0x00, 0x61, 0xFF, 0x96, - 0x02, 0x00, 0x08, 0x3A, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x3E, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, - 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x3F, 0x4E, 0x3E, 0x4F, 0x96, 0x02, - 0x00, 0x08, 0x2F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x40, 0x9B, - 0x05, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x41, 0x4E, 0x3E, 0x4F, 0x96, 0x08, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x02, 0x08, 0x2F, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, - 0x05, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0x42, 0x07, 0x10, 0x00, 0x00, 0x00, 0x07, 0xF4, 0x01, - 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x43, 0x3D, 0x1D, 0x96, 0x0E, 0x00, 0x07, 0x06, - 0x00, 0x00, 0x00, 0x08, 0x44, 0x07, 0xF4, 0x01, 0x00, 0x00, 0x08, 0x42, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x30, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, - 0x13, 0x00, 0x08, 0x45, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, - 0x00, 0x00, 0x00, 0x08, 0x43, 0x3D, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x45, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x46, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, - 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x45, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x47, 0x07, 0x02, 0x00, 0x00, - 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, - 0x02, 0x00, 0x08, 0x45, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x48, - 0x07, 0x03, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, - 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x45, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, - 0x13, 0x00, 0x08, 0x49, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, - 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x45, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4A, 0x07, 0x05, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, - 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x45, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x39, 0x07, 0x06, 0x00, 0x00, - 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, - 0x02, 0x00, 0x08, 0x45, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4B, - 0x07, 0x07, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, - 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x45, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, - 0x13, 0x00, 0x08, 0x4C, 0x07, 0x08, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, - 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x13, 0x00, 0x08, 0x4D, 0x07, 0x09, 0x00, 0x00, - 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x43, 0x3D, 0x1D, 0x96, - 0x02, 0x00, 0x08, 0x4D, 0x1C, 0x96, 0x10, 0x00, 0x08, 0x30, 0x08, 0x4E, 0x07, 0x01, 0x00, 0x00, - 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x45, 0x40, 0x4F, 0x96, 0x09, 0x00, 0x07, 0x03, 0x00, - 0x00, 0x00, 0x08, 0x30, 0x08, 0x4D, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, - 0x05, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x4D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, - 0x13, 0x00, 0x08, 0x33, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, - 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x4D, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4F, 0x07, 0x0A, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, - 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x4D, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x50, 0x07, 0x0B, 0x00, 0x00, - 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, - 0x02, 0x00, 0x08, 0x4D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x51, - 0x07, 0x0C, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, - 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x4D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, - 0x02, 0x00, 0x08, 0x35, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, - 0x08, 0x4D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x36, 0x9B, 0x09, - 0x00, 0x00, 0x01, 0x00, 0x73, 0x72, 0x63, 0x00, 0x72, 0x00, 0x96, 0x02, 0x00, 0x08, 0x38, 0x1C, - 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x27, 0x00, 0x96, 0x02, 0x00, 0x08, 0x09, - 0x1C, 0x96, 0x04, 0x00, 0x08, 0x37, 0x05, 0x00, 0x4F, 0x96, 0x09, 0x00, 0x05, 0x00, 0x07, 0x01, - 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x35, 0x52, 0x17, 0x99, 0x02, 0x00, - 0x3A, 0x00, 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x37, 0x05, 0x01, 0x4F, - 0x96, 0x02, 0x00, 0x08, 0x38, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x09, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x51, 0x52, 0x17, 0x96, 0x09, 0x00, 0x05, 0x01, 0x07, 0x01, 0x00, - 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x35, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, - 0x08, 0x4D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x3E, 0x9B, 0x05, - 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0x3F, 0x4E, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x4D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, - 0x96, 0x02, 0x00, 0x08, 0x40, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x96, 0x02, 0x00, - 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x41, 0x4E, 0x3E, 0x4F, 0x96, 0x07, 0x00, 0x08, 0x52, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96, 0x07, 0x00, - 0x08, 0x53, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96, - 0x02, 0x00, 0x08, 0x53, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x54, 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, 0x52, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x53, 0x4E, 0x96, 0x02, - 0x00, 0x08, 0x54, 0x52, 0x17, 0x96, 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x53, - 0x4E, 0x96, 0x02, 0x00, 0x08, 0x54, 0x3A, 0x17, 0x96, 0x02, 0x00, 0x08, 0x55, 0x9B, 0x0C, 0x00, - 0x00, 0x01, 0x00, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x27, 0x00, 0x96, 0x02, 0x00, 0x08, - 0x09, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x56, 0x08, 0x56, 0x1C, 0x4F, 0x96, 0x08, 0x00, 0x07, 0x07, - 0x00, 0x00, 0x00, 0x02, 0x08, 0x09, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, - 0x05, 0x3D, 0x17, 0x1D, 0x96, 0x09, 0x00, 0x08, 0x57, 0x07, 0xBC, 0x02, 0x00, 0x00, 0x08, 0x55, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x55, 0x1C, 0x96, - 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, - 0x17, 0x96, 0x02, 0x00, 0x08, 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, - 0x08, 0x59, 0x9B, 0x0C, 0x00, 0x00, 0x01, 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, 0x5B, - 0x00, 0x96, 0x09, 0x00, 0x08, 0x5C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x5A, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0x5B, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x5C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x5D, - 0x49, 0x9D, 0x02, 0x00, 0x2D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x5C, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0x5E, 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, 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x5F, 0x9B, 0x17, - 0x00, 0x00, 0x03, 0x00, 0x75, 0x72, 0x6C, 0x00, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x6D, - 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, 0x97, 0x00, 0x96, 0x02, 0x00, 0x08, 0x56, 0x1C, 0x44, 0x96, - 0x02, 0x00, 0x08, 0x60, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x08, 0x00, 0x96, 0x04, 0x00, 0x08, 0x56, - 0x08, 0x4E, 0x1D, 0x96, 0x04, 0x00, 0x08, 0x61, 0x08, 0x5A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, - 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x59, 0x52, 0x3C, 0x96, 0x02, 0x00, - 0x08, 0x61, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, 0x3E, - 0x00, 0x96, 0x02, 0x00, 0x08, 0x61, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x49, - 0x9D, 0x02, 0x00, 0x15, 0x00, 0x96, 0x02, 0x00, 0x08, 0x62, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x56, - 0x1C, 0x9A, 0x01, 0x00, 0x02, 0x99, 0x02, 0x00, 0x10, 0x00, 0x96, 0x02, 0x00, 0x08, 0x62, 0x1C, - 0x96, 0x02, 0x00, 0x08, 0x56, 0x1C, 0x9A, 0x01, 0x00, 0x01, 0x99, 0x02, 0x00, 0x10, 0x00, 0x96, - 0x02, 0x00, 0x08, 0x62, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x56, 0x1C, 0x9A, 0x01, 0x00, 0x00, 0x4F, - 0x96, 0x02, 0x00, 0x08, 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, - 0x63, 0x9B, 0x10, 0x00, 0x00, 0x02, 0x00, 0x75, 0x72, 0x6C, 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, - 0x64, 0x00, 0x99, 0x00, 0x96, 0x04, 0x00, 0x08, 0x61, 0x08, 0x5A, 0x1C, 0x96, 0x07, 0x00, 0x07, - 0x01, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x59, 0x52, 0x3C, 0x96, 0x02, - 0x00, 0x08, 0x09, 0x1C, 0x20, 0x96, 0x02, 0x00, 0x08, 0x61, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, 0x4A, 0x00, 0x96, 0x02, 0x00, 0x08, 0x61, 0x1C, 0x96, - 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, 0x1B, 0x00, 0x96, 0x02, 0x00, - 0x08, 0x62, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x64, 0x4E, 0x9A, - 0x01, 0x00, 0xC2, 0x99, 0x02, 0x00, 0x16, 0x00, 0x96, 0x02, 0x00, 0x08, 0x62, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x64, 0x4E, 0x9A, 0x01, 0x00, 0xC1, 0x99, 0x02, - 0x00, 0x16, 0x00, 0x96, 0x02, 0x00, 0x08, 0x62, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, - 0x02, 0x00, 0x08, 0x64, 0x4E, 0x9A, 0x01, 0x00, 0xC0, 0x8B, 0x01, 0x00, 0x00, 0x4F, 0x96, 0x02, - 0x00, 0x08, 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x65, 0x9B, - 0x10, 0x00, 0x00, 0x02, 0x00, 0x75, 0x72, 0x6C, 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, - 0x99, 0x00, 0x96, 0x04, 0x00, 0x08, 0x61, 0x08, 0x5A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, - 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x59, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, - 0x09, 0x1C, 0x20, 0x96, 0x02, 0x00, 0x08, 0x61, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x49, 0x9D, 0x02, 0x00, 0x4A, 0x00, 0x96, 0x02, 0x00, 0x08, 0x61, 0x1C, 0x96, 0x05, 0x00, - 0x07, 0x01, 0x00, 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, 0x1B, 0x00, 0x96, 0x02, 0x00, 0x08, 0x62, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x64, 0x4E, 0x9A, 0x01, 0x00, - 0x42, 0x99, 0x02, 0x00, 0x16, 0x00, 0x96, 0x02, 0x00, 0x08, 0x62, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x64, 0x4E, 0x9A, 0x01, 0x00, 0x41, 0x99, 0x02, 0x00, 0x16, - 0x00, 0x96, 0x02, 0x00, 0x08, 0x62, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x64, 0x4E, 0x9A, 0x01, 0x00, 0x40, 0x8B, 0x01, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, - 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x66, 0x07, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, - 0x96, 0x02, 0x00, 0x08, 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, - 0x67, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, - 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, - 0x96, 0x13, 0x00, 0x08, 0x68, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, - 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x58, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x69, 0x07, 0x05, 0x00, 0x00, 0x00, 0x07, 0x84, - 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, - 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x40, 0x07, 0x06, 0x00, - 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, - 0x96, 0x02, 0x00, 0x08, 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, - 0x3E, 0x07, 0x07, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, - 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, - 0x96, 0x13, 0x00, 0x08, 0x6A, 0x07, 0x0A, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, - 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x58, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x6B, 0x07, 0x0C, 0x00, 0x00, 0x00, 0x07, 0x84, - 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, - 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x6C, 0x07, 0x0D, 0x00, - 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, - 0x96, 0x02, 0x00, 0x08, 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, - 0x6D, 0x07, 0x0E, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, - 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, - 0x96, 0x13, 0x00, 0x08, 0x6E, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, - 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x58, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x6F, 0x07, 0x10, 0x00, 0x00, 0x00, 0x07, 0x84, - 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, - 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x70, 0x07, 0x11, 0x00, - 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, - 0x96, 0x02, 0x00, 0x08, 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, - 0x71, 0x07, 0x12, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, - 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, - 0x96, 0x13, 0x00, 0x08, 0x72, 0x07, 0x13, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, - 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x58, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x73, 0x07, 0x14, 0x00, 0x00, 0x00, 0x07, 0x84, - 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, - 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x74, 0x07, 0x15, 0x00, - 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, - 0x96, 0x02, 0x00, 0x08, 0x58, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, - 0x75, 0x07, 0xC8, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, - 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x09, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x08, 0x6A, 0x08, 0x58, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, - 0x05, 0x3D, 0x17, 0x96, 0x09, 0x00, 0x08, 0x76, 0x07, 0x85, 0x03, 0x00, 0x00, 0x08, 0x58, 0x1C, - 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x02, 0x08, 0x58, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0x30, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, - 0x96, 0x13, 0x00, 0x08, 0x77, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, - 0x02, 0x00, 0x00, 0x00, 0x08, 0x43, 0x3D, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x77, 0x1C, 0x96, 0x13, - 0x00, 0x08, 0x78, 0x07, 0xC9, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, - 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x77, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x79, 0x07, 0x65, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, - 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x77, 0x1C, - 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x7A, 0x07, 0x66, 0x00, 0x00, 0x00, - 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, - 0x00, 0x08, 0x77, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x7B, 0x07, - 0x67, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, - 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x77, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, - 0x00, 0x08, 0x7C, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, - 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x77, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x7D, 0x07, 0x69, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, - 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x77, 0x1C, - 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x6A, 0x07, 0x6A, 0x00, 0x00, 0x00, - 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, - 0x00, 0x08, 0x77, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x7E, 0x07, - 0x6B, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, - 0x3D, 0x4F, 0x96, 0x09, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x08, 0x7E, 0x08, 0x77, 0x1C, 0x96, - 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, - 0x17, 0x96, 0x02, 0x00, 0x08, 0x77, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x07, 0x00, - 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x06, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x12, 0x52, 0x17, 0x96, - 0x08, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x02, 0x08, 0x77, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x30, - 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x08, 0x00, - 0x07, 0x83, 0x00, 0x00, 0x00, 0x02, 0x08, 0x77, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, - 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0x7F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, - 0x6E, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x43, 0x3D, 0x1D, 0x96, 0x02, 0x00, - 0x08, 0x77, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x71, 0x00, - 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x43, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x77, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x80, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, - 0x08, 0x81, 0x9B, 0x07, 0x00, 0x00, 0x01, 0x00, 0x6F, 0x00, 0x67, 0x00, 0x96, 0x02, 0x00, 0x08, - 0x13, 0x1C, 0x44, 0x96, 0x02, 0x00, 0x08, 0x82, 0x49, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x05, 0x00, - 0x96, 0x01, 0x00, 0x02, 0x3E, 0x96, 0x07, 0x00, 0x08, 0x83, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, - 0x3C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x02, 0x49, - 0x9D, 0x02, 0x00, 0x27, 0x00, 0x96, 0x04, 0x00, 0x08, 0x84, 0x04, 0x00, 0x3C, 0x96, 0x02, 0x00, - 0x08, 0x83, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x1C, 0x96, - 0x02, 0x00, 0x08, 0x84, 0x1C, 0x4E, 0x4F, 0x99, 0x02, 0x00, 0xCB, 0xFF, 0x96, 0x02, 0x00, 0x08, - 0x83, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x77, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x80, 0x4E, - 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x85, 0x9B, 0x05, 0x00, 0x00, 0x00, - 0x00, 0x36, 0x00, 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x86, 0x07, 0x00, - 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x87, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x88, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x77, 0x1C, - 0x96, 0x02, 0x00, 0x08, 0x80, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, - 0x89, 0x9B, 0x0A, 0x00, 0x00, 0x01, 0x00, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x25, 0x00, 0x96, 0x02, - 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x86, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x8A, 0x1C, - 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0x81, 0x52, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x77, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x80, 0x4E, - 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x8B, 0x9B, 0x10, 0x00, 0x00, 0x02, - 0x00, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x00, 0x79, 0x00, 0x96, 0x02, - 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x86, 0x4E, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x12, - 0x00, 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x86, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x86, 0x4E, 0x96, - 0x02, 0x00, 0x08, 0x8A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8C, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, - 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x81, 0x52, 0x4F, 0x96, 0x02, 0x00, - 0x08, 0x8A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0x8D, 0x52, 0x17, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, - 0x96, 0x02, 0x00, 0x08, 0x88, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x77, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0x80, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x8E, 0x9B, - 0x05, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x96, 0x04, 0x00, 0x08, 0x8F, 0x08, 0x09, 0x1C, 0x96, - 0x02, 0x00, 0x08, 0x86, 0x4E, 0x3C, 0x96, 0x07, 0x00, 0x08, 0x90, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x42, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x8F, 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x02, - 0x49, 0x9D, 0x02, 0x00, 0x25, 0x00, 0x96, 0x04, 0x00, 0x08, 0x84, 0x04, 0x00, 0x3C, 0x96, 0x02, - 0x00, 0x08, 0x84, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x90, 0x1C, 0x96, - 0x02, 0x00, 0x08, 0x0D, 0x52, 0x17, 0x99, 0x02, 0x00, 0xCD, 0xFF, 0x96, 0x02, 0x00, 0x08, 0x90, - 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x77, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x80, 0x4E, 0x96, - 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x8D, 0x9B, 0x0A, 0x00, 0x00, 0x01, 0x00, - 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x5C, 0x00, 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x87, 0x4E, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x12, 0x00, 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, - 0x96, 0x07, 0x00, 0x08, 0x87, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, - 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x87, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x8A, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x86, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x8A, 0x1C, - 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0x91, 0x52, 0x4F, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x77, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x80, 0x4E, - 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x91, 0x9B, 0x0B, 0x00, 0x00, 0x01, - 0x00, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x00, 0x9D, 0x03, 0x96, 0x02, 0x00, 0x08, 0x8C, 0x1C, 0x96, - 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x05, 0x00, 0x96, 0x01, 0x00, 0x02, 0x3E, 0x96, - 0x09, 0x00, 0x08, 0x92, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7F, 0x40, 0x3C, 0x96, 0x02, 0x00, - 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x93, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x15, 0x00, 0x96, - 0x02, 0x00, 0x08, 0x92, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x94, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x93, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x95, 0x4E, - 0x96, 0x02, 0x00, 0x08, 0x96, 0x49, 0x9D, 0x02, 0x00, 0x2B, 0x00, 0x96, 0x02, 0x00, 0x08, 0x8C, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x95, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x97, 0x49, 0x12, 0x9D, 0x02, - 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x96, 0x05, 0x00, - 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x96, 0x04, 0x00, 0x08, - 0x96, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x98, 0x4E, - 0x12, 0x9D, 0x02, 0x00, 0x41, 0x00, 0x96, 0x04, 0x00, 0x08, 0x8F, 0x08, 0x8C, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0x98, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, - 0x02, 0x00, 0x08, 0x99, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x8F, 0x1C, 0x96, 0x01, 0x00, 0x02, - 0x49, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x0F, 0x00, 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x96, 0x04, - 0x00, 0x08, 0x98, 0x08, 0x8F, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x96, 0x04, 0x00, - 0x08, 0x9A, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9A, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, - 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9B, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x26, 0x00, 0x96, 0x02, - 0x00, 0x08, 0x92, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x9C, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0x9B, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x9D, 0x52, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9E, 0x4E, - 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x96, 0x04, 0x00, 0x08, - 0x9F, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9E, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, - 0x00, 0x00, 0x08, 0xA0, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0xA1, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xA2, 0x49, 0x9D, 0x02, 0x00, 0x2B, 0x00, 0x96, 0x02, 0x00, - 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA1, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x97, 0x49, 0x12, - 0x9D, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA2, - 0x05, 0x00, 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x96, 0x04, - 0x00, 0x08, 0xA2, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0xA3, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xA4, 0x49, 0x9D, 0x02, 0x00, 0x4F, 0x00, 0x96, 0x02, 0x00, - 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA3, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xA5, 0x49, 0x9D, - 0x02, 0x00, 0x25, 0x00, 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA3, 0x08, - 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA3, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, - 0x08, 0xA0, 0x3D, 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x96, - 0x04, 0x00, 0x08, 0xA3, 0x05, 0x00, 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, - 0x92, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA3, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x8C, 0x1C, - 0x96, 0x02, 0x00, 0x08, 0xA6, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, - 0x92, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA6, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA6, 0x4E, - 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xA0, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, - 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA7, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, - 0x00, 0x08, 0x92, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA8, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0xA7, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xA0, 0x3D, 0x4F, 0x96, 0x02, - 0x00, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA9, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, - 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA9, 0x08, 0x8C, 0x1C, 0x96, 0x02, - 0x00, 0x08, 0xA9, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xA0, 0x3D, 0x4F, - 0x96, 0x02, 0x00, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xAA, 0x4E, 0x12, 0x9D, 0x02, 0x00, - 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xAB, 0x08, 0x8C, 0x1C, - 0x96, 0x02, 0x00, 0x08, 0xAA, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xA0, - 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xAC, 0x4E, 0x12, 0x9D, - 0x02, 0x00, 0x3B, 0x00, 0x96, 0x04, 0x00, 0x08, 0x8F, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0xAC, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xA0, 0x3D, 0x3C, 0x96, 0x07, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x8F, 0x1C, 0x48, 0x12, 0x9D, 0x02, 0x00, 0x0F, 0x00, - 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xAD, 0x08, 0x8F, 0x1C, 0x4F, 0x96, - 0x02, 0x00, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xAE, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xAF, - 0x49, 0x9D, 0x02, 0x00, 0x2B, 0x00, 0x96, 0x02, 0x00, 0x08, 0x8C, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0xAE, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xB0, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, - 0x00, 0x08, 0x92, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xAF, 0x05, 0x00, 0x4F, 0x99, 0x02, 0x00, 0x0E, - 0x00, 0x96, 0x02, 0x00, 0x08, 0x92, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xAF, 0x05, 0x01, 0x4F, 0x96, - 0x02, 0x00, 0x08, 0x92, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x77, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x80, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xB1, 0x9B, 0x09, - 0x00, 0x00, 0x01, 0x00, 0x63, 0x73, 0x73, 0x00, 0xDA, 0x00, 0x96, 0x04, 0x00, 0x08, 0xB4, 0x08, - 0xB2, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0xB3, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xB4, 0x1C, 0x44, 0x96, 0x02, 0x00, 0x08, 0xB5, - 0x49, 0x12, 0x9D, 0x02, 0x00, 0x06, 0x00, 0x96, 0x02, 0x00, 0x05, 0x00, 0x3E, 0x96, 0x02, 0x00, - 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x86, 0x4E, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x12, 0x00, - 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x86, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB4, 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x02, - 0x49, 0x9D, 0x02, 0x00, 0x56, 0x00, 0x96, 0x04, 0x00, 0x08, 0x84, 0x04, 0x00, 0x3C, 0x96, 0x02, - 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x86, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x84, 0x1C, - 0x96, 0x02, 0x00, 0x08, 0xB4, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, 0x1C, 0x4E, 0x96, 0x07, 0x00, - 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x81, 0x52, 0x4F, 0x96, - 0x02, 0x00, 0x08, 0x84, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, - 0x96, 0x02, 0x00, 0x08, 0x8D, 0x52, 0x17, 0x99, 0x02, 0x00, 0x9C, 0xFF, 0x96, 0x07, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x88, 0x52, 0x17, 0x96, 0x02, - 0x00, 0x05, 0x01, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x77, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x80, - 0x4E, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x04, 0x00, 0x08, 0xB6, 0x08, 0x77, 0x1C, 0x96, - 0x02, 0x00, 0x08, 0x80, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xB1, - 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x77, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x80, 0x4E, 0x96, 0x02, - 0x00, 0x08, 0x30, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x33, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x2D, - 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, - 0x77, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x80, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, - 0x00, 0x08, 0x35, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, - 0x77, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x80, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x02, - 0x00, 0x08, 0x36, 0x9B, 0x09, 0x00, 0x00, 0x01, 0x00, 0x73, 0x72, 0x63, 0x00, 0x6B, 0x00, 0x96, - 0x02, 0x00, 0x08, 0x38, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x19, 0x00, - 0x96, 0x09, 0x00, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x35, 0x52, 0x17, 0x99, 0x02, 0x00, 0x41, 0x00, 0x96, 0x04, 0x00, 0x08, 0xB4, 0x08, 0x38, - 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, - 0xB6, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x09, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x37, 0x08, 0xB4, - 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB4, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, - 0x08, 0x09, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x35, 0x52, 0x17, 0x4F, 0x96, 0x0E, 0x00, 0x07, 0x64, - 0x00, 0x00, 0x00, 0x08, 0xB7, 0x07, 0x71, 0x00, 0x00, 0x00, 0x08, 0x77, 0x1C, 0x96, 0x02, 0x00, - 0x08, 0x80, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x03, 0x04, 0x00, 0x00, 0x02, 0x08, 0x77, - 0x1C, 0x96, 0x02, 0x00, 0x08, 0x80, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x30, 0x4E, 0x96, 0x07, 0x00, - 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x09, 0x00, 0x07, 0x03, 0x04, 0x00, - 0x00, 0x08, 0x80, 0x08, 0x77, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, - 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0xB8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFA, 0x00, 0x00, - 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x13, 0x00, 0x08, 0xB9, 0x07, - 0x01, 0x00, 0x00, 0x00, 0x07, 0xFA, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, - 0x3D, 0x1D, 0x96, 0x13, 0x00, 0x08, 0xBA, 0x07, 0x02, 0x00, 0x00, 0x00, 0x07, 0xFA, 0x00, 0x00, - 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x04, 0x00, 0x08, 0xBB, 0x08, - 0xB9, 0x1C, 0x1D, 0x96, 0x03, 0x00, 0x08, 0x13, 0x02, 0x1D, 0x96, 0x0D, 0x00, 0x07, 0x06, 0x00, - 0x00, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x02, 0x08, 0x09, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x04, - 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x00 + 0x73, 0x00, 0x6D, 0x73, 0x67, 0x00, 0x75, 0x6E, 0x64, 0x65, 0x66, 0x69, 0x6E, 0x65, 0x64, 0x00, + 0x74, 0x68, 0x69, 0x73, 0x00, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x00, 0x45, 0x72, 0x72, + 0x6F, 0x72, 0x00, 0x70, 0x72, 0x6F, 0x74, 0x6F, 0x74, 0x79, 0x70, 0x65, 0x00, 0x6E, 0x61, 0x6D, + 0x65, 0x00, 0x74, 0x6F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x41, 0x73, 0x42, 0x72, 0x6F, + 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x00, 0x62, 0x72, 0x6F, 0x61, 0x64, 0x63, 0x61, + 0x73, 0x74, 0x4D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x00, 0x61, 0x64, 0x64, 0x4C, 0x69, 0x73, + 0x74, 0x65, 0x6E, 0x65, 0x72, 0x00, 0x78, 0x00, 0x72, 0x65, 0x6D, 0x6F, 0x76, 0x65, 0x4C, 0x69, + 0x73, 0x74, 0x65, 0x6E, 0x65, 0x72, 0x00, 0x5F, 0x6C, 0x69, 0x73, 0x74, 0x65, 0x6E, 0x65, 0x72, + 0x73, 0x00, 0x70, 0x75, 0x73, 0x68, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x6C, 0x65, 0x6E, 0x67, 0x74, + 0x68, 0x00, 0x73, 0x70, 0x6C, 0x69, 0x63, 0x65, 0x00, 0x69, 0x6E, 0x69, 0x74, 0x69, 0x61, 0x6C, + 0x69, 0x7A, 0x65, 0x00, 0x6F, 0x00, 0x62, 0x72, 0x6F, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x4D, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2C, 0x61, 0x64, 0x64, 0x4C, 0x69, 0x73, 0x74, 0x65, 0x6E, + 0x65, 0x72, 0x2C, 0x72, 0x65, 0x6D, 0x6F, 0x76, 0x65, 0x4C, 0x69, 0x73, 0x74, 0x65, 0x6E, 0x65, + 0x72, 0x2C, 0x5F, 0x6C, 0x69, 0x73, 0x74, 0x65, 0x6E, 0x65, 0x72, 0x73, 0x00, 0x4B, 0x65, 0x79, + 0x00, 0x41, 0x4C, 0x54, 0x00, 0x42, 0x41, 0x43, 0x4B, 0x53, 0x50, 0x41, 0x43, 0x45, 0x00, 0x43, + 0x41, 0x50, 0x53, 0x4C, 0x4F, 0x43, 0x4B, 0x00, 0x43, 0x4F, 0x4E, 0x54, 0x52, 0x4F, 0x4C, 0x00, + 0x44, 0x45, 0x4C, 0x45, 0x54, 0x45, 0x4B, 0x45, 0x59, 0x00, 0x44, 0x4F, 0x57, 0x4E, 0x00, 0x45, + 0x4E, 0x44, 0x00, 0x45, 0x4E, 0x54, 0x45, 0x52, 0x00, 0x45, 0x53, 0x43, 0x41, 0x50, 0x45, 0x00, + 0x48, 0x4F, 0x4D, 0x45, 0x00, 0x49, 0x4E, 0x53, 0x45, 0x52, 0x54, 0x00, 0x4C, 0x45, 0x46, 0x54, + 0x00, 0x50, 0x47, 0x44, 0x4E, 0x00, 0x50, 0x47, 0x55, 0x50, 0x00, 0x52, 0x49, 0x47, 0x48, 0x54, + 0x00, 0x53, 0x48, 0x49, 0x46, 0x54, 0x00, 0x53, 0x50, 0x41, 0x43, 0x45, 0x00, 0x54, 0x41, 0x42, + 0x00, 0x55, 0x50, 0x00, 0x67, 0x65, 0x74, 0x41, 0x73, 0x63, 0x69, 0x69, 0x2C, 0x67, 0x65, 0x74, + 0x43, 0x6F, 0x64, 0x65, 0x2C, 0x69, 0x73, 0x44, 0x6F, 0x77, 0x6E, 0x00, 0x4D, 0x6F, 0x75, 0x73, + 0x65, 0x00, 0x73, 0x68, 0x6F, 0x77, 0x00, 0x68, 0x69, 0x64, 0x65, 0x00, 0x53, 0x74, 0x61, 0x67, + 0x65, 0x00, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x4D, 0x6F, 0x64, 0x65, 0x2C, 0x61, 0x6C, 0x69, 0x67, + 0x6E, 0x2C, 0x77, 0x69, 0x64, 0x74, 0x68, 0x2C, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x00, 0x4C, + 0x6F, 0x61, 0x64, 0x56, 0x61, 0x72, 0x73, 0x00, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x00, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, + 0x78, 0x2D, 0x77, 0x77, 0x77, 0x2D, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x75, 0x72, 0x6C, 0x65, 0x6E, + 0x63, 0x6F, 0x64, 0x65, 0x64, 0x00, 0x6C, 0x6F, 0x61, 0x64, 0x00, 0x64, 0x65, 0x63, 0x6F, 0x64, + 0x65, 0x00, 0x6F, 0x6E, 0x4C, 0x6F, 0x61, 0x64, 0x00, 0x6F, 0x6E, 0x44, 0x61, 0x74, 0x61, 0x00, + 0x6C, 0x6F, 0x61, 0x64, 0x65, 0x64, 0x00, 0x73, 0x72, 0x63, 0x00, 0x73, 0x74, 0x72, 0x00, 0x65, + 0x73, 0x63, 0x61, 0x70, 0x65, 0x00, 0x3D, 0x00, 0x26, 0x00, 0x67, 0x65, 0x74, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x4C, 0x6F, 0x61, 0x64, 0x65, 0x64, 0x00, 0x5F, 0x62, 0x79, 0x74, 0x65, 0x73, 0x4C, + 0x6F, 0x61, 0x64, 0x65, 0x64, 0x00, 0x67, 0x65, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x54, 0x6F, + 0x74, 0x61, 0x6C, 0x00, 0x5F, 0x62, 0x79, 0x74, 0x65, 0x73, 0x54, 0x6F, 0x74, 0x61, 0x6C, 0x00, + 0x53, 0x6F, 0x75, 0x6E, 0x64, 0x00, 0x41, 0x53, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x6F, 0x72, 0x00, 0x73, 0x74, 0x6F, 0x70, 0x2C, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x53, + 0x6F, 0x75, 0x6E, 0x64, 0x2C, 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, 0x58, 0x4D, 0x4C, 0x4E, 0x6F, + 0x64, 0x65, 0x00, 0x63, 0x6C, 0x6F, 0x6E, 0x65, 0x4E, 0x6F, 0x64, 0x65, 0x00, 0x72, 0x65, 0x6D, + 0x6F, 0x76, 0x65, 0x4E, 0x6F, 0x64, 0x65, 0x00, 0x69, 0x6E, 0x73, 0x65, 0x72, 0x74, 0x42, 0x65, + 0x66, 0x6F, 0x72, 0x65, 0x00, 0x61, 0x70, 0x70, 0x65, 0x6E, 0x64, 0x43, 0x68, 0x69, 0x6C, 0x64, + 0x00, 0x68, 0x61, 0x73, 0x43, 0x68, 0x69, 0x6C, 0x64, 0x4E, 0x6F, 0x64, 0x65, 0x73, 0x00, 0x67, + 0x65, 0x74, 0x4E, 0x61, 0x6D, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x6F, 0x72, 0x50, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x00, 0x67, 0x65, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x46, 0x6F, + 0x72, 0x4E, 0x61, 0x6D, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x00, 0x58, 0x4D, 0x4C, 0x00, 0x00, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x78, 0x74, 0x4E, 0x6F, 0x64, 0x65, 0x00, 0x70, 0x61, 0x72, + 0x73, 0x65, 0x58, 0x4D, 0x4C, 0x00, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x00, 0x63, 0x61, 0x70, + 0x61, 0x62, 0x69, 0x6C, 0x69, 0x74, 0x69, 0x65, 0x73, 0x00, 0x51, 0x75, 0x65, 0x72, 0x79, 0x00, + 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x00, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x73, 0x65, 0x74, + 0x52, 0x47, 0x42, 0x2C, 0x73, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, + 0x2C, 0x67, 0x65, 0x74, 0x52, 0x47, 0x42, 0x2C, 0x67, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6E, 0x73, + 0x66, 0x6F, 0x72, 0x6D, 0x00, 0x4D, 0x6F, 0x76, 0x69, 0x65, 0x43, 0x6C, 0x69, 0x70, 0x00, 0x6D, + 0x65, 0x74, 0x68, 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, 0x74, 0x6F, 0x4C, 0x6F, 0x77, + 0x65, 0x72, 0x43, 0x61, 0x73, 0x65, 0x00, 0x6C, 0x6F, 0x77, 0x65, 0x72, 0x00, 0x70, 0x6F, 0x73, + 0x74, 0x00, 0x67, 0x65, 0x74, 0x00, 0x67, 0x65, 0x74, 0x55, 0x52, 0x4C, 0x00, 0x74, 0x79, 0x70, + 0x65, 0x00, 0x75, 0x72, 0x6C, 0x00, 0x6C, 0x6F, 0x61, 0x64, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6C, 0x65, 0x73, 0x00, 0x5F, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x6C, 0x6F, 0x61, 0x64, + 0x4D, 0x6F, 0x76, 0x69, 0x65, 0x00, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x4D, 0x6F, 0x76, 0x69, + 0x65, 0x00, 0x73, 0x77, 0x61, 0x70, 0x44, 0x65, 0x70, 0x74, 0x68, 0x73, 0x00, 0x68, 0x69, 0x74, + 0x54, 0x65, 0x73, 0x74, 0x00, 0x67, 0x65, 0x74, 0x42, 0x6F, 0x75, 0x6E, 0x64, 0x73, 0x00, 0x67, + 0x65, 0x74, 0x44, 0x65, 0x70, 0x74, 0x68, 0x00, 0x70, 0x6C, 0x61, 0x79, 0x00, 0x73, 0x74, 0x6F, + 0x70, 0x00, 0x6E, 0x65, 0x78, 0x74, 0x46, 0x72, 0x61, 0x6D, 0x65, 0x00, 0x70, 0x72, 0x65, 0x76, + 0x46, 0x72, 0x61, 0x6D, 0x65, 0x00, 0x67, 0x6F, 0x74, 0x6F, 0x41, 0x6E, 0x64, 0x50, 0x6C, 0x61, + 0x79, 0x00, 0x67, 0x6F, 0x74, 0x6F, 0x41, 0x6E, 0x64, 0x53, 0x74, 0x6F, 0x70, 0x00, 0x64, 0x75, + 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x65, 0x4D, 0x6F, 0x76, 0x69, 0x65, 0x43, 0x6C, 0x69, 0x70, + 0x00, 0x72, 0x65, 0x6D, 0x6F, 0x76, 0x65, 0x4D, 0x6F, 0x76, 0x69, 0x65, 0x43, 0x6C, 0x69, 0x70, + 0x00, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x72, 0x61, 0x67, 0x00, 0x73, 0x74, 0x6F, 0x70, 0x44, + 0x72, 0x61, 0x67, 0x00, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x78, 0x74, 0x46, 0x69, + 0x65, 0x6C, 0x64, 0x00, 0x36, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6D, 0x70, 0x74, 0x79, + 0x4D, 0x6F, 0x76, 0x69, 0x65, 0x43, 0x6C, 0x69, 0x70, 0x2C, 0x36, 0x62, 0x65, 0x67, 0x69, 0x6E, + 0x46, 0x69, 0x6C, 0x6C, 0x2C, 0x36, 0x62, 0x65, 0x67, 0x69, 0x6E, 0x47, 0x72, 0x61, 0x64, 0x69, + 0x65, 0x6E, 0x74, 0x46, 0x69, 0x6C, 0x6C, 0x2C, 0x36, 0x6D, 0x6F, 0x76, 0x65, 0x54, 0x6F, 0x2C, + 0x36, 0x6C, 0x69, 0x6E, 0x65, 0x54, 0x6F, 0x2C, 0x36, 0x63, 0x75, 0x72, 0x76, 0x65, 0x54, 0x6F, + 0x2C, 0x36, 0x6C, 0x69, 0x6E, 0x65, 0x53, 0x74, 0x79, 0x6C, 0x65, 0x2C, 0x36, 0x65, 0x6E, 0x64, + 0x46, 0x69, 0x6C, 0x6C, 0x2C, 0x36, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x00, 0x54, 0x65, 0x78, 0x74, + 0x46, 0x69, 0x65, 0x6C, 0x64, 0x00, 0x67, 0x65, 0x74, 0x46, 0x6F, 0x6E, 0x74, 0x4C, 0x69, 0x73, + 0x74, 0x00, 0x67, 0x65, 0x74, 0x54, 0x65, 0x78, 0x74, 0x46, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x00, + 0x73, 0x65, 0x74, 0x54, 0x65, 0x78, 0x74, 0x46, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x00, 0x72, 0x65, + 0x6D, 0x6F, 0x76, 0x65, 0x54, 0x65, 0x78, 0x74, 0x46, 0x69, 0x65, 0x6C, 0x64, 0x00, 0x67, 0x65, + 0x74, 0x4E, 0x65, 0x77, 0x54, 0x65, 0x78, 0x74, 0x46, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x00, 0x73, + 0x65, 0x74, 0x4E, 0x65, 0x77, 0x54, 0x65, 0x78, 0x74, 0x46, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x00, + 0x72, 0x65, 0x70, 0x6C, 0x61, 0x63, 0x65, 0x54, 0x65, 0x78, 0x74, 0x00, 0x54, 0x65, 0x78, 0x74, + 0x46, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x00, 0x53, 0x74, 0x79, 0x6C, 0x65, 0x53, 0x68, 0x65, 0x65, + 0x74, 0x00, 0x5F, 0x63, 0x6F, 0x70, 0x79, 0x00, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x00, 0x6F, + 0x5F, 0x6E, 0x65, 0x77, 0x00, 0x70, 0x72, 0x6F, 0x70, 0x00, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x00, + 0x5F, 0x63, 0x73, 0x73, 0x00, 0x5F, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x73, 0x00, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x00, 0x67, 0x65, 0x74, 0x53, 0x74, 0x79, 0x6C, 0x65, 0x00, 0x73, 0x65, 0x74, + 0x53, 0x74, 0x79, 0x6C, 0x65, 0x00, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x00, 0x64, 0x6F, 0x54, 0x72, + 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x00, 0x67, 0x65, 0x74, 0x53, 0x74, 0x79, 0x6C, 0x65, + 0x4E, 0x61, 0x6D, 0x65, 0x73, 0x00, 0x74, 0x6D, 0x70, 0x00, 0x6E, 0x61, 0x6D, 0x65, 0x73, 0x00, + 0x74, 0x72, 0x61, 0x6E, 0x73, 0x66, 0x6F, 0x72, 0x6D, 0x00, 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, + 0x00, 0x74, 0x65, 0x78, 0x74, 0x41, 0x6C, 0x69, 0x67, 0x6E, 0x00, 0x61, 0x6C, 0x69, 0x67, 0x6E, + 0x00, 0x66, 0x6F, 0x6E, 0x74, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x00, 0x62, 0x6F, 0x6C, 0x64, + 0x00, 0x6E, 0x6F, 0x72, 0x6D, 0x61, 0x6C, 0x00, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x00, 0x70, 0x61, + 0x72, 0x73, 0x65, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x00, 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, + 0x00, 0x66, 0x6F, 0x6E, 0x74, 0x46, 0x61, 0x6D, 0x69, 0x6C, 0x79, 0x00, 0x66, 0x6F, 0x6E, 0x74, + 0x00, 0x70, 0x61, 0x72, 0x73, 0x65, 0x43, 0x53, 0x53, 0x46, 0x6F, 0x6E, 0x74, 0x46, 0x61, 0x6D, + 0x69, 0x6C, 0x79, 0x00, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6E, 0x64, 0x65, 0x6E, 0x74, 0x00, 0x69, + 0x6E, 0x64, 0x65, 0x6E, 0x74, 0x00, 0x70, 0x61, 0x72, 0x73, 0x65, 0x49, 0x6E, 0x74, 0x00, 0x66, + 0x6F, 0x6E, 0x74, 0x53, 0x74, 0x79, 0x6C, 0x65, 0x00, 0x69, 0x74, 0x61, 0x6C, 0x69, 0x63, 0x00, + 0x6B, 0x65, 0x72, 0x6E, 0x69, 0x6E, 0x67, 0x00, 0x74, 0x72, 0x75, 0x65, 0x00, 0x66, 0x61, 0x6C, + 0x73, 0x65, 0x00, 0x6C, 0x65, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x00, 0x6D, 0x61, 0x72, 0x67, 0x69, + 0x6E, 0x4C, 0x65, 0x66, 0x74, 0x00, 0x6C, 0x65, 0x66, 0x74, 0x4D, 0x61, 0x72, 0x67, 0x69, 0x6E, + 0x00, 0x6C, 0x65, 0x74, 0x74, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x69, 0x6E, 0x67, 0x00, 0x6D, + 0x61, 0x72, 0x67, 0x69, 0x6E, 0x52, 0x69, 0x67, 0x68, 0x74, 0x00, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x4D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x00, 0x66, 0x6F, 0x6E, 0x74, 0x53, 0x69, 0x7A, 0x65, 0x00, + 0x73, 0x69, 0x7A, 0x65, 0x00, 0x74, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6F, 0x72, 0x61, 0x74, + 0x69, 0x6F, 0x6E, 0x00, 0x75, 0x6E, 0x64, 0x65, 0x72, 0x6C, 0x69, 0x6E, 0x65, 0x00, 0x6E, 0x6F, + 0x6E, 0x65, 0x00, 0x70, 0x61, 0x72, 0x73, 0x65, 0x43, 0x53, 0x53, 0x00, 0x63, 0x73, 0x73, 0x00, + 0x70, 0x61, 0x72, 0x73, 0x65, 0x43, 0x53, 0x53, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x6E, 0x61, 0x6C, + 0x00, 0x72, 0x65, 0x73, 0x75, 0x6C, 0x74, 0x00, 0x6E, 0x75, 0x6C, 0x6C, 0x00, 0x70, 0x61, 0x72, + 0x73, 0x65, 0x00, 0x37, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 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, 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, 0x9B, + 0x0E, 0x00, 0x45, 0x72, 0x72, 0x6F, 0x72, 0x00, 0x01, 0x00, 0x6D, 0x73, 0x67, 0x00, 0x23, 0x00, + 0x96, 0x02, 0x00, 0x08, 0x06, 0x1C, 0x44, 0x96, 0x02, 0x00, 0x08, 0x07, 0x49, 0x12, 0x12, 0x9D, + 0x02, 0x00, 0x0F, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x09, 0x08, + 0x06, 0x1C, 0x4F, 0x9B, 0x12, 0x00, 0x41, 0x73, 0x42, 0x72, 0x6F, 0x61, 0x64, 0x63, 0x61, 0x73, + 0x74, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x0D, 0x00, 0x4C, 0x6F, 0x61, 0x64, 0x56, + 0x61, 0x72, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x13, 0x00, 0x08, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, + 0x96, 0x13, 0x00, 0x08, 0x02, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, + 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x03, 0x1C, 0x96, 0x13, + 0x00, 0x08, 0x04, 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, + 0x03, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x02, + 0x00, 0x08, 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x0C, 0x08, + 0x0A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x09, 0x08, 0x0A, 0x87, + 0x01, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x04, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0A, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x9B, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x0D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x09, 0x4E, 0x3E, + 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0E, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x0F, 0x07, 0x0C, 0x00, 0x00, + 0x00, 0x07, 0x65, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, + 0x02, 0x00, 0x08, 0x0E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x10, 0x9B, 0x07, 0x00, 0x00, 0x01, 0x00, + 0x78, 0x00, 0x3C, 0x00, 0x96, 0x02, 0x00, 0x08, 0x11, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, + 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x12, 0x52, 0x17, 0x96, 0x02, 0x00, 0x08, + 0x11, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0x13, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x14, 0x52, 0x17, 0x96, 0x02, 0x00, 0x05, 0x01, 0x3E, + 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x12, 0x9B, 0x07, 0x00, 0x00, + 0x01, 0x00, 0x78, 0x00, 0x8F, 0x00, 0x96, 0x04, 0x00, 0x08, 0x15, 0x08, 0x08, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x13, 0x4E, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x16, 0x41, 0x96, 0x07, 0x00, 0x08, 0x16, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x99, 0x02, 0x00, 0x09, 0x00, 0x96, 0x02, 0x00, 0x08, 0x16, + 0x4C, 0x1C, 0x50, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x16, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x15, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0x17, 0x4E, 0x48, 0x12, 0x9D, 0x02, 0x00, 0x42, 0x00, 0x96, 0x02, 0x00, + 0x08, 0x15, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x16, 0x1C, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x11, 0x1C, + 0x49, 0x12, 0x9D, 0x02, 0x00, 0x23, 0x00, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, + 0x16, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x15, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0x18, 0x52, 0x17, 0x96, 0x02, 0x00, 0x05, 0x01, 0x3E, 0x99, 0x02, 0x00, 0x9C, 0xFF, 0x96, + 0x02, 0x00, 0x05, 0x00, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0E, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x19, 0x9B, 0x07, 0x00, 0x00, 0x01, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x96, 0x02, 0x00, 0x08, 0x1A, + 0x1C, 0x96, 0x13, 0x00, 0x08, 0x0F, 0x07, 0x0C, 0x00, 0x00, 0x00, 0x07, 0x65, 0x00, 0x00, 0x00, + 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1A, 0x1C, 0x96, + 0x04, 0x00, 0x08, 0x10, 0x08, 0x0E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x10, 0x4E, 0x4F, 0x96, 0x02, + 0x00, 0x08, 0x1A, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x12, 0x08, 0x0E, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x12, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x1A, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x13, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x42, 0x4F, 0x96, 0x09, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x08, 0x1B, 0x08, + 0x1A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x4F, 0x96, + 0x08, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x02, 0x08, 0x0E, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, + 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x8C, 0x00, 0x08, 0x1C, 0x08, 0x1D, 0x07, 0x12, + 0x00, 0x00, 0x00, 0x08, 0x1E, 0x07, 0x08, 0x00, 0x00, 0x00, 0x08, 0x1F, 0x07, 0x14, 0x00, 0x00, + 0x00, 0x08, 0x20, 0x07, 0x11, 0x00, 0x00, 0x00, 0x08, 0x21, 0x07, 0x2E, 0x00, 0x00, 0x00, 0x08, + 0x22, 0x07, 0x28, 0x00, 0x00, 0x00, 0x08, 0x23, 0x07, 0x23, 0x00, 0x00, 0x00, 0x08, 0x24, 0x07, + 0x0D, 0x00, 0x00, 0x00, 0x08, 0x25, 0x07, 0x1B, 0x00, 0x00, 0x00, 0x08, 0x26, 0x07, 0x24, 0x00, + 0x00, 0x00, 0x08, 0x27, 0x07, 0x2D, 0x00, 0x00, 0x00, 0x08, 0x28, 0x07, 0x25, 0x00, 0x00, 0x00, + 0x08, 0x29, 0x07, 0x22, 0x00, 0x00, 0x00, 0x08, 0x2A, 0x07, 0x21, 0x00, 0x00, 0x00, 0x08, 0x2B, + 0x07, 0x27, 0x00, 0x00, 0x00, 0x08, 0x2C, 0x07, 0x10, 0x00, 0x00, 0x00, 0x08, 0x2D, 0x07, 0x20, + 0x00, 0x00, 0x00, 0x08, 0x2E, 0x07, 0x09, 0x00, 0x00, 0x00, 0x08, 0x2F, 0x07, 0x26, 0x00, 0x00, + 0x00, 0x07, 0x13, 0x00, 0x00, 0x00, 0x43, 0x1D, 0x96, 0x09, 0x00, 0x08, 0x30, 0x07, 0x20, 0x03, + 0x00, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, + 0x17, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, + 0x0E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x52, 0x17, 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, + 0x00, 0x02, 0x08, 0x1C, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, + 0x17, 0x96, 0x07, 0x00, 0x08, 0x31, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1D, 0x96, 0x02, 0x00, + 0x08, 0x31, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x32, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x05, 0x00, + 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x31, + 0x1C, 0x96, 0x13, 0x00, 0x08, 0x33, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, + 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x31, 0x1C, 0x96, + 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x52, + 0x17, 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x31, 0x1C, 0x96, 0x07, 0x00, + 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x07, 0x00, 0x08, 0x34, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x43, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x34, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, + 0x00, 0x00, 0x00, 0x08, 0x0E, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x52, 0x17, 0x96, 0x0E, 0x00, + 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x35, 0x07, 0x9A, 0x02, 0x00, 0x00, 0x08, 0x34, 0x1C, 0x96, + 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x02, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x36, + 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x37, 0x08, 0x38, 0x4F, 0x96, + 0x02, 0x00, 0x08, 0x36, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x39, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, + 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x36, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, + 0x13, 0x00, 0x08, 0x3A, 0x07, 0x03, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, + 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x36, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x3B, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4F, 0x96, 0x02, 0x00, 0x08, 0x36, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, + 0x08, 0x3C, 0x9B, 0x09, 0x00, 0x00, 0x01, 0x00, 0x73, 0x72, 0x63, 0x00, 0x64, 0x00, 0x96, 0x02, + 0x00, 0x08, 0x08, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x3D, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, + 0x3E, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x19, 0x00, 0x96, 0x09, 0x00, + 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x3B, 0x52, + 0x17, 0x99, 0x02, 0x00, 0x2C, 0x00, 0x96, 0x02, 0x00, 0x08, 0x3E, 0x1C, 0x96, 0x07, 0x00, 0x07, + 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x3A, 0x52, 0x17, 0x96, 0x09, + 0x00, 0x05, 0x01, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x3B, + 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x36, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, + 0x02, 0x00, 0x08, 0x0D, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0xB3, 0x00, 0x96, 0x03, 0x00, 0x08, + 0x3F, 0x02, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x08, 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, + 0x02, 0x49, 0x9D, 0x02, 0x00, 0x91, 0x00, 0x96, 0x04, 0x00, 0x08, 0x11, 0x04, 0x00, 0x3C, 0x96, + 0x02, 0x00, 0x08, 0x3F, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02, 0x00, 0x41, 0x00, 0x96, + 0x02, 0x00, 0x08, 0x3F, 0x4C, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x42, 0x08, 0x11, 0x1C, 0x96, 0x07, + 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x40, 0x3D, 0x47, 0x96, 0x02, 0x00, 0x08, 0x41, 0x47, + 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x11, 0x1C, 0x4E, 0x96, 0x07, 0x00, + 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x40, 0x3D, 0x47, 0x47, 0x1D, 0x99, 0x02, 0x00, 0x33, 0x00, + 0x96, 0x04, 0x00, 0x08, 0x3F, 0x08, 0x11, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, + 0x08, 0x40, 0x3D, 0x96, 0x02, 0x00, 0x08, 0x41, 0x47, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, + 0x02, 0x00, 0x08, 0x11, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x40, + 0x3D, 0x47, 0x1D, 0x99, 0x02, 0x00, 0x61, 0xFF, 0x96, 0x02, 0x00, 0x08, 0x3F, 0x1C, 0x3E, 0x4F, + 0x96, 0x02, 0x00, 0x08, 0x36, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, + 0x43, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, + 0x02, 0x00, 0x08, 0x44, 0x4E, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x36, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x45, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, + 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x46, 0x4E, 0x3E, 0x4F, 0x96, 0x08, + 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x02, 0x08, 0x36, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, + 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, + 0x47, 0x07, 0x10, 0x00, 0x00, 0x00, 0x07, 0xF4, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, + 0x08, 0x48, 0x3D, 0x1D, 0x96, 0x0E, 0x00, 0x07, 0x06, 0x00, 0x00, 0x00, 0x08, 0x49, 0x07, 0xF4, + 0x01, 0x00, 0x00, 0x08, 0x47, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x07, 0x00, 0x07, + 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0x4A, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x48, 0x3D, 0x1D, + 0x96, 0x02, 0x00, 0x08, 0x4A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, + 0x4B, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, + 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x4A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, + 0x96, 0x13, 0x00, 0x08, 0x4C, 0x07, 0x02, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, + 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x4A, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4D, 0x07, 0x03, 0x00, 0x00, 0x00, 0x07, 0xFD, + 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, + 0x4A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x4E, 0x07, 0x04, 0x00, + 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, + 0x96, 0x02, 0x00, 0x08, 0x4A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, + 0x4F, 0x07, 0x05, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, + 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x4A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, + 0x96, 0x13, 0x00, 0x08, 0x0D, 0x07, 0x06, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, + 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x4A, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x50, 0x07, 0x07, 0x00, 0x00, 0x00, 0x07, 0xFD, + 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, + 0x4A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x51, 0x07, 0x08, 0x00, + 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, + 0x96, 0x13, 0x00, 0x08, 0x52, 0x07, 0x09, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, + 0x02, 0x00, 0x00, 0x00, 0x08, 0x48, 0x3D, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96, 0x10, + 0x00, 0x08, 0x0B, 0x08, 0x53, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, + 0x4A, 0x40, 0x4F, 0x96, 0x09, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x0B, 0x08, 0x52, 0x1C, + 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, + 0x52, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x39, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, + 0x96, 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, + 0x54, 0x07, 0x0A, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, + 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, + 0x96, 0x13, 0x00, 0x08, 0x55, 0x07, 0x0B, 0x00, 0x00, 0x00, 0x07, 0xFD, 0x00, 0x00, 0x00, 0x07, + 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x56, 0x07, 0x0C, 0x00, 0x00, 0x00, 0x07, 0xFD, + 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, + 0x52, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x3B, 0x9B, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x3C, 0x9B, 0x09, 0x00, 0x00, 0x01, 0x00, 0x73, 0x72, 0x63, + 0x00, 0x72, 0x00, 0x96, 0x02, 0x00, 0x08, 0x3E, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D, + 0x02, 0x00, 0x27, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x3D, 0x05, + 0x00, 0x4F, 0x96, 0x09, 0x00, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, + 0x02, 0x00, 0x08, 0x3B, 0x52, 0x17, 0x99, 0x02, 0x00, 0x3A, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, + 0x1C, 0x96, 0x04, 0x00, 0x08, 0x3D, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x3E, 0x1C, 0x96, + 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x56, 0x52, + 0x17, 0x96, 0x09, 0x00, 0x05, 0x01, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x3B, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x52, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x43, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x96, + 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x44, 0x4E, 0x3E, 0x4F, 0x96, 0x02, 0x00, + 0x08, 0x52, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x45, 0x9B, 0x05, + 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x46, 0x4E, 0x3E, 0x4F, 0x96, 0x07, 0x00, 0x08, 0x57, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1D, + 0x96, 0x02, 0x00, 0x08, 0x57, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x58, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x57, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x58, 0x4E, 0x96, 0x13, + 0x00, 0x08, 0x59, 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, 0x57, + 0x1C, 0x96, 0x02, 0x00, 0x08, 0x58, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x59, 0x52, 0x17, 0x96, 0x02, + 0x00, 0x08, 0x57, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x58, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x59, 0x3A, + 0x17, 0x96, 0x02, 0x00, 0x08, 0x5A, 0x9B, 0x0C, 0x00, 0x00, 0x01, 0x00, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x00, 0x27, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x5B, + 0x08, 0x5B, 0x1C, 0x4F, 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x08, 0x1C, + 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x1D, 0x96, 0x09, 0x00, + 0x08, 0x5C, 0x07, 0xBC, 0x02, 0x00, 0x00, 0x08, 0x5A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, + 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x5A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x07, + 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x5E, 0x9B, 0x0C, 0x00, 0x00, 0x01, + 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, 0x5B, 0x00, 0x96, 0x09, 0x00, 0x08, 0x61, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x5F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x60, 0x52, 0x3C, 0x96, 0x02, + 0x00, 0x08, 0x61, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x62, 0x49, 0x9D, 0x02, 0x00, 0x2D, 0x00, 0x96, + 0x02, 0x00, 0x08, 0x61, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x63, 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, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x64, 0x9B, 0x17, 0x00, 0x00, 0x03, 0x00, 0x75, 0x72, 0x6C, + 0x00, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, 0x97, + 0x00, 0x96, 0x02, 0x00, 0x08, 0x5B, 0x1C, 0x44, 0x96, 0x02, 0x00, 0x08, 0x07, 0x49, 0x12, 0x9D, + 0x02, 0x00, 0x08, 0x00, 0x96, 0x04, 0x00, 0x08, 0x5B, 0x08, 0x53, 0x1D, 0x96, 0x04, 0x00, 0x08, + 0x65, 0x08, 0x5F, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, + 0x02, 0x00, 0x08, 0x5E, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x65, 0x1C, 0x96, 0x05, 0x00, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, 0x3E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x65, 0x1C, + 0x96, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, 0x15, 0x00, 0x96, 0x02, + 0x00, 0x08, 0x66, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x5B, 0x1C, 0x9A, 0x01, 0x00, 0x02, 0x99, 0x02, + 0x00, 0x10, 0x00, 0x96, 0x02, 0x00, 0x08, 0x66, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x5B, 0x1C, 0x9A, + 0x01, 0x00, 0x01, 0x99, 0x02, 0x00, 0x10, 0x00, 0x96, 0x02, 0x00, 0x08, 0x66, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x5B, 0x1C, 0x9A, 0x01, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, 0x96, + 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x67, 0x9B, 0x10, 0x00, 0x00, 0x02, 0x00, + 0x75, 0x72, 0x6C, 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, 0x99, 0x00, 0x96, 0x04, 0x00, + 0x08, 0x65, 0x08, 0x5F, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0x5E, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x20, 0x96, 0x02, + 0x00, 0x08, 0x65, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, + 0x4A, 0x00, 0x96, 0x02, 0x00, 0x08, 0x65, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, + 0x49, 0x9D, 0x02, 0x00, 0x1B, 0x00, 0x96, 0x02, 0x00, 0x08, 0x66, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x68, 0x4E, 0x9A, 0x01, 0x00, 0xC2, 0x99, 0x02, 0x00, 0x16, + 0x00, 0x96, 0x02, 0x00, 0x08, 0x66, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0x68, 0x4E, 0x9A, 0x01, 0x00, 0xC1, 0x99, 0x02, 0x00, 0x16, 0x00, 0x96, 0x02, 0x00, 0x08, + 0x66, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x68, 0x4E, 0x9A, 0x01, + 0x00, 0xC0, 0x8B, 0x01, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x69, 0x9B, 0x10, 0x00, 0x00, 0x02, 0x00, 0x75, 0x72, + 0x6C, 0x00, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x00, 0x99, 0x00, 0x96, 0x04, 0x00, 0x08, 0x65, + 0x08, 0x5F, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x5E, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x20, 0x96, 0x02, 0x00, 0x08, + 0x65, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x49, 0x9D, 0x02, 0x00, 0x4A, 0x00, + 0x96, 0x02, 0x00, 0x08, 0x65, 0x1C, 0x96, 0x05, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x49, 0x9D, + 0x02, 0x00, 0x1B, 0x00, 0x96, 0x02, 0x00, 0x08, 0x66, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0x68, 0x4E, 0x9A, 0x01, 0x00, 0x42, 0x99, 0x02, 0x00, 0x16, 0x00, 0x96, + 0x02, 0x00, 0x08, 0x66, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x68, + 0x4E, 0x9A, 0x01, 0x00, 0x41, 0x99, 0x02, 0x00, 0x16, 0x00, 0x96, 0x02, 0x00, 0x08, 0x66, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x68, 0x4E, 0x9A, 0x01, 0x00, 0x40, + 0x8B, 0x01, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, + 0x4E, 0x96, 0x13, 0x00, 0x08, 0x6A, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, + 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, 0x96, + 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x6B, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, + 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, + 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x6C, 0x07, 0x04, + 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, + 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, + 0x08, 0x6D, 0x07, 0x05, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, + 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, + 0x4E, 0x96, 0x13, 0x00, 0x08, 0x45, 0x07, 0x06, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, + 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, 0x96, + 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x43, 0x07, 0x07, 0x00, 0x00, 0x00, 0x07, + 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, + 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x6E, 0x07, 0x0A, + 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, + 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, + 0x08, 0x6F, 0x07, 0x0C, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, + 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, + 0x4E, 0x96, 0x13, 0x00, 0x08, 0x70, 0x07, 0x0D, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, + 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, 0x96, + 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x71, 0x07, 0x0E, 0x00, 0x00, 0x00, 0x07, + 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, + 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x72, 0x07, 0x0F, + 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, + 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, + 0x08, 0x73, 0x07, 0x10, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, + 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, + 0x4E, 0x96, 0x13, 0x00, 0x08, 0x74, 0x07, 0x11, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, + 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, 0x96, + 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x75, 0x07, 0x12, 0x00, 0x00, 0x00, 0x07, + 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, + 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x76, 0x07, 0x13, + 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, + 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, + 0x08, 0x77, 0x07, 0x14, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, + 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, + 0x4E, 0x96, 0x13, 0x00, 0x08, 0x78, 0x07, 0x15, 0x00, 0x00, 0x00, 0x07, 0x84, 0x03, 0x00, 0x00, + 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x5D, 0x1C, 0x96, + 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x79, 0x07, 0xC8, 0x00, 0x00, 0x00, 0x07, + 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x09, 0x00, + 0x07, 0x80, 0x00, 0x00, 0x00, 0x08, 0x6E, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, + 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x09, 0x00, 0x08, + 0x7A, 0x07, 0x85, 0x03, 0x00, 0x00, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, + 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x03, + 0x00, 0x00, 0x00, 0x02, 0x08, 0x5D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x07, 0x00, + 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0x7B, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x48, 0x3D, + 0x1D, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x7C, 0x07, 0xC9, 0x00, 0x00, + 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, + 0x02, 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x7D, + 0x07, 0x65, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, + 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, + 0x13, 0x00, 0x08, 0x7E, 0x07, 0x66, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, + 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x7F, 0x07, 0x67, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, + 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7B, + 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x80, 0x07, 0x68, 0x00, 0x00, + 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, + 0x02, 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x81, + 0x07, 0x69, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, + 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, + 0x13, 0x00, 0x08, 0x6E, 0x07, 0x6A, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, + 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x82, 0x07, 0x6B, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, + 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x09, 0x00, 0x07, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x82, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x07, + 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x0E, + 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x52, 0x17, 0x96, 0x08, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, + 0x02, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, + 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x02, 0x08, + 0x7B, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x13, + 0x00, 0x08, 0x83, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x6E, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, + 0x00, 0x00, 0x08, 0x48, 0x3D, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x13, 0x00, 0x08, + 0x84, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x71, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, + 0x08, 0x48, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, 0x4E, + 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x85, 0x9B, 0x07, 0x00, 0x00, 0x01, + 0x00, 0x6F, 0x00, 0x67, 0x00, 0x96, 0x02, 0x00, 0x08, 0x1A, 0x1C, 0x44, 0x96, 0x02, 0x00, 0x08, + 0x86, 0x49, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x05, 0x00, 0x96, 0x01, 0x00, 0x02, 0x3E, 0x96, 0x07, + 0x00, 0x08, 0x87, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x1A, 0x46, + 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02, 0x00, 0x27, 0x00, 0x96, 0x04, + 0x00, 0x08, 0x88, 0x04, 0x00, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x87, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x88, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x1A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x88, 0x1C, 0x4E, 0x4F, + 0x99, 0x02, 0x00, 0xCB, 0xFF, 0x96, 0x02, 0x00, 0x08, 0x87, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, + 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, + 0x02, 0x00, 0x08, 0x89, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x96, 0x02, 0x00, 0x08, + 0x08, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x8A, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, + 0x00, 0x08, 0x08, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x8B, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, + 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8C, + 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, 0x4E, 0x96, + 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x8D, 0x9B, 0x0A, 0x00, 0x00, 0x01, 0x00, + 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x25, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0x8A, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0C, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, + 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x85, 0x52, 0x3E, 0x4F, 0x96, 0x02, 0x00, + 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, + 0x02, 0x00, 0x08, 0x8E, 0x9B, 0x10, 0x00, 0x00, 0x02, 0x00, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x73, + 0x74, 0x79, 0x6C, 0x65, 0x00, 0x79, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0x8A, 0x4E, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x12, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, + 0x96, 0x07, 0x00, 0x08, 0x8A, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, + 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8A, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0C, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x8F, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, + 0x02, 0x00, 0x08, 0x85, 0x52, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0C, 0x1C, 0x96, 0x07, 0x00, 0x07, + 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x90, 0x52, 0x17, 0x96, 0x07, + 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8C, 0x52, 0x17, + 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, 0x4E, 0x96, 0x02, 0x00, + 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x91, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x00, + 0x96, 0x04, 0x00, 0x08, 0x92, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8A, 0x4E, 0x3C, 0x96, + 0x07, 0x00, 0x08, 0x93, 0x07, 0x00, 0x00, 0x00, 0x00, 0x42, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x92, + 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02, 0x00, 0x25, 0x00, 0x96, + 0x04, 0x00, 0x08, 0x88, 0x04, 0x00, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x88, 0x1C, 0x96, 0x07, 0x00, + 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x93, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x14, 0x52, 0x17, 0x99, + 0x02, 0x00, 0xCD, 0xFF, 0x96, 0x02, 0x00, 0x08, 0x93, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, + 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, + 0x00, 0x08, 0x90, 0x9B, 0x0A, 0x00, 0x00, 0x01, 0x00, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x5C, 0x00, + 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8B, 0x4E, 0x12, 0x12, 0x9D, 0x02, + 0x00, 0x12, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x8B, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8B, + 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0x8A, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0C, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, + 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x94, 0x52, 0x4F, 0x4F, 0x96, 0x02, 0x00, + 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, + 0x02, 0x00, 0x08, 0x94, 0x9B, 0x0B, 0x00, 0x00, 0x01, 0x00, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x00, + 0x9D, 0x03, 0x96, 0x02, 0x00, 0x08, 0x8F, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D, 0x02, + 0x00, 0x05, 0x00, 0x96, 0x01, 0x00, 0x02, 0x3E, 0x96, 0x09, 0x00, 0x08, 0x95, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x83, 0x40, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x96, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x15, 0x00, 0x96, 0x02, 0x00, 0x08, 0x95, 0x1C, 0x96, 0x04, + 0x00, 0x08, 0x97, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x96, 0x4E, 0x4F, 0x96, 0x02, 0x00, + 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x98, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x99, 0x49, 0x9D, + 0x02, 0x00, 0x2B, 0x00, 0x96, 0x02, 0x00, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x98, 0x4E, + 0x96, 0x02, 0x00, 0x08, 0x9A, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, + 0x95, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x99, 0x05, 0x00, 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, + 0x02, 0x00, 0x08, 0x95, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x99, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, + 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9B, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x41, 0x00, 0x96, + 0x04, 0x00, 0x08, 0x92, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9B, 0x4E, 0x96, 0x07, 0x00, + 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9C, 0x52, 0x3C, 0x96, + 0x02, 0x00, 0x08, 0x92, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x0F, + 0x00, 0x96, 0x02, 0x00, 0x08, 0x95, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x9B, 0x08, 0x92, 0x1C, 0x4F, + 0x96, 0x02, 0x00, 0x08, 0x95, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x9D, 0x08, 0x8F, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x9D, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9E, + 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x26, 0x00, 0x96, 0x02, 0x00, 0x08, 0x95, 0x1C, 0x96, 0x04, 0x00, + 0x08, 0x9F, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9E, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, + 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x52, 0x4F, 0x96, 0x02, 0x00, + 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA1, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, + 0x02, 0x00, 0x08, 0x95, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA2, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0xA1, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xA3, 0x3D, 0x4F, 0x96, + 0x02, 0x00, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA4, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xA5, + 0x49, 0x9D, 0x02, 0x00, 0x2B, 0x00, 0x96, 0x02, 0x00, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0xA4, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x9A, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, + 0x00, 0x08, 0x95, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA5, 0x05, 0x00, 0x4F, 0x99, 0x02, 0x00, 0x0E, + 0x00, 0x96, 0x02, 0x00, 0x08, 0x95, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA5, 0x05, 0x01, 0x4F, 0x96, + 0x02, 0x00, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA6, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xA7, + 0x49, 0x9D, 0x02, 0x00, 0x4F, 0x00, 0x96, 0x02, 0x00, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0xA6, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xA8, 0x49, 0x9D, 0x02, 0x00, 0x25, 0x00, 0x96, 0x02, 0x00, + 0x08, 0x95, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA6, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA6, + 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xA3, 0x3D, 0x4F, 0x99, 0x02, 0x00, + 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x95, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA6, 0x05, 0x00, 0x4F, + 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x95, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA6, + 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA9, 0x4E, 0x12, + 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0x95, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA9, + 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA9, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, + 0x00, 0x08, 0xA3, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xAA, + 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0x95, 0x1C, 0x96, 0x04, 0x00, + 0x08, 0xAB, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xAA, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, + 0x00, 0x00, 0x00, 0x08, 0xA3, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0xAC, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0x95, 0x1C, 0x96, + 0x04, 0x00, 0x08, 0xAC, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xAC, 0x4E, 0x96, 0x07, 0x00, + 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xA3, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x8F, 0x1C, 0x96, + 0x02, 0x00, 0x08, 0xAD, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0x95, + 0x1C, 0x96, 0x04, 0x00, 0x08, 0xAE, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xAD, 0x4E, 0x96, + 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xA3, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x8F, + 0x1C, 0x96, 0x02, 0x00, 0x08, 0xAF, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x3B, 0x00, 0x96, 0x04, 0x00, + 0x08, 0x92, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xAF, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, + 0x00, 0x00, 0x00, 0x08, 0xA3, 0x3D, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x92, 0x1C, 0x48, 0x12, 0x9D, 0x02, 0x00, 0x0F, 0x00, 0x96, 0x02, 0x00, 0x08, 0x95, 0x1C, 0x96, + 0x04, 0x00, 0x08, 0xB0, 0x08, 0x92, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x8F, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0xB1, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xB2, 0x49, 0x9D, 0x02, 0x00, 0x2B, 0x00, 0x96, + 0x02, 0x00, 0x08, 0x8F, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB1, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xB3, + 0x49, 0x12, 0x9D, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x95, 0x1C, 0x96, 0x04, 0x00, + 0x08, 0xB2, 0x05, 0x00, 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x95, 0x1C, + 0x96, 0x04, 0x00, 0x08, 0xB2, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x95, 0x1C, 0x3E, 0x4F, + 0x96, 0x02, 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, 0x4E, 0x96, 0x02, 0x00, 0x08, + 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xB4, 0x9B, 0x09, 0x00, 0x00, 0x01, 0x00, 0x63, 0x73, 0x73, + 0x00, 0xDA, 0x00, 0x96, 0x04, 0x00, 0x08, 0xB7, 0x08, 0xB5, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, + 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB6, 0x52, 0x3C, 0x96, 0x02, 0x00, + 0x08, 0xB7, 0x1C, 0x44, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x06, 0x00, + 0x96, 0x02, 0x00, 0x05, 0x00, 0x3E, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x8A, 0x4E, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x12, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, + 0x07, 0x00, 0x08, 0x8A, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB7, + 0x46, 0x87, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02, 0x00, 0x56, 0x00, 0x96, + 0x04, 0x00, 0x08, 0x88, 0x04, 0x00, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0x8A, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x88, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB7, 0x1C, 0x96, + 0x02, 0x00, 0x08, 0x88, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, + 0x1C, 0x96, 0x02, 0x00, 0x08, 0x85, 0x52, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x88, 0x1C, 0x96, 0x07, + 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x90, 0x52, 0x17, + 0x99, 0x02, 0x00, 0x9C, 0xFF, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0x8C, 0x52, 0x17, 0x96, 0x02, 0x00, 0x05, 0x01, 0x3E, 0x4F, 0x96, 0x02, + 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, + 0x96, 0x04, 0x00, 0x08, 0xB9, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, 0x4E, 0x96, 0x02, + 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xB4, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7B, + 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, + 0x08, 0x39, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x2D, 0x01, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, + 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, + 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x3B, 0x9B, 0x05, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, + 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x3C, 0x9B, 0x09, 0x00, 0x00, + 0x01, 0x00, 0x73, 0x72, 0x63, 0x00, 0x6B, 0x00, 0x96, 0x02, 0x00, 0x08, 0x3E, 0x1C, 0x96, 0x01, + 0x00, 0x02, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x19, 0x00, 0x96, 0x09, 0x00, 0x05, 0x00, 0x07, 0x01, + 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x3B, 0x52, 0x17, 0x99, 0x02, 0x00, + 0x41, 0x00, 0x96, 0x04, 0x00, 0x08, 0xB7, 0x08, 0x3E, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, + 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB9, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, + 0x08, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x3D, 0x08, 0xB7, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB7, + 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x3B, 0x52, 0x17, 0x4F, 0x96, 0x0E, 0x00, 0x07, 0x64, 0x00, 0x00, 0x00, 0x08, 0xBA, 0x07, 0x71, + 0x00, 0x00, 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, 0x4E, 0x96, 0x02, 0x00, 0x08, + 0x0B, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x08, + 0x00, 0x07, 0x03, 0x04, 0x00, 0x00, 0x02, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x84, 0x4E, + 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, + 0x3D, 0x17, 0x96, 0x09, 0x00, 0x07, 0x03, 0x04, 0x00, 0x00, 0x08, 0x84, 0x08, 0x7B, 0x1C, 0x96, + 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0xBB, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFA, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, + 0x01, 0x3D, 0x1D, 0x96, 0x13, 0x00, 0x08, 0xBC, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0xFA, 0x00, + 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x13, 0x00, 0x08, 0xBD, + 0x07, 0x02, 0x00, 0x00, 0x00, 0x07, 0xFA, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, + 0x01, 0x3D, 0x1D, 0x96, 0x04, 0x00, 0x08, 0xBE, 0x08, 0xBC, 0x1C, 0x1D, 0x96, 0x03, 0x00, 0x08, + 0x1A, 0x02, 0x1D, 0x96, 0x0D, 0x00, 0x07, 0x06, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x08, 0x08, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, + 0x00 }; commit e22fa8ee92bc8da3bdd7fe0dcf9e54b98e321dcf Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 14:21:28 2007 +0200 Make TextField's SwfdecParagraph save index to the string, not pointer diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c index d50bdb9..881327c 100644 --- a/libswfdec/swfdec_text_field_movie.c +++ b/libswfdec/swfdec_text_field_movie.c @@ -102,7 +102,7 @@ swfdec_text_paragraph_add_block (SwfdecParagraph *paragraph, int index_, static void swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text, - SwfdecParagraph *paragraph, guint start_index, guint end_index) + SwfdecParagraph *paragraph, guint start_index, guint length) { SwfdecTextFormat *format, *format_prev; guint index_; @@ -113,18 +113,14 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text, g_assert (SWFDEC_IS_TEXT_FIELD_MOVIE (text)); g_assert (paragraph != NULL); - g_assert (start_index <= end_index); - g_assert (end_index <= text->input->len); + g_assert (start_index + length <= text->input->len); - paragraph->text = text->input->str + start_index; - paragraph->text_length = end_index - start_index; + paragraph->index_ = start_index; + paragraph->length = length; paragraph->blocks = NULL; paragraph->attrs = NULL; - if (paragraph->text_length == 0) - return; - g_assert (text->formats != NULL); for (iter = text->formats; iter->next != NULL && ((SwfdecFormatIndex *)(iter->next->data))->index_ <= start_index; @@ -171,7 +167,8 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text, attr_underline->start_index = 0; for (iter = iter->next; - iter != NULL && ((SwfdecFormatIndex *)(iter->data))->index_ < end_index; + iter != NULL && + ((SwfdecFormatIndex *)(iter->data))->index_ < start_index + length; iter = iter->next) { format_prev = format; @@ -258,31 +255,31 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text, } // Close attributes - attr_bold->end_index = end_index - start_index; + attr_bold->end_index = length; swfdec_text_paragraph_add_attribute (paragraph, attr_bold); attr_bold = NULL; - attr_color->end_index = end_index - start_index; + attr_color->end_index = length; swfdec_text_paragraph_add_attribute (paragraph, attr_color); attr_color = NULL; - attr_font->end_index = end_index - start_index; + attr_font->end_index = length; swfdec_text_paragraph_add_attribute (paragraph, attr_font); attr_font = NULL; - attr_italic->end_index = end_index - start_index; + attr_italic->end_index = length; swfdec_text_paragraph_add_attribute (paragraph, attr_italic); attr_italic = NULL; - attr_letter_spacing->end_index = end_index - start_index; + attr_letter_spacing->end_index = length; swfdec_text_paragraph_add_attribute (paragraph, attr_letter_spacing); attr_letter_spacing = NULL; - attr_size->end_index = end_index - start_index; + attr_size->end_index = length; swfdec_text_paragraph_add_attribute (paragraph, attr_size); attr_size = NULL; - attr_underline->end_index = end_index - start_index; + attr_underline->end_index = length; swfdec_text_paragraph_add_attribute (paragraph, attr_underline); attr_underline = NULL; @@ -330,7 +327,7 @@ swfdec_text_field_movie_free_paragraphs (SwfdecParagraph *paragraphs) g_return_if_fail (paragraphs != NULL); - for (i = 0; paragraphs[i].text != NULL; i++) + for (i = 0; paragraphs[i].blocks != NULL; i++) { for (iter = paragraphs[i].blocks; iter != NULL; iter = iter->next) { pango_tab_array_free (((SwfdecBlock *)(iter->data))->tab_stops); @@ -417,7 +414,7 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num, layouts = g_array_new (TRUE, TRUE, sizeof (SwfdecLayout)); - for (i = 0; paragraphs[i].text != NULL; i++) + for (i = 0; paragraphs[i].blocks != NULL; i++) { GSList *iter; guint skip; @@ -437,7 +434,7 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num, length ((SwfdecBlock *)(iter->next->data))->index_ - block->index_; } else { - length = paragraphs[i].text_length - block->index_; + length = paragraphs[i].length - block->index_; } if (skip > length) { @@ -490,8 +487,8 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num, pango_attr_list_unref (attr_list); pango_layout_set_text (playout, - paragraphs[i].text + block->index_ + skip, - paragraphs[i].text_length - block->index_ - skip); + text->input->str + paragraphs[i].index_ + block->index_ + skip, + paragraphs[i].length - block->index_ - skip); if (iter->next != NULL && text->text->word_wrap) { @@ -504,7 +501,7 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num, line = pango_layout_get_line_readonly (playout, line_num); skip_new = line->start_index + line->length - (length - skip); pango_layout_set_text (playout, - paragraphs[i].text + block->index_ + skip, + text->input->str + paragraphs[i].index_ + block->index_ + skip, length - skip + skip_new); skip = skip_new; } diff --git a/libswfdec/swfdec_text_field_movie.h b/libswfdec/swfdec_text_field_movie.h index 7a055b2..15af317 100644 --- a/libswfdec/swfdec_text_field_movie.h +++ b/libswfdec/swfdec_text_field_movie.h @@ -58,8 +58,8 @@ typedef struct { } SwfdecBlock; typedef struct { - const char *text; - guint text_length; + guint index_; + guint length; gboolean bullet; int indent; commit 4723a6c17eeec403b01cce07af4925c0361b3aeb Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 13:57:30 2007 +0200 Add a test for LI, P and BR tags to text-field-html-input diff --git a/test/trace/text-field-html-input-6.swf b/test/trace/text-field-html-input-6.swf index 918e2ba..c08f64c 100644 Binary files a/test/trace/text-field-html-input-6.swf and b/test/trace/text-field-html-input-6.swf differ diff --git a/test/trace/text-field-html-input-6.swf.trace b/test/trace/text-field-html-input-6.swf.trace index 7c0beaa..3093e99 100644 --- a/test/trace/text-field-html-input-6.swf.trace +++ b/test/trace/text-field-html-input-6.swf.trace @@ -182,3 +182,51 @@ a a <P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P> 0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+8: multiline: false condenseWhite: false +a b cd e +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P><LI><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">b</FONT></LI><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">cd</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">e</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+2/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+3/ : align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+4/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+5/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+6/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+7/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+8/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+8: multiline: true condenseWhite: false +a b cd e +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P><LI><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">b</FONT></LI><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">cd</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">e</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+2/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+3/ : align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+4/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+5/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+6/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+7/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+8/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+8: multiline: false condenseWhite: true +a b cd e +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P><LI><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">b</FONT></LI><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">cd</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">e</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+2/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+3/ : align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+4/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+5/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+6/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+7/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+8/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+8: multiline: true condenseWhite: true +a b cd e +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P><LI><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">b</FONT></LI><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">cd</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">e</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+2/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+3/ : align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+4/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+5/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+6/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+7/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+8/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false urldiff --git a/test/trace/text-field-html-input-7.swf b/test/trace/text-field-html-input-7.swf index 9d00d29..787d500 100644 Binary files a/test/trace/text-field-html-input-7.swf and b/test/trace/text-field-html-input-7.swf differ diff --git a/test/trace/text-field-html-input-7.swf.trace b/test/trace/text-field-html-input-7.swf.trace index 7b8cbf4..acd8f59 100644 --- a/test/trace/text-field-html-input-7.swf.trace +++ b/test/trace/text-field-html-input-7.swf.trace @@ -178,3 +178,43 @@ a a <P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P> 0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+8: multiline: false condenseWhite: false +abcde +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">abcde</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+1/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+2/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+3/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+4/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+8: multiline: true condenseWhite: false +a b cd e +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P><LI><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">b</FONT></LI><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">cd</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">e</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+2/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+3/ : align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+4/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+5/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+6/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+7/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+8/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+8: multiline: false condenseWhite: true +abcde +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">abcde</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+1/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+2/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+3/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+4/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+8: multiline: true condenseWhite: true +a b cd e +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P><LI><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">b</FONT></LI><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">cd</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">e</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+2/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+3/ : align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+4/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+5/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+6/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+7/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+8/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false urldiff --git a/test/trace/text-field-html-input-8.swf b/test/trace/text-field-html-input-8.swf index ad7541b..dc640a1 100644 Binary files a/test/trace/text-field-html-input-8.swf and b/test/trace/text-field-html-input-8.swf differ diff --git a/test/trace/text-field-html-input-8.swf.trace b/test/trace/text-field-html-input-8.swf.trace index 19ef364..4e97379 100644 --- a/test/trace/text-field-html-input-8.swf.trace +++ b/test/trace/text-field-html-input-8.swf.trace @@ -178,3 +178,43 @@ a a <P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P> 0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+8: multiline: false condenseWhite: false +abcde +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">abcde</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+1/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+2/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+3/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+4/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+8: multiline: true condenseWhite: false +a b cd e +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P><LI><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">b</FONT></LI><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">cd</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">e</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+2/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+3/ : align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+4/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+5/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+6/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+7/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+8/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+8: multiline: false condenseWhite: true +abcde +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">abcde</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+1/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+2/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+3/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+4/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+8: multiline: true condenseWhite: true +a b cd e +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P><LI><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">b</FONT></LI><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">cd</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">e</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+2/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+3/ : align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+4/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+5/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+6/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+7/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+8/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false urldiff --git a/test/trace/text-field-html-input.as b/test/trace/text-field-html-input.as index fb0641a..fc0754c 100644 --- a/test/trace/text-field-html-input.as +++ b/test/trace/text-field-html-input.as @@ -40,7 +40,8 @@ var texts = [ "a<p align='right'>b</p>c", "a<p align='right'>??</p>c", "a<!-- b -->c", - "a<!--->b" + "a<!--->b", + "a<br><li>b</li>c<p>d</p>e<br>" ]; t.html = true; commit 14e539d812ba007cb9e2fa7784aa905e66087766 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 13:56:57 2007 +0200 Fix some error in HTML input with multiline enabled and version > 6 diff --git a/libswfdec/swfdec_text_field_movie_html.c b/libswfdec/swfdec_text_field_movie_html.c index b3976e7..3352bd6 100644 --- a/libswfdec/swfdec_text_field_movie_html.c +++ b/libswfdec/swfdec_text_field_movie_html.c @@ -318,19 +318,19 @@ swfdec_text_field_movie_html_parse_tag (ParserData *data, const char *p) } else { - if (data->cx->version < 7 && - (name_length == 2 && !g_strncasecmp (name, "br", 2))) { - data->text = g_string_append_c (data->text, '\n'); - tag = NULL; - } else { - SwfdecAsObject *object; - SwfdecAsValue val; + SwfdecAsObject *object; + SwfdecAsValue val; - if (data->cx->version < 7 && - ((name_length == 1 && !g_strncasecmp (name, "p", 1)) || - (name_length == 2 && !g_strncasecmp (name, "li", 2)))) + if (data->multiline) { + if (name_length == 2 && !g_strncasecmp (name, "br", 2)) + { + data->text = g_string_append_c (data->text, '\n'); + } + else if ((name_length == 1 && !g_strncasecmp (name, "p", 1)) || + (name_length == 2 && !g_strncasecmp (name, "li", 2)) || + (name_length == 2 && !g_strncasecmp (name, "br", 2))) { - GSList *iter; + GSList *iter; for (iter = data->tags_open; iter != NULL; iter = iter->next) { ParserTag *f = iter->data; @@ -341,41 +341,40 @@ swfdec_text_field_movie_html_parse_tag (ParserData *data, const char *p) } } } + } - tag = g_new0 (ParserTag, 1); - tag->name = name; - tag->name_length = name_length; - tag->format = SWFDEC_TEXT_FORMAT (swfdec_text_format_new (data->cx)); - tag->index = g_utf8_strlen (data->text->str, -1); - - data->tags_open = g_slist_prepend (data->tags_open, tag); - - // set format based on tag - object = SWFDEC_AS_OBJECT (tag->format); - SWFDEC_AS_VALUE_SET_BOOLEAN (&val, TRUE); - - if (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bullet, &val); - } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "b", 1)) { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bold, &val); - } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "i", 1)) { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_italic, &val); - } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "u", 1)) { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_underline, &val); - } else if (tag->name_length == 3 && !g_strncasecmp (tag->name, "img", 3)) - { - SWFDEC_FIXME ("IMG tag support for TextField's HTML input missing"); - } + tag = g_new0 (ParserTag, 1); + tag->name = name; + tag->name_length = name_length; + tag->format = SWFDEC_TEXT_FORMAT (swfdec_text_format_new (data->cx)); + tag->index = g_utf8_strlen (data->text->str, -1); + + data->tags_open = g_slist_prepend (data->tags_open, tag); + + // set format based on tag + object = SWFDEC_AS_OBJECT (tag->format); + SWFDEC_AS_VALUE_SET_BOOLEAN (&val, TRUE); + + if (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bullet, &val); + } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "b", 1)) { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bold, &val); + } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "i", 1)) { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_italic, &val); + } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "u", 1)) { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_underline, &val); + } else if (tag->name_length == 3 && !g_strncasecmp (tag->name, "img", 3)) { + SWFDEC_FIXME ("IMG tag support for TextField's HTML input missing"); + } - if (data->style_sheet && - ((tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) || - (tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)))) { - SwfdecTextFormat *format = swfdec_style_sheet_get_tag_format ( - data->style_sheet, swfdec_as_context_give_string (data->cx, - g_strndup (tag->name, tag->name_length))); - if (format != NULL) - swfdec_text_format_add (tag->format, format); - } + if (data->style_sheet && + ((tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) || + (tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)))) { + SwfdecTextFormat *format = swfdec_style_sheet_get_tag_format ( + data->style_sheet, swfdec_as_context_give_string (data->cx, + g_strndup (tag->name, tag->name_length))); + if (format != NULL) + swfdec_text_format_add (tag->format, format); } // parse attributes commit 1fe0cfbd5ca20e0e62ed212657265104bab81947 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 13:44:45 2007 +0200 Add testing for comment parsing to text-field-html-input test diff --git a/test/trace/text-field-html-input-6.swf b/test/trace/text-field-html-input-6.swf index 9640b1f..918e2ba 100644 Binary files a/test/trace/text-field-html-input-6.swf and b/test/trace/text-field-html-input-6.swf differ diff --git a/test/trace/text-field-html-input-6.swf.trace b/test/trace/text-field-html-input-6.swf.trace index 43479bd..7c0beaa 100644 --- a/test/trace/text-field-html-input-6.swf.trace +++ b/test/trace/text-field-html-input-6.swf.trace @@ -146,3 +146,39 @@ a?? c 1/??: align=right blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url 2/ : align=right blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url 3/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+6: multiline: false condenseWhite: false +ac +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+6: multiline: true condenseWhite: false +ac +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+6: multiline: false condenseWhite: true +ac +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+6: multiline: true condenseWhite: true +ac +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+7: multiline: false condenseWhite: false +a +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+7: multiline: true condenseWhite: false +a +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+7: multiline: false condenseWhite: true +a +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url+7: multiline: true condenseWhite: true +a +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false urldiff --git a/test/trace/text-field-html-input-7.swf b/test/trace/text-field-html-input-7.swf index f7e2285..9d00d29 100644 Binary files a/test/trace/text-field-html-input-7.swf and b/test/trace/text-field-html-input-7.swf differ diff --git a/test/trace/text-field-html-input-7.swf.trace b/test/trace/text-field-html-input-7.swf.trace index 08c64de..7b8cbf4 100644 --- a/test/trace/text-field-html-input-7.swf.trace +++ b/test/trace/text-field-html-input-7.swf.trace @@ -142,3 +142,39 @@ a?? c 1/??: align=right blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url 2/ : align=right blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url 3/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+6: multiline: false condenseWhite: false +ac +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+6: multiline: true condenseWhite: false +ac +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+6: multiline: false condenseWhite: true +ac +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+6: multiline: true condenseWhite: true +ac +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+7: multiline: false condenseWhite: false +a +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+7: multiline: true condenseWhite: false +a +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+7: multiline: false condenseWhite: true +a +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url+7: multiline: true condenseWhite: true +a +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false urldiff --git a/test/trace/text-field-html-input-8.swf b/test/trace/text-field-html-input-8.swf index b84be18..ad7541b 100644 Binary files a/test/trace/text-field-html-input-8.swf and b/test/trace/text-field-html-input-8.swf differ diff --git a/test/trace/text-field-html-input-8.swf.trace b/test/trace/text-field-html-input-8.swf.trace index d5f60d6..19ef364 100644 --- a/test/trace/text-field-html-input-8.swf.trace +++ b/test/trace/text-field-html-input-8.swf.trace @@ -142,3 +142,39 @@ a?? c 1/??: align=right blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url 2/ : align=right blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url 3/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+6: multiline: false condenseWhite: false +ac +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+6: multiline: true condenseWhite: false +ac +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+6: multiline: false condenseWhite: true +ac +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+6: multiline: true condenseWhite: true +ac +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+7: multiline: false condenseWhite: false +a +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+7: multiline: true condenseWhite: false +a +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+7: multiline: false condenseWhite: true +a +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url+7: multiline: true condenseWhite: true +a +<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P> +0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false urldiff --git a/test/trace/text-field-html-input.as b/test/trace/text-field-html-input.as index a6f0558..fb0641a 100644 --- a/test/trace/text-field-html-input.as +++ b/test/trace/text-field-html-input.as @@ -38,7 +38,9 @@ var texts = [ "a\r\nb", "a\r\rb", "a<p align='right'>b</p>c", - "a<p align='right'>??</p>c" + "a<p align='right'>??</p>c", + "a<!-- b -->c", + "a<!--->b" ]; t.html = true; commit e880c38b84a0de3c47931bc12d12dbebdd9117b1 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 13:43:07 2007 +0200 Fix an error in parsing of HTML comments. Added some asserts diff --git a/libswfdec/swfdec_text_field_movie_html.c b/libswfdec/swfdec_text_field_movie_html.c index 1a61972..b3976e7 100644 --- a/libswfdec/swfdec_text_field_movie_html.c +++ b/libswfdec/swfdec_text_field_movie_html.c @@ -54,6 +54,9 @@ typedef struct { static void swfdec_text_field_movie_html_parse_close_tag (ParserData *data, ParserTag *tag) { + g_return_if_fail (data != NULL); + g_return_if_fail (tag != NULL); + if (data->multiline && ((tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)) || (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)))) @@ -93,7 +96,7 @@ swfdec_text_field_movie_html_parse_comment (ParserData *data, const char *p) g_return_val_if_fail (p != NULL, NULL); g_return_val_if_fail (strncmp (p, "<!--", strlen ("<!--")) == 0, NULL); - end = strstr (p, "-->"); + end = strstr (p + strlen ("<!--"), "-->"); if (end != NULL) end += strlen("-->"); @@ -109,6 +112,13 @@ swfdec_text_field_movie_html_tag_set_attribute (ParserData *data, SwfdecAsValue val; SwfdecAsObject *object; + g_return_if_fail (data != NULL); + g_return_if_fail (tag != NULL); + g_return_if_fail (name != NULL); + g_return_if_fail (name_length >= 0); + g_return_if_fail (value != NULL); + g_return_if_fail (value_length >= 0); + object = SWFDEC_AS_OBJECT (tag->format); SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_give_string ( object->context, g_strndup (value, value_length))); @@ -213,7 +223,9 @@ swfdec_text_field_movie_html_parse_attribute (ParserData *data, ParserTag *tag, const char *end, *name, *value; int name_length, value_length; - g_return_val_if_fail ((*p != '>' && *p != '\0'), p); + g_return_val_if_fail (data != NULL, NULL); + g_return_val_if_fail (tag != NULL, NULL); + g_return_val_if_fail ((*p != '>' && *p != '\0'), NULL); end = p + strcspn (p, "=> \r\n\t"); if (end - p <= 0) @@ -720,6 +732,7 @@ swfdec_text_field_movie_html_text_append_paragraph (SwfdecTextFieldMovie *text, return string; } + const char * swfdec_text_field_movie_get_html_text (SwfdecTextFieldMovie *text) { commit 1d982b25e49b32a094d95b68307449d77f9a21a4 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 13:36:38 2007 +0200 Rename swfdec_html_parser.c to swfdec_text_field_movie_html.c, move some code The HTML generating code is now also part of swfdec_text_field_movie_html.c diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am index c67f132..0cf8b71 100644 --- a/libswfdec/Makefile.am +++ b/libswfdec/Makefile.am @@ -60,6 +60,7 @@ libswfdec_ at SWFDEC_MAJORMINOR@_la_SOURCES = \ swfdec_text_field.c \ swfdec_text_field_movie.c \ swfdec_text_field_movie_as.c \ + swfdec_text_field_movie_html.c \ swfdec_enums.c \ swfdec_event.c \ swfdec_file_loader.c \ @@ -70,7 +71,6 @@ libswfdec_ at SWFDEC_MAJORMINOR@_la_SOURCES = \ swfdec_font.c \ swfdec_graphic.c \ swfdec_graphic_movie.c \ - swfdec_html_parser.c \ swfdec_image.c \ swfdec_interval.c \ swfdec_key_as.c \ diff --git a/libswfdec/swfdec_html_parser.c b/libswfdec/swfdec_html_parser.c deleted file mode 100644 index fbeb00e..0000000 --- a/libswfdec/swfdec_html_parser.c +++ /dev/null @@ -1,474 +0,0 @@ -/* Swfdec - * Copyright (C) 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 <stdlib.h> -#include <string.h> - -#include "swfdec_text_field_movie.h" -#include "swfdec_as_strings.h" -#include "swfdec_style_sheet.h" -#include "swfdec_xml.h" -#include "swfdec_debug.h" - -typedef struct { - const char * name; - int name_length; - guint index; - guint end_index; - SwfdecTextFormat *format; -} ParserTag; - -typedef struct { - SwfdecAsContext *cx; - gboolean multiline; - gboolean condense_white; - SwfdecStyleSheet *style_sheet; - GString * text; - GSList * tags_open; - GSList * tags_closed; -} ParserData; - -static void -swfdec_text_field_movie_html_parse_close_tag (ParserData *data, ParserTag *tag) -{ - if (data->multiline && - ((tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)) || - (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)))) - { - GSList *iter; - - for (iter = data->tags_closed; iter != NULL; iter = iter->next) { - ParserTag *f = iter->data; - if (f->end_index < tag->index) - break; - if (f->name_length == 4 && !g_strncasecmp (f->name, "font", 4)) { - ParserTag *n = g_new0 (ParserTag, 1); - n->name = f->name; - n->name_length = f->name_length; - n->index = g_utf8_strlen (data->text->str, -1); - n->end_index = n->index + 1; - n->format = swfdec_text_format_copy (f->format); - data->tags_closed = g_slist_prepend (data->tags_closed, n); - break; - } - } - data->text = g_string_append_c (data->text, '\n'); - } - - tag->end_index = g_utf8_strlen (data->text->str, -1); - - data->tags_open = g_slist_remove (data->tags_open, tag); - data->tags_closed = g_slist_prepend (data->tags_closed, tag); -} - -static const char * -swfdec_text_field_movie_html_parse_comment (ParserData *data, const char *p) -{ - const char *end; - - g_return_val_if_fail (data != NULL, NULL); - g_return_val_if_fail (p != NULL, NULL); - g_return_val_if_fail (strncmp (p, "<!--", strlen ("<!--")) == 0, NULL); - - end = strstr (p, "-->"); - if (end != NULL) - end += strlen("-->"); - - // return NULL if no end found - return end; -} - -static void -swfdec_text_field_movie_html_tag_set_attribute (ParserData *data, - ParserTag *tag, const char *name, int name_length, const char *value, - int value_length) -{ - SwfdecAsValue val; - SwfdecAsObject *object; - - object = SWFDEC_AS_OBJECT (tag->format); - SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_give_string ( - object->context, g_strndup (value, value_length))); - - if (tag->name_length == 10 && !g_strncasecmp (tag->name, "textformat", 10)) - { - if (name_length == 10 && !g_strncasecmp (name, "leftmargin", 10)) - { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_leftMargin, &val); - } - else if (name_length == 11 && !g_strncasecmp (name, "rightmargin", 11)) - { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_rightMargin, &val); - } - else if (name_length == 6 && !g_strncasecmp (name, "indent", 6)) - { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_indent, &val); - } - else if (name_length == 11 && !g_strncasecmp (name, "blockindent", 11)) - { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_blockIndent, &val); - } - else if (name_length == 8 && !g_strncasecmp (name, "tabstops", 8)) - { - // FIXME - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_tabStops, &val); - } - } - else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)) - { - if (name_length == 5 && !g_strncasecmp (name, "align", 5)) - { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_align, &val); - } - } - else if (tag->name_length == 4 && !g_strncasecmp (tag->name, "font", 4)) - { - if (name_length == 4 && !g_strncasecmp (name, "face", 4)) - { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_font, &val); - } - else if (name_length == 4 && !g_strncasecmp (name, "size", 4)) - { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_size, &val); - } - else if (name_length == 5 && !g_strncasecmp (name, "color", 5)) - { - SwfdecAsValue val_number; - - if (value_length != 7 || *value != '#') { - SWFDEC_AS_VALUE_SET_NUMBER (&val_number, 0); - } else { - int number; - char *tail; - - number = g_ascii_strtoll (value + 1, &tail, 16); - if (tail != value + 7) - number = 0; - SWFDEC_AS_VALUE_SET_NUMBER (&val_number, number); - } - - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_color, &val_number); - } - else if (name_length == 13 && !g_strncasecmp (name, "letterspacing", 13)) - { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_letterSpacing, - &val); - } - // special case: Don't parse kerning - } - else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "a", 1)) - { - if (name_length == 4 && !g_strncasecmp (name, "href", 4)) - { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_url, &val); - } - else if (name_length == 6 && !g_strncasecmp (name, "target", 6)) - { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_target, &val); - } - } - - if (data->style_sheet && - ((tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) || - (tag->name_length == 4 && !g_strncasecmp (tag->name, "span", 4)) || - (tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)))) - { - if (name_length == 5 && !g_strncasecmp (name, "class", 5)) { - SwfdecTextFormat *format = swfdec_style_sheet_get_class_format ( - data->style_sheet, swfdec_as_context_give_string (data->cx, - g_strndup (value, value_length))); - if (format != NULL) - swfdec_text_format_add (tag->format, format); - } - } -} - -static const char * -swfdec_text_field_movie_html_parse_attribute (ParserData *data, ParserTag *tag, - const char *p) -{ - const char *end, *name, *value; - int name_length, value_length; - - g_return_val_if_fail ((*p != '>' && *p != '\0'), p); - - end = p + strcspn (p, "=> \r\n\t"); - if (end - p <= 0) - return NULL; // Correct? - - name = p; - name_length = end - p; - - p = end + strspn (end, " \r\n\t"); - if (*p != '=') - return NULL; // FIXME: Correct? - p = p + 1; - p = p + strspn (p, " \r\n\t"); - - if (*p != '"' && *p != '\'') - return NULL; // FIXME: Correct? - - end = p + 1; - do { - end = strchr (end, *p); - } while (end != NULL && *(end - 1) == '\\'); - - if (end == NULL) - return NULL; // FIXME: Correct? - - value = p + 1; - value_length = end - (p + 1); - - if (tag != NULL) { - swfdec_text_field_movie_html_tag_set_attribute (data, tag, name, - name_length, value, value_length); - } - - g_return_val_if_fail (end + 1 > p, NULL); - - return end + 1; -} - -static const char * -swfdec_text_field_movie_html_parse_tag (ParserData *data, const char *p) -{ - ParserTag *tag; - const char *name, *end; - int name_length; - gboolean close; - - g_return_val_if_fail (data != NULL, NULL); - g_return_val_if_fail (p != NULL, NULL); - g_return_val_if_fail (*p == '<', NULL); - - p++; - - // closing tag or opening tag? - if (*p == '/') { - close = TRUE; - p++; - } else { - close = FALSE; - } - - // find the end of the name - end = p + strcspn (p, "> \r\n\t"); - - if (*end == '\0') - return NULL; - - // don't count trailing / as part of the name if it's followed by > - // we still act like it's a normal opening tag even if it has / - if (*end == '>' && *(end - 1) == '/') - end = end - 1; - - if (end == p) // empty name - return NULL; - - name = p; - name_length = end - p; - - if (close) - { - if (data->tags_open != NULL) { - tag = data->tags_open->data; - if (name_length == tag->name_length && - !g_strncasecmp (name, tag->name, name_length)) - swfdec_text_field_movie_html_parse_close_tag (data, tag); - } - - end = strchr (end, '>'); - if (end != NULL) - end += 1; - } - else - { - if (data->cx->version < 7 && - (name_length == 2 && !g_strncasecmp (name, "br", 2))) { - data->text = g_string_append_c (data->text, '\n'); - tag = NULL; - } else { - SwfdecAsObject *object; - SwfdecAsValue val; - - if (data->cx->version < 7 && - ((name_length == 1 && !g_strncasecmp (name, "p", 1)) || - (name_length == 2 && !g_strncasecmp (name, "li", 2)))) - { - GSList *iter; - - for (iter = data->tags_open; iter != NULL; iter = iter->next) { - ParserTag *f = iter->data; - if ((f->name_length == 1 && !g_strncasecmp (f->name, "p", 1)) || - (f->name_length == 2 && !g_strncasecmp (f->name, "li", 2))) { - data->text = g_string_append_c (data->text, '\n'); - break; - } - } - } - - tag = g_new0 (ParserTag, 1); - tag->name = name; - tag->name_length = name_length; - tag->format = SWFDEC_TEXT_FORMAT (swfdec_text_format_new (data->cx)); - tag->index = g_utf8_strlen (data->text->str, -1); - - data->tags_open = g_slist_prepend (data->tags_open, tag); - - // set format based on tag - object = SWFDEC_AS_OBJECT (tag->format); - SWFDEC_AS_VALUE_SET_BOOLEAN (&val, TRUE); - - if (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bullet, &val); - } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "b", 1)) { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bold, &val); - } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "i", 1)) { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_italic, &val); - } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "u", 1)) { - swfdec_as_object_set_variable (object, SWFDEC_AS_STR_underline, &val); - } else if (tag->name_length == 3 && !g_strncasecmp (tag->name, "img", 3)) - { - SWFDEC_FIXME ("IMG tag support for TextField's HTML input missing"); - } - - if (data->style_sheet && - ((tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) || - (tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)))) { - SwfdecTextFormat *format = swfdec_style_sheet_get_tag_format ( - data->style_sheet, swfdec_as_context_give_string (data->cx, - g_strndup (tag->name, tag->name_length))); - if (format != NULL) - swfdec_text_format_add (tag->format, format); - } - } - - // parse attributes - end = end + strspn (end, " \r\n\t"); - while (*end != '\0' && *end != '>' && (*end != '/' || *(end + 1) != '>')) { - end = swfdec_text_field_movie_html_parse_attribute (data, tag, end); - if (end == NULL) - break; - end = end + strspn (end, " \r\n\t"); - } - if (end != NULL) { - if (*end == '/') - end += 1; - if (*end == '>') - end += 1; - } - } - - return end; -} - -static const char * -swfdec_text_field_movie_html_parse_text (ParserData *data, const char *p) -{ - const char *end; - char *unescaped; - - g_return_val_if_fail (data != NULL, NULL); - g_return_val_if_fail (p != NULL, NULL); - g_return_val_if_fail (*p != '\0' && *p != '<', NULL); - - // get the text - // if condense_white: all whitespace blocks are converted to a single space - while (*p != '\0' && *p != '<') { - if (data->condense_white) { - end = p + strcspn (p, "< \n\r\t"); - } else { - end = strchr (p, '<'); - if (end == NULL) - end = strchr (p, '\0'); - } - - unescaped = swfdec_xml_unescape_len (data->cx, p, end - p); - data->text = g_string_append (data->text, unescaped); - g_free (unescaped); - - if (data->condense_white && g_ascii_isspace (*end)) { - data->text = g_string_append_c (data->text, ' '); - p = end + strspn (end, " \n\r\t"); - } else { - p = end; - } - } - - return p; -} - -void -swfdec_text_field_movie_html_parse (SwfdecTextFieldMovie *text, const char *str) -{ - ParserData data; - const char *p; - - g_return_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text)); - g_return_if_fail (str != NULL); - - text->input = g_string_assign (text->input, ""); - - data.cx = SWFDEC_AS_OBJECT (text)->context; - data.multiline = (data.cx->version < 7 || text->text->multiline); - data.condense_white = text->condense_white; - if (text->style_sheet != NULL && SWFDEC_IS_STYLESHEET (text->style_sheet)) { - data.style_sheet = SWFDEC_STYLESHEET (text->style_sheet); - } else { - data.style_sheet = NULL; - } - data.text = text->input; - data.tags_open = NULL; - data.tags_closed = NULL; - - p = str; - while (p != NULL && *p != '\0') { - if (*p == '<') { - if (strncmp (p + 1, "!--", strlen ("!--")) == 0) { - p = swfdec_text_field_movie_html_parse_comment (&data, p); - } else { - p = swfdec_text_field_movie_html_parse_tag (&data, p); - } - } else { - p = swfdec_text_field_movie_html_parse_text (&data, p); - } - } - - // close remaining tags - while (data.tags_open != NULL) { - swfdec_text_field_movie_html_parse_close_tag (&data, - (ParserTag *)data.tags_open->data); - } - - // add parsed styles - while (data.tags_closed != NULL) { - ParserTag *tag = (ParserTag *)data.tags_closed->data; - - if (tag->index != tag->end_index) { - swfdec_text_field_movie_set_text_format (text, tag->format, tag->index, - tag->end_index); - } - - data.tags_closed = g_slist_remove (data.tags_closed, tag); - } -} diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c index 0305799..d50bdb9 100644 --- a/libswfdec/swfdec_text_field_movie.c +++ b/libswfdec/swfdec_text_field_movie.c @@ -1248,248 +1248,6 @@ swfdec_text_field_movie_set_listen_variable (SwfdecTextFieldMovie *text, } } -static const char * -align_to_string (SwfdecTextAlign align) -{ - switch (align) { - case SWFDEC_TEXT_ALIGN_LEFT: - return "LEFT"; - case SWFDEC_TEXT_ALIGN_RIGHT: - return "RIGHT"; - case SWFDEC_TEXT_ALIGN_CENTER: - return "CENTER"; - case SWFDEC_TEXT_ALIGN_JUSTIFY: - return "JUSTIFY"; - default: - g_assert_not_reached (); - } -} - -/* - * Order of tags: - * TEXTFORMAT / P or LI / FONT / A / B / I / U - * - * Order of attributes: - * TEXTFORMAT: - * LEFTMARGIN / RIGHTMARGIN / INDENT / LEADING / BLOCKINDENT / TABSTOPS - * P: ALIGN - * LI: none - * FONT: FACE / SIZE / COLOR / LETTERSPACING / KERNING - * A: HREF / TARGET - * B: none - * I: none - * U: none - */ -static GString * -swfdec_text_field_movie_html_text_append_paragraph (SwfdecTextFieldMovie *text, - GString *string, guint start_index, guint end_index) -{ - SwfdecTextFormat *format, *format_prev, *format_font; - GSList *iter, *fonts, *iter_font; - guint index_, index_prev; - gboolean textformat, bullet, font; - char *escaped; - - g_return_val_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text), string); - g_return_val_if_fail (string != NULL, string); - g_return_val_if_fail (start_index <= end_index, string); - - g_return_val_if_fail (text->formats != NULL, string); - for (iter = text->formats; iter->next != NULL && - ((SwfdecFormatIndex *)(iter->next->data))->index_ <= start_index; - iter = iter->next); - - index_ = start_index; - format = ((SwfdecFormatIndex *)(iter->data))->format; - - if (format->left_margin != 0 || format->right_margin != 0 || - format->indent != 0 || format->leading != 0 || - format->block_indent != 0 || - swfdec_as_array_get_length (format->tab_stops) > 0) - { - string = g_string_append (string, "<TEXTFORMAT"); - if (format->left_margin) { - g_string_append_printf (string, " LEFTMARGIN=\"%i\"", - format->left_margin); - } - if (format->right_margin) { - g_string_append_printf (string, " RIGHTMARGIN=\"%i\"", - format->right_margin); - } - if (format->indent) - g_string_append_printf (string, " INDENT=\"%i\"", format->indent); - if (format->leading) - g_string_append_printf (string, " LEADING=\"%i\"", format->leading); - if (format->block_indent) { - g_string_append_printf (string, " BLOCKINDENT=\"%i\"", - format->block_indent); - } - if (swfdec_as_array_get_length (format->tab_stops) > 0) { - SwfdecAsValue val; - SWFDEC_AS_VALUE_SET_OBJECT (&val, SWFDEC_AS_OBJECT (format->tab_stops)); - g_string_append_printf (string, " TABSTOPS=\"%s\"", - swfdec_as_value_to_string (SWFDEC_AS_OBJECT - (format->tab_stops)->context, &val)); - } - string = g_string_append (string, ">"); - - textformat = TRUE; - } - else - { - textformat = FALSE; - } - - if (format->bullet) { - string = g_string_append (string, "<LI>"); - bullet = TRUE; - } else { - g_string_append_printf (string, "<P ALIGN=\"%s\">", - align_to_string (format->align)); - bullet = FALSE; - } - - // note we don't escape format->font, even thought it can have evil chars - g_string_append_printf (string, "<FONT FACE=\"%s\" SIZE=\"%i\" COLOR=\"#%06X\" LETTERSPACING=\"%i\" KERNING=\"%i\">", - format->font, format->size, format->color, (int)format->letter_spacing, - (format->kerning ? 1 : 0)); - fonts = g_slist_prepend (NULL, format); - - if (format->url != SWFDEC_AS_STR_EMPTY) - g_string_append_printf (string, "<A HREF=\"%s\" TARGET=\"%s\">", - format->url, format->target); - if (format->bold) - string = g_string_append (string, "<B>"); - if (format->italic) - string = g_string_append (string, "<I>"); - if (format->underline) - string = g_string_append (string, "<U>"); - - // special case: use <= instead of < to add some extra markup - for (iter = iter->next; - iter != NULL && ((SwfdecFormatIndex *)(iter->data))->index_ <= end_index; - iter = iter->next) - { - index_prev = index_; - format_prev = format; - index_ = ((SwfdecFormatIndex *)(iter->data))->index_; - format = ((SwfdecFormatIndex *)(iter->data))->format; - - escaped = swfdec_xml_escape_len (text->input->str + index_prev, - index_ - index_prev); - string = g_string_append (string, escaped); - g_free (escaped); - escaped = NULL; - - // Figure out what tags need to be rewritten - if (format->font != format_prev->font || - format->size != format_prev->size || - format->color != format_prev->color || - (int)format->letter_spacing != (int)format_prev->letter_spacing || - format->kerning != format_prev->kerning) { - font = TRUE; - } else if (format->url == format_prev->url && - format->target == format_prev->target && - format->bold == format_prev->bold && - format->italic == format_prev->italic && - format->underline == format_prev->underline) { - continue; - } - - // Close tags - for (iter_font = fonts; iter_font != NULL; iter_font = iter_font->next) - { - format_font = (SwfdecTextFormat *)iter_font->data; - if (format->font == format_font->font && - format->size == format_font->size && - format->color == format_font->color && - (int)format->letter_spacing == (int)format_font->letter_spacing && - format->kerning == format_font->kerning) { - break; - } - } - if (format_prev->underline) - string = g_string_append (string, "</U>"); - if (format_prev->italic) - string = g_string_append (string, "</I>"); - if (format_prev->bold) - string = g_string_append (string, "</B>"); - if (format_prev->url != SWFDEC_AS_STR_EMPTY) - string = g_string_append (string, "</A>"); - if (iter_font != NULL) { - while (fonts != iter_font) { - string = g_string_append (string, "</FONT>"); - fonts = g_slist_remove (fonts, fonts->data); - } - } - - // Open tags - format_font = (SwfdecTextFormat *)fonts->data; - if (font && (format->font != format_font->font || - format->size != format_font->size || - format->color != format_font->color || - (int)format->letter_spacing != (int)format_font->letter_spacing || - format->kerning != format_font->kerning)) - { - fonts = g_slist_prepend (fonts, format); - - string = g_string_append (string, "<FONT"); - // note we don't escape format->font, even thought it can have evil chars - if (format->font != format_font->font) - g_string_append_printf (string, " FACE=\"%s\"", format->font); - if (format->size != format_font->size) - g_string_append_printf (string, " SIZE=\"%i\"", format->size); - if (format->color != format_font->color) - g_string_append_printf (string, " COLOR=\"#%06X\"", format->color); - if ((int)format->letter_spacing != (int)format_font->letter_spacing) { - g_string_append_printf (string, " LETTERSPACING=\"%i\"", - (int)format->letter_spacing); - } - if (format->kerning != format_font->kerning) { - g_string_append_printf (string, " KERNING=\"%i\"", - (format->kerning ? 1 : 0)); - } - string = g_string_append (string, ">"); - } - if (format->url != SWFDEC_AS_STR_EMPTY) { - g_string_append_printf (string, "<A HREF=\"%s\" TARGET=\"%s\">", - format->url, format->target); - } - if (format->bold) - string = g_string_append (string, "<B>"); - if (format->italic) - string = g_string_append (string, "<I>"); - if (format->underline) - string = g_string_append (string, "<U>"); - } - - escaped = swfdec_xml_escape_len (text->input->str + index_, - end_index - index_); - string = g_string_append (string, escaped); - g_free (escaped); - - if (format->underline) - string = g_string_append (string, "</U>"); - if (format->italic) - string = g_string_append (string, "</I>"); - if (format->bold) - string = g_string_append (string, "</B>"); - if (format->url != SWFDEC_AS_STR_EMPTY) - string = g_string_append (string, "</A>"); - for (iter = fonts; iter != NULL; iter = iter->next) - string = g_string_append (string, "</FONT>"); - g_slist_free (fonts); - if (bullet) { - string = g_string_append (string, "</LI>"); - } else { - string = g_string_append (string, "</P>"); - } - if (textformat) - string = g_string_append (string, "</TEXTFORMAT>"); - - return string; -} - const char * swfdec_text_field_movie_get_text (SwfdecTextFieldMovie *text) { @@ -1514,37 +1272,6 @@ swfdec_text_field_movie_get_text (SwfdecTextFieldMovie *text) return swfdec_as_context_give_string (SWFDEC_AS_OBJECT (text)->context, str); } -const char * -swfdec_text_field_movie_get_html_text (SwfdecTextFieldMovie *text) -{ - const char *p, *end; - GString *string; - - g_return_val_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text), - SWFDEC_AS_STR_EMPTY); - - if (text->input == NULL) - return SWFDEC_AS_STR_EMPTY; - - string = g_string_new (""); - - p = text->input->str; - while (*p != '\0') { - end = strpbrk (p, "\r\n"); - if (end == NULL) - end = strchr (p, '\0'); - - string = swfdec_text_field_movie_html_text_append_paragraph (text, string, - p - text->input->str, end - text->input->str); - - p = end; - if (*p != '\0') p++; - } - - return swfdec_as_context_give_string (SWFDEC_AS_OBJECT (text)->context, - g_string_free (string, FALSE)); -} - void swfdec_text_field_movie_replace_text (SwfdecTextFieldMovie *text, guint start_index, guint end_index, const char *str) diff --git a/libswfdec/swfdec_text_field_movie.h b/libswfdec/swfdec_text_field_movie.h index d72b419..7a055b2 100644 --- a/libswfdec/swfdec_text_field_movie.h +++ b/libswfdec/swfdec_text_field_movie.h @@ -134,7 +134,6 @@ SwfdecTextFormat *swfdec_text_field_movie_get_text_format (SwfdecTextFieldMovie guint start_index, guint end_index); const char * swfdec_text_field_movie_get_text (SwfdecTextFieldMovie * text); -const char * swfdec_text_field_movie_get_html_text (SwfdecTextFieldMovie * text); void swfdec_text_field_movie_set_listen_variable (SwfdecTextFieldMovie * text, const char * value); void swfdec_text_field_movie_set_listen_variable_text (SwfdecTextFieldMovie *text, @@ -150,6 +149,7 @@ void swfdec_text_field_movie_init_properties (SwfdecAsContext * cx); /* implemented in swfdec_html_parser.c */ void swfdec_text_field_movie_html_parse (SwfdecTextFieldMovie * text, const char * str); +const char * swfdec_text_field_movie_get_html_text (SwfdecTextFieldMovie * text); G_END_DECLS #endif diff --git a/libswfdec/swfdec_text_field_movie_html.c b/libswfdec/swfdec_text_field_movie_html.c new file mode 100644 index 0000000..1a61972 --- /dev/null +++ b/libswfdec/swfdec_text_field_movie_html.c @@ -0,0 +1,752 @@ +/* Swfdec + * Copyright (C) 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 <stdlib.h> +#include <string.h> + +#include "swfdec_text_field_movie.h" +#include "swfdec_as_strings.h" +#include "swfdec_style_sheet.h" +#include "swfdec_xml.h" +#include "swfdec_debug.h" + +/* + * Parsing + */ +typedef struct { + const char * name; + int name_length; + guint index; + guint end_index; + SwfdecTextFormat *format; +} ParserTag; + +typedef struct { + SwfdecAsContext *cx; + gboolean multiline; + gboolean condense_white; + SwfdecStyleSheet *style_sheet; + GString * text; + GSList * tags_open; + GSList * tags_closed; +} ParserData; + +static void +swfdec_text_field_movie_html_parse_close_tag (ParserData *data, ParserTag *tag) +{ + if (data->multiline && + ((tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)) || + (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)))) + { + GSList *iter; + + for (iter = data->tags_closed; iter != NULL; iter = iter->next) { + ParserTag *f = iter->data; + if (f->end_index < tag->index) + break; + if (f->name_length == 4 && !g_strncasecmp (f->name, "font", 4)) { + ParserTag *n = g_new0 (ParserTag, 1); + n->name = f->name; + n->name_length = f->name_length; + n->index = g_utf8_strlen (data->text->str, -1); + n->end_index = n->index + 1; + n->format = swfdec_text_format_copy (f->format); + data->tags_closed = g_slist_prepend (data->tags_closed, n); + break; + } + } + data->text = g_string_append_c (data->text, '\n'); + } + + tag->end_index = g_utf8_strlen (data->text->str, -1); + + data->tags_open = g_slist_remove (data->tags_open, tag); + data->tags_closed = g_slist_prepend (data->tags_closed, tag); +} + +static const char * +swfdec_text_field_movie_html_parse_comment (ParserData *data, const char *p) +{ + const char *end; + + g_return_val_if_fail (data != NULL, NULL); + g_return_val_if_fail (p != NULL, NULL); + g_return_val_if_fail (strncmp (p, "<!--", strlen ("<!--")) == 0, NULL); + + end = strstr (p, "-->"); + if (end != NULL) + end += strlen("-->"); + + // return NULL if no end found + return end; +} + +static void +swfdec_text_field_movie_html_tag_set_attribute (ParserData *data, + ParserTag *tag, const char *name, int name_length, const char *value, + int value_length) +{ + SwfdecAsValue val; + SwfdecAsObject *object; + + object = SWFDEC_AS_OBJECT (tag->format); + SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_give_string ( + object->context, g_strndup (value, value_length))); + + if (tag->name_length == 10 && !g_strncasecmp (tag->name, "textformat", 10)) + { + if (name_length == 10 && !g_strncasecmp (name, "leftmargin", 10)) + { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_leftMargin, &val); + } + else if (name_length == 11 && !g_strncasecmp (name, "rightmargin", 11)) + { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_rightMargin, &val); + } + else if (name_length == 6 && !g_strncasecmp (name, "indent", 6)) + { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_indent, &val); + } + else if (name_length == 11 && !g_strncasecmp (name, "blockindent", 11)) + { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_blockIndent, &val); + } + else if (name_length == 8 && !g_strncasecmp (name, "tabstops", 8)) + { + // FIXME + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_tabStops, &val); + } + } + else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)) + { + if (name_length == 5 && !g_strncasecmp (name, "align", 5)) + { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_align, &val); + } + } + else if (tag->name_length == 4 && !g_strncasecmp (tag->name, "font", 4)) + { + if (name_length == 4 && !g_strncasecmp (name, "face", 4)) + { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_font, &val); + } + else if (name_length == 4 && !g_strncasecmp (name, "size", 4)) + { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_size, &val); + } + else if (name_length == 5 && !g_strncasecmp (name, "color", 5)) + { + SwfdecAsValue val_number; + + if (value_length != 7 || *value != '#') { + SWFDEC_AS_VALUE_SET_NUMBER (&val_number, 0); + } else { + int number; + char *tail; + + number = g_ascii_strtoll (value + 1, &tail, 16); + if (tail != value + 7) + number = 0; + SWFDEC_AS_VALUE_SET_NUMBER (&val_number, number); + } + + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_color, &val_number); + } + else if (name_length == 13 && !g_strncasecmp (name, "letterspacing", 13)) + { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_letterSpacing, + &val); + } + // special case: Don't parse kerning + } + else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "a", 1)) + { + if (name_length == 4 && !g_strncasecmp (name, "href", 4)) + { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_url, &val); + } + else if (name_length == 6 && !g_strncasecmp (name, "target", 6)) + { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_target, &val); + } + } + + if (data->style_sheet && + ((tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) || + (tag->name_length == 4 && !g_strncasecmp (tag->name, "span", 4)) || + (tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)))) + { + if (name_length == 5 && !g_strncasecmp (name, "class", 5)) { + SwfdecTextFormat *format = swfdec_style_sheet_get_class_format ( + data->style_sheet, swfdec_as_context_give_string (data->cx, + g_strndup (value, value_length))); + if (format != NULL) + swfdec_text_format_add (tag->format, format); + } + } +} + +static const char * +swfdec_text_field_movie_html_parse_attribute (ParserData *data, ParserTag *tag, + const char *p) +{ + const char *end, *name, *value; + int name_length, value_length; + + g_return_val_if_fail ((*p != '>' && *p != '\0'), p); + + end = p + strcspn (p, "=> \r\n\t"); + if (end - p <= 0) + return NULL; // Correct? + + name = p; + name_length = end - p; + + p = end + strspn (end, " \r\n\t"); + if (*p != '=') + return NULL; // FIXME: Correct? + p = p + 1; + p = p + strspn (p, " \r\n\t"); + + if (*p != '"' && *p != '\'') + return NULL; // FIXME: Correct? + + end = p + 1; + do { + end = strchr (end, *p); + } while (end != NULL && *(end - 1) == '\\'); + + if (end == NULL) + return NULL; // FIXME: Correct? + + value = p + 1; + value_length = end - (p + 1); + + if (tag != NULL) { + swfdec_text_field_movie_html_tag_set_attribute (data, tag, name, + name_length, value, value_length); + } + + g_return_val_if_fail (end + 1 > p, NULL); + + return end + 1; +} + +static const char * +swfdec_text_field_movie_html_parse_tag (ParserData *data, const char *p) +{ + ParserTag *tag; + const char *name, *end; + int name_length; + gboolean close; + + g_return_val_if_fail (data != NULL, NULL); + g_return_val_if_fail (p != NULL, NULL); + g_return_val_if_fail (*p == '<', NULL); + + p++; + + // closing tag or opening tag? + if (*p == '/') { + close = TRUE; + p++; + } else { + close = FALSE; + } + + // find the end of the name + end = p + strcspn (p, "> \r\n\t"); + + if (*end == '\0') + return NULL; + + // don't count trailing / as part of the name if it's followed by > + // we still act like it's a normal opening tag even if it has / + if (*end == '>' && *(end - 1) == '/') + end = end - 1; + + if (end == p) // empty name + return NULL; + + name = p; + name_length = end - p; + + if (close) + { + if (data->tags_open != NULL) { + tag = data->tags_open->data; + if (name_length == tag->name_length && + !g_strncasecmp (name, tag->name, name_length)) + swfdec_text_field_movie_html_parse_close_tag (data, tag); + } + + end = strchr (end, '>'); + if (end != NULL) + end += 1; + } + else + { + if (data->cx->version < 7 && + (name_length == 2 && !g_strncasecmp (name, "br", 2))) { + data->text = g_string_append_c (data->text, '\n'); + tag = NULL; + } else { + SwfdecAsObject *object; + SwfdecAsValue val; + + if (data->cx->version < 7 && + ((name_length == 1 && !g_strncasecmp (name, "p", 1)) || + (name_length == 2 && !g_strncasecmp (name, "li", 2)))) + { + GSList *iter; + + for (iter = data->tags_open; iter != NULL; iter = iter->next) { + ParserTag *f = iter->data; + if ((f->name_length == 1 && !g_strncasecmp (f->name, "p", 1)) || + (f->name_length == 2 && !g_strncasecmp (f->name, "li", 2))) { + data->text = g_string_append_c (data->text, '\n'); + break; + } + } + } + + tag = g_new0 (ParserTag, 1); + tag->name = name; + tag->name_length = name_length; + tag->format = SWFDEC_TEXT_FORMAT (swfdec_text_format_new (data->cx)); + tag->index = g_utf8_strlen (data->text->str, -1); + + data->tags_open = g_slist_prepend (data->tags_open, tag); + + // set format based on tag + object = SWFDEC_AS_OBJECT (tag->format); + SWFDEC_AS_VALUE_SET_BOOLEAN (&val, TRUE); + + if (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bullet, &val); + } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "b", 1)) { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bold, &val); + } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "i", 1)) { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_italic, &val); + } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "u", 1)) { + swfdec_as_object_set_variable (object, SWFDEC_AS_STR_underline, &val); + } else if (tag->name_length == 3 && !g_strncasecmp (tag->name, "img", 3)) + { + SWFDEC_FIXME ("IMG tag support for TextField's HTML input missing"); + } + + if (data->style_sheet && + ((tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) || + (tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)))) { + SwfdecTextFormat *format = swfdec_style_sheet_get_tag_format ( + data->style_sheet, swfdec_as_context_give_string (data->cx, + g_strndup (tag->name, tag->name_length))); + if (format != NULL) + swfdec_text_format_add (tag->format, format); + } + } + + // parse attributes + end = end + strspn (end, " \r\n\t"); + while (*end != '\0' && *end != '>' && (*end != '/' || *(end + 1) != '>')) { + end = swfdec_text_field_movie_html_parse_attribute (data, tag, end); + if (end == NULL) + break; + end = end + strspn (end, " \r\n\t"); + } + if (end != NULL) { + if (*end == '/') + end += 1; + if (*end == '>') + end += 1; + } + } + + return end; +} + +static const char * +swfdec_text_field_movie_html_parse_text (ParserData *data, const char *p) +{ + const char *end; + char *unescaped; + + g_return_val_if_fail (data != NULL, NULL); + g_return_val_if_fail (p != NULL, NULL); + g_return_val_if_fail (*p != '\0' && *p != '<', NULL); + + // get the text + // if condense_white: all whitespace blocks are converted to a single space + while (*p != '\0' && *p != '<') { + if (data->condense_white) { + end = p + strcspn (p, "< \n\r\t"); + } else { + end = strchr (p, '<'); + if (end == NULL) + end = strchr (p, '\0'); + } + + unescaped = swfdec_xml_unescape_len (data->cx, p, end - p); + data->text = g_string_append (data->text, unescaped); + g_free (unescaped); + + if (data->condense_white && g_ascii_isspace (*end)) { + data->text = g_string_append_c (data->text, ' '); + p = end + strspn (end, " \n\r\t"); + } else { + p = end; + } + } + + return p; +} + +void +swfdec_text_field_movie_html_parse (SwfdecTextFieldMovie *text, const char *str) +{ + ParserData data; + const char *p; + + g_return_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text)); + g_return_if_fail (str != NULL); + + text->input = g_string_assign (text->input, ""); + + data.cx = SWFDEC_AS_OBJECT (text)->context; + data.multiline = (data.cx->version < 7 || text->text->multiline); + data.condense_white = text->condense_white; + if (text->style_sheet != NULL && SWFDEC_IS_STYLESHEET (text->style_sheet)) { + data.style_sheet = SWFDEC_STYLESHEET (text->style_sheet); + } else { + data.style_sheet = NULL; + } + data.text = text->input; + data.tags_open = NULL; + data.tags_closed = NULL; + + p = str; + while (p != NULL && *p != '\0') { + if (*p == '<') { + if (strncmp (p + 1, "!--", strlen ("!--")) == 0) { + p = swfdec_text_field_movie_html_parse_comment (&data, p); + } else { + p = swfdec_text_field_movie_html_parse_tag (&data, p); + } + } else { + p = swfdec_text_field_movie_html_parse_text (&data, p); + } + } + + // close remaining tags + while (data.tags_open != NULL) { + swfdec_text_field_movie_html_parse_close_tag (&data, + (ParserTag *)data.tags_open->data); + } + + // add parsed styles + while (data.tags_closed != NULL) { + ParserTag *tag = (ParserTag *)data.tags_closed->data; + + if (tag->index != tag->end_index) { + swfdec_text_field_movie_set_text_format (text, tag->format, tag->index, + tag->end_index); + } + + data.tags_closed = g_slist_remove (data.tags_closed, tag); + } +} + +/* + * Generating + */ +static const char * +swfdec_text_field_movie_html_text_align_to_string (SwfdecTextAlign align) +{ + switch (align) { + case SWFDEC_TEXT_ALIGN_LEFT: + return "LEFT"; + case SWFDEC_TEXT_ALIGN_RIGHT: + return "RIGHT"; + case SWFDEC_TEXT_ALIGN_CENTER: + return "CENTER"; + case SWFDEC_TEXT_ALIGN_JUSTIFY: + return "JUSTIFY"; + default: + g_assert_not_reached (); + } +} + +/* + * Order of tags: + * TEXTFORMAT / P or LI / FONT / A / B / I / U + * + * Order of attributes: + * TEXTFORMAT: + * LEFTMARGIN / RIGHTMARGIN / INDENT / LEADING / BLOCKINDENT / TABSTOPS + * P: ALIGN + * LI: none + * FONT: FACE / SIZE / COLOR / LETTERSPACING / KERNING + * A: HREF / TARGET + * B: none + * I: none + * U: none + */ +static GString * +swfdec_text_field_movie_html_text_append_paragraph (SwfdecTextFieldMovie *text, + GString *string, guint start_index, guint end_index) +{ + SwfdecTextFormat *format, *format_prev, *format_font; + GSList *iter, *fonts, *iter_font; + guint index_, index_prev; + gboolean textformat, bullet, font; + char *escaped; + + g_return_val_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text), string); + g_return_val_if_fail (string != NULL, string); + g_return_val_if_fail (start_index <= end_index, string); + + g_return_val_if_fail (text->formats != NULL, string); + for (iter = text->formats; iter->next != NULL && + ((SwfdecFormatIndex *)(iter->next->data))->index_ <= start_index; + iter = iter->next); + + index_ = start_index; + format = ((SwfdecFormatIndex *)(iter->data))->format; + + if (format->left_margin != 0 || format->right_margin != 0 || + format->indent != 0 || format->leading != 0 || + format->block_indent != 0 || + swfdec_as_array_get_length (format->tab_stops) > 0) + { + string = g_string_append (string, "<TEXTFORMAT"); + if (format->left_margin) { + g_string_append_printf (string, " LEFTMARGIN=\"%i\"", + format->left_margin); + } + if (format->right_margin) { + g_string_append_printf (string, " RIGHTMARGIN=\"%i\"", + format->right_margin); + } + if (format->indent) + g_string_append_printf (string, " INDENT=\"%i\"", format->indent); + if (format->leading) + g_string_append_printf (string, " LEADING=\"%i\"", format->leading); + if (format->block_indent) { + g_string_append_printf (string, " BLOCKINDENT=\"%i\"", + format->block_indent); + } + if (swfdec_as_array_get_length (format->tab_stops) > 0) { + SwfdecAsValue val; + SWFDEC_AS_VALUE_SET_OBJECT (&val, SWFDEC_AS_OBJECT (format->tab_stops)); + g_string_append_printf (string, " TABSTOPS=\"%s\"", + swfdec_as_value_to_string (SWFDEC_AS_OBJECT + (format->tab_stops)->context, &val)); + } + string = g_string_append (string, ">"); + + textformat = TRUE; + } + else + { + textformat = FALSE; + } + + if (format->bullet) { + string = g_string_append (string, "<LI>"); + bullet = TRUE; + } else { + g_string_append_printf (string, "<P ALIGN=\"%s\">", + swfdec_text_field_movie_html_text_align_to_string (format->align)); + bullet = FALSE; + } + + // note we don't escape format->font, even thought it can have evil chars + g_string_append_printf (string, "<FONT FACE=\"%s\" SIZE=\"%i\" COLOR=\"#%06X\" LETTERSPACING=\"%i\" KERNING=\"%i\">", + format->font, format->size, format->color, (int)format->letter_spacing, + (format->kerning ? 1 : 0)); + fonts = g_slist_prepend (NULL, format); + + if (format->url != SWFDEC_AS_STR_EMPTY) + g_string_append_printf (string, "<A HREF=\"%s\" TARGET=\"%s\">", + format->url, format->target); + if (format->bold) + string = g_string_append (string, "<B>"); + if (format->italic) + string = g_string_append (string, "<I>"); + if (format->underline) + string = g_string_append (string, "<U>"); + + // special case: use <= instead of < to add some extra markup + for (iter = iter->next; + iter != NULL && ((SwfdecFormatIndex *)(iter->data))->index_ <= end_index; + iter = iter->next) + { + index_prev = index_; + format_prev = format; + index_ = ((SwfdecFormatIndex *)(iter->data))->index_; + format = ((SwfdecFormatIndex *)(iter->data))->format; + + escaped = swfdec_xml_escape_len (text->input->str + index_prev, + index_ - index_prev); + string = g_string_append (string, escaped); + g_free (escaped); + escaped = NULL; + + // Figure out what tags need to be rewritten + if (format->font != format_prev->font || + format->size != format_prev->size || + format->color != format_prev->color || + (int)format->letter_spacing != (int)format_prev->letter_spacing || + format->kerning != format_prev->kerning) { + font = TRUE; + } else if (format->url == format_prev->url && + format->target == format_prev->target && + format->bold == format_prev->bold && + format->italic == format_prev->italic && + format->underline == format_prev->underline) { + continue; + } + + // Close tags + for (iter_font = fonts; iter_font != NULL; iter_font = iter_font->next) + { + format_font = (SwfdecTextFormat *)iter_font->data; + if (format->font == format_font->font && + format->size == format_font->size && + format->color == format_font->color && + (int)format->letter_spacing == (int)format_font->letter_spacing && + format->kerning == format_font->kerning) { + break; + } + } + if (format_prev->underline) + string = g_string_append (string, "</U>"); + if (format_prev->italic) + string = g_string_append (string, "</I>"); + if (format_prev->bold) + string = g_string_append (string, "</B>"); + if (format_prev->url != SWFDEC_AS_STR_EMPTY) + string = g_string_append (string, "</A>"); + if (iter_font != NULL) { + while (fonts != iter_font) { + string = g_string_append (string, "</FONT>"); + fonts = g_slist_remove (fonts, fonts->data); + } + } + + // Open tags + format_font = (SwfdecTextFormat *)fonts->data; + if (font && (format->font != format_font->font || + format->size != format_font->size || + format->color != format_font->color || + (int)format->letter_spacing != (int)format_font->letter_spacing || + format->kerning != format_font->kerning)) + { + fonts = g_slist_prepend (fonts, format); + + string = g_string_append (string, "<FONT"); + // note we don't escape format->font, even thought it can have evil chars + if (format->font != format_font->font) + g_string_append_printf (string, " FACE=\"%s\"", format->font); + if (format->size != format_font->size) + g_string_append_printf (string, " SIZE=\"%i\"", format->size); + if (format->color != format_font->color) + g_string_append_printf (string, " COLOR=\"#%06X\"", format->color); + if ((int)format->letter_spacing != (int)format_font->letter_spacing) { + g_string_append_printf (string, " LETTERSPACING=\"%i\"", + (int)format->letter_spacing); + } + if (format->kerning != format_font->kerning) { + g_string_append_printf (string, " KERNING=\"%i\"", + (format->kerning ? 1 : 0)); + } + string = g_string_append (string, ">"); + } + if (format->url != SWFDEC_AS_STR_EMPTY) { + g_string_append_printf (string, "<A HREF=\"%s\" TARGET=\"%s\">", + format->url, format->target); + } + if (format->bold) + string = g_string_append (string, "<B>"); + if (format->italic) + string = g_string_append (string, "<I>"); + if (format->underline) + string = g_string_append (string, "<U>"); + } + + escaped = swfdec_xml_escape_len (text->input->str + index_, + end_index - index_); + string = g_string_append (string, escaped); + g_free (escaped); + + if (format->underline) + string = g_string_append (string, "</U>"); + if (format->italic) + string = g_string_append (string, "</I>"); + if (format->bold) + string = g_string_append (string, "</B>"); + if (format->url != SWFDEC_AS_STR_EMPTY) + string = g_string_append (string, "</A>"); + for (iter = fonts; iter != NULL; iter = iter->next) + string = g_string_append (string, "</FONT>"); + g_slist_free (fonts); + if (bullet) { + string = g_string_append (string, "</LI>"); + } else { + string = g_string_append (string, "</P>"); + } + if (textformat) + string = g_string_append (string, "</TEXTFORMAT>"); + + return string; +} +const char * +swfdec_text_field_movie_get_html_text (SwfdecTextFieldMovie *text) +{ + const char *p, *end; + GString *string; + + g_return_val_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text), + SWFDEC_AS_STR_EMPTY); + + if (text->input == NULL) + return SWFDEC_AS_STR_EMPTY; + + string = g_string_new (""); + + p = text->input->str; + while (*p != '\0') { + end = strpbrk (p, "\r\n"); + if (end == NULL) + end = strchr (p, '\0'); + + string = swfdec_text_field_movie_html_text_append_paragraph (text, string, + p - text->input->str, end - text->input->str); + + p = end; + if (*p != '\0') p++; + } + + return swfdec_as_context_give_string (SWFDEC_AS_OBJECT (text)->context, + g_string_free (string, FALSE)); +} commit 66b35c8602f7f634bf6df0b79c4fa54594c1aa95 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 12:32:27 2007 +0200 Reorganize swfdec_text_field_movie_get_layouts code a little diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c index 0d3e9cd..0305799 100644 --- a/libswfdec/swfdec_text_field_movie.c +++ b/libswfdec/swfdec_text_field_movie.c @@ -349,6 +349,51 @@ swfdec_text_field_movie_free_paragraphs (SwfdecParagraph *paragraphs) /* * Rendering */ +static PangoAttrList * +swfdec_text_field_movie_paragraph_get_attr_list ( + const SwfdecParagraph *paragraph, guint index_, + const SwfdecColorTransform *trans) +{ + PangoAttrList *attr_list; + GSList *iter; + + attr_list = pango_attr_list_new (); + + for (iter = paragraph->attrs; iter != NULL; iter = iter->next) + { + PangoAttribute *attr; + + if (((PangoAttribute *)iter->data)->end_index <= index_) + continue; + + attr = pango_attribute_copy ((PangoAttribute *)iter->data); + + if (attr->klass->type == PANGO_ATTR_FOREGROUND && trans != NULL && + !swfdec_color_transform_is_identity (trans)) + { + SwfdecColor color; + PangoColor color_p; + + color_p = ((PangoAttrColor *)attr)->color; + + color = SWFDEC_COLOR_COMBINE (color_p.red >> 8, color_p.green >> 8, + color_p.blue >> 8, 255); + color = swfdec_color_apply_transform (color, trans); + + color_p.red = SWFDEC_COLOR_R (color) << 8; + color_p.green = SWFDEC_COLOR_G (color) << 8; + color_p.blue = SWFDEC_COLOR_B (color) << 8; + } + + attr->start_index + (attr->start_index > index_ ? attr->start_index - index_ : 0); + attr->end_index = attr->end_index - index_; + pango_attr_list_insert (attr_list, attr); + } + + return attr_list; +} + static SwfdecLayout * swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num, cairo_t *cr, const SwfdecParagraph *paragraphs, @@ -383,7 +428,6 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num, SwfdecLayout layout; PangoLayout *playout; PangoAttrList *attr_list; - GSList *iter_attrs; SwfdecBlock *block; int width; guint length; @@ -440,39 +484,8 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num, pango_layout_set_tabs (playout, block->tab_stops); // set text attributes - attr_list = pango_attr_list_new (); - - for (iter_attrs = paragraphs[i].attrs; iter_attrs != NULL; - iter_attrs = iter_attrs->next) - { - PangoAttribute *attr; - - attr = (PangoAttribute *)iter_attrs->data; - - if (attr->end_index <= block->index_ + skip) - continue; - - attr = pango_attribute_copy (attr); - if (attr->klass->type == PANGO_ATTR_FOREGROUND && trans != NULL && - !swfdec_color_transform_is_identity (trans)) - { - SwfdecColor color; - PangoColor pcolor; - - pcolor = ((PangoAttrColor *)attr)->color; - color = SWFDEC_COLOR_COMBINE (pcolor.red >> 8, pcolor.green >> 8, - pcolor.blue >> 8, 255); - color = swfdec_color_apply_transform (color, trans); - pcolor.red = SWFDEC_COLOR_R (color) << 8; - pcolor.green = SWFDEC_COLOR_G (color) << 8; - pcolor.blue = SWFDEC_COLOR_B (color) << 8; - ((PangoAttrColor *)attr)->color = pcolor; - } - attr->start_index = (attr->start_index > block->index_ + skip ? - attr->start_index - (block->index_ + skip) : 0); - attr->end_index = attr->end_index - (block->index_ + skip); - pango_attr_list_insert (attr_list, attr); - } + attr_list = swfdec_text_field_movie_paragraph_get_attr_list ( + ¶graphs[i], block->index_ + skip, trans); pango_layout_set_attributes (playout, attr_list); pango_attr_list_unref (attr_list); commit ca2169b64aa732c7698b192e30e46ffc875a3937 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 12:08:06 2007 +0200 Some code formatting fixes in swfdec_text_format.c diff --git a/libswfdec/swfdec_text_format.c b/libswfdec/swfdec_text_format.c index 7006980..ea1c675 100644 --- a/libswfdec/swfdec_text_format.c +++ b/libswfdec/swfdec_text_format.c @@ -378,51 +378,48 @@ swfdec_text_format_do_set_align (SwfdecAsContext *cx, SwfdecAsObject *object, } static void -swfdec_text_format_do_get_block_indent (SwfdecAsContext *cx, SwfdecAsObject *object, - guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) +swfdec_text_format_do_get_block_indent (SwfdecAsContext *cx, + SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, + SwfdecAsValue *ret) { - swfdec_text_format_get_integer (object, - PROP_BLOCK_INDENT, ret); + swfdec_text_format_get_integer (object, PROP_BLOCK_INDENT, ret); } static void -swfdec_text_format_do_set_block_indent (SwfdecAsContext *cx, SwfdecAsObject *object, - guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) +swfdec_text_format_do_set_block_indent (SwfdecAsContext *cx, + SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, + SwfdecAsValue *ret) { - swfdec_text_format_set_integer (object, - PROP_BLOCK_INDENT, argc, argv, cx->version >= 8); + swfdec_text_format_set_integer (object, PROP_BLOCK_INDENT, argc, argv, + cx->version >= 8); } static void swfdec_text_format_do_get_bold (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_get_boolean (object, PROP_BOLD, - ret); + swfdec_text_format_get_boolean (object, PROP_BOLD, ret); } static void swfdec_text_format_do_set_bold (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_set_boolean (object, PROP_BOLD, - argc, argv); + swfdec_text_format_set_boolean (object, PROP_BOLD, argc, argv); } static void swfdec_text_format_do_get_bullet (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_get_boolean (object, PROP_BULLET, - ret); + swfdec_text_format_get_boolean (object, PROP_BULLET, ret); } static void swfdec_text_format_do_set_bullet (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_set_boolean (object, PROP_BULLET, - argc, argv); + swfdec_text_format_set_boolean (object, PROP_BULLET, argc, argv); } static void @@ -456,7 +453,6 @@ swfdec_text_format_do_set_color (SwfdecAsContext *cx, SwfdecAsObject *object, if (argc < 1) return; - if (SWFDEC_AS_VALUE_IS_UNDEFINED (&argv[0]) || SWFDEC_AS_VALUE_IS_NULL (&argv[0])) { swfdec_text_format_mark_unset (format, PROP_COLOR); @@ -540,32 +536,29 @@ static void swfdec_text_format_do_get_font (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_get_string (object, PROP_FONT, - ret); + swfdec_text_format_get_string (object, PROP_FONT, ret); } static void swfdec_text_format_do_set_font (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_set_string (object, PROP_FONT, - argc, argv); + swfdec_text_format_set_string (object, PROP_FONT, argc, argv); } static void swfdec_text_format_do_get_indent (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_get_integer (object, PROP_INDENT, - ret); + swfdec_text_format_get_integer (object, PROP_INDENT, ret); } static void swfdec_text_format_do_set_indent (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_set_integer (object, PROP_INDENT, - argc, argv, cx->version >= 8); + swfdec_text_format_set_integer (object, PROP_INDENT, argc, argv, + cx->version >= 8); } static void @@ -579,56 +572,52 @@ static void swfdec_text_format_do_set_italic (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_set_boolean (object, PROP_ITALIC, - argc, argv); + swfdec_text_format_set_boolean (object, PROP_ITALIC, argc, argv); } static void swfdec_text_format_do_get_kerning (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_get_boolean (object, PROP_KERNING, - ret); + swfdec_text_format_get_boolean (object, PROP_KERNING, ret); } static void swfdec_text_format_do_set_kerning (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_set_boolean (object, PROP_KERNING, - argc, argv); + swfdec_text_format_set_boolean (object, PROP_KERNING, argc, argv); } static void swfdec_text_format_do_get_leading (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_get_integer (object, PROP_LEADING, - ret); + swfdec_text_format_get_integer (object, PROP_LEADING, ret); } static void swfdec_text_format_do_set_leading (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_set_integer (object, PROP_LEADING, - argc, argv, cx->version >= 8); + swfdec_text_format_set_integer (object, PROP_LEADING, argc, argv, + cx->version >= 8); } static void -swfdec_text_format_do_get_left_margin (SwfdecAsContext *cx, SwfdecAsObject *object, - guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) +swfdec_text_format_do_get_left_margin (SwfdecAsContext *cx, + SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, + SwfdecAsValue *ret) { - swfdec_text_format_get_integer (object, - PROP_LEFT_MARGIN, ret); + swfdec_text_format_get_integer (object, PROP_LEFT_MARGIN, ret); } static void -swfdec_text_format_do_set_left_margin (SwfdecAsContext *cx, SwfdecAsObject *object, - guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) +swfdec_text_format_do_set_left_margin (SwfdecAsContext *cx, + SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, + SwfdecAsValue *ret) { - swfdec_text_format_set_integer (object, - PROP_LEFT_MARGIN, argc, argv, FALSE); + swfdec_text_format_set_integer (object, PROP_LEFT_MARGIN, argc, argv, FALSE); } static void @@ -642,9 +631,7 @@ swfdec_text_format_do_get_letter_spacing (SwfdecAsContext *cx, return; format = SWFDEC_TEXT_FORMAT (object); - if (!swfdec_text_format_is_set (format, - PROP_LETTER_SPACING)) - { + if (!swfdec_text_format_is_set (format, PROP_LETTER_SPACING)) { SWFDEC_AS_VALUE_SET_NULL (ret); return; } @@ -686,40 +673,40 @@ swfdec_text_format_do_set_letter_spacing (SwfdecAsContext *cx, } static void -swfdec_text_format_do_get_right_margin (SwfdecAsContext *cx, SwfdecAsObject *object, - guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) +swfdec_text_format_do_get_right_margin (SwfdecAsContext *cx, + SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, + SwfdecAsValue *ret) { - swfdec_text_format_get_integer (object, - PROP_RIGHT_MARGIN, ret); + swfdec_text_format_get_integer (object, PROP_RIGHT_MARGIN, ret); } static void -swfdec_text_format_do_set_right_margin (SwfdecAsContext *cx, SwfdecAsObject *object, - guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) +swfdec_text_format_do_set_right_margin (SwfdecAsContext *cx, + SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, + SwfdecAsValue *ret) { - swfdec_text_format_set_integer (object, - PROP_RIGHT_MARGIN, argc, argv, FALSE); + swfdec_text_format_set_integer (object, PROP_RIGHT_MARGIN, argc, argv, + FALSE); } static void swfdec_text_format_do_get_size (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_get_integer (object, PROP_SIZE, - ret); + swfdec_text_format_get_integer (object, PROP_SIZE, ret); } static void swfdec_text_format_do_set_size (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_set_integer (object, PROP_SIZE, - argc, argv, TRUE); + swfdec_text_format_set_integer (object, PROP_SIZE, argc, argv, TRUE); } static void -swfdec_text_format_do_get_tab_stops (SwfdecAsContext *cx, SwfdecAsObject *object, - guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) +swfdec_text_format_do_get_tab_stops (SwfdecAsContext *cx, + SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, + SwfdecAsValue *ret) { SwfdecTextFormat *format; @@ -727,9 +714,7 @@ swfdec_text_format_do_get_tab_stops (SwfdecAsContext *cx, SwfdecAsObject *object return; format = SWFDEC_TEXT_FORMAT (object); - if (!swfdec_text_format_is_set (format, - PROP_TAB_STOPS)) - { + if (!swfdec_text_format_is_set (format, PROP_TAB_STOPS)) { SWFDEC_AS_VALUE_SET_NULL (ret); return; } @@ -739,8 +724,9 @@ swfdec_text_format_do_get_tab_stops (SwfdecAsContext *cx, SwfdecAsObject *object } static void -swfdec_text_format_do_set_tab_stops (SwfdecAsContext *cx, SwfdecAsObject *object, - guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) +swfdec_text_format_do_set_tab_stops (SwfdecAsContext *cx, + SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, + SwfdecAsValue *ret) { SwfdecTextFormat *format; @@ -773,9 +759,7 @@ swfdec_text_format_do_set_tab_stops (SwfdecAsContext *cx, SwfdecAsObject *object array = SWFDEC_AS_ARRAY (SWFDEC_AS_VALUE_GET_OBJECT (&argv[0])); len = swfdec_as_array_get_length (array); - if (!swfdec_text_format_is_set (format, - PROP_TAB_STOPS)) - { + if (!swfdec_text_format_is_set (format, PROP_TAB_STOPS)) { // special case, if we have null and array is empty, keep it at null if (len == 0) return; @@ -818,8 +802,7 @@ swfdec_text_format_do_set_tab_stops (SwfdecAsContext *cx, SwfdecAsObject *object } } } - else if (swfdec_text_format_is_set (format, - PROP_TAB_STOPS)) + else if (swfdec_text_format_is_set (format, PROP_TAB_STOPS)) { swfdec_as_array_set_length (format->tab_stops, 0); swfdec_text_format_mark_set (format, @@ -831,32 +814,30 @@ static void swfdec_text_format_do_get_target (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_get_string (object, PROP_TARGET, - ret); + swfdec_text_format_get_string (object, PROP_TARGET, ret); } static void swfdec_text_format_do_set_target (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_set_string (object, PROP_TARGET, - argc, argv); + swfdec_text_format_set_string (object, PROP_TARGET, argc, argv); } static void -swfdec_text_format_do_get_underline (SwfdecAsContext *cx, SwfdecAsObject *object, - guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) +swfdec_text_format_do_get_underline (SwfdecAsContext *cx, + SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, + SwfdecAsValue *ret) { - swfdec_text_format_get_boolean (object, - PROP_UNDERLINE, ret); + swfdec_text_format_get_boolean (object, PROP_UNDERLINE, ret); } static void -swfdec_text_format_do_set_underline (SwfdecAsContext *cx, SwfdecAsObject *object, - guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) +swfdec_text_format_do_set_underline (SwfdecAsContext *cx, + SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, + SwfdecAsValue *ret) { - swfdec_text_format_set_boolean (object, - PROP_UNDERLINE, argc, argv); + swfdec_text_format_set_boolean (object, PROP_UNDERLINE, argc, argv); } static void @@ -870,8 +851,7 @@ static void swfdec_text_format_do_set_url (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { - swfdec_text_format_set_string (object, PROP_URL, argc, - argv); + swfdec_text_format_set_string (object, PROP_URL, argc, argv); } void @@ -1155,11 +1135,13 @@ swfdec_text_format_init_properties (SwfdecAsContext *cx) swfdec_as_object_add_native_variable (proto, SWFDEC_AS_STR_size, swfdec_text_format_do_get_size, swfdec_text_format_do_set_size); swfdec_as_object_add_native_variable (proto, SWFDEC_AS_STR_tabStops, - swfdec_text_format_do_get_tab_stops, swfdec_text_format_do_set_tab_stops); + swfdec_text_format_do_get_tab_stops, + swfdec_text_format_do_set_tab_stops); swfdec_as_object_add_native_variable (proto, SWFDEC_AS_STR_target, swfdec_text_format_do_get_target, swfdec_text_format_do_set_target); swfdec_as_object_add_native_variable (proto, SWFDEC_AS_STR_underline, - swfdec_text_format_do_get_underline, swfdec_text_format_do_set_underline); + swfdec_text_format_do_get_underline, + swfdec_text_format_do_set_underline); swfdec_as_object_add_native_variable (proto, SWFDEC_AS_STR_url, swfdec_text_format_do_get_url, swfdec_text_format_do_set_url); } commit 2b1fd2235f7b8b3fe1d9740e11a2052c8191c866 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 10:42:18 2007 +0200 Some code cleanups to TextField diff --git a/libswfdec/swfdec_text_field.c b/libswfdec/swfdec_text_field.c index a11e2f1..77fa7ff 100644 --- a/libswfdec/swfdec_text_field.c +++ b/libswfdec/swfdec_text_field.c @@ -43,7 +43,8 @@ static SwfdecMovie * swfdec_text_field_create_movie (SwfdecGraphic *graphic, gsize *size) { SwfdecTextField *text = SWFDEC_TEXT_FIELD (graphic); - SwfdecTextFieldMovie *ret = g_object_new (SWFDEC_TYPE_TEXT_FIELD_MOVIE, NULL); + SwfdecTextFieldMovie *ret + g_object_new (SWFDEC_TYPE_TEXT_FIELD_MOVIE, NULL); ret->text = text; @@ -57,9 +58,9 @@ swfdec_text_field_dispose (GObject *object) { SwfdecTextField *text = SWFDEC_TEXT_FIELD (object); - if (text->text_input != NULL) { - g_free (text->text_input); - text->text_input = NULL; + if (text->input != NULL) { + g_free (text->input); + text->input = NULL; } if (text->variable != NULL) { g_free (text->variable); @@ -109,6 +110,7 @@ tag_func_define_edit_text (SwfdecSwfDecoder * s, guint tag) SWFDEC_GRAPHIC (text)->extents.x0, SWFDEC_GRAPHIC (text)->extents.y0, SWFDEC_GRAPHIC (text)->extents.x1, SWFDEC_GRAPHIC (text)->extents.y1); swfdec_bits_syncbits (b); + has_text = swfdec_bits_getbit (b); text->word_wrap = swfdec_bits_getbit (b); text->multiline = swfdec_bits_getbit (b); @@ -128,6 +130,7 @@ tag_func_define_edit_text (SwfdecSwfDecoder * s, guint tag) text->embed_fonts = swfdec_bits_getbit (b); if (text->embed_fonts) SWFDEC_FIXME ("Using embed fonts in TextField is not supported"); + if (has_font) { SwfdecCharacter *font; @@ -142,6 +145,7 @@ tag_func_define_edit_text (SwfdecSwfDecoder * s, guint tag) text->size = swfdec_bits_get_u16 (b); SWFDEC_LOG (" size = %u", text->size); } + if (has_color) { text->color = swfdec_bits_get_rgba (b); SWFDEC_LOG (" color = %u", text->color); @@ -149,11 +153,13 @@ tag_func_define_edit_text (SwfdecSwfDecoder * s, guint tag) SWFDEC_WARNING ("FIXME: figure out default color"); text->color = SWFDEC_COLOR_COMBINE (255, 255, 255, 255); } + if (has_max_length) { text->max_chars = swfdec_bits_get_u16 (b); } else { text->max_chars = 0; } + if (has_layout) { guint align = swfdec_bits_get_u8 (b); switch (align) { @@ -178,13 +184,15 @@ tag_func_define_edit_text (SwfdecSwfDecoder * s, guint tag) text->indent = swfdec_bits_get_u16 (b); text->leading = swfdec_bits_get_s16 (b); } + text->variable = swfdec_bits_get_string (b); if (text->variable && *text->variable == 0) { g_free (text->variable); text->variable = NULL; } + if (has_text) - text->text_input = swfdec_bits_get_string (b); + text->input = swfdec_bits_get_string (b); return SWFDEC_STATUS_OK; } diff --git a/libswfdec/swfdec_text_field.h b/libswfdec/swfdec_text_field.h index 0ecf9bf..1bde7bb 100644 --- a/libswfdec/swfdec_text_field.h +++ b/libswfdec/swfdec_text_field.h @@ -67,7 +67,7 @@ struct _SwfdecTextField gboolean background; /* only to be passed to the movie object */ - char * text_input; + char * input; char * variable; char * font; guint size; diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c index 72b5e31..0d3e9cd 100644 --- a/libswfdec/swfdec_text_field_movie.c +++ b/libswfdec/swfdec_text_field_movie.c @@ -41,7 +41,7 @@ static void swfdec_text_field_movie_update_extents (SwfdecMovie *movie, SwfdecRect *extents) { - swfdec_rect_union (extents, extents, + swfdec_rect_union (extents, extents, &SWFDEC_GRAPHIC (SWFDEC_TEXT_FIELD_MOVIE (movie)->text)->extents); } @@ -49,14 +49,13 @@ static void swfdec_text_paragraph_add_attribute (SwfdecParagraph *paragraph, PangoAttribute *attr) { - paragraph->attrs = g_list_append (paragraph->attrs, - pango_attribute_copy (attr)); - pango_attr_list_insert (paragraph->attrs_list, attr); + paragraph->attrs + g_slist_prepend (paragraph->attrs, pango_attribute_copy (attr)); } static void -swfdec_text_paragraph_add_block_attributes (SwfdecParagraph *paragraph, - int index_, SwfdecTextFormat *format) +swfdec_text_paragraph_add_block (SwfdecParagraph *paragraph, int index_, + SwfdecTextFormat *format) { gint32 length, i; SwfdecBlock *block; @@ -98,7 +97,7 @@ swfdec_text_paragraph_add_block_attributes (SwfdecParagraph *paragraph, SWFDEC_AS_VALUE_GET_NUMBER (&val) * 20); } - paragraph->blocks = g_list_append (paragraph->blocks, block); + paragraph->blocks = g_slist_prepend (paragraph->blocks, block); } static void @@ -122,14 +121,13 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text, paragraph->blocks = NULL; paragraph->attrs = NULL; - paragraph->attrs_list = pango_attr_list_new (); if (paragraph->text_length == 0) return; g_assert (text->formats != NULL); for (iter = text->formats; iter->next != NULL && - ((SwfdecFormatIndex *)(iter->next->data))->index <= start_index; + ((SwfdecFormatIndex *)(iter->next->data))->index_ <= start_index; iter = iter->next); index_ = start_index; @@ -140,7 +138,7 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text, paragraph->indent = format->indent * 20 * PANGO_SCALE; // Add new block - swfdec_text_paragraph_add_block_attributes (paragraph, 0, format); + swfdec_text_paragraph_add_block (paragraph, 0, format); // Open attributes attr_bold = pango_attr_weight_new ( @@ -173,11 +171,11 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text, attr_underline->start_index = 0; for (iter = iter->next; - iter != NULL && ((SwfdecFormatIndex *)(iter->data))->index < end_index; + iter != NULL && ((SwfdecFormatIndex *)(iter->data))->index_ < end_index; iter = iter->next) { format_prev = format; - index_ = ((SwfdecFormatIndex *)(iter->data))->index; + index_ = ((SwfdecFormatIndex *)(iter->data))->index_; format = ((SwfdecFormatIndex *)(iter->data))->format; // Add new block if necessary @@ -188,8 +186,8 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text, format_prev->block_indent != format->block_indent || format_prev->left_margin != format->left_margin) { - swfdec_text_paragraph_add_block_attributes (paragraph, - index_ - start_index, format); + swfdec_text_paragraph_add_block (paragraph, index_ - start_index, + format); } // Change attributes if necessary @@ -244,8 +242,8 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text, attr_size->end_index = index_ - start_index; swfdec_text_paragraph_add_attribute (paragraph, attr_size); - attr_size - pango_attr_size_new_absolute (MAX (1, format->size) * 20 * PANGO_SCALE); + attr_size = pango_attr_size_new_absolute ( + MAX (1, format->size) * 20 * PANGO_SCALE); attr_size->start_index = index_ - start_index; } @@ -287,54 +285,47 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text, attr_underline->end_index = end_index - start_index; swfdec_text_paragraph_add_attribute (paragraph, attr_underline); attr_underline = NULL; + + // reverse blocks since we use prepend to add them + paragraph->blocks = g_slist_reverse (paragraph->blocks); } static SwfdecParagraph * swfdec_text_field_movie_get_paragraphs (SwfdecTextFieldMovie *text, int *num) { - SwfdecParagraph *paragraphs; + GArray *paragraphs; + SwfdecParagraph paragraph; const char *p, *end; - int count, i; g_assert (SWFDEC_IS_TEXT_FIELD_MOVIE (text)); - count = 0; - p = text->input->str; - while (p != NULL && *p != '\0') { - count++; - p = strpbrk (p, "\r\n"); - if (p != NULL) p++; - } - - paragraphs = g_new0 (SwfdecParagraph, count + 1); - if (num != NULL) - *num = count; + paragraphs = g_array_new (TRUE, TRUE, sizeof (SwfdecParagraph)); - i = 0; p = text->input->str; - while (*p != '\0') { - g_assert (i < count); + while (*p != '\0') + { end = strpbrk (p, "\r\n"); if (end == NULL) end = strchr (p, '\0'); - swfdec_text_field_movie_generate_paragraph (text, ¶graphs[i], + swfdec_text_field_movie_generate_paragraph (text, ¶graph, p - text->input->str, end - text->input->str); + paragraphs = g_array_append_val (paragraphs, paragraph); p = end; if (*p != '\0') p++; - - i++; } - g_assert (i == count); - return paragraphs; + if (num != NULL) + *num = paragraphs->len; + + return (SwfdecParagraph *)g_array_free (paragraphs, FALSE); } static void swfdec_text_field_movie_free_paragraphs (SwfdecParagraph *paragraphs) { - GList *iter; + GSList *iter; int i; g_return_if_fail (paragraphs != NULL); @@ -345,15 +336,12 @@ swfdec_text_field_movie_free_paragraphs (SwfdecParagraph *paragraphs) pango_tab_array_free (((SwfdecBlock *)(iter->data))->tab_stops); g_free (iter->data); } - g_list_free (paragraphs[i].blocks); + g_slist_free (paragraphs[i].blocks); for (iter = paragraphs[i].attrs; iter != NULL; iter = iter->next) { pango_attribute_destroy ((PangoAttribute *)(iter->data)); } - g_list_free (paragraphs[i].attrs); - - if (paragraphs[i].attrs_list != NULL) - pango_attr_list_unref (paragraphs[i].attrs_list); + g_slist_free (paragraphs[i].attrs); } g_free (paragraphs); } @@ -386,7 +374,7 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num, for (i = 0; paragraphs[i].text != NULL; i++) { - GList *iter; + GSList *iter; guint skip; skip = 0; @@ -394,9 +382,11 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num, { SwfdecLayout layout; PangoLayout *playout; + PangoAttrList *attr_list; + GSList *iter_attrs; + SwfdecBlock *block; int width; guint length; - SwfdecBlock *block; block = (SwfdecBlock *)iter->data; if (iter->next != NULL) { @@ -415,7 +405,7 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num, playout = layout.layout = pango_cairo_create_layout (cr); // set rendering position - layout.render_offset_x = block->left_margin + block->block_indent; + layout.offset_x = block->left_margin + block->block_indent; width = SWFDEC_MOVIE (text)->original_extents.x1 - SWFDEC_MOVIE (text)->original_extents.x0 - block->left_margin - block->right_margin - block->block_indent; @@ -424,7 +414,7 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num, // limit negative indent to not go over leftMargin + blockIndent int indent = MAX (paragraphs[i].indent / PANGO_SCALE, -(block->left_margin + block->block_indent)); - layout.render_offset_x += indent; + layout.offset_x += indent; width += -indent; } @@ -450,50 +440,41 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num, pango_layout_set_tabs (playout, block->tab_stops); // set text attributes - if (block->index_ > 0 || - (trans != NULL && !swfdec_color_transform_is_identity (trans))) + attr_list = pango_attr_list_new (); + + for (iter_attrs = paragraphs[i].attrs; iter_attrs != NULL; + iter_attrs = iter_attrs->next) { - PangoAttrList *attr_list; - GList *iter_attrs; + PangoAttribute *attr; + + attr = (PangoAttribute *)iter_attrs->data; - attr_list = pango_attr_list_new (); + if (attr->end_index <= block->index_ + skip) + continue; - for (iter_attrs = paragraphs[i].attrs; iter_attrs != NULL; - iter_attrs = iter_attrs->next) + attr = pango_attribute_copy (attr); + if (attr->klass->type == PANGO_ATTR_FOREGROUND && trans != NULL && + !swfdec_color_transform_is_identity (trans)) { - PangoAttribute *attr; - - attr = (PangoAttribute *)iter_attrs->data; - - if (attr->end_index <= block->index_ + skip) - continue; - - attr = pango_attribute_copy (attr); - if (attr->klass->type == PANGO_ATTR_FOREGROUND && trans != NULL && - !swfdec_color_transform_is_identity (trans)) - { - SwfdecColor color; - PangoColor pcolor; - - pcolor = ((PangoAttrColor *)attr)->color; - color = SWFDEC_COLOR_COMBINE (pcolor.red >> 8, pcolor.green >> 8, - pcolor.blue >> 8, 255); - color = swfdec_color_apply_transform (color, trans); - pcolor.red = SWFDEC_COLOR_R (color) << 8; - pcolor.green = SWFDEC_COLOR_G (color) << 8; - pcolor.blue = SWFDEC_COLOR_B (color) << 8; - ((PangoAttrColor *)attr)->color = pcolor; - } - attr->start_index = (attr->start_index > block->index_ + skip ? - attr->start_index - (block->index_ + skip) : 0); - attr->end_index = attr->end_index - (block->index_ + skip); - pango_attr_list_insert (attr_list, attr); + SwfdecColor color; + PangoColor pcolor; + + pcolor = ((PangoAttrColor *)attr)->color; + color = SWFDEC_COLOR_COMBINE (pcolor.red >> 8, pcolor.green >> 8, + pcolor.blue >> 8, 255); + color = swfdec_color_apply_transform (color, trans); + pcolor.red = SWFDEC_COLOR_R (color) << 8; + pcolor.green = SWFDEC_COLOR_G (color) << 8; + pcolor.blue = SWFDEC_COLOR_B (color) << 8; + ((PangoAttrColor *)attr)->color = pcolor; } - pango_layout_set_attributes (playout, attr_list); - pango_attr_list_unref (attr_list); - } else { - pango_layout_set_attributes (playout, paragraphs[i].attrs_list); + attr->start_index = (attr->start_index > block->index_ + skip ? + attr->start_index - (block->index_ + skip) : 0); + attr->end_index = attr->end_index - (block->index_ + skip); + pango_attr_list_insert (attr_list, attr); } + pango_layout_set_attributes (playout, attr_list); + pango_attr_list_unref (attr_list); pango_layout_set_text (playout, paragraphs[i].text + block->index_ + skip, @@ -521,9 +502,9 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num, pango_layout_get_pixel_size (playout, &line_width, 0); if (line_width < width) { if (block->align == PANGO_ALIGN_RIGHT) { - layout.render_offset_x += width - line_width; + layout.offset_x += width - line_width; } else if (block->align == PANGO_ALIGN_CENTER) { - layout.render_offset_x += (width - line_width) / 2; + layout.offset_x += (width - line_width) / 2; } else { g_assert_not_reached (); } @@ -534,7 +515,7 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num, } pango_layout_get_pixel_size (playout, &layout.width, &layout.height); - layout.width += layout.render_offset_x + block->right_margin; + layout.width += layout.offset_x + block->right_margin; layout.height += block->leading / PANGO_SCALE; layouts = g_array_append_val (layouts, layout); @@ -655,15 +636,15 @@ swfdec_text_field_movie_render (SwfdecMovie *movie, cairo_t *cr, break; if (y + rect.y + rect.height < limit.y0 || - x + layout->render_offset_x + rect.x > limit.x1 || - x + layout->render_offset_x + rect.x + rect.width < limit.x0) + x + layout->offset_x + rect.x > limit.x1 || + x + layout->offset_x + rect.x + rect.width < limit.x0) continue; - cairo_rel_move_to (cr, layout->render_offset_x + rect.x, + cairo_rel_move_to (cr, layout->offset_x + rect.x, pango_layout_iter_get_baseline (iter_line) / PANGO_SCALE - skipped); line = pango_layout_iter_get_line_readonly (iter_line); pango_cairo_show_layout_line (cr, line); - cairo_rel_move_to (cr, -(layout->render_offset_x + rect.x), + cairo_rel_move_to (cr, -(layout->offset_x + rect.x), -(pango_layout_iter_get_baseline (iter_line) / PANGO_SCALE - skipped)); } while (pango_layout_iter_next_line (iter_line)); @@ -951,9 +932,9 @@ swfdec_text_field_movie_init_movie (SwfdecMovie *movie) text->background_color = SWFDEC_COLOR_COMBINE (255, 255, 255, 255); // text - if (text->text->text_input != NULL) { + if (text->text->input != NULL) { swfdec_text_field_movie_set_text (text, - swfdec_as_context_get_string (cx, text->text->text_input), + swfdec_as_context_get_string (cx, text->text->input), text->text->html); } else { swfdec_text_field_movie_set_text (text, SWFDEC_AS_STR_EMPTY, @@ -1036,11 +1017,11 @@ swfdec_text_field_movie_set_text_format (SwfdecTextFieldMovie *text, g_assert (text->formats != NULL); g_assert (text->formats->data != NULL); - g_assert (((SwfdecFormatIndex *)text->formats->data)->index == 0); + g_assert (((SwfdecFormatIndex *)text->formats->data)->index_ == 0); findex = NULL; for (iter = text->formats; iter != NULL && - ((SwfdecFormatIndex *)iter->data)->index < end_index; + ((SwfdecFormatIndex *)iter->data)->index_ < end_index; iter = next) { findex_prev = findex; @@ -1048,7 +1029,7 @@ swfdec_text_field_movie_set_text_format (SwfdecTextFieldMovie *text, findex = iter->data; if (iter->next != NULL) { findex_end_index - ((SwfdecFormatIndex *)iter->next->data)->index; + ((SwfdecFormatIndex *)iter->next->data)->index_; } else { findex_end_index = g_utf8_strlen (text->input->str, -1); } @@ -1061,15 +1042,15 @@ swfdec_text_field_movie_set_text_format (SwfdecTextFieldMovie *text, if (findex_end_index > end_index) { findex_new = g_new (SwfdecFormatIndex, 1); - findex_new->index = end_index; + findex_new->index_ = end_index; findex_new->format = swfdec_text_format_copy (findex->format); iter = g_slist_insert (iter, findex_new, 1); } - if (findex->index < start_index) { + if (findex->index_ < start_index) { findex_new = g_new (SwfdecFormatIndex, 1); - findex_new->index = start_index; + findex_new->index_ = start_index; findex_new->format = swfdec_text_format_copy (findex->format); swfdec_text_format_add (findex_new->format, format); @@ -1091,7 +1072,7 @@ swfdec_text_field_movie_set_text_format (SwfdecTextFieldMovie *text, swfdec_text_format_equal (findex->format, ((SwfdecFormatIndex *)next->data)->format)) { - ((SwfdecFormatIndex *)next->data)->index = findex->index; + ((SwfdecFormatIndex *)next->data)->index_ = findex->index_; text->formats = g_slist_remove (text->formats, findex); findex = findex_prev; } @@ -1116,15 +1097,15 @@ swfdec_text_field_movie_get_text_format (SwfdecTextFieldMovie *text, g_assert (text->formats != NULL); g_assert (text->formats->data != NULL); - g_assert (((SwfdecFormatIndex *)text->formats->data)->index == 0); + g_assert (((SwfdecFormatIndex *)text->formats->data)->index_ == 0); format = NULL; for (iter = text->formats; iter != NULL && - ((SwfdecFormatIndex *)iter->data)->index < end_index; + ((SwfdecFormatIndex *)iter->data)->index_ < end_index; iter = iter->next) { if (iter->next != NULL && - ((SwfdecFormatIndex *)iter->next->data)->index <= start_index) + ((SwfdecFormatIndex *)iter->next->data)->index_ <= start_index) continue; if (format == NULL) { @@ -1302,7 +1283,7 @@ swfdec_text_field_movie_html_text_append_paragraph (SwfdecTextFieldMovie *text, g_return_val_if_fail (text->formats != NULL, string); for (iter = text->formats; iter->next != NULL && - ((SwfdecFormatIndex *)(iter->next->data))->index <= start_index; + ((SwfdecFormatIndex *)(iter->next->data))->index_ <= start_index; iter = iter->next); index_ = start_index; @@ -1373,12 +1354,12 @@ swfdec_text_field_movie_html_text_append_paragraph (SwfdecTextFieldMovie *text, // special case: use <= instead of < to add some extra markup for (iter = iter->next; - iter != NULL && ((SwfdecFormatIndex *)(iter->data))->index <= end_index; + iter != NULL && ((SwfdecFormatIndex *)(iter->data))->index_ <= end_index; iter = iter->next) { index_prev = index_; format_prev = format; - index_ = ((SwfdecFormatIndex *)(iter->data))->index; + index_ = ((SwfdecFormatIndex *)(iter->data))->index_; format = ((SwfdecFormatIndex *)(iter->data))->format; escaped = swfdec_xml_escape_len (text->input->str + index_prev, @@ -1575,10 +1556,10 @@ swfdec_text_field_movie_replace_text (SwfdecTextFieldMovie *text, { findex = iter->data; - if (findex->index >= start_index) { + if (findex->index_ >= start_index) { if (end_index == (guint) g_utf8_strlen (text->input->str, -1) || (iter->next != NULL && - ((SwfdecFormatIndex *)iter->next->data)->index <= end_index)) + ((SwfdecFormatIndex *)iter->next->data)->index_ <= end_index)) { g_free (iter->data); text->formats = g_slist_remove (text->formats, iter->data); @@ -1586,9 +1567,9 @@ swfdec_text_field_movie_replace_text (SwfdecTextFieldMovie *text, } else { - findex->index += strlen (str) - (end_index - start_index); + findex->index_ += strlen (str) - (end_index - start_index); if (first) { - findex->index -= strlen (str); + findex->index_ -= strlen (str); first = FALSE; } } @@ -1601,7 +1582,7 @@ swfdec_text_field_movie_replace_text (SwfdecTextFieldMovie *text, SWFDEC_FIXME ("replaceText to the end of the TextField might use wrong text format on version 7"); } findex = g_new0 (SwfdecFormatIndex, 1); - findex->index = start_index; + findex->index_ = start_index; findex->format = swfdec_text_format_copy ( ((SwfdecFormatIndex *)text->formats->data)->format); text->formats = g_slist_append (text->formats, findex); @@ -1644,7 +1625,7 @@ swfdec_text_field_movie_set_text (SwfdecTextFieldMovie *text, const char *str, if (html && SWFDEC_AS_OBJECT (text)->context->version < 8) swfdec_text_format_set_defaults (text->format_new); block = g_new (SwfdecFormatIndex, 1); - block->index = 0; + block->index_ = 0; g_assert (SWFDEC_IS_TEXT_FORMAT (text->format_new)); block->format = swfdec_text_format_copy (text->format_new); text->formats = g_slist_prepend (text->formats, block); diff --git a/libswfdec/swfdec_text_field_movie.h b/libswfdec/swfdec_text_field_movie.h index 28439f2..d72b419 100644 --- a/libswfdec/swfdec_text_field_movie.h +++ b/libswfdec/swfdec_text_field_movie.h @@ -40,7 +40,7 @@ typedef struct _SwfdecTextFieldMovieClass SwfdecTextFieldMovieClass; typedef struct { PangoLayout * layout; - int render_offset_x; + int offset_x; int height; int width; } SwfdecLayout; @@ -64,14 +64,12 @@ typedef struct { gboolean bullet; int indent; - GList * blocks; // SwfdecBlock - - GList * attrs; // PangoAttribute - PangoAttrList * attrs_list; + GSList * blocks; // SwfdecBlock + GSList * attrs; // PangoAttribute } SwfdecParagraph; typedef struct { - guint index; + guint index_; SwfdecTextFormat * format; } SwfdecFormatIndex; diff --git a/libswfdec/swfdec_text_field_movie_as.c b/libswfdec/swfdec_text_field_movie_as.c index 9f7cf46..3436ffb 100644 --- a/libswfdec/swfdec_text_field_movie_as.c +++ b/libswfdec/swfdec_text_field_movie_as.c @@ -1191,7 +1191,7 @@ swfdec_text_field_movie_createTextField (SwfdecAsContext *cx, edittext->border = FALSE; edittext->size = 240; // FIXME: Correct? - edittext->text_input = NULL; + edittext->input = NULL; edittext->variable = NULL; edittext->color = 0; edittext->align = SWFDEC_TEXT_ALIGN_LEFT; diff --git a/test/dump.c b/test/dump.c index b66f8fc..38aee7e 100644 --- a/test/dump.c +++ b/test/dump.c @@ -225,7 +225,7 @@ dump_shape (SwfdecShape *shape) static void dump_text_field (SwfdecTextField *text) { - g_print (" %s\n", text->text_input ? text->text_input : ""); + g_print (" %s\n", text->input ? text->input : ""); if (verbose) { if (text->variable) g_print (" variable %s\n", text->variable); commit accb524749ca584f57eaa842e2907ef2cdd481d5 Merge: fc335e7... 770b5f5... Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Mon Oct 29 10:06:28 2007 +0200 Merge branch 'master' of ssh://medar at git.freedesktop.org/git/swfdec/swfdec Conflicts: libswfdec/swfdec_as_interpret.c diff --cc libswfdec/swfdec_as_interpret.c index 3571ffb,c331413..798a03c --- a/libswfdec/swfdec_as_interpret.c +++ b/libswfdec/swfdec_as_interpret.c @@@ -2749,10 -2731,10 +2730,10 @@@ swfdec_action_try (SwfdecAsContext *cx if (try_data->catch_start || try_data->finally_start) { swfdec_as_frame_push_block (cx->frame, data + len, data + len + try_size, - swfdec_action_try_end_try, try_data, swfdec_action_try_data_unref); + swfdec_action_try_end_try, try_data); } else { - SWFDEC_ERROR ("Try without neither catch or finally block"); + SWFDEC_WARNING ("Try with neither catch nor finally block"); - swfdec_action_try_data_unref (try_data); + swfdec_action_try_data_free (try_data); } } commit fc335e7dd2984fff923c4fc345379c4db0b2d56e Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Sun Oct 28 19:43:42 2007 +0200 Fix an error in Try action diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c index 3defeca..3571ffb 100644 --- a/libswfdec/swfdec_as_interpret.c +++ b/libswfdec/swfdec_as_interpret.c @@ -2712,10 +2712,9 @@ swfdec_action_try (SwfdecAsContext *cx, guint action, const guint8 *data, guint guint try_size; gboolean use_finally, use_catch; - if (len <= 8) { + if (len < 8) { SWFDEC_ERROR ("With action requires a length of at least 8, but got %u", len); - swfdec_as_stack_pop (cx); return; } @@ -2752,7 +2751,7 @@ swfdec_action_try (SwfdecAsContext *cx, guint action, const guint8 *data, guint swfdec_as_frame_push_block (cx->frame, data + len, data + len + try_size, swfdec_action_try_end_try, try_data, swfdec_action_try_data_unref); } else { - SWFDEC_ERROR ("Try without neither catch or finally block"); + SWFDEC_WARNING ("Try with neither catch nor finally block"); swfdec_action_try_data_unref (try_data); } } commit fab2e610d7a96cf007096edaff5809c29985feb5 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Sun Oct 28 17:11:48 2007 +0200 Fixes to TextField's autoSize diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c index e9c3fed..72b5e31 100644 --- a/libswfdec/swfdec_text_field_movie.c +++ b/libswfdec/swfdec_text_field_movie.c @@ -796,51 +796,48 @@ swfdec_text_field_get_size (SwfdecTextFieldMovie *text, int *width, gboolean swfdec_text_field_movie_auto_size (SwfdecTextFieldMovie *text) { + SwfdecGraphic *graphic; int height, width, diff; g_return_val_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text), FALSE); + graphic = SWFDEC_GRAPHIC (text->text); + if (text->text->auto_size == SWFDEC_AUTO_SIZE_NONE) return FALSE; swfdec_text_field_get_size (text, &width, &height); - if ((text->text->word_wrap || SWFDEC_MOVIE (text)->original_extents.x1 - - SWFDEC_MOVIE (text)->original_extents.x0 == width) && - (SWFDEC_GRAPHIC (text->text)->extents.y1 - - SWFDEC_GRAPHIC (text->text)->extents.y0 == height)) + if ((text->text->word_wrap || + graphic->extents.x1 - graphic->extents.x0 == width) && + graphic->extents.y1 - graphic->extents.y0 == height) return FALSE; swfdec_movie_invalidate (SWFDEC_MOVIE (text)); - if (!text->text->word_wrap && SWFDEC_MOVIE (text)->original_extents.x1 - - SWFDEC_MOVIE (text)->original_extents.x0 != width) + if (!text->text->word_wrap && graphic->extents.x1 - + graphic->extents.x0 != width) { switch (text->text->auto_size) { case SWFDEC_AUTO_SIZE_LEFT: - SWFDEC_GRAPHIC (text->text)->extents.x1 - SWFDEC_GRAPHIC (text->text)->extents.x0 + width; + graphic->extents.x1 = graphic->extents.x0 + width; break; case SWFDEC_AUTO_SIZE_RIGHT: - SWFDEC_GRAPHIC (text->text)->extents.x0 - SWFDEC_GRAPHIC (text->text)->extents.x1 - width; + graphic->extents.x0 = graphic->extents.x1 - width; break; case SWFDEC_AUTO_SIZE_CENTER: - diff = width - (SWFDEC_GRAPHIC (text->text)->extents.x1 - - SWFDEC_GRAPHIC (text->text)->extents.x0); - SWFDEC_GRAPHIC (text->text)->extents.x0 += floor (width / 2.0); - SWFDEC_GRAPHIC (text->text)->extents.x1 += ceil (width / 2.0); + diff = (graphic->extents.x1 - graphic->extents.x0) - width; + graphic->extents.x0 += floor (diff / 2.0); + graphic->extents.x1 = graphic->extents.x0 + width; break; default: g_assert_not_reached (); } } - if (SWFDEC_GRAPHIC (text->text)->extents.y1 - - SWFDEC_GRAPHIC (text->text)->extents.y0 != height) + if (graphic->extents.y1 - graphic->extents.y0 != height) { - SWFDEC_GRAPHIC (text->text)->extents.y1 - SWFDEC_GRAPHIC (text->text)->extents.y0 + height; + graphic->extents.y1 = graphic->extents.y0 + height; } swfdec_movie_queue_update (SWFDEC_MOVIE (text),
Reasonably Related Threads
- 12 commits - libswfdec/swfdec_as_strings.c libswfdec/swfdec_html_parser.c libswfdec/swfdec_text_field.c libswfdec/swfdec_text_field.h libswfdec/swfdec_text_field_movie_as.c libswfdec/swfdec_text_field_movie.c libswfdec/swfdec_text_field_movie.h test/trace
- 5 commits - libswfdec/swfdec_html_parser.c libswfdec/swfdec_text_field_movie_as.c libswfdec/swfdec_text_field_movie.c test/trace
- 18 commits - libswfdec/swfdec_player_internal.h libswfdec/swfdec_text_field_movie_as.c libswfdec/swfdec_text_format.c libswfdec/swfdec_text_format.h libswfdec/swfdec_xml.c libswfdec/swfdec_xml_node.c libswfdec/swfdec_xml_node.h test/trace
- 6 commits - libswfdec/swfdec_as_strings.c libswfdec/swfdec_movie.c libswfdec/swfdec_movie.h libswfdec/swfdec_text_field.c libswfdec/swfdec_text_field.h libswfdec/swfdec_text_field_movie_as.c libswfdec/swfdec_text_field_movie.c
- libswfdec/swfdec_text_field_movie.c libswfdec/swfdec_text_field_movie_html.c