From 267c6f2ac71f92999e969232431ba04678e7437e Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 15 Apr 2024 07:54:39 +0200 Subject: Adding upstream version 4:24.2.0. Signed-off-by: Daniel Baumann --- .../htmlimport/data/PageAndParagraphFilled.html | 45 + .../data/allowed-rtf-ole-mime-types.xhtml | 5 + sw/qa/extras/htmlimport/data/data.ole | 1 + sw/qa/extras/htmlimport/data/emojis16BE.html | Bin 0 -> 142 bytes sw/qa/extras/htmlimport/data/green-highlight.html | 1 + sw/qa/extras/htmlimport/data/hidden-textframe.html | 8 + sw/qa/extras/htmlimport/data/image-lazy-read.html | 11 + sw/qa/extras/htmlimport/data/image-size.html | 25 + sw/qa/extras/htmlimport/data/image-width-auto.html | 40 + sw/qa/extras/htmlimport/data/inlined_image.html | 21 + sw/qa/extras/htmlimport/data/libreoffice.jpg | Bin 0 -> 6065 bytes sw/qa/extras/htmlimport/data/list-style.html | 58 ++ .../extras/htmlimport/data/meta-ISO8601-dates.html | 20 + sw/qa/extras/htmlimport/data/meta-changedby.html | 21 + sw/qa/extras/htmlimport/data/ole-data.xhtml | 7 + sw/qa/extras/htmlimport/data/ole-data2.xhtml | 12 + sw/qa/extras/htmlimport/data/ole-img-svg.xhtml | 7 + sw/qa/extras/htmlimport/data/ole-img.xhtml | 7 + sw/qa/extras/htmlimport/data/ole2.gif | Bin 0 -> 521 bytes sw/qa/extras/htmlimport/data/ole2.ole | 1014 ++++++++++++++++++++ sw/qa/extras/htmlimport/data/ole2.png | Bin 0 -> 766 bytes sw/qa/extras/htmlimport/data/ole2.svg | 3 + sw/qa/extras/htmlimport/data/outline-level.html | 5 + sw/qa/extras/htmlimport/data/picture.html | 20 + sw/qa/extras/htmlimport/data/reqif-br.xhtml | 1 + .../extras/htmlimport/data/reqif-page-style.xhtml | 1 + sw/qa/extras/htmlimport/data/reqif-table.xhtml | 79 ++ sw/qa/extras/htmlimport/data/table_border_1px.html | 22 + sw/qa/extras/htmlimport/data/tdf118579.html | 67 ++ sw/qa/extras/htmlimport/data/tdf122789.html | 7 + sw/qa/extras/htmlimport/data/tdf142781.html | 3 + sw/qa/extras/htmlimport/data/tdf153341.html | 13 + sw/qa/extras/htmlimport/data/tdf154273.html | 9 + sw/qa/extras/htmlimport/data/tdf155011.html | 31 + .../extras/htmlimport/data/tdf80194_subscript.html | 4 + sw/qa/extras/htmlimport/htmlimport.cxx | 616 ++++++++++++ 36 files changed, 2184 insertions(+) create mode 100644 sw/qa/extras/htmlimport/data/PageAndParagraphFilled.html create mode 100644 sw/qa/extras/htmlimport/data/allowed-rtf-ole-mime-types.xhtml create mode 100644 sw/qa/extras/htmlimport/data/data.ole create mode 100644 sw/qa/extras/htmlimport/data/emojis16BE.html create mode 100644 sw/qa/extras/htmlimport/data/green-highlight.html create mode 100644 sw/qa/extras/htmlimport/data/hidden-textframe.html create mode 100644 sw/qa/extras/htmlimport/data/image-lazy-read.html create mode 100644 sw/qa/extras/htmlimport/data/image-size.html create mode 100644 sw/qa/extras/htmlimport/data/image-width-auto.html create mode 100644 sw/qa/extras/htmlimport/data/inlined_image.html create mode 100644 sw/qa/extras/htmlimport/data/libreoffice.jpg create mode 100644 sw/qa/extras/htmlimport/data/list-style.html create mode 100644 sw/qa/extras/htmlimport/data/meta-ISO8601-dates.html create mode 100644 sw/qa/extras/htmlimport/data/meta-changedby.html create mode 100644 sw/qa/extras/htmlimport/data/ole-data.xhtml create mode 100644 sw/qa/extras/htmlimport/data/ole-data2.xhtml create mode 100644 sw/qa/extras/htmlimport/data/ole-img-svg.xhtml create mode 100644 sw/qa/extras/htmlimport/data/ole-img.xhtml create mode 100644 sw/qa/extras/htmlimport/data/ole2.gif create mode 100644 sw/qa/extras/htmlimport/data/ole2.ole create mode 100644 sw/qa/extras/htmlimport/data/ole2.png create mode 100644 sw/qa/extras/htmlimport/data/ole2.svg create mode 100644 sw/qa/extras/htmlimport/data/outline-level.html create mode 100644 sw/qa/extras/htmlimport/data/picture.html create mode 100644 sw/qa/extras/htmlimport/data/reqif-br.xhtml create mode 100644 sw/qa/extras/htmlimport/data/reqif-page-style.xhtml create mode 100644 sw/qa/extras/htmlimport/data/reqif-table.xhtml create mode 100644 sw/qa/extras/htmlimport/data/table_border_1px.html create mode 100644 sw/qa/extras/htmlimport/data/tdf118579.html create mode 100644 sw/qa/extras/htmlimport/data/tdf122789.html create mode 100644 sw/qa/extras/htmlimport/data/tdf142781.html create mode 100644 sw/qa/extras/htmlimport/data/tdf153341.html create mode 100644 sw/qa/extras/htmlimport/data/tdf154273.html create mode 100644 sw/qa/extras/htmlimport/data/tdf155011.html create mode 100644 sw/qa/extras/htmlimport/data/tdf80194_subscript.html create mode 100644 sw/qa/extras/htmlimport/htmlimport.cxx (limited to 'sw/qa/extras/htmlimport') diff --git a/sw/qa/extras/htmlimport/data/PageAndParagraphFilled.html b/sw/qa/extras/htmlimport/data/PageAndParagraphFilled.html new file mode 100644 index 0000000000..fbe1ff1e18 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/PageAndParagraphFilled.html @@ -0,0 +1,45 @@ + + + + + + + + + + + +

+Er hörte leise Schritte hinter sich. Das bedeutete nichts Gutes. +Wer würde ihm schon folgen, spät in der Nacht und dazu noch +in dieser engen Gasse mitten im übel beleumundeten Hafenviertel? +Gerade jetzt, wo er das Ding seines Lebens gedreht hatte und mit der +Beute verschwinden wollte! Hatte einer seiner zahllosen Kollegen +dieselbe Idee gehabt, ihn beobachtet und abgewartet, um ihn nun um +die Früchte seiner Arbeit zu erleichtern? Oder gehörten die +Schritte hinter ihm zu einem der unzähligen Gesetzeshüter +dieser Stadt, und die stählerne Acht um seine Handgelenke würde +gleich zuschnappen? Er konnte die Aufforderung stehen zu bleiben +schon hören. Gehetzt sah er sich um. Plötzlich erblickte er +den schmalen Durchgang. Blitzartig drehte er sich nach rechts und +verschwand zwischen den beiden Gebäuden. Beinahe wäre er +dabei über den umgestürzten Mülleimer gefallen, der +mitten im Weg lag. Er versuchte, sich in der Dunkelheit seinen Weg zu +ertasten und erstarrte: Anscheinend gab es keinen anderen Ausweg aus +diesem kleinen Hof als den Durchgang, durch den er gekommen war. Die +Schritte wurden lauter und lauter, er sah eine dunkle Gestalt um die +Ecke biegen. Fieberhaft irrten seine Augen durch die nächtliche +Dunkelheit und suchten einen Ausweg. War jetzt wirklich alles vorbei, +waren alle Mühe und alle Vorbereitungen umsonst? Er presste sich +ganz eng an die Wand hinter ihm und hoffte, der Verfolger würde +ihn übersehen, als plötzlich neben ihm mit kaum +wahrnehmbarem Quietschen eine Tür im nächtlichen Wind hin +und her schwang. Könnte dieses der flehentlich herbeigesehnte +Ausweg aus seinem Dilemma sein? Langsam bewegte er sich auf die +offene Tür zu, immer dicht an die Mauer gepresst. Würde +diese Tür seine Rettung werden?

+ + \ No newline at end of file diff --git a/sw/qa/extras/htmlimport/data/allowed-rtf-ole-mime-types.xhtml b/sw/qa/extras/htmlimport/data/allowed-rtf-ole-mime-types.xhtml new file mode 100644 index 0000000000..9b01ad72a5 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/allowed-rtf-ole-mime-types.xhtml @@ -0,0 +1,5 @@ + + + OLE Object + + diff --git a/sw/qa/extras/htmlimport/data/data.ole b/sw/qa/extras/htmlimport/data/data.ole new file mode 100644 index 0000000000..d3dc23d793 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/data.ole @@ -0,0 +1 @@ +{\pict} diff --git a/sw/qa/extras/htmlimport/data/emojis16BE.html b/sw/qa/extras/htmlimport/data/emojis16BE.html new file mode 100644 index 0000000000..023aee1cb2 Binary files /dev/null and b/sw/qa/extras/htmlimport/data/emojis16BE.html differ diff --git a/sw/qa/extras/htmlimport/data/green-highlight.html b/sw/qa/extras/htmlimport/data/green-highlight.html new file mode 100644 index 0000000000..b8986e78ff --- /dev/null +++ b/sw/qa/extras/htmlimport/data/green-highlight.html @@ -0,0 +1 @@ +

Highlight green (transparency: 0.5)

diff --git a/sw/qa/extras/htmlimport/data/hidden-textframe.html b/sw/qa/extras/htmlimport/data/hidden-textframe.html new file mode 100644 index 0000000000..5e97042799 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/hidden-textframe.html @@ -0,0 +1,8 @@ + + + +

test

+
+
+ + diff --git a/sw/qa/extras/htmlimport/data/image-lazy-read.html b/sw/qa/extras/htmlimport/data/image-lazy-read.html new file mode 100644 index 0000000000..afc19a7a62 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/image-lazy-read.html @@ -0,0 +1,11 @@ + +

+aaa +

+

+bbb +

+

+ +

+ diff --git a/sw/qa/extras/htmlimport/data/image-size.html b/sw/qa/extras/htmlimport/data/image-size.html new file mode 100644 index 0000000000..a26c606100 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/image-size.html @@ -0,0 +1,25 @@ + + + + + + + +

+
+ +

+

+
+ +

+

+ +
+ +

+ + diff --git a/sw/qa/extras/htmlimport/data/image-width-auto.html b/sw/qa/extras/htmlimport/data/image-width-auto.html new file mode 100644 index 0000000000..878be07cee --- /dev/null +++ b/sw/qa/extras/htmlimport/data/image-width-auto.html @@ -0,0 +1,40 @@ + + +

+ diff --git a/sw/qa/extras/htmlimport/data/inlined_image.html b/sw/qa/extras/htmlimport/data/inlined_image.html new file mode 100644 index 0000000000..7ce2a29da3 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/inlined_image.html @@ -0,0 +1,21 @@ + + + + + + + + + + + +

Simple document with a picture.

+

+


+
+ +

+ + \ No newline at end of file diff --git a/sw/qa/extras/htmlimport/data/libreoffice.jpg b/sw/qa/extras/htmlimport/data/libreoffice.jpg new file mode 100644 index 0000000000..14af080b14 Binary files /dev/null and b/sw/qa/extras/htmlimport/data/libreoffice.jpg differ diff --git a/sw/qa/extras/htmlimport/data/list-style.html b/sw/qa/extras/htmlimport/data/list-style.html new file mode 100644 index 0000000000..8c5468aa15 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/list-style.html @@ -0,0 +1,58 @@ + + + +
+

+ This document contains a number of lists... +

    +
  • list-style-type
  • +
  • default
  • +
+
    +
  • list-style-type
  • +
  • circle
  • +
+
    +
  • list-style-type
  • +
  • square
  • +
+
    +
  • list-style-type
  • +
  • disc
  • +
+
    +
  1. list-style-type
  2. +
  3. default
  4. +
+
    +
  1. list-style-type
  2. +
  3. decimal
  4. +
+
    +
  1. list-style-type
  2. +
  3. lower-alpha
  4. +
+
    +
  1. list-style-type
  2. +
  3. lower-latin
  4. +
+
    +
  1. list-style-type
  2. +
  3. lower-roman
  4. +
+
    +
  1. list-style-type
  2. +
  3. upper-alpha
  4. +
+
    +
  1. list-style-type
  2. +
  3. upper-latin
  4. +
+
    +
  1. list-style-type
  2. +
  3. upper-roman
  4. +
+

+
+ + diff --git a/sw/qa/extras/htmlimport/data/meta-ISO8601-dates.html b/sw/qa/extras/htmlimport/data/meta-ISO8601-dates.html new file mode 100644 index 0000000000..86390d77ea --- /dev/null +++ b/sw/qa/extras/htmlimport/data/meta-ISO8601-dates.html @@ -0,0 +1,20 @@ + + + + + + + + + + + +

+Test +

+ + diff --git a/sw/qa/extras/htmlimport/data/meta-changedby.html b/sw/qa/extras/htmlimport/data/meta-changedby.html new file mode 100644 index 0000000000..b228b31073 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/meta-changedby.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + +

+Test +

+ + diff --git a/sw/qa/extras/htmlimport/data/ole-data.xhtml b/sw/qa/extras/htmlimport/data/ole-data.xhtml new file mode 100644 index 0000000000..e8f1910ad4 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/ole-data.xhtml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/sw/qa/extras/htmlimport/data/ole-data2.xhtml b/sw/qa/extras/htmlimport/data/ole-data2.xhtml new file mode 100644 index 0000000000..0eb180e6ca --- /dev/null +++ b/sw/qa/extras/htmlimport/data/ole-data2.xhtml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/sw/qa/extras/htmlimport/data/ole-img-svg.xhtml b/sw/qa/extras/htmlimport/data/ole-img-svg.xhtml new file mode 100644 index 0000000000..2e063937ff --- /dev/null +++ b/sw/qa/extras/htmlimport/data/ole-img-svg.xhtml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/sw/qa/extras/htmlimport/data/ole-img.xhtml b/sw/qa/extras/htmlimport/data/ole-img.xhtml new file mode 100644 index 0000000000..798787290c --- /dev/null +++ b/sw/qa/extras/htmlimport/data/ole-img.xhtml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/sw/qa/extras/htmlimport/data/ole2.gif b/sw/qa/extras/htmlimport/data/ole2.gif new file mode 100644 index 0000000000..19e9785e52 Binary files /dev/null and b/sw/qa/extras/htmlimport/data/ole2.gif differ diff --git a/sw/qa/extras/htmlimport/data/ole2.ole b/sw/qa/extras/htmlimport/data/ole2.ole new file mode 100644 index 0000000000..96407e88fa --- /dev/null +++ b/sw/qa/extras/htmlimport/data/ole2.ole @@ -0,0 +1,1014 @@ +{\object\objemb{\*\objclass PowerPoint.Show.12}\objw10020\objh5638{\*\objdata +01050000 +02000000 +13000000 +506f776572506f696e742e53686f772e313200 +00000000 +00000000 +00940000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000 +0000000000010000000100000000000000001000000200000001000000feffffff000000000000 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffdffffff47000000feffffff48000000050000000600000007000000080000000900 +00000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013 +0000001400000015000000160000001700000018000000190000001a0000001b0000001c000000 +1d0000001e0000001f000000200000002100000022000000230000002400000025000000260000 +002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000 +00003100000032000000330000003400000035000000360000003700000038000000390000003a +0000003b0000003c0000003d0000003e0000003f00000040000000410000004200000043000000 +440000004500000046000000fefffffffefffffffeffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000016000500 +ffffffffffffffff02000000f4554fcf878f474d80bb5808164bb3f80000000000000000000000 +0080609bf8f8bcd30103000000000300000000000001004f006c00650000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000a000201ffffffffffffffffffffffff00000000000000000000000000000000 +00000000000000000000000000000000000000000000000014000000000000005000610063006b +006100670065000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000100002010100000004000000ffffffff0000000000 +000000000000000000000000000000000000000000000000000000000000000400000056840000 +00000000010043006f006d0070004f0062006a0000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000012000200ffffffffffff +ffffffffffff000000000000000000000000000000000000000000000000000000000000000000 +000000010000007c00000000000000feffffff02000000feffffff040000000500000006000000 +0700000008000000090000000a000000fefffffffeffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff01000002000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000100feff030a0000fffffffff4554fcf878f474d80bb5808164bb3f8220000004d +6963726f736f667420506f776572506f696e742d5072e473656e746174696f6e000f0000004d53 +50726573656e746174696f6e0013000000506f776572506f696e742e53686f772e313200f439b2 +7100000000000000000000000000000000ffffffff030000000400000001000000ffffffff0200 +0000000000000a450000d8260000ba010000010009000003dd0000000600120000000000040000 +0003010800050000000b0200000000050000000c02cf08a80f030000001e0007000000fc020000 +ffffff000000040000002d01000008000000fa02050000000000ffffff00040000002d0101000e +00000024030500ffffffffffffcf08a80fcf08a80fffffffffffff08000000fa02000000000000 +00000000040000002d01020007000000fc020000ffffff000000040000002d01030004000000f0 +01000007000000fc0200004472c4000000040000002d0100000400000006010100040000002d01 +0100120000002403070065026a03e4086a03e408af025a0a2504e4089b05e408e0046502e00404 +0000002d0102000400000006010100040000002d0103000800504b030414000600080000002100 +dfcc18f5ad010000460c0000130008025b436f6e74656e745f54797065735d2e786d6c20a20402 +28a000020000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000cc975b4fc23014c7df4dfc0e4b5f0d2ba0221a060f5e9ebc90881fa06e07 +a8766dd316846fefd90582849b02b12f4bcecef9ffcfaf6bb776adce2415c1188ce54a46a41656 +4900325609978388bcf51e2a4d1258c764c2849210912958d2699f9eb47a530d3640b5b411193a +a76f28b5f110526643a54162a6af4cca1c866640358b3fd90068bd5a6dd0584907d2555ce641da +ad3be8b39170c1fd046f17241f1a0624b82d0ab35e11e169669027e84a8d016197344c6bc163e6 +304fc7325922ab9454212af31a3be4da9e61c19a0e59667d8352f7828fd3f004822e33ee99a558 +45b576541bb0a8cb6bc3cd4e2b5055bfcf6348543c4a51122e9aa5e24718a68ccbd920d6c15881 +379f987538f58b41edd0640bde3b319534c7e1d8469069ba46697b8cf9c98db7118c397c1d8560 +6ebc8dc0e13b0cc575ff49c86db67664ef025edd54c0c147bd60bdd3ea7b64533572e51a2c82e3 +acc4c2fbaf4c750f99ce3d64baf090e9d243a686874c571e32353d64baf690a956f511eabfbee4 +28cf775e3cf71af83dc3ec909aa92b1a8dc038be793f9b7744ebbd070dd9f9378164456f9aff05 +b4bf010000ffff0300504b03041400060008000000210068f874a103010000e20200000b000802 +5f72656c732f2e72656c7320a2040228a000020000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000ac92db4a03311086ef05df21cc7d37 +db2a22d26c6f44e89dc8fa006332bb1bdd1c48a6d2bebda1e061612d82bdcccc3f1fdf24596ff6 +6e14ef94b20d5ec1b2aa4190d7c158df2b786e1f16b72032a33738064f0a0e9461d35c5eac9f68 +442e4379b0318b42f159c1c01cefa4cc7a2087b90a917ce9742139e4724cbd8ca8dfb027b9aaeb +1b997e32a09930c5d628485b7305a23d44fa1f5b3a6234c8287548b488a94c27b66517d162ea89 +1598a01f4b391f135521839c175a9d5788879d7bf168c71995af5ef51aa9ff4d68f977a1d07556 +d37dd03b479ee7bca6896fa71859c644b9148fe95337747d4e21da337943e6f4a3618c9f4672f2 +339b0f000000ffff0300504b030414000600080000002100635c23b4c000000037010000200000 +007070742f736c696465732f5f72656c732f736c696465312e786d6c2e72656c738ccfbd6ac330 +1007f03dd07710b757b23b84102c65290543a7903ec0219d6d515b123ab9c46f1f8d3174c8785f +bf3fd75deecb2cfe28b38f41432b1b10146c743e8c1a7e6e5fef27105c30389c63200d1b315ccc +dba1bbd28ca51ef1e4138baa04d6309592ce4ab19d6841963151a89321e6054b2df3a812da5f1c +497d34cd51e56703ccce14bdd3907bd782b86d895eb1e330784b9fd1ae0b85f24f84e2d93bfac6 +2daea5b298472a1aa47ceeef965a592340994eedde350f000000ffff0300504b03041400060008 +00000021001b2e35070c010000d00300001f0008017070742f5f72656c732f70726573656e7461 +74696f6e2e786d6c2e72656c7320a2040128a00001000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000ac93414ec3301045f748dcc19a3d7152a042a84e3708a90b2404e100269924168e6d79 +4c21b7c76aa12455157591e5fff6fc799ab157ebef4eb32d7a52d608c89214189ad256ca3402de +8ac7ab3b6014a4a9a4b60605f448b0ce2f2f562fa8658845d42a472ca61812d086e0ee39a7b2c5 +4e52621d9a78525bdfc910a56fb893e5876c902fd274c9fd3003f25126db5402fca6ba0656f40e +cfc9b675ad4a7cb0e56787269c68c19d477af636366385f40d0601072b8969c04f432ce68420ad +2afc07d8c95f379b82c86687789214d01fa1eccdd18d49ace59c5841be6b7c0dbdc6c18a06e614 +c8edac20b176b0a49ddc9b93c3b8999361abf0ebe8b51eac3f083efa87f90f000000ffff030050 +4b030414000600080000002100bcd1a735de0200002c0e0000140000007070742f70726573656e +746174696f6e2e786d6cec97cd6fda3014c0ef93f63f44be4e34385f0444a86034d3a44e42a5bb +ece62606a23a71641b0a9df6bfefd97120a59ad4c38e3961fb7dfae7a7f0def4f65832e740852c +7895207c33440ead329e17d536413f1fd3418c1ca9489513c62b9aa01395e876f6f9d3b49ed482 +4a5a29a2c0d40137959c9004ed94aa27ae2bb31d2d89bce135ad40b6e1a2240ab662ebe682bc80 +fb92b9de7018b925292a64edc547ecf966536474c9b37d09e11b2782329387dc15b56cbdd51ff1 +d6bdc5db94241500e617e76582c2211e8670440e74bd7f9254a5bc521280a11990902cff41a4a2 +e27b7e2fd5d58953e409f270300a623f0a00a798e8139060e4cea6ee3fccdfae1b2761d4b1f62e +d65dddf5ab931d21310f8fe12ef09cd92941511cc67ae36aa58a2b2aad5a2b305a631c0467ad9c +6ec89ea9477a546b7562743625fa6cb51276f5b0120e23ba4c723a58de996cba2aecc0700d3a25 +11f7098210846da1c4187240e7913cad5fdb887029c58c0a25f7d5423c6bae8e7ed0ca6e41b483 +505035ab7d95a986fb390b099e70acfd3c53a1ab182e6ee492b3224f0bc6cc46d700fdca847320 +104d1d1bfc575a26aaa34e355c3f837aff525603a6b42699507225a0a41164f24a90c90b8e078d +c33df3b068bc0b9a201ce9847b3e068ae5e35ff8b4107a3e1a8ae5135cf8607f84a31e504bc502 +0a3b80622f36d9f78034150b28ba00f2bc3832ff023d204dc5021a75008d02bfff469fa95840f1 +0590a6d37fa4cf542ca0710750148efa8ff4998ae95cdfb798f504d6b6978595b31745827edfa5 +f374e1f9fe6018f9e920f016e120863fbdc17899fa698817733c9cffd18d380e7507fc6d5fe414 +9cb453000edfcd016591092ef946dd64bcb403855bf3172a6a5e9899027bcd14d078dd6a97a607 +8727e1a28081017c72f18a9c9a4bddde47c07d0f13c312861b0ddf1a66ccd48214dba733f37930 +f7e741d3bdb72a6665a25c07f46c083f0efe5f08b3eea032cf01c0dbdff6a83b1ccdfe020000ff +ff0300504b030414000600080000002100303a84e5ea0200006c060000150000007070742f736c +696465732f736c696465312e786d6c8c545b6f9b30147e9fb4ff8078a75c020450691548a8266d +6bd4763fc033262019dbb2dd3451b5ff3edb98a45d23ad3c707c39dfb97ce71c5fdf1e46ecec11 +170325a51b5e05ae8308a4ed4076a5fbeba9f132d711129016604a50e91e91706f6fbe7eb96685 +c0ada3d04414a0747b2959e1fb02f66804e28a3244d45d47f908a4daf29ddf72f0a2ac8ed88f82 +20f5473010d7e2f967f0b4eb0688d6143e8f88c8c90847184815b9e80726666bec33d618474299 +31e87721dda8cce0236eb514ec8923a457647fc7d923db7273fd73bfe5ced02abe5c878051d1e2 +faf6c2aa992dd99b85ff0f7c372f4171e8f8a8a5cacd3994ae22ffa8ffbe3e4307e9c0e9109e4f +617f7f4117f69b0bdafeecc07fe354673505f7319d784e67dba101176a037b8723d84be12c5c1b +d47721e7f09ef950baaf4d1355c9a689bd46adbc38a862afdac4b9d7448b6c132d9b3a5aa47f34 +3a4c0bc891a1fcdba975c2f443b9c601722a6827af201d6ddde7f651950a63db3c3ae4d764d934 +6114575e1ed7991757e9dacb56abdc5b6749be08f3661584eb3f960d15f32c4d16be4ddeb270b1 +7067d62e962cccd2348c22538c28c8832059be2f5f1ae649122da7b244d1324d97ef8b030ac685 +bc437474f4a274f9b0ebe58a73fa6228077b15eb0498154d6853404aca23465a119307d4295294 +d3c8200d9fa8c6dcd9035cba0042d5f1e174d583164dc749a03e1bd1096176c6a0d6ee068c4fb6 +ad81cbb6273356dfd0d07508ca1338f83ff884309e293983c781507ec9003e7b9ef42782266258 +210f156d8f1af75b49d5eb5ce29a62332c80c09eaaf7074a3ed50d0bf9a88166c3cc4f2100de91 +374a88b45bc0c183bac140bf942df2d61b1b0333de67a7a65256ccafc9dc7f6665a7a8aaf234aa +b3caabc2b8f1e275bef4564d9a784db288e3baca56f562a3a78885f1c72952879f9b22465f1067 +74300f6818d841322486e922cbb3659447260f13db2c4fd3621f4688f90fc0eef7662294338978 +6d8e981ed149f5aca27357b8bf000000ffff0300504b030414000600080000002100d5d192f1bc +000000370100002c0000007070742f736c6964654c61796f7574732f5f72656c732f736c696465 +4c61796f7574362e786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c1 +45f4018ee4da06db24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c89b609d +ef35dcaec7d5160467f416c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d8 +0c3421cb10c9974917d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23 +fd6387ae73860ec13c26f2f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ec +ddf6030000ffff0300504b030414000600080000002100d5d192f1bc000000370100002c000000 +7070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f7574372e786d6c +2e72656c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c145f4018ee4da06db24e4a2 +e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c89b609def35dcaec7d5160467f416 +c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb10c9974917d284 +b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae73860ec13c26f2 +f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ecddf6030000ffff0300504b +030414000600080000002100d5d192f1bc000000370100002c0000007070742f736c6964654c61 +796f7574732f5f72656c732f736c6964654c61796f7574392e786d6c2e72656c738ccfbd0ac230 +1007f05df01dc2ed26ad8388347511c1c145f4018ee4da06db24e4a2e8db9bd18283e37dfdfe5c +b37f4da378526217bc865a5620c89b609def35dcaec7d5160467f416c7e049c39b18f6ed72d15c +68c45c8e78709145513c6b18728e3ba5d80c3421cb10c9974917d284b994a95711cd1d7b52ebaa +daa8f46d403b33c5c96a48275b83b8be23fd6387ae73860ec13c26f2f94784e2d1593a23674a85 +c5d453d620e5777fb654cb1201aa6dd4ecddf6030000ffff0300504b0304140006000800000021 +00d5d192f1bc000000370100002d0000007070742f736c6964654c61796f7574732f5f72656c73 +2f736c6964654c61796f757431302e786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad +8388347511c1c145f4018ee4da06db24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc86 +5a5620c89b609def35dcaec7d5160467f416c7e049c39b18f6ed72d15c68c45c8e78709145513c +6b18728e3ba5d80c3421cb10c9974917d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a +48275b83b8be23fd6387ae73860ec13c26f2f94784e2d1593a23674a85c5d453d620e5777fb654 +cb1201aa6dd4ecddf6030000ffff0300504b030414000600080000002100d5d192f1bc00000037 +0100002c0000007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f +7574382e786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c145f4018e +e4da06db24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c89b609def35dcae +c7d5160467f416c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb +10c9974917d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae +73860ec13c26f2f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ecddf60300 +00ffff0300504b030414000600080000002100d5d192f1bc000000370100002d0000007070742f +736c6964654c61796f7574732f5f72656c732f736c6964654c61796f757431312e786d6c2e7265 +6c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c145f4018ee4da06db24e4a2e8db9b +d18283e37dfdfe5cb37f4da378526217bc865a5620c89b609def35dcaec7d5160467f416c7e049 +c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb10c9974917d284b994a9 +5711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae73860ec13c26f2f94784 +e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ecddf6030000ffff0300504b030414 +000600080000002100d5d192f1bc000000370100002c0000007070742f736c6964654c61796f75 +74732f5f72656c732f736c6964654c61796f7574312e786d6c2e72656c738ccfbd0ac2301007f0 +5df01dc2ed26ad8388347511c1c145f4018ee4da06db24e4a2e8db9bd18283e37dfdfe5cb37f4d +a378526217bc865a5620c89b609def35dcaec7d5160467f416c7e049c39b18f6ed72d15c68c45c +8e78709145513c6b18728e3ba5d80c3421cb10c9974917d284b994a95711cd1d7b52ebaadaa8f4 +6d403b33c5c96a48275b83b8be23fd6387ae73860ec13c26f2f94784e2d1593a23674a85c5d453 +d620e5777fb654cb1201aa6dd4ecddf6030000ffff0300504b030414000600080000002100d5d1 +92f1bc000000370100002c0000007070742f736c6964654c61796f7574732f5f72656c732f736c +6964654c61796f7574322e786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad83883475 +11c1c145f4018ee4da06db24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c8 +9b609def35dcaec7d5160467f416c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e +3ba5d80c3421cb10c9974917d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83 +b8be23fd6387ae73860ec13c26f2f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa +6dd4ecddf6030000ffff0300504b030414000600080000002100d5d192f1bc000000370100002c +0000007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f7574332e +786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c145f4018ee4da06db +24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c89b609def35dcaec7d51604 +67f416c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb10c99749 +17d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae73860ec1 +3c26f2f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ecddf6030000ffff03 +00504b030414000600080000002100d5d192f1bc000000370100002c0000007070742f736c6964 +654c61796f7574732f5f72656c732f736c6964654c61796f7574342e786d6c2e72656c738ccfbd +0ac2301007f05df01dc2ed26ad8388347511c1c145f4018ee4da06db24e4a2e8db9bd18283e37d +fdfe5cb37f4da378526217bc865a5620c89b609def35dcaec7d5160467f416c7e049c39b18f6ed +72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb10c9974917d284b994a95711cd1d7b +52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae73860ec13c26f2f94784e2d1593a23 +674a85c5d453d620e5777fb654cb1201aa6dd4ecddf6030000ffff0300504b0304140006000800 +0000210069a25f2115010000c70700002c0000007070742f736c6964654d6173746572732f5f72 +656c732f736c6964654d6173746572312e786d6c2e72656c73c4d54d6ac3301005e07da17730b3 +8f253b899394c8d98442a0ab921e4058e31f6a4b46524a7dfb8a96420c616821a08dc092f5e6e3 +6db43f7c0e7df281d675460bc8520e09eacaa84e3702dececf8b2d24ce4bad646f340a98d0c1a1 +7c7cd8bf622f7db8e4da6e744948d14e40ebfdf8c498ab5a1ca44bcd883a9cd4c60ed2874fdbb0 +5156efb24196735e307b9d01e52c33392901f6a4c2fcf334e25fb24d5d77151e4d751950fb1b23 +98eb3b852f7232171f62a56dd00b48d3ebfdd94fdb348c00765bb68c295b52b24d4cd9869265f9 +3d693edcc519ea7be767cd28c75d19ff6d28271b8a29233b2b62ca0ab2b3b8a591adad63d2d664 +6b3c6a6b9cb2ad62d256946c1753b6fb95b1d9f35b7e010000ffff0300504b0304140006000800 +00002100e40b4c2ac604000089100000220000007070742f736c6964654c61796f7574732f736c +6964654c61796f757431312e786d6ccc58cd6edc3610be17e83b08bad32b891425195907fa6351 +347fa8dd1c7aa325ae5788fe4a71d7eb0401f2267d8e16bde54df2241d52929dd88eb32ee2c297 +2545cd0c67e6fb6648ed93a7bba6b6b6420e55d72e6df7c0b12dd1165d59b5674bfbb7138642db +1a146f4b5e77ad58da1762b09f1efdf8c393fe70a8cb67fca2db280b6cb4c3215fda6ba5fac3c5 +6228d6a2e1c341d78b16dead3ad970058ff26c514a7e0eb69b7ae1390e5d34bc6aed495feea3df +ad565521b2aed834a255a311296aaec0ff615df5c36caddfc75a2fc500668cf6972ea98b1ea285 +c4a8934ad5226ecb939d6d1979b98537ae7d0429288eebd26a79030baf41b47ac36b212dd010b5 +b5694beb44ec94111cfa1329849eb5db9f647fdcbf9246ffc5f695b4aa52db9becd88be9c52466 +1edbad992caea99fcd537eb85bc9468f901f6bb7b401c60bfdbbd06be084558c8bc5d56ab17e79 +8b6cb1ce6f915ecc1b2c3edb5447353a77331c6f0ee7465a74e28c4bcf06353bb791d5d27ec798 +97f8392388c10c11272128c949849887c3dc0b58ea61fa5e6bbbf4b090c280f6733993cfa53700 +6faa427643b7520745d74ccc99090858bb64c25a3bfc2e49a893e718a3d48942447c3f80dd4307 +2549c26246589e90e8fd940bf0791e4d148b29f42907332643ffac2bde0c56db01661ae211c24b +8911573df6eb89704a93cdb63a59012d47fe4d5aa3a8995ca5ff56ecc3c0239133a28aa9ef7afe +9734f0a8179af71a5e3f74dd1087d7411e4df7876a9774e585d63e8511c0d51e2d6dc135aea3d9 +7a50c7eaa216e6a1d73fc62909c235d75da41428cb475975644800e02821c742b4ca8d2cd6d62f +7555bc11ad752ab83c1520d46a7fc634ebb88de9c59543c6c7bb39886fe32024a1876ef176cd6b +70c1f21e291be38826cc0b33045b1244282528a629450e8bfc284fc23cc0dec3b351637e8d8ce0 +deee4af91ea4c4a1770727830013fc909cec351db7f5659fbb8ba3cc1073dbc99a9f01254b3118 +de8cac1deea6e8f5ed4ca6eedeeef7736dccca4f452bf6b0e87ddb62262b750f8bf8db165f5790 +dbfd2d923d92fcf19f767587c9fbd53a996b3de36ad30c9f97387ea4259e666114504c118b0894 +789445fac04911893d97b931ce823c7cf8122fa1a487b71009af5773718f47fe57abdbdc48ae17 +e157ca6e05f723136d84532fa5094638600c8e5716a128f04284d32866414cf28092f7f3b5abe4 +4aa8aa11ac3adb48f172a3ef503789640d8d4a6bc1dbcba256472e3d70f001a43abca214f86070 +6fcb575cf25f6fd2f1bf10ce9f09c7361fff7c2baa5ab49f938e3c52d279d4f1fc380a80740945 +2488139464b18fa2344e1d9f26b193e38727dd4ac991757f6c38b4153913ef1bc7ca7d88f77dd1 +a6976877351c86eda66984fc0270ff91021ea42427d4c5507211f4962c0851eca439f29d308949 +18f971fc3f7419f8547cb1696ec5dc1c67dfb9d9647916d09cf928a53882d6ca729478598a9893 +7b21a3ccf7dde8b2d90c75550a4074ef1ef3e9c35f2fe4c1a70f7f7f87166386f9d370cebb994d +ec4992887a690865ea12e89b19946ecca88f988f094993304e71aed9d3bbe4267b60713ff6f4dd +b9907d57992f6ad79908b4e5fa02e37b0e76b0e79a337d617c9bc74b961cebf861ace573debfdc +1a9a8cd7a5d42cf59a9aa3e895888e7dfe0be1e85f000000ffff0300504b030414000600080000 +002100ee0bf3bf90040000a70f0000220000007070742f736c6964654c61796f7574732f736c69 +64654c61796f757431302e786d6ccc57db6edc36107d2fd07f10f44eeb46dd8cac03dd5814756c +a376f3d0375ae27a85e8568abbde7560207fd2ef68d1b7fc49bea4434af2dab1e3ac031bf08b78 +d1703833e7cc907cf3765d57da8af1be6c9b996eed99bac69abc2dcae662a6ff714650a06bbda0 +4d41abb661337dc37afdedc1cf3fbde9f6fbaa38a49b762934d0d1f4fb74a62f84e8f60da3cf17 +aca6fd5edbb106fecd5b5e5301437e61149c5e82eeba326cd3f48c9a968d3eaee7bbac6fe7f332 +67699b2f6bd6884109671515607fbf28bb7ed2d6eda2ade3ac07356af55d93c4a6036f2130e26c +ad6b4a8eaf60c6d20fc0f5fcb42ab486d63071560a5669cba6905114e5075a31ae9db1b550827d +77c61993bd66f50bef4ebb13aed61fad4eb8561652dfa84737c61fa3981a362bd531be5a7e3175 +e9fe7ace6bd9425cb4f54c07f836f26bc8393042cb87c97c3b9b2f8e1f90cd17d903d2c6b48171 +6b53e9d560dc7d77ecc99d212c325aca8ec35e4c162d7939d33f1262c76e463022d043d88c318a +331c22623b4166fb24b11def5aaeb6bcfd9c3385d0afc5c434cbbb876e5de6bceddbb9d8cbdb7a +a4c9c43600d6c223b0d2ca8fb66f054eeac7c8719308e130b550ec3a094adcccc38e935a76985e +8f01009ba75679618cfe8e8e4f40f4dd619b7fe8b5a605a024ae036e37120398b2ed1623bb4429 +2a36ca0d3f55671be59105621db7c5466e720ead9aa4fb552f4ec5a6626ad0c98f328303101595 +c95b30946603b8e240c10161128c0ffcd78a25cf17da6f55997f608d76ce283f6720d448570787 +a53d4ab5b135c198c0ff36059c8902efefe64307497ab5a01598a0d9af941709f6dc08c71e0a92 +087627568a02270e8126416aa659e4e1d07c795e489475ade52594a6a10649f3d6dbc54f218b2a +4b339d5109c74087fbd4e9246b56d54d35788c4a44f167d5f28a5e00730ad62b780772f58f33e9 +ebed94438f6ff7e7a554a665e7ac613b68b4bfaf31e5a5788246e7fb1adf9710dbdd35e21d82fc +f9bf66fe88caa7a5249e5232a56259f7b733d179a59988bdd8c4212128b47c13e12c345140c004 +171333b49dcc37c3f0e533b180ccebafc0135acda71c1c0ec667a9d873b845286f4327b1132f76 +90e383cbd825210a7d3b404e1246c48f70e67bf87aba9414543051d68c94174bce8e97f2a6719f +485a5f8ba462b4b9496a7160797ba6b307a10eb694021b14ee4d714239fdfd3e1d7f8470ee4438 +b2fcfcf7152b2bd6dc261d7ea5a48b82308a039220df8b2c84831443f9771d04fbc6b11d618f44 +d6cb936e2ef8c0babf9614ca0a9f88f723d5ff1bc47b5eb4bd1bb4db0aceac6659d78cdf01dc7d +a580a72ea45ae8c6c8f28300cefbcc44a1094327c9029bc4a1ac412f0f383ca48e96f58398abe3 +ec998b4d9aa5be971117259e13c2e5976428b6d3041133b303e211d7b5c29b62d35765c100d19d +6bcc974fff1cf1bd2f9ffe7d8612a39ae90135c55df546f6c471e8d94910a3d8c25037d3d04711 +f15c445c07e3240ea2c4c9247b3a0bdf670f4ceec69eaebd64bc6b4bf5deb4cc91402b2a2f07be +6b390176436f046a60c9d65a09fda9f41fda8abfa3ddf14ad164b82e256aaa93d41c44b722d2f7 +e9817df03f000000ffff0300504b0304140006000800000021005a9d3795690500006715000021 +0000007070742f736c6964654c61796f7574732f736c6964654c61796f7574332e786d6ccc58dd +6edb3614be1fb077103460778c259212a9ac4ea13f6ec3b2b458ba0750243a16aabf51b4eba428 +d037d9736cd85ddfa44f3292926ca749336f6b82dc98147578f89df37da40efdecf9a6aeac3517 +7dd93673db3d726c8b37795b94cde5dcfef51503d4b67a99354556b50d9fdb57bcb79f9f7cfdd5 +b3eeb8af8ad3ecaa5d494bf968fae36c6e2fa5ec8e67b33e5ff23aeb8fda8e37eadda2157526d5 +a3b89c15227ba37cd7d50c3a8e3fabb3b2b1c7f9e290f9ed6251e63c69f355cd1b393811bccaa4 +c2df2fcbae9fbc758778eb04ef951b33fb262479d5a9687b9effc0b3c2b68ca158ab21d73e51b1 +e7e755613559ad06c20bb540534ad9836fbfd984df7df8eb42a5335f8a72218d6ddfbd129ceb5e +b3fe5e74e7dd4b615c9cad5f0aab2cb4cbd1953d1b5f8c66e6b1599bceec93e99753373bde2c44 +ad5b951b6b33b7158557fa77a6c7f8465af93098ef46f3e58b3b6cf3657a87f56c5a60b6b7a88e +6a00773b1c3885f3aa94bcb274c20c8ed35e4e8856a29cdb6f19839197320c98ea01ec44184429 +0e008388a690b01822ff9d9eedfac7b9e086a51f8b496dae7f8be1bacc45dbb70b7994b7f52895 +49718a5c178fe46a946f03274843c808086948010e68080296ba2075621c45288e100edf8d0950 +98a7d644311be31d039f88e8bbd3367fdd5b4dab88d2bc0ebc6d2d063275db2d4785c952567cb4 +1b5e9ace2ecb77524c914bbd813b97380141f426dbaee3b99eef8c3442ea4182c8a7640ebebb63 +b989dae24a4fbf50ad22316bf265ab76e3c5e0b4eae5b9bcaab8e9af2b778454f0c52fcab8bf9e +db6aa5492a5b03dddf9bd8e91f334fa84955a68f978283241dd69027462c8a44c9c5b043ad6225 +f2a5f55355e6af79635df04c5c7065d468d7031dc3329d89668ac20476bf40d156a02a5f9d3a3b +ae9759a5d6b5e013952a8b13163a29017e922025558f8288520248801d88433f42943dbc54b53a +3420adafffa358ecd100fbe83ec5ba9ee3b8f460c57e4ea6569d8953739a954da1ce79dd35b356 +67ea636666eda918626778ddb75559b0b2aacc83268cc795b0d659a5f6eb6638cf64d9c8618478 +3bf56f8d87a79d9fd9b4d2cd4d62ba7087147b04ea1c1c04572ffb587035c6112edac10d5cac73 +76105c973e225c8d71848b77705d445c23b183f06acbc7c2ab418e78bd3dbc14529db5a7875783 +1cf1fa3bbc1052f325787a7835c8112fd9c34b303a78bb3d2a5e0d72c44b777835d8c3f7db63e2 +d52047bcc11e5edf234f73bf69907797281abd32d8d6c4f7952cccd429eb5654d9a5aa500ade5b +baa2188a98fe4b562c78aa58924caeea7ebf66414fb466a129f63c184090f8240618c708049051 +405ce27a8cc42c26f1c3d72c85b48dba54b21653ed32c8e5b3c58bb974dd5b619807a39685ba05 +0e970914c358d5610011c600f658000202294071103212e294f8f8dd74ab2c32c9655973565eae +047fb1d2d7c4db22b3fa5ac615cf9aad16e589eb1f39e848a59aee24a53018de9be2652632bd9d +3e91ea7f119c37098ead3efc7ecdcb8a37fba2c34f55743e4969e0b8c0f1824415ca410828a38a +15e4e3044192423f7878d12da41854f7db2a132a5d93f0fea16afe37c2fbb26cfb5bb6d599c99b +6655d75cdc20dc7ba284c328f270927a2056ab011cba0e0854110d62c7f5a0e3d3d071d0c313de +57c5d9aabe9373f800874d9226c44f990ada478152394b4104931830278594f9ccf3dc607bd8f4 +ea2bc815a3079f311fdfff71268e3ebefff30b1c31a699fefd9af26e7aa37aa228f0614c2310b9 +589d9b494040c87c0f300fa94f4644c318a55a3d9d8b6fab470d1ea69eae7dc345d796e60f43d7 +190564ea079fb808a99be744f320921d58cdfcb90e5fb595f839eb5eac8d4a868f7c6c863aadcc +c17467a2439ffe203df91b0000ffff0300504b0304140006000800000021008f55c3fd73040000 +6b0f0000210000007070742f736c6964654c61796f7574732f736c6964654c61796f7574322e78 +6d6ccc97cb6ee3361486f705fa0e82f6b42ea46ec63803dd580c9a26419376d11d23d1b13aba95 +a21c3b8300f3267d8e16ddcd9bcc9394a4a4783249334ee100d998147578780effefd0d49bb79b +aad4d6947545532f746b66ea1aadb3262feaab85fecb0506beae759cd439299b9a2ef42dedf4b7 +47df7ff7a69d77657e4cb64dcf35e1a3eee664a1af386fe786d1652b5a916ed6b4b416ef960dab +08178feccac819b916beabd2b04dd3352a52d4fa389fed33bf592e8b8c264dd657b4e68313464b +c245fcddaa68bbc95bbb8fb796d14eb851b3ef87c4b7adc8b6b9fc5dd794115b8b474b3f127967 +e765aed5a412031705a7a5d6d7b9f6ae5e9192abf75d7bc12895bd7afd036bcfdb33a6a69daccf +9856e4d2cd385d37c617a3997aacd7aa637c35fd6aea92f966c92ad98abdd0360b5d48b695bf86 +1ca31bae65c360b61bcd56a78fd866abf4116b635ac0f8625199d510dcc374ec299d6137e426a9 +388e3b3e45d4b362a17fc0d88e9c142380450f203342204a5100b00dfdd4f6706c43f756ceb6dc +79c6a852e55d3ed165b90f14ad8a8c355db3e4b3aca9463426c28498161ac594517e883c2f347d +b11cb42c0ba008a520401001c7b2133f08a06de1e476dc0011f3d4aa2c8c31df31f14988ae3d6e +b2f79d56374228a9eba0db9dc520a66cdbd548142f784947bbe1a5eaec7679a4806fa226dfca45 +2e45ab06c9bcecf839df96543db4f24785c184102591059b5390a483b8fc48c921b689533630af +e53dcb56da8f6591bda7b5764909bba4c2a896a90e09cb78946b6317823189ffdf08c00981a10c +ba5614e48dec51a6d9af940798fac8775d045ccb0b01421602611407c00c4de85808c7d88a5e92 +8722dfec4c0e80422b29589777d5fd141a58f1b06e5849ae040939edb40b91db004bf734195f2f +a752787ab9dfaea5332dbda435ddc3a3fd6d8f092bf8333cc26f7bfcb5a0ec191ed11e9bfce99f +7af984cbe795189a4a2c21bcafee55187ca51516c756e8413b06a68b20405e68c91337023849d3 +c8f73c1198f3f2276ecec50de6466442caa50c4c56ddf0477790b25b8acb80ca3680b11dbb1104 +d0c31820070720f06c1fc03808b117a2d473d1ed74b1c809a7bca8282eae7a464f7b7973780892 +d6553c2e29a9ef8a9a1f59eecc8433b1d5fe0e291183d2bdcecf08233f3fc4f1ff00e74cc0e1fe +d39f37b42869fd2574e89542e7d911b41cc19b87a138d671e08330767d90402f753d1cd85e18be +3c744bce06eafee8893856d804de01cffbc3aaeddea9dd9405adebbeaa28bb27b8f34a054fa3c4 +09fdd403293463807cc7017e8421b0a1679a711a24317ad1fff14170f13174d2578f6aaefece0e +7cd82469e2b9297640ecc200a000a720b293186033b57dec62c7b182bbc3a62b8b9c0a45f73e63 +3e7ffceb84cd3e7ffcfb00478c6aa60fa269df556fa4278a02d78efd0844e2d20550127820c4ae +03b003118a233f8c612ae9692df4901e31b81f3d6d734d59db14ea9bd1324780d6445e0ea0e740 +cbf6dd60146aa06417ad94fe5ce62fda92fd44dad3b5c264b82ec56aa895680ea63b1399fbf491 +7cf42f000000ffff0300504b0304140006000800000021007555dfd22405000070120000210000 +007070742f736c6964654c61796f7574732f736c6964654c61796f7574312e786d6ccc585d6edc +36107e2fd03b087aa75724254a32b20ef45b14759ca0760e204b5caf10fd95a236768200b949cf +d1bef62639498794e4ddb59dd48ee3c22f4b8a1a7e9c99efd368b42f5e5ed695b1e1a22fdb6669 +e203cb347893b745d95c2ccdb76729f24ca39759536455dbf0a579c57bf3e5d1cf3fbde80efbaa +38ceaeda411a80d1f487d9d25c4bd91d2e167dbee675d61fb41d6fe0deaa157526e1525c2c0a91 +bd07ecba5a10cb628b3a2b1b73da2feeb3bf5dadca9cc76d3ed4bc912388e05526c1ff7e5d76fd +8cd6dd07ad13bc0718bd7bdf2579d541b4b29415370d6d2636b080cd23883c3fad0aa3c96a5838 +2b2507c8aae4fa4edf9d09ced5acd9fc22bad3ee8dd01b4e366f8451160a60da682ea61b9399be +6c367ab2b8b1fd629e6687972b51ab11f2605c2e4da0eb4afd2ed41abf94463e2ee6dbd57cfdfa +0edb7c9ddc61bd980f58ec1caaa21a9dbb1d0e99c3d17930547ab41fc7bd9c3d1a44b9343fa629 +099d24b5510a33645ba18dc2c4f6514aa89710378d08659fd46ecc0e73c13523bf16b3b230bbc5 +665de6a2eddb953cc8db7a92c5ac2e2012db1391cacb8f0e0b284eb185ec2081d3632f4681eb07 +08278e1746961fa781ff694a00f83c8f3a8ac514ef14f84c44df1db7f9bbde685a204af13af276 +6d3192a9c66e3da92997e24c0b6aa658ddd7936da2ef64193bc4b6ac913f8c09a48aee33ee637b +34504c42465d66dde273c4ee0ee565d816576af7398cc063d6e4eb161ebef311b3eae5a9bcaab8 +9e6f2adc2993eaa2d1fe6b7e0bbefa1d16fb0f4b93a953c78326db71be83d1a91f1d95804d55a6 +0a4bc1519c8cc7c9232d1da05472313e9b4631887c6dfc5695f93bde18e73c13e71c8c1a053d92 +331ed3e9c0e680748cdf962b9de5fab681d3a4d62c79a69ab580c6c4c30c8561ec233bf2521452 +27425ee87b0e75a81579f1d36bb61fce47cd82534a898fd22e651681b0bea15dcc1cc765e4beda +fdaa60eb4c1cebd256360514783ddd17f1f970022f340db0a367e5eb4d3deb29d9a2da8e4b94bf +0f85de7b5414de044db7d0632e1e0c8dbd5d68853741db5b684c5dacaac283b1b7a564029cb09d +1d6c8f78ca85c7612bc0099b6db109f17491791cb6029cb0dd1d6cd7a6df43e53eb6029cb0bd2d +b602fe2e2ef7b015e084edef60334757f8c7612bc08757eb5497e84d2baaec821b05ef8d6d2d1d +8b78ff74f5db9eeb779cc9a1ee3be8fb3eacb30a0e35e8736d3d0296604a020437e074cf2128f0 +43e83f1c4282d00ebcc0c24f5fc60b696a0540b25673291fa5f0d55aae1bd26f165c7da105b382 +7e5847ebd388442ca488ba698a6c27f591ef120fd1c80f5237b01397d99fe6eebac8249765cdd3 +f26210fcf5203585377567f4b58c2a9e35d7bdab3cc2ecc0a20790516f2b29f041f3de146f3291 +29c9df50eff708ce9905970efffcf98197156f7645673f53d179d4b269101114474182ec1094e7 +63df8544441676ec942651f8f4a25b4131d2aafb63c804a46b16de7f34110f11de8f659b5db3ad +3ee89a66a86b2ef608779e29e1984531096d07311cc0578e87e1c3dd497ce47a8cba21745dcc0b +fe8766b12a4e86fa4ecec796eec7169b38895d96a40e8a18850ed94f1314923842a995102f65a9 +e360ffbad8f45509ef4af0eebe35e6cbe7bf4ec4c197cf7fff8012a387f99f8139ef7a36a9270c +7d46222f4421b6a16ec6f0ac06297350ea50db8e422f8868a2d4d361fbb67a60f17eeae9daf75c +746da9ff38c1d624a04d56e9f69012c6089b791e55b2f556517faae287b112afb2eef546cb647c +e7477aa953d21c4db7262af6f99fa2a37f010000ffff0300504b030414000600080000002100fd +00fcd1320800004e360000210000007070742f736c6964654d6173746572732f736c6964654d61 +73746572312e786d6cec5bdd6ee33616be5fa0ef20f8b6502c8ad49f314e61495677b0e93468a6 +7bb177b444dbdae86f293a93a41860de64817d8b5dec5ddf649ea4879464cb49ec49da49e10446 +008b3a3ca20ecf77bec343da79f3dd759e69578cd769598c07e8c41868ac88cb242d16e3c1cfef +23dd1d68b5a04542b3b260e3c10dab07df9d7ef39737d5a8ce921f682d18d7608ca21ed1f16029 +44351a0eeb78c9725a9f94152ba06f5ef29c0ab8e58b61c2e907183bcf86a661d8c39ca6c5a07d +9e3fe6f9723e4f631696f12a67856806e12ca302ecaf97695577a3558f19ade2ac8661d4d35b26 +9dc2fce28b2c91d7d9a2f9fc89cdb534b9062f1906020d3a5223b320e3da15cdc683d9020d86a7 +6f86ad72db920fd7d57bce986c1557dff3eaa23ae7ea0defaece398c09430eb482e6e05f3980ea +68d5d46d71a51ac33b8f2fba261d5dcf792eafe01e0d2c04146fe4e750cad8b5d0e246186fa4f1 +f2c70774e3e5f401ed61f78261efa572568d71f7a76376d3799f0a965500cfed926632541ac781 +4967b5e88c5bf1743cf8258a4cdf9a46448fa0a513c327ba3f259e1e99d89d9a4e1498d8fe289f +46f628e64c61f636e9620fd9f7f0ced39897753917277199b781d3c51f408d481b7dd2e05f0c02 +12ec06fa04598e4e42c3d43dcb413af61cc3833e9f38e863eb0bb0b9bbaa590cdba9b73ee830a9 +abb332beacb5a204cc24c40d846b8d065779ad969ab8a9c05d2215196bf59a4ed5d838fc41b45d +ec42e42a18b16d21d3dac61d1916b26ca9200145d8b42c1b6fc14a4715afc5f7accc35d9180f38 +8b85028a5ec10c1bd54e45d9d458528dc4b55f263752730657401f52093cbf2cf9ed40cbde16f5 +78e02142e0dd42dd10cb31e186f77b665b3d220bca4c851f2d6218673c880557b61440dcc94a94 +f3b4b5a879a5ecca6a71216e32a6e65dc90f25e660504665264b981e4e1bb788531594b94a5d4d +32d092158f97dadfb234be6485366394cf182815f22d0dd6120a35f4703369e587fd44c06b2200 +1a7d1e9807ca83c8987a7e3835f48937011e20043c70ac896e637bea19fed4c7f84fe08144561a +24a3f78fd001b9a665efe703c116c2d83d7c3e3c9902958cfe2bf5ac12eea344a4787055f28c2e +800109ab3519b10d49eafd8cb8fb3a85d8fed7fde3831c4c9bce58c11e31a2f9e511439e8a278c +a8f2dffe11ff9e02748f1f913cc2c9bffebf98ef19f269a98574a925a46295d7fde4820f34b9b8 +51e8987e38d1dd20243a71609175c308e961141ac83203c341c6f327974440497b0b33a1d9bc4d +322ac07e6f92b131aca7d69d62cb7408560a32c76c56e517b4e4aae9745945b5af3224c39d660b +d82a64cad884cd7f0291742792d3559094599a4469963d50228beba6001469211a896319465764 +ae959bbbcd38c3ee4daad91ad2b47b062a42ceb3a409360f076660fb58c74e14e9c48a3c58c94c +57c78137899c09993a36f938e862820a26d29c45e962c5d98fab068abb3cd6ea5c0419a3c53aa7 +8a53649f18f80422dddd307a2e370e100b45724e39950eba930d7e0fdfad8eefd1ead77fdfb234 +63459ff3e440391f460176d104eb6138f17462bb13ddf3ac00aa6b0ff9aee1d8beed3c3fe7e710 +d02a4affb5a290d579cbfba60c7e0aef89815d553bec223e944cc47dcdc4efcaf1c3a3fed7e59b +bde61b18c38a6295e78c6f51ce3a50ca99d3c09cb88ea54f43076af86812c95dadab47641ad941 +e4e1107bcf4fb93a4bdeadf28758a74aa5a7adb63632f6b2eed52fb787cab9f5721b42b0d9d3c8 +d2031b439ef7a2a9ee9b61a0c386d274233bb22ce4ad97db1a5ec580518f5e653f7ffaef3b7ef2 +f9d3ffbec222ab2edd795c17f7aad5b2d7f73ddb0c5c5ff71181ca21f41c7d12d9961e599890c0 +7727019e4af65688dc672f081fc7deaafcc07855a6ea1413192d811548d8c1c842aee3364829db +baeb9aa5ede9649cf11f68a5cd16086a3281c0c3d7d04a2ea1355b9852664a992965d0a271cc0a +011a6da393989d64ad833b09ee24a493904e627512ab93d89d04d2e7324b8b4b7086bc0cb47999 +fdb51174ade6ac13f2c419bd2957e26dd222d19334a7898838c4c536f1803d2329e16f13958276 +eb5a92699dae2aeff7e8a29eae2a09f6e89a3d5d95c8f6e8e29eaeca477b74494fd7fe82aed5d3 +75bea06bf774d529c71e5da7a7eb7d41d7ed63a1e2748ff21670dde2711f7871ad924baddaf228 +74e7de4383fcf49ece2e6edb1cdbe4559554193d2b7c7ea9ced4e5f702457b0b5d4b4810b0609e +af8a58c87e35727151c5cd12179fc76d96f48c4d96ec2bf8f2547f5b759d4cd7bdb3d5bbb268ce +617af9ba31f2124a8827e4ee76e8be969a924aa3731a432afd36ffa79e897635a4773a186d8ff5 +eb3b1d71dd8efd609edff67ea556be7b50e4949f01c466530ea705247470aade090e07295137aa +a8b7f2f5c08a4a581b37de99f09482d5152dca1a6e0dd3f0a1f42070edfe80a9552ae26544f334 +93e50608e225e53513eb156bb60a40a2c4e3c1e74fff69a4bd7030d51ee139c2a1d8150ec5ae70 +28f687836a9a1bc86dd752c6bf00c8ad4342fcd912c057445cc2dc228e3788c396164b9f1f217f +22e4ca69070eb9c4b9859cf4200778d586ea08f99320472f21af4b9c5bc8adde526e588e82f108 +f9eb835ce2dc426ef720b7107929e5db11f227422e716e21777a907b4e63fd11f2d707b9c4b985 +dcdd408e89299d7e84fc35422e716e21f77a90bbae7d2cdf5e29e412e7e6c7a59b73996a548a25 +e3eb531a78e2bc098c7676f70fc7372adb473acf12242fcdc70f1f7da8af708efed97950d039e1 +e89f1dbb6aecc88df5d141bbf6a0c8355d65fdd1413b766c6a193f3a68f7fea6fb25c0d1413b76 +0360ee3149efab9d6dcb3926e9ed4ab35f5caa5f54745fd436dfe336ff0776fa1b000000ffff03 +00504b0304140006000800000021009119fff8d404000095130000210000007070742f736c6964 +654c61796f7574732f736c6964654c61796f7574342e786d6cec58cd6edc3610be17e83b08bad3 +12c51f4946ec407f2c823ab651bb3df4464b5caf1afd95e2aed70e02e44dfa1c2d7acb9be4494a +512b3bfe89bd0eecc2875c9614351cceccf7cd7056af5eafeaca5a0ad9976db363c32dd7b64493 +b745d99ceed8bf1e3310d856af7853f0aa6dc48e7d2e7afbf5ee8f3fbceab6fbaad8e3e7ed4259 +5a47d36ff31d7bae54b7ed387d3e1735efb7da4e34faddac953557fa519e3a85e4675a775d399e +eb52a7e66563aff7cb4df6b7b359998bb4cd17b568d4a8448a8a2b6d7f3f2fbb7ed2d66da2ad93 +a2d76acceeeb26a9f34e7babceda83933f6ccbc8c9a55e81f6ae763d3faa0aabe1b55ef8fd4c94 +d69b66ce2b25ccbbbe3b96420cb366f993ec8eba4369b6ec2f0fa55516838af556db59bf588b99 +c7666926ce8deda7d3946faf66b21e461d0a6bb5636bc4ce875f6758132b65e5e3627eb59acf0f +ee90cde7d91dd2ce7480f3c5a18357a371b7ddf126778e4b252a6b0890b163af5793450b59eed8 +ef19f36292310c989e01ecc618c4190e01f35090793e4b3c443f0cbb21ddcea530a0bc29267241 +7a0bd0bacc65dbb733b595b7f59a1913c1349610afb11cac7cefa1183237202088620470865210 +bb24004118c208277e18607dfa18006df3341a2f9cb5bf6bc72720fa6eafcddff556d36aa0065c +47dc2e25463087b19b4f842a5525d672e34b33b98af29a056a15b7c5f970c8891ecd22dfae7a75 +a4ce2b611ebae1c798213510151ff2b51020cd4670d5ae81438749093952de2a16329f5b3f5765 +fe4e34d689e0f24468a16670757478b0c7a876ae4c7026f0bf4e01345160cc83bed3f978613242 +5ade0be5038c538203e6034ab208e0388e4018bb21486106634218826ef09c7ce82fb4fdbc9a0d +e6acae84bf428a3bf23e4081ae5726a161e011ea91eb2580c000d24160486d8c084428b899e0a3 +ea8de9d60d4c5b569715e43efa31c3b9652b2b7eaad95688de3ad6a68d84ecef67dfcde34c70ee +3f6e28c34a58d98968c4061abd8735a6b2548fd0881ed6f85b29e42334e20d82fce9df66768fca +c7a531be278dd10b4de334630451cf07098b438051e283288d5d00094efd308a8298c0ff318d0d +af1e95c614fadef73cfe9ec74f98c764cae394ab457d2d8df14b4de3240903162720a121031827 +09885c9602142628a409832979d6db78ecce0a65dfba97c7a6f849bab599fed360bc0d51e22554 +b7a1c867da5bc24210fa5e00501246cc8f70e653fc61fa0f52702554590b569e2ea438582803e1 +4d22597dad924af0e632a9d52ea45b2edad2a10eae28a56d30b837c52197fc97db74fc16c2d189 +706cf1e9af0b5156a2f99274e485920e27a18722ea812c2110e0845010c591b683119f309f86c4 +45cf4fba999223ebfe5c705d56e444bc073ac2c710ef69d1f62fd16eab5234cda2ae85bc06387d +a1805314e90b9465002601d655c6d55526f07d90519cc5888698f9f8f901efab627f51df89f903 +edc337159b344b7daabb245d5a91ee9042ed7eeca509606ee6058c32426078596cfaaa2c844674 +e31af3f9e3dffb72ebf3c77f9ea0c49861fa7832c5ddccd6ec89e3907a49108318625d37d35037 +7b8c12a05b407d65c44194a06c604f07f16df6e8c5cdd8d3b56742766d693e2f41774da025d757 +798811428442d3a239c6b469bc24c9d1e0be1e2bf99677074bc392b15b4acc5237307314bd1219 +5c9f3ea7edfe070000ffff0300504b030414000600080000002100d60634cc2e060000371f0000 +210000007070742f736c6964654c61796f7574732f736c6964654c61796f7574352e786d6cec59 +cb6edc3614dd17e83f08b3a747a4288a3462077ab108eada41ed66d19d2c713c6af42aa519db09 +02e44ffa1d2dbacb9fe44b4a529267fcccd8890303f5664449e4e125cfb94777a4172fcfcac25a +0ad9e675b533815bf6c412555a677975b233f9ed88033ab1da2ea9b2a4a82bb1333917ede4e5ee +8f3fbc68b6db22db4bceeb4567298caadd4e7626f3ae6bb6a7d3369d8b3269b7ea4654eadeac96 +65d2a9537932cd6472aab0cb628a6c9b4ccb24af26c378b9c9f87a36cb5311d5e9a21455d78348 +51249d8abf9de74d3ba2359ba03552b40ac68cbe1c5277dea8d576a7f5d1d9d1697d70fcc7c432 +9de5525d86935db5fef4b0c8ac2a29d58537429e14224fe7e646db1c492174ab5afe249bc3e6b5 +34fdf797afa595677afc306e321d6e0cddcc69b5348de995e1276333d93e9bc9521fd56658673b +13c5d9b9fe9dea6be2acb3d2fe62baba9ace0f6ee89bcee31b7a4fc709a66b93ea55f5c15d5f0e +1a97739477a2b0f4ee9838f6da6e8c6821f39dc97bce51e0c61c03ae5a00db0106418c19e0c8a1 +31f278881cf2418f86643b95c2d0f22a1be505c9354acb3c95755bcfbaadb42e076d8c12536c42 +3cb0a9a37c6fc7761cb00082d0836a76e80680da3e073ef5380b2881ccf63e0c1ba0621e8f6615 +d361bdc3c24722da66af4edfb656552ba234af3d6f173d7a32f5b1998f92cabb420cfdfa9ba6b1 +dae51b29a60ef32835dc39c485c8bd4c36b45de8127b60113ac875897395cb1ebad9eece823a3b +d7c38fd5d1682dd92edaeeb03b2f843969f48f09432a8a8b447b41264014f7b376bb8668454027 +649f4e56b690e9dcfab9c8d3b7a2b28e45228f85ea54e908faadd42b35d0d3550826aabbc5e55c +884b2db65189fe6e9e146a5e0b3d519985d4269e1fc4c0b5a31860eedb80c55e08a807b14f5d14 +b0103ebecc34b53a202d8eaf511b2414c25e4b2bb929b1791ef57ab551e4308836159b9554e9bc +56567fdc438eba33ed6501d530ab4ce49eb1a4bcca943beba60158ecab4790199589d9afaa63fb +4e990fd6b23f1e9779813200a21520763da4fb6e846a5f47d55003aab34265109b08364185f43a +aa861a50f10a153a1e34f9bc11ace9791956630db0ee1a2c45d4c4f050588d35c092152c429498 +0d7b28acc61a60bd35580f3b1b337613acc61a60e90a56636e4ed90db01a6b80656bb0c4f5be8a +328dd5b7d772c258b19e4475b8786edf65cddcf8f1b2964572a29c3813ada59db337ebf65b3a33 +1e9df955a52db95d3767e7899a332411839451c0b0e303ecb904042a0680a94b239bd98807fc31 +cd5973afb6683658736f9b0fb466e4daaeed5da9042e59b343287655efaf2b04be97faae4e6776 +f2eee97e3fd560567c2c2ab101a2d9eebb11239977f7401c1e8c7721bec985bc0722de60933ffd +5bcdee80bc5f1abbb71558f889e6302621653e0c408c62ac0aacc00581ad0aac08f1904688211b +45dfabc0d2f9fce7225104cb21a5fbb2fb3e294da087cc63eef6728b3a5027fd73b9f55c6e3d97 +5bffd3728bdc516eb94fd4aa0962b17e5f01108e1d65d53806d471086021b32362f310d2477de5 +72dd9ecde3f5c1f67c4bc9b566cfcf25d773c9f5c554f6c6548e926e515eca64f254ff38453685 +34e2007102010e7004021707c00e2248781c85c4ff0e6fb5b2ae2fb9d6fe42c1fe9df5ad196d5e +a96f9876b322eb57cb9c1085247080e3710eb0cb19601ea2c00999cf3d1fc71ec11fc68f0459d2 +892e2f05cf4f16521c2c3a43e15521596dd9858548aa8ba4ee7621d9b29d2db5d57425291583e1 +bdca5e2732d10fb02b727c88e0e82838bef8f4d73b9117a25a179df74445e7c754f92d26803387 +011c3355e9fb5005837ddfc5c40e9cc07d7cd1cd3a7953a10fbff05ef53ec2fbb66cb30bb6eb22 +1755b5284b212f114e9fea271a18ba14c608408c6c802971008331040e610ea7be1b70481e9ff0 +b6c8f617e58d9c7fe185cd83cc268a238fc4dc0521d12a673c06018a42c0ed18514eb8eb427661 +366d91ab725745b7a9c77cfef8f7bedcfafcf19f6f6031e6307edb1cf7ddb406f504012328a401 +082056be19310ff89cb880bb0ec66140fdd089b57a1a88afab475ddc4c3d4d7d2a6453e7e6fb2f +b407012d135d1c104821a29e33d679bd4a56d16aea0ff5fad5b190bf24cdc1d2c8a42f974273a9 +d1d2ecbbaebae8b58f1fbc77ff030000ffff0300504b030414000600080000002100ccacc02fe8 +030000060c0000210000007070742f736c6964654c61796f7574732f736c6964654c61796f7574 +362e786d6ccc965d6edc3610c7df0bf40e82deb99228ea6b9175a02f16455ddba8dd03d012d72b +445fa5a88dd74180dca4e7685f7b939ca4434af23ab10b18850df8654991437266fe3fcef2ddfb +dba636f65c0c55d76e4c67659b066f8baeacda9b8df9fb1545a1690c92b525abbb966fcc031fcc +f7273ffef0ae5f0f7579ca0edd280dd8a31dd66c63eea4ecd79635143bdeb061d5f5bc85b96d27 +1a26e153dc58a5601f61efa6b6b06dfb56c3aad69cd78be7acefb6dbaae059578c0d6fe5b489e0 +3593e0ffb0abfa61d9ad7fce6ebde0036ca3577feb923cf410adac64cdcfdbfa601ada54ec61d0 +314f20fae2b22e8d96353070360ae3aa92bcd613437f253857bd76ff93e82ffb0ba1edcff617c2 +a84ab57e5e675af3c46ca63fdbbdee58df2dbf59ba6c7dbb158d6a2115c6edc604c50eead75263 +fc561ac534581c478bddf913b6c52e7fc2da5a0eb01e1caaa29a9c7b1c0e5ec2d129305476b41f +a7835c3c1a45b5313f518a132fa70451e82162270425398910c56e98e380a6d8f53fabd58ebf2e +04d7a2fc5c2e7039fe23419baa10ddd06de5aae89a998c0530d0d221b396cacb4f9e9bb9244e1d +383df211f1220725419e202fc9529bb84e8629fe3c27007c5e5a1d8535c73b07be0831f4a75df1 +6130da0e8452ba4ebadd5b4c62aab6df3d046ab69b2675e798e59902799b74e5411d720dad1e64 +eb7a9097f25073fdd1ab1fed8600216aa6ee6bc951964fe2ca132d07a4497231216f94a32876c6 +2f75557ce0ad71cd99b8e660d4aa50a780953f7a6bebe882b588ffdf08b80b0219936333f4701d +ef76ac86930dfc4671080312e0cc0951846984484a429424294636f5e20c7b180711797d1c4a09 +d5f50e2261f556390677d1996ee18be0b18512a5a38ddc14a77ee22237a014e08790a30087c84d +a3980631c9031fa25d9c6292cbaae1b4ba19053f1fa596f07bca8ca19169cd597b5f4fe489e3af +6c7705a90e8f48810f5af7b6bc6082fdf698d5ff031c5980a3e33f7fdef1aae6ed43e8dc370a9d +9f7a4ee48514e511f046803314274184322ff0314eb06be3e4f5a1db4a3151f7c7c804a46b016f +59fb02e0bdacdadebdda5d5df1b61d9b868b6f04276f54f028a7d48b888f704c1d440212a3d84e +63e4e7506c6896789e475f5f7078a89d8dcd939ae3572836599e057e4e3d94fa2e94d688e628c1 +598aa89de390fad4834b705f6c86ba2a3928faec1af3f5cb5f6762f5f5cbdf2f506274b3bcd696 +bcebde4c4f92443e4ec304250e81ba9945018aa9ef21eab984a44918a76eaee8e91df2981e187c +1e3d7df7918bbeabf47bd6b16780f6acde98010e5cecfb6130eb3441727456297fa9c287b616bf +b2fe7caf2999fef7533dd42b3227d3a3890a7d79bf9ffc0b0000ffff0300504b03041400060008 +00000021005632cb5c8e030000fa090000210000007070742f736c6964654c61796f7574732f73 +6c6964654c61796f7574372e786d6ccc56db6edc36107d2fd07f10f4ce952851b745d6c1eac2a2 +806b1b75fa018cc4f50ad185a5a88dd78181fc49bfa37ded9fe44b3aa4a47512bb801f6c202fe2 +6834339c33e788d29bb7b76d631db81ceabedbd878e5da16efcabeaabb9b8dfdc73b8a62db1a14 +eb2ad6f41ddfd8473ed86fcf7efee98d580f4d75ce8efda82ca8d10d6bb6b1f74a89b5e30ce59e +b76c58f58277f06cd7cb9629b895374e25d947a8dd368ee7baa1d3b2bab3e77cf99cfc7eb7ab4b +9ef7e5d8f24e4d45246f9882fe877d2d86a59a784e3521f900654cf6b72da9a300b4ef1bd67db0 +2d13260fe0c0f619202faf9bcaea580b8e73cea5f10de29de45c5bdde11729aec59534a117872b +69d5954e9d536c677e308799dbee600ce7bbf49bc564ebdb9d6cf50a13b06e37361075d45747fb +f8adb2cac9593e78cbfde513b1e5be7822da593670beda54a39a9a7b0cc75be0e44c8ded208082 +bb3d6b1497961e92e9e97c504b77a3ac37f6274abd34282841142c44dc94a0b42009a29e1f175e +4433cf0fef75360ed7a5e486975fab455f387cc4695b97b21ffa9d5a957d3b8b63d118d089c94c +a7eef893efe55b9ce42e0a039c21e247054a709ea2304db334247980497c3f0f037a5e5683c299 +b1cf43584819c4795f7e18acae07d234c71387a7888958bd8afdaca94ac11b75074858b3d38d01 +1178a2600936c60303b342d46dda5747bde97b588d93ad9b415dab63c3cd8dd0971d48d3a04dfc +cccbc2d4477e442922014d50127931f2b3644ba32d29a290dc2f42af98e2aa6e39ad6f46c92f47 +652894c035bc017012541ce505f4ddaaace1ac3b89499de170e5fa2b1875acc7350d0d7a30bc77 +d51593ecf7efaa4c031606e702ca59a4f6ff82f317c1d1f1dfbfee78ddf0ee6bd1793faae870e6 +82dc02443105d181c6509283951152b884d028f5ddd717dd4ec949757f8e4cc2b816e12db92f20 +bc97659b9cd8ee9b9a77ddd8b65c7e43b8ff83125e64dbc0755d0f45599cc0ee31415b976e5192 +6e53d7a52e2952fafa84c3c7f9626c9fe4dc7b85c3262ff2282c6880b2d007d0092d50eae519a2 +6ee1c534a4418093d361333475c581d1679f315f3eff7d21575f3efff302478c59964ff5327763 +cdea49d324f4b238452926706ee64984b63484f737f009c9d2789bf985568fc0e4b17ac0f93cf5 +88fe2397a2afcd3f0c7667011d58b3b163cfc7d88b4f3c4d22796856337fade1c3dac8df98b83c +1895c05ec072665c422b730a7d08d1d0977fb6b3ff000000ffff0300504b030414000600080000 +0021004ba90907dd05000065170000210000007070742f736c6964654c61796f7574732f736c69 +64654c61796f7574382e786d6ccc58dd6edb3618bd1fb077107ccf58147f44054d0afd0ec5b2b4 +58b35dec4e91e858abfe46d1aed3a2401f64c09e63c3eefa267d92919494384e6a3b6983e5c6fa +241f1ef2e3777848e9d9f355555a4b2ebaa2a98f26f0c09e58bcce9abca82f8e26bf9c25804dac +4ea6759e964dcd8f2697bc9b3c3ffefebb67ed6157e627e965b39096e2a8bbc3f4683297b23d9c +4ebb6cceabb43b685a5eabff668da852a96ec5c53417e95bc55d9553c7b6e9b44a8b7a32b417fb +b46f66b322e351932d2a5ecb9e44f032956afcddbc68bb91addd87ad15bc5334a6f5cd21c9cb56 +65db9cff7eb69a58062696ea019c1cabccb3d7656ed569a51ebca8e76929adaa90d6a73fcfd53c +667351cca48175ed99e05c47f5f207d1be6e5f09d3fa74f94a5845aed90696c974f8638099db7a +6982e946f38b314c0f573351e9ab9a146b753451b5bbd4bf53fd8cafa495f50fb3eba7d9fce51d +d86c1edf819e8e1d4cd73ad559f583bb9d8e33a67356485e5a7aaecc384e3a398e68218aa3c9fb +247102122718242a02d80e300862ec81c4412c76dc247410fda05b437a98096ecaf3221f6506e9 +add25645269aae99c983aca9068d8c5253558578a8aa1ee57b4451e8138a419c7821c01123c0f3 +690430756c1af8ae8d08fc304c801af37835594c877c87c4c74274ed4993bde9acba5185d275ed +eb7685e88ba9afed7c90962c64c9075cffa709ae67f9ce1233e4b98c99da61e22abdde2c36f290 +e320b72f22a4b63d20d64bd933b787721534f9a56e7daeaeaa84699dcd1bb508cf7bceb293afe5 +65c94dbc2ce130a09ccf7e56e0ee9deaed9afd0aa0e3b586adfe31ed846a54a6da55720ea2b8ef +431e1ba9a8124a2efa8569e50b91cdad1fcb227bc36beb9ca7e29c2b50ada9fb62f4ddb4269b31 +0b93d87679a2519efd9aed5ae51aef74c485e53c51ad629220db097d90b82c0038f12960ae4b40 +ecfbd40f3c27b4fde031b55ae4ab6bc8fe3225902138e8d4632e76c84d9d52e83a5a3c46a798b9 +88f6887d74fa15e234a1731bebb075ec085021ba038bd7b1234085f80eacbd8e1d012a24bbb023 +408574177604a8d0dd851d012a64bbb0234085de2e6c0fb86bf1b77add2fcbabbd669b1924c601 +968d28d30bb5f673de59674a32bd3d74dbbd60b33b23daedddfdf6569359f139aff91e8cce6ec6 +4814f21e8c6837e3af0517f760c47b4cf2a77febd916cafb992abedaf355a1d61d153d51478551 +0423162010464cf5ae364cc0087501c13026288e022f208fbffb6b2b9b9875a4a66ba687b61a04 +f6d0e380631377b0a62f9c0710839028f457faac55a5e2c49c148b3a5787671d9a568b53f58660 +5aadd9843e847cd18607aae124b31fdf0dfbddb0ea81cf8358a3f6e3bbb14d6cd8f9c007916bd2 +d88f709be78f84cc617acb7900e1c6c630103a0ea31af600c28ddd632474b1d9401f40b8b1c50c +849a6dffa26cdb8746424adc0716e5ffdfaceee7b164f4d828958beac6b9153f5197a5b6134342 +88ea0eaa77ac043210501a8018d9110a023f0ce9a39e5b7b97cde52d8f85bd0ebe68b2e6cd7bab +159a1ba3965999f7d97a2874544208203749803ab37bc0731d0650e8f989ebe3d8a5f8c3f84d21 +4f259745c593e26221f8cb85fe56705b645657c9b0e4697da545790ce9818d0ed454b36b49a931 +98bad7f9ab54a45aef1b527d88e0e828b864f1e9af77bc2879bd2e3af2545fec632f26ccc300ba +0155aff328019ee30780529810cf61811fb3c717dd4c8a5e757f2c52757413a3f076bc45dd4778 +dfb6daee55b59bb2e075bda82a2e6e149c3ed182c7a167275ee0e985a6de8eb11f032f8c95d504 +3689f4279e80fa8f5ff0aecc4f17d59d35df71a27b90d94471e4d2382120a4c85307d824068113 +8520b16387253421047a5766d39585da1dd5e8f6f598cf1fff3e15079f3ffef30d2cc65cc64fa0 +e3bc9b68504f1078d40959000288956f469e0bfc84aa4d83208cc380f9218ab57a5a886fab473d +dc4f3d6df3968bb629cce762680f025aa6fa25d1231e830cd3a14ebd48ae07ab2bff5aa7afaea5 +f8296d5f2e8d4afa4d3e348f5aadcc1e7a0dd1a98f9fc78fff030000ffff0300504b0304140006 +000800000021004a0963b7a105000020170000210000007070742f736c6964654c61796f757473 +2f736c6964654c61796f7574392e786d6ccc585b6edc3614fd2fd03d08f34f8ff892282376307a +15455d27a8dd05c812c72344af529a899d20401652a0eb687fb393aca49794348fd84ea6ceb8f0 +cf88e25c1ef2f21c1e927af1f2a62cac95546d5e5727137c644f2c59a5759657d72793df2f6324 +2656db2555961475254f26b7b29dbc3cfdf18717cd715b6467c96dbdec2cc0a8dae3e464b2e8ba +e6783a6dd3852c93f6a86e6405ffcd6b55261dbcaaeb69a692b7805d165362dbceb44cf26a32b4 +57fbb4afe7f33c95619d2e4b59753d889245d2c1f8db45deb4235ab30f5aa3640b30a6f5ee90ba +db06b26df2f4f266629930b5820a3c3985ccd38b22b3aaa4840a3f87629977d6a73faf6016d385 +cae79d096a9b4b25a52e55ab9f5473d1bc56a6edf9eab5b2f24c630d1893e9f0c710665eab9529 +4cbf687e3d1693e39bb92af513a6c4ba39990073b7fa77aaebe44d67a57d65baa94d17afee894d +17d13dd1d3b183e956a73aab7e7077d321633a9779270b4bcf9419c759db8d235aaafc64f23e8e +89cfa398a1184a88d93e437ec43c14132a22e2c601a1ce07dd1a3bc7a992869c9fb35164d8b943 +6c99a7aa6eeb797794d6e5a0905168c0296603a77a94ef83d0f1ec68e622416008ccb567c8e371 +84dc90ba11091d9f87e187610260cce3d364311df21d121f89689bb33a7dd35a550d44695e7bde +d6113d99fad92c0661757957c821aeffd31436b37c2fc5827aae10863bc65d50eb2ed9d4a38450 +b727113bb63d446c53d92337c7dd8d5f67b7baf5153c81c2a44a17352cc1ab1eb368bb8beeb690 +a6bc2af030a04cce7f83e0f61df4b6415f07e8f256c346ff98760a1a1589f6944ca230eafbe84e +8d5480c24eaa7e595ad952a50beb97224fdfc8caba9289ba92105469e89e8cbe9bc66433666112 +fbba3ce9284fbd621b308c778ba4807e2df24c85ea792ce0cc27280c08f4ee0518cd6838433ea7 +d80e621e304e9e5ea8e0807a3c379be8fde5cab1a078d0ab275c46f8ae5e1dec122d22a357265c +eaf411fbe8f521915a65a2ce8c93e55506d6ae8ba6d5f21cf62fd3ea1b1a3645b2811a56da5e78 +446ce36990018f6ef03cccd8de783a728da741063cb6c1c3d4d56b7d4f407b1b50a30c807c0b50 +10a1f37804a04619009d0d2021c2d1618f00d42803a0bb05e832c3dc230035ca002836801a6d7f +52760035ca00e86d013adc7d24291ae57e279555f63a51896ef685973ec610d97abf86f5b86d88 +f4991a62446c4fe0d841946a438c848344180924dc59e4c296ce4cef4f6d88da7e26863698aef9 +e08de47bb67262737758e70fece55460cc21fa7ff546632a07f446bce365dfef8d78c7bb0fe08d +f8d0deb80b78006fdc053c8037ee021ec01b77010fe08dbb800f7ba3868780f5a5e66ba7ced81c +3557b52a926b386466b2b5b407f6e7d0f690874e3e7a6c9874cbb2dd7659f65c5d96c738b07d07 +f199c7e17e147a70ec9c11b8245127b44341a3103fbdcb66dd1d8fc5bd0e1e3459736bfeaa159a +17a396395cdafb43360d48e0f81451378e11e3b1873c970844036f16bb3316b90efb307e0dc892 +4e767929e3fc7aa9e4aba5bee7df1599d5965d50c8a45a6bb13bc5ce914d8f60aac546523086c3 +6feace28b878f9e9af77322f64b52d3afe4c456787b120918f6143c73662b398237f16f8681607 +a117c4ccf56cfef4a29b77aa57dd1fcb44c1748dc2fbc6cde7bf08efb06cbb6bb6eb229755b52c +4ba97608779e29e19c128f78314521c61e104e29f2fd50c06028f3b0270413f4e9096f8bec7c59 +decbf9374e748f329b300a5d27026d070e85a4bd38423e090314db1111b113738ebdb5d9b4450e +bb238c6e5f8ff9fcf1ef7375f4f9e33f07b018f3183f5f8ef36e4a837a7cdf7348207ce46306be +197a2eac5587a39853c6025fcc021a69f53498dd550f54eea79ea67e2b5553e7e6432fb60701ad +92c21c9a31713927e3aed0ab64335a4dfd85ce1f9e85fa35695ead8c4cfa5d3e30558d96661fba +09d1b98f5fb64fff050000ffff0300504b030414000600080000002100d5d192f1bc0000003701 +00002c0000007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f75 +74352e786d6c2e72656c738ccfbd0ac2301007f05df01dc2ed26ad8388347511c1c145f4018ee4 +da06db24e4a2e8db9bd18283e37dfdfe5cb37f4da378526217bc865a5620c89b609def35dcaec7 +d5160467f416c7e049c39b18f6ed72d15c68c45c8e78709145513c6b18728e3ba5d80c3421cb10 +c9974917d284b994a95711cd1d7b52ebaadaa8f46d403b33c5c96a48275b83b8be23fd6387ae73 +860ec13c26f2f94784e2d1593a23674a85c5d453d620e5777fb654cb1201aa6dd4ecddf6030000 +ffff0300504b03041400060008000000210068b9a05cc3060000c9200000140000007070742f74 +68656d652f7468656d65312e786d6cec59cd8b1b3714bf17fa3f0c7377fc35e38f25de608fed6c +92dd64899d941ce5b13ca3b566642479774d0894e4d44ba190965e0abdf5504a030d34f4d23f66 +21a14dff884a1adb33b235dd7c6c42a0eb055bd2fcded34fef3d3dbdd55cbd761a61eb18528648 +dcb2cb574ab605639f8c511cb4ec7bc37ea1615b8c83780c308961cb5e40665fdbfdfcb3ab6087 +87308296908fd90e68d921e7b39d6291f96218b02b640663f16c426804b8e8d2a038a6e044e88d +70b1522ad58a1140b16dc520126aef4c26c887f6ee4a6d0f8baf983339e0633a904ae136763c2d +cb1fb6601ea6d631c02d5bcc3026274378ca6d0b03c6c583965d521fbbb87bb5b816c23c473623 +d7579fa5dc52603cad28391a8cd6828ee33ab5f65abf0260be8debd57bb55e6dad4f0180ef8b95 +265c749df58ae72cb11950d234e8eed6bbd5b286cfe8af6ee1dbaefcd3f00a94349d2d7cbfefa5 +36cc8092a6bb85773bcd4e57d7af4049b3b685af97da5da7aee11528c4289e6ea14b6eadeaad56 +bb864c08de33c29baed3af5796f01455cc4457221ff3bc588bc011a17d0150ce051cc5165fcce0 +04f802e7018c461459fb280845e0cd404c98182e554afd52557ccb3f47b59447c10e0419e964c8 +675b43928fc57c8a66bc65df145aed0ce4e58b17678f9f9f3dfefdecc993b3c7bf2ee7de96db03 +7190957bfdd337fffcf0a5f5f76f3fbe7efaad19cfb2f857bf7cf5ea8f3fff4b3dd7687df7ecd5 +f3672fbffffaaf9f9f1ae06d0a4659f810459059b7e18975974462818609e088be9dc43004282b +d18e03066220650ce81e0f35f4ed05c0c080eb40dd8ef7a9481726e0f5f991467810d2394706e0 +ad30d2800784e00ea1c635dd927365ad308f03f3e4749ec5dd05e0d834b7b7e1e5de7c26e21e99 +547a21d4681e62e17210c018724b3e2353080d620f10d2ec7a807c4a189970eb01b23a00194d32 +44232d9a52a13d1409bf2c4c0485bf35db1cdcb73a049bd477e1b18e147b0360934a8835335e07 +730e22236310e12c721ff0d04472b0a0be6670c685a7038889d51b43c64c3277e842a37b4ba419 +b3db0ff022d29194a3a909b90f08c922bb64ea85209a1939a338cc626fb0a90851601d126e2441 +f41d22fbc20f20ce75f77d0435779fbfb7ef8934640e10f9644e4d5b02127d3f2ef0044093f236 +8db414dba6c8181d9d79a085f63e84189c803184d6bd1b263c9969364f49df0c4556d98326dbdc +047aacca7e0c19b4547163702c625ac80e604072f81c2c3612cf02c411a0799a6f4ff590e989a3 +2e32c62bf6a75a2a45546e5a33893b2cd2d697abf530045a58c93e33c7eb826afe7b933d26648e +de4106beb58c48ec6f6c9b21c0da0469c00c81a8324ce9568868ee4f45e476526273a3dc44dfb4 +a91b8a1b454f84e2732ba08ddac7fd38b5cf07ab7a2ebedec94b299b554e1e6eb3b6f1081da34f +bfb4e982797c08c5697259d95c5636ffc7ca266f3f5fd63397f5cc653df3d1ea99b484511741ab +eb1ea525cabdfb99208c077c81e13e53c50f137b7fdc1783aaa384d6574db3503497d369b88002 +d5b628e15f201e0e423013d394d50c015baa0e9835234c944f6ad8a85b955ff3e8808c93d17279 +75bb2904004fc745f9b51a17c51a4f466bf5f41a6fad5ef50275ddba222065df864466329d44d5 +40a2be1a3c87845ad985b0681a5834a4fa5c16ea67e915713859405e89bb4ec248849b08e9b1f4 +5322bff2ee857b3acf98fab22b86e53525d78bf1b44622136e3a894c1886e2f0d81cbe605f3753 +976af4a429b669d41b1fc2d732896ce4061ceb3deb44ecb9aa2bd4f860d6b227e21f27d18c6642 +1f93990ae0206ed93e5f1afa5d32cb8c32de052c4c60ea51b2fe0871482d8c2211eb5937e038e5 +56aed4e51a3f5172cdd2a76739f59375329c4ca0cf7346d2ae789628313e7d4fb0ec90b9203d08 +c727d608cfe95d200ce5d6cbd28063c4f8da9a634433c19d5a71235d2db7a2f6d625dda200cf42 +b03c51b2c93c81abf69a4e661d8ae9e6aaf4fe7231a3403ae9bd4fddf385369266ce01224f4d73 +fef870877c86559af7355649eadecc75cd55aecb3b25deff40c8504b27d3a849c6066a7967c705 +160499e9d6a19977465cf469b019b5f28058d595aab7f57a9b8c8e44e47745b53ac79c251764a7 +a2fcf6562f26934ca04657d9e5945b738a5af6c392db76bc8aeb154a0db75770aa4ea9d070dbd5 +42db75abe59e5b2e753b9547c2283c8cca6e32775ffcb38f17cbf7f66a7cebdd7db42ab5aff824 +2a1255071795b07a775fae18dedd5b43f9dcb690b0ccc35aa5dfac363bb542b3daee179c6ea751 +687ab54ea15bf3eadd7ed7731bcdfe23db3a5660a75df59c5aaf51a8953dafe0d44a927ea359a8 +3b954adba9b71b3da7fd68696bb1f2d5efcabc8ad7eebf000000ffff0300504b03040a00000000 +000000210015e9f115040900000409000017000000646f6350726f70732f7468756d626e61696c +2e6a706567ffd8ffe000104a46494600010101006000600000ffdb004300030202030202030303 +0304030304050805050404050a070706080c0a0c0c0b0a0b0b0d0e12100d0e110e0b0b10161011 +13141515150c0f171816141812141514ffdb00430103040405040509050509140d0b0d14141414 +141414141414141414141414141414141414141414141414141414141414141414141414141414 +14141414141414ffc00011080090010003012200021101031101ffc4001f000001050101010101 +0100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000 +017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282 +090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465 +666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aa +b2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2 +f3f4f5f6f7f8f9faffc4001f010003010101010101010101000000000000010203040506070809 +0a0bffc400b5110002010204040304070504040001027700010203110405213106124151076171 +1322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a353637 +38393a434445464748494a535455565758595a636465666768696a737475767778797a82838485 +868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8 +c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c030100021103 +11003f00fd53a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a2 +8a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800 +a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a28 +00a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a +2800a28a2800a28a2800a28a2800a2b83f03fc61d17c6be2af11f86637fb26bba2ddcb04969230 +ccd1ab6d12a7a8e991d54fb104f795ad4a73a52e59ab322338cd5e2ee145145645851451400514 +514005145140051451400514514005145140051451400d7758d19dd82aa8c96638007ad53fedcd +37fe8216bff7f97fc6b13e2b7fc92ff187fd81af3ff443d7e52d7d2e5393acd23393a9cbcb6e97 +fd51e4e3b1ff0053715cb7bf99faebfdb9a6ff00d042d7feff002ff8d1fdb9a6ff00d042d7feff +002ff8d7e45515ef7faa6bfe7fff00e4bff04f33fb6dff00cfbfc7fe01faebfdb9a6ff00d042d7 +feff002ff8d1fdb9a6ff00d042d7feff002ff8d7e455147faa6bfe7fff00e4bff043fb6dff00cf +bfc7fe01faebfdb9a6ff00d042d7feff002ff8d1fdb9a6ff00d042d7feff002ff8d7e455147faa +6bfe7fff00e4bff043fb6dff00cfbfc7fe01faebfdb9a6ff00d042d7feff002ff8d1fdb9a6ff00 +d042d7feff002ff8d7e455147faa6bfe7fff00e4bff043fb6dff00cfbfc7fe01faebfdb9a6ff00 +d042d7feff002ff8d1fdb9a6ff00d042d7feff002ff8d7e455147faa6bfe7fff00e4bff043fb6d +ff00cfbfc7fe01faebfdb9a6ff00d042d7feff002ff8d1fdb9a6ff00d042d7feff002ff8d7e455 +147faa6bfe7fff00e4bff043fb6dff00cfbfc7fe01e95f15bc497de1cf8fde28d6745be7b4bdb6 +d627960bab76e41de7f0208e08e84120f15f6bfecf3fb4369df19b46fb2dd79763e29b4406eac8 +1c2cabd3cd8b3d54f71d549c1e304fe6f568787fc41a8f85b59b4d5b49bb92c751b490490dc447 +0cadfd41e841e08241af7f1f93d3c6e1a34ef69c5593f4efe5f91e661b1f3c3d573fb2dea8fd73 +a2bc77f679fda1b4ef8cda37d96ebcbb1f14da20375640e1655e9e6c59eaa7b8eaa4e0f1827d8a +bf25c461ea616a3a5555a48fb7a75215a0a70774c28a28ae7350a28a2800a28a2800a28a2800a2 +8a2800a28a2800a28a280396f8adff0024bfc61ff606bcff00d10f5f94b5fab5f1514b7c30f178 +0324e8f78001ff005c1ebf2afec73ffcf093fef835fa370ab4a955bf747ca6757e787a321a2a6f +b1cfff003c24ff00be0d1f639ffe7849ff007c1afbbe65dcf9bb321a2a6fb1cfff003c24ff00be +0d1f639ffe7849ff007c1a399770b321a2a6fb1cff00f3c24ffbe0d1f639ff00e7849ff7c1a399 +770b321a2a6fb1cfff003c24ff00be0d1f639ffe7849ff007c1a399770b321a2a6fb1cff00f3c2 +4ffbe0d1f639ff00e7849ff7c1a399770b321a2a6fb1cfff003c24ff00be0d1f639ffe7849ff00 +7c1a399770b321a29594ab1041047506b57c2be15d57c6dafd9e8ba2d9c97da8dd3ec8e18ff524 +f40a07249e00144a518c5ca4ec9028b93b2dcd0f86b6be25bcf1c6911f8405c7fc245e7036ad6c +70cac3a927a05c677678c673c57ea7e86ba8268d62bab3dbcbaa08505d3daa9588cb81b8a03ced +ce719af38f809f0134bf82ba0607977de21ba41f6dd436fe3e5c79e4203f8b1193d80f55afc8f3 +ccca9e61592a51f763d7abff0081d8fb9cbb092c2d37cef57d3b0514515f347ac1451450014514 +500145145001451450014514500145145001451450014514500145145001451450014514500145 +14500145145007e67fc50f0aeabe36fda23c55a2e8b6725f6a375ac5c2470c7fef9c927a050392 +4f000afb6fe027c04d2fe0ae8181e5df7886e907db750dbf8f971e79080fe2c464f603a3f067c2 +bd13c13e20f106bb6b0f9daceb77725cdcde4a06f0acdb8449fdd51c7d4f27b01d957d26639c4f +154a186a5a42295fcda5f97fc39e4e17031a339559eb26dfc828a28af9b3d60a28a2800a28a280 +0a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2 +800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28 +a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a +28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a280 +0a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2800a28a2 +800a28a2800a28a2803fffd9504b030414000600080000002100a364236b8d0100003203000011 +0000007070742f7072657350726f70732e786d6cacd2516fdb201000e0f749fb0f16ef0430368e +ad38951d1c69d21ea6aafd01c8c6099a310848dba9ea7f1f73d22add34a99af6742074c777709b +9b273d250fd27965e61a901506899c7b33a8f95083fbbb3d5c83c407310f6232b3acc10fe9c1cd +f6f3a78dadac935ece418498facd25b1d0ec2b51836308b642c8f747a9855f192be778361aa745 +885b774083138ff1023da1146386b45033b8e4bb8fe49b7154bde4a63fe908381771725a24fea8 +ac7fad663f52edba8f77a46d6c523e85af3e5c56c9c9a91a3c7705db7565d64086e90e66244b61 +5b762d649cd00263829bb478f9954db26a50be176ef8a2c54176830a5c04f18a23d91f3cad7a67 +bc19c3aa37fad227b2e6513a6bd4d22ac197f77a10530d3040db0d5a70ef8d9c9206b3b48145b9 +6e6046d312362de7b06d9b75ce588a7382df8c7214a7292c466ed57fe4d1b460c5df887b9e77fb +a6e11077bb0e6639ed60b9a60466ac4d69dbc540b33331affaa370e1ce89fe7b9c9b5b39b6c2cb +e10d9aff0b34bd86926be4392edf8e7e1ff3ed4f000000ffff0300504b03041400060008000000 +2100d8fd8d8fac000000b6000000130000007070742f7461626c655374796c65732e786d6c0ccc +490e82301840e1bd897768fe7d2d43512414c2202b77ea012a9421e94068a312e3dd65f9f2922f +cd3f4aa29758ec643403ffe00112ba35dda407068f7b836340d671dd7169b460b00a0b79b6dfa5 +3c714f7973ab1457ebd0a6689b7006a3737342886d47a1b83d9859e8edf56651dc6db90ca45bf8 +7bd3952481e71d89e29306d4899ec137aa8220a2b4c0a7cbe5886948035c7a34c67154d6d5b9a9 +fd2a2c7e40b23f000000ffff0300504b0304140006000800000021006720e9636d010000c60200 +00110000007070742f7669657750726f70732e786d6c8c52c96ec23010bd57ea3f58be978434a4 +3422e152950b874ad0de2dc7492c39b6e5314bf8fa4e365ac485db2c6fdebc5956eb73a3c85138 +904667743e0b29119a9b42ea2aa3dffbcf972525e0992e98325a64b41540d7f9f3d3caa647294e +5f8e2081869465b4f6dea64100bc160d8399b14263ae34ae611e5d5705856327246e5410856112 +344c6a3ad6bb47ea4d594a2e3e0c3f3442fb81c409c53c8a875a5a98d8ec236cd609409abefa46 +528ec3e90ea87efa113b1fb1de38516c45e9095c70558b240a69f03fb737b64fbdc749d2a7827b +1e50b2107f2edfa962f0086866f766e3649151bc02d4e6b4392018b0572f898fc023733bce9498 +e2d039f98aa5702678c345440952ccc35e0246dbfb6870adb2a971b2929a9c331a23a6cd68148f +90b16107aa3a255bf0579b60192e0ff76cdc85126b5066341fc69e207df075194f2dff483af2eb +e4839cdbbd54b8869d651cbf857094f686d7c14fe4ed640e8cc30be6bf000000ffff0300504b03 +04140006000800000021007749ef2667010000b202000011000801646f6350726f70732f636f72 +652e786d6c20a2040128a000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000008c92d14e +c2301486ef4d7c87a5d76edd980a59b692a8e18248422246e35dd31e46e3d62e6d61f03ebe892f +6637d800e5c2cbe6ffce97d3bf4dc7dbb2f036a08d5032435110220f24535cc83c43af8b893f42 +9eb154725a280919da814163727d95b22a614ac35cab0ab415603c67922661558656d65609c686 +ada0a426708474e152e9925a77d439ae28fba439e04118dee3122ce5d452dc08fdaa37a28392b3 +5e59ad75d10a38c3504009d21a1c05113eb21674692e0eb4c909590abbabe022da853dbd35a207 +ebba0eeab845ddfe117e9f3dbfb457f5856cba628048ca5962852d80cc550d7aae84b4fe5c7f7f +19b732b5aeed14f74803330dd42a4da66b99df78d37521e81ee982a6f1821a3b738fb314c01f76 +bfd8bf7933a261239ac7258396e88fe9a1a9bd1fb8e76e98ecfbe892b7f8f1693141641046233f +8cfde87e110e93284eee861fcd6a67f347617958e0ffc6db241a9d183b0169373eff65e4070000 +ffff0300504b030414000600080000002100e329ddaa0f0200000705000010000801646f635072 +6f70732f6170702e786d6c20a2040128a000010000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000a454c16edb300cbd0fd83f18be274eba2d180245459720c8a1590dc44dcf8a45dbc414c990 +b8b4ddf7ec4ff66393e5da4dd6a040579f1ec9e727fa9132bb7cd8abe800d6a1d1b3783c1cc511 +e8dc48d4e52cbecd9683af71e448682994d1308b1fc1c597fce307965a53832504177909ed6671 +45544f93c4e515ec851bfab2f695c2d8bd201fda32314581392c4cfe730f9a928bd16892c00381 +962007752f18b78ad303fdafa83479d39fdb668fb5d7e32c332454867be023963c07ecce58e99a +5c0bd8555d2bcc057937f81a736b9c2928ba094744a9b9079b1ad4c49263a2f7029c3f3b44cbd0 +1aff660169874ab2e44c95a5c28ad28aba0a871f456ca35082e363963c21f6dd10045a0bd80aa5 +04fd54f5e99398add77385752874906d72a160ee0de185500ebc749f602b10cdb05381d6330f34 +3d404ec6460e7ff9714fe268271c3436cee283b02834c52dad0d0256b523cbb760ef9b5112449b +bcb25890b07eb62ce919011ebf788cf133ff14081ebc4a6cb516e0b07c8bf8f80de24ba3d08f0c +09d4fb4f084130d5e353bb332405eea6f00b4067dcff72ec7ee8a1f5be6de7caeb9fb4d7a3b950 +b8b3f85a2dbac6b2a2b38c76dbcf969e6fc020b57f7ef76bfdc2a4ee73fff9c06bd43fdc6d9d99 +8520e896f134c93695b020fd7dee97b54fb09577c2aa863faf842e41769c9785e62a6fdbff1a1f +4f8623ff845bdbe59a7bd9fd70f85f000000ffff0300504b01022d0014000600080000002100df +cc18f5ad010000460c00001300000000000000000000000000000000005b436f6e74656e745f54 +797065735d2e786d6c504b01022d001400060008000000210068f874a103010000e20200000b00 +000000000000000000000000e60300005f72656c732f2e72656c73504b01022d00140006000800 +00002100635c23b4c00000003701000020000000000000000000000000001a0700007070742f73 +6c696465732f5f72656c732f736c696465312e786d6c2e72656c73504b01022d00140006000800 +000021001b2e35070c010000d00300001f00000000000000000000000000180800007070742f5f +72656c732f70726573656e746174696f6e2e786d6c2e72656c73504b01022d0014000600080000 +002100bcd1a735de0200002c0e00001400000000000000000000000000690a00007070742f7072 +6573656e746174696f6e2e786d6c504b01022d0014000600080000002100303a84e5ea0200006c +0600001500000000000000000000000000790d00007070742f736c696465732f736c696465312e +786d6c504b01022d0014000600080000002100d5d192f1bc000000370100002c00000000000000 +000000000000961000007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c +61796f7574362e786d6c2e72656c73504b01022d0014000600080000002100d5d192f1bc000000 +370100002c000000000000000000000000009c1100007070742f736c6964654c61796f7574732f +5f72656c732f736c6964654c61796f7574372e786d6c2e72656c73504b01022d00140006000800 +00002100d5d192f1bc000000370100002c00000000000000000000000000a21200007070742f73 +6c6964654c61796f7574732f5f72656c732f736c6964654c61796f7574392e786d6c2e72656c73 +504b01022d0014000600080000002100d5d192f1bc000000370100002d00000000000000000000 +000000a81300007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f +757431302e786d6c2e72656c73504b01022d0014000600080000002100d5d192f1bc0000003701 +00002c00000000000000000000000000af1400007070742f736c6964654c61796f7574732f5f72 +656c732f736c6964654c61796f7574382e786d6c2e72656c73504b01022d001400060008000000 +2100d5d192f1bc000000370100002d00000000000000000000000000b51500007070742f736c69 +64654c61796f7574732f5f72656c732f736c6964654c61796f757431312e786d6c2e72656c7350 +4b01022d0014000600080000002100d5d192f1bc000000370100002c0000000000000000000000 +0000bc1600007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f75 +74312e786d6c2e72656c73504b01022d0014000600080000002100d5d192f1bc00000037010000 +2c00000000000000000000000000c21700007070742f736c6964654c61796f7574732f5f72656c +732f736c6964654c61796f7574322e786d6c2e72656c73504b01022d0014000600080000002100 +d5d192f1bc000000370100002c00000000000000000000000000c81800007070742f736c696465 +4c61796f7574732f5f72656c732f736c6964654c61796f7574332e786d6c2e72656c73504b0102 +2d0014000600080000002100d5d192f1bc000000370100002c00000000000000000000000000ce +1900007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f7574342e +786d6c2e72656c73504b01022d001400060008000000210069a25f2115010000c70700002c0000 +0000000000000000000000d41a00007070742f736c6964654d6173746572732f5f72656c732f73 +6c6964654d6173746572312e786d6c2e72656c73504b01022d0014000600080000002100e40b4c +2ac6040000891000002200000000000000000000000000331c00007070742f736c6964654c6179 +6f7574732f736c6964654c61796f757431312e786d6c504b01022d0014000600080000002100ee +0bf3bf90040000a70f00002200000000000000000000000000392100007070742f736c6964654c +61796f7574732f736c6964654c61796f757431302e786d6c504b01022d00140006000800000021 +005a9d379569050000671500002100000000000000000000000000092600007070742f736c6964 +654c61796f7574732f736c6964654c61796f7574332e786d6c504b01022d001400060008000000 +21008f55c3fd730400006b0f00002100000000000000000000000000b12b00007070742f736c69 +64654c61796f7574732f736c6964654c61796f7574322e786d6c504b01022d0014000600080000 +0021007555dfd224050000701200002100000000000000000000000000633000007070742f736c +6964654c61796f7574732f736c6964654c61796f7574312e786d6c504b01022d00140006000800 +00002100fd00fcd1320800004e3600002100000000000000000000000000c63500007070742f73 +6c6964654d6173746572732f736c6964654d6173746572312e786d6c504b01022d001400060008 +00000021009119fff8d4040000951300002100000000000000000000000000373e00007070742f +736c6964654c61796f7574732f736c6964654c61796f7574342e786d6c504b01022d0014000600 +080000002100d60634cc2e060000371f000021000000000000000000000000004a430000707074 +2f736c6964654c61796f7574732f736c6964654c61796f7574352e786d6c504b01022d00140006 +00080000002100ccacc02fe8030000060c00002100000000000000000000000000b74900007070 +742f736c6964654c61796f7574732f736c6964654c61796f7574362e786d6c504b01022d001400 +06000800000021005632cb5c8e030000fa0900002100000000000000000000000000de4d000070 +70742f736c6964654c61796f7574732f736c6964654c61796f7574372e786d6c504b01022d0014 +0006000800000021004ba90907dd050000651700002100000000000000000000000000ab510000 +7070742f736c6964654c61796f7574732f736c6964654c61796f7574382e786d6c504b01022d00 +140006000800000021004a0963b7a1050000201700002100000000000000000000000000c75700 +007070742f736c6964654c61796f7574732f736c6964654c61796f7574392e786d6c504b01022d +0014000600080000002100d5d192f1bc000000370100002c00000000000000000000000000a75d +00007070742f736c6964654c61796f7574732f5f72656c732f736c6964654c61796f7574352e78 +6d6c2e72656c73504b01022d001400060008000000210068b9a05cc3060000c920000014000000 +00000000000000000000ad5e00007070742f7468656d652f7468656d65312e786d6c504b01022d +000a00000000000000210015e9f11504090000040900001700000000000000000000000000a265 +0000646f6350726f70732f7468756d626e61696c2e6a706567504b01022d001400060008000000 +2100a364236b8d010000320300001100000000000000000000000000db6e00007070742f707265 +7350726f70732e786d6c504b01022d0014000600080000002100d8fd8d8fac000000b600000013 +00000000000000000000000000977000007070742f7461626c655374796c65732e786d6c504b01 +022d00140006000800000021006720e9636d010000c60200001100000000000000000000000000 +747100007070742f7669657750726f70732e786d6c504b01022d00140006000800000021007749 +ef2667010000b2020000110000000000000000000000000010730000646f6350726f70732f636f +72652e786d6c504b01022d0014000600080000002100e329ddaa0f020000070500001000000000 +000000000000000000ae750000646f6350726f70732f6170702e786d6c504b0506000000002500 +25004d0b0000f37800000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000002004f006c00650050007200650073003000300030000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000001800020103 +00000005000000ffffffff00000000000000000000000000000000000000000000000000000000 +000000000000000003000000fc010000000000005200690063006800450064006900740046006c +006100670073000000000000000000000000000000000000000000000000000000000000000000 +0000000000001c000200ffffffffffffffffffffffff0000000000000000000000000000000000 +000000000000000000000000000000000000000b0000000c000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000ffffffffffffff +ffffffffff00000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000fa020000040000002f528f00040000002d010400070000 +00fc020100000000000000040000002d010500120000002403070065026a03e4086a03e408af02 +5a0a2504e4089b05e408e0046502e004040000002d010200040000002d01030004000000f00104 +00040000002701ffff040000002c010000070000001604cf08a80f00000000030000001e000400 +00002c010000040000002701ffff0300000000000000000000000000000000000000000000004e +414e49000000000000000001000008000000000100000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000 +01050000 +05000000 +0d000000 +4d45544146494c455049435400 +0a450000 +28d9ffff +c2010000 +08000a45d8260000 +010009000003dd00000006001200000000000400000003010800050000000b0200000000050000 +000c02cf08a80f030000001e0007000000fc020000ffffff000000040000002d01000008000000 +fa02050000000000ffffff00040000002d0101000e00000024030500ffffffffffffcf08a80fcf +08a80fffffffffffff08000000fa0200000000000000000000040000002d01020007000000fc02 +0000ffffff000000040000002d01030004000000f001000007000000fc0200004472c400000004 +0000002d0100000400000006010100040000002d010100120000002403070065026a03e4086a03 +e408af025a0a2504e4089b05e408e0046502e004040000002d0102000400000006010100040000 +002d01030008000000fa020000040000002f528f00040000002d01040007000000fc0201000000 +00000000040000002d010500120000002403070065026a03e4086a03e408af025a0a2504e4089b +05e408e0046502e004040000002d010200040000002d01030004000000f0010400040000002701 +ffff040000002c010000070000001604cf08a80f00000000030000001e00040000002c01000004 +0000002701ffff030000000000 +}{\result{\pict\wmetafile8\picw10020\pich5638\picwgoal10020\pichgoal5638 +010009000003dd00000006001200000000000400000003010800050000000b0200000000050000 +000c02cf08a80f030000001e0007000000fc020000ffffff000000040000002d01000008000000 +fa02050000000000ffffff00040000002d0101000e00000024030500ffffffffffffcf08a80fcf +08a80fffffffffffff08000000fa0200000000000000000000040000002d01020007000000fc02 +0000ffffff000000040000002d01030004000000f001000007000000fc0200004472c400000004 +0000002d0100000400000006010100040000002d010100120000002403070065026a03e4086a03 +e408af025a0a2504e4089b05e408e0046502e004040000002d0102000400000006010100040000 +002d01030008000000fa020000040000002f528f00040000002d01040007000000fc0201000000 +00000000040000002d010500120000002403070065026a03e4086a03e408af025a0a2504e4089b +05e408e0046502e004040000002d010200040000002d01030004000000f0010400040000002701 +ffff040000002c010000070000001604cf08a80f00000000030000001e00040000002c01000004 +0000002701ffff030000000000 +}}} \ No newline at end of file diff --git a/sw/qa/extras/htmlimport/data/ole2.png b/sw/qa/extras/htmlimport/data/ole2.png new file mode 100644 index 0000000000..fdad35484e Binary files /dev/null and b/sw/qa/extras/htmlimport/data/ole2.png differ diff --git a/sw/qa/extras/htmlimport/data/ole2.svg b/sw/qa/extras/htmlimport/data/ole2.svg new file mode 100644 index 0000000000..552a1cf5af --- /dev/null +++ b/sw/qa/extras/htmlimport/data/ole2.svg @@ -0,0 +1,3 @@ + + + diff --git a/sw/qa/extras/htmlimport/data/outline-level.html b/sw/qa/extras/htmlimport/data/outline-level.html new file mode 100644 index 0000000000..cd36fc3c1b --- /dev/null +++ b/sw/qa/extras/htmlimport/data/outline-level.html @@ -0,0 +1,5 @@ + + +

heading

+ + diff --git a/sw/qa/extras/htmlimport/data/picture.html b/sw/qa/extras/htmlimport/data/picture.html new file mode 100644 index 0000000000..53f0c6441b --- /dev/null +++ b/sw/qa/extras/htmlimport/data/picture.html @@ -0,0 +1,20 @@ + + + +
+

+ This document should contain two links. (Edit -> Links...) +

+

+ + + +

+

+ + + +

+
+ + diff --git a/sw/qa/extras/htmlimport/data/reqif-br.xhtml b/sw/qa/extras/htmlimport/data/reqif-br.xhtml new file mode 100644 index 0000000000..aeb4ecae6b --- /dev/null +++ b/sw/qa/extras/htmlimport/data/reqif-br.xhtml @@ -0,0 +1 @@ +aaabbb diff --git a/sw/qa/extras/htmlimport/data/reqif-page-style.xhtml b/sw/qa/extras/htmlimport/data/reqif-page-style.xhtml new file mode 100644 index 0000000000..36f5aa1176 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/reqif-page-style.xhtml @@ -0,0 +1 @@ +aaabbb diff --git a/sw/qa/extras/htmlimport/data/reqif-table.xhtml b/sw/qa/extras/htmlimport/data/reqif-table.xhtml new file mode 100644 index 0000000000..a169a079e2 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/reqif-table.xhtml @@ -0,0 +1,79 @@ +Before. + + + + + + + + + + + + +Table 2. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Table 3. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +After. + diff --git a/sw/qa/extras/htmlimport/data/table_border_1px.html b/sw/qa/extras/htmlimport/data/table_border_1px.html new file mode 100644 index 0000000000..6181aa0f82 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/table_border_1px.html @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + +
SchlΓΌsselName_des_Tests3
Γ–ffnen der "Document Type" MaskeAF01.013
Γ–ffnen der "Document Type" MaskeΓ–ffnen der "Document Type" Maske3
Γ–ffnen der "Document Type" MaskeΓ–ffnen der "Document Type" Maske3
\ No newline at end of file diff --git a/sw/qa/extras/htmlimport/data/tdf118579.html b/sw/qa/extras/htmlimport/data/tdf118579.html new file mode 100644 index 0000000000..41613fb8e5 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/tdf118579.html @@ -0,0 +1,67 @@ + + +
+
PUBBLICI ESERCIZI MINORI
+
+
+
+
+
+
+
+
+
+ + + + + + + + +
Percorso Anno I
UnitΓ  di CompetenzaTeoricaOn The JobOre Totali
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Riepilogo
InternaEsternaInterna / Esterna
AnnoTeoricaOn the jobAnnoTeoricaOn the jobAnnoTeoricaOn the job
0
Totali48Totali00Totali00
Totali Complessivi12Totali Complessivi0Totali Complessivi0
diff --git a/sw/qa/extras/htmlimport/data/tdf122789.html b/sw/qa/extras/htmlimport/data/tdf122789.html new file mode 100644 index 0000000000..7ee6552013 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/tdf122789.html @@ -0,0 +1,7 @@ + + + + + +

Pic

+ diff --git a/sw/qa/extras/htmlimport/data/tdf142781.html b/sw/qa/extras/htmlimport/data/tdf142781.html new file mode 100644 index 0000000000..e7d5459479 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/tdf142781.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/sw/qa/extras/htmlimport/data/tdf153341.html b/sw/qa/extras/htmlimport/data/tdf153341.html new file mode 100644 index 0000000000..dc69feb73b --- /dev/null +++ b/sw/qa/extras/htmlimport/data/tdf153341.html @@ -0,0 +1,13 @@ + + + + + Color test + + +

1) This text is pasted with color

+

2) This text is also pasted with color, but the text pasted has a color which ignores the alpha channel

+

3) This text is pasted without color

+ + + diff --git a/sw/qa/extras/htmlimport/data/tdf154273.html b/sw/qa/extras/htmlimport/data/tdf154273.html new file mode 100644 index 0000000000..6a8b8dc638 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/tdf154273.html @@ -0,0 +1,9 @@ + + + + + + + 'test' + + diff --git a/sw/qa/extras/htmlimport/data/tdf155011.html b/sw/qa/extras/htmlimport/data/tdf155011.html new file mode 100644 index 0000000000..b3bc7845b5 --- /dev/null +++ b/sw/qa/extras/htmlimport/data/tdf155011.html @@ -0,0 +1,31 @@ + + + + + + +
+
+ + + + +
+
+
+ + + + +
+ +
+
+
+
+
+
+
+
+ + \ No newline at end of file diff --git a/sw/qa/extras/htmlimport/data/tdf80194_subscript.html b/sw/qa/extras/htmlimport/data/tdf80194_subscript.html new file mode 100644 index 0000000000..5b00f5dd8d --- /dev/null +++ b/sw/qa/extras/htmlimport/data/tdf80194_subscript.html @@ -0,0 +1,4 @@ + +

Does the subscript go lower than the descent? qp.

+

We want to know about the ascent for a superscripTL also.

+
diff --git a/sw/qa/extras/htmlimport/htmlimport.cxx b/sw/qa/extras/htmlimport/htmlimport.cxx new file mode 100644 index 0000000000..125143d6f5 --- /dev/null +++ b/sw/qa/extras/htmlimport/htmlimport.cxx @@ -0,0 +1,616 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class HtmlImportTest : public SwModelTestBase +{ + public: + HtmlImportTest() : SwModelTestBase("sw/qa/extras/htmlimport/data/", "HTML (StarWriter)") {} +}; + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testPictureImport) +{ + createSwWebDoc("picture.html"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + // The document contains two pictures stored as a link. + sfx2::LinkManager& rLinkManager = pTextDoc->GetDocShell()->GetDoc()->GetEditShell()->GetLinkManager(); + CPPUNIT_ASSERT_EQUAL(size_t(2), rLinkManager.GetLinks().size()); + rLinkManager.Remove(0,2); + CPPUNIT_ASSERT_EQUAL(size_t(0), rLinkManager.GetLinks().size()); + + // TODO: Get the data into clipboard in html format and paste + + // But when pasting we don't want images to be linked. + CPPUNIT_ASSERT_EQUAL(size_t(0), rLinkManager.GetLinks().size()); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testInlinedImage) +{ + createSwWebDoc("inlined_image.html"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + // The document contains only one embedded picture inlined in img's src attribute. + + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SwEditShell* pEditShell = pDoc->GetEditShell(); + CPPUNIT_ASSERT(pEditShell); + + // This was 1 before 3914a711060341345f15b83656457f90095f32d6 + const sfx2::LinkManager& rLinkManager = pEditShell->GetLinkManager(); + CPPUNIT_ASSERT_EQUAL(size_t(0), rLinkManager.GetLinks().size()); + + uno::Reference xShape = getShape(1); + uno::Reference const xNamed(xShape, uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT_EQUAL(OUString("Image1"), xNamed->getName()); + + uno::Reference xGraphic = getProperty< uno::Reference >(xShape, "Graphic"); + CPPUNIT_ASSERT(xGraphic.is()); + CPPUNIT_ASSERT(xGraphic->getType() != graphic::GraphicType::EMPTY); + + for (SwNodeOffset n(0); ; n++) + { + SwNode* pNode = pDoc->GetNodes()[ n ]; + if (SwGrfNode *pGrfNode = pNode->GetGrfNode()) + { + // FIXME? For some reason without the fix in 72703173066a2db5c977d422ace + // I was getting GraphicType::NONE from SwEditShell::GetGraphicType() when + // running LibreOffice but cannot reproduce that in a unit test here. :-( + // So, this does not really test anything. + CPPUNIT_ASSERT(pGrfNode->GetGrfObj().GetType() != GraphicType::NONE); + break; + } + } +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testInlinedImagesPageAndParagraph) +{ + createSwWebDoc("PageAndParagraphFilled.html"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + + // The document contains embedded pictures inlined for PageBackground and + // ParagraphBackground, check for their existence after import + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SwEditShell* pEditShell = pDoc->GetEditShell(); + CPPUNIT_ASSERT(pEditShell); + + // images are not linked, check for zero links + const sfx2::LinkManager& rLinkManager = pEditShell->GetLinkManager(); + CPPUNIT_ASSERT_EQUAL(size_t(0), rLinkManager.GetLinks().size()); + + // get the pageStyle where the PageBackgroundFill is defined. Caution: for + // HTML mode this is *not* called 'Default Style', but 'HTML'. Name is empty + // due to being loaded embedded. BitmapMode is repeat. + uno::Reference xPageProperties1(getStyles("PageStyles")->getByName("HTML"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty(xPageProperties1, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString(), getProperty(xPageProperties1, "FillBitmapName")); + CPPUNIT_ASSERT_EQUAL(drawing::BitmapMode_REPEAT, getProperty(xPageProperties1, "FillBitmapMode")); + + // we should have one paragraph + const int nParagraphs = getParagraphs(); + CPPUNIT_ASSERT_EQUAL(1, nParagraphs); + + if(nParagraphs) + { + // get the paragraph + uno::Reference xPara = getParagraph(1); + uno::Reference< beans::XPropertySet > xParagraphProperties( xPara, uno::UNO_QUERY); + + // check for Bitmap FillStyle, name empty, repeat + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty(xParagraphProperties, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString(), getProperty(xParagraphProperties, "FillBitmapName")); + CPPUNIT_ASSERT_EQUAL(drawing::BitmapMode_REPEAT, getProperty(xParagraphProperties, "FillBitmapMode")); + } +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testListStyleType) +{ + createSwWebDoc("list-style.html"); + // check unnumbered list style - should be type circle here + uno::Reference< beans::XPropertySet > xParagraphProperties(getParagraph(4), + uno::UNO_QUERY); + uno::Reference xLevels( + xParagraphProperties->getPropertyValue("NumberingRules"), uno::UNO_QUERY); + uno::Sequence aProps; + xLevels->getByIndex(0) >>= aProps; // 1st level + + bool bBulletFound=false; + for (beans::PropertyValue const & rProp : std::as_const(aProps)) + { + if (rProp.Name == "BulletChar") + { + // should be 'o'. + CPPUNIT_ASSERT_EQUAL(u"\uE009"_ustr, rProp.Value.get()); + bBulletFound = true; + break; + } + } + CPPUNIT_ASSERT_MESSAGE("no BulletChar property found for para 4", bBulletFound); + + // check numbered list style - should be type lower-alpha here + xParagraphProperties.set(getParagraph(14), + uno::UNO_QUERY); + xLevels.set(xParagraphProperties->getPropertyValue("NumberingRules"), + uno::UNO_QUERY); + xLevels->getByIndex(0) >>= aProps; // 1st level + + for (beans::PropertyValue const & rProp : std::as_const(aProps)) + { + if (rProp.Name == "NumberingType") + { + printf("style is %d\n", rProp.Value.get()); + // is lower-alpha in input, translates into chars_lower_letter here + CPPUNIT_ASSERT_EQUAL(style::NumberingType::CHARS_LOWER_LETTER, + rProp.Value.get()); + return; + } + } + CPPUNIT_FAIL("no NumberingType property found for para 14"); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testMetaIsoDates) +{ + createSwWebDoc("meta-ISO8601-dates.html"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDocShell* pDocShell(pTextDoc->GetDocShell()); + uno::Reference xDocProps; + + CPPUNIT_ASSERT(pDocShell); + uno::Reference xDPS(pDocShell->GetModel(), uno::UNO_QUERY); + xDocProps.set(xDPS->getDocumentProperties()); + + // get the document properties + CPPUNIT_ASSERT(xDocProps.is()); + DateTime aCreated(xDocProps->getCreationDate()); // in the new format + DateTime aModified(xDocProps->getModificationDate()); // in the legacy format (what LibreOffice used to write) + + CPPUNIT_ASSERT_EQUAL(DateTime(Date(7, 5, 2017), tools::Time(12, 34, 3, 921000000)), aCreated); + CPPUNIT_ASSERT_EQUAL(DateTime(Date(8, 5, 2017), tools::Time(12, 47, 0, 386000000)), aModified); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testImageWidthAuto) +{ + createSwWebDoc("image-width-auto.html"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwTextAttr const*const pAttr(pTextDoc->GetDocShell()->GetDoc()->GetEditShell()-> + GetCursor()->GetPointNode().GetTextNode()->GetTextAttrForCharAt(0, RES_TXTATR_FLYCNT)); + CPPUNIT_ASSERT(pAttr); + SwFrameFormat const*const pFmt(pAttr->GetFlyCnt().GetFrameFormat()); + SwFormatFrameSize const& rSize(pFmt->GetFormatAttr(RES_FRM_SIZE)); + CPPUNIT_ASSERT_EQUAL(Size(1835, 560), rSize.GetSize()); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testImageLazyRead) +{ + createSwWebDoc("image-lazy-read.html"); + auto xGraphic = getProperty>(getShape(1), "Graphic"); + Graphic aGraphic(xGraphic); + // This failed, import loaded the graphic, it wasn't lazy-read. + CPPUNIT_ASSERT(!aGraphic.isAvailable()); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testChangedby) +{ + createSwWebDoc("meta-changedby.html"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDocShell* pDocShell(pTextDoc->GetDocShell()); + uno::Reference xDocProps; + + CPPUNIT_ASSERT(pDocShell); + uno::Reference xDPS(pDocShell->GetModel(), uno::UNO_QUERY); + xDocProps.set(xDPS->getDocumentProperties()); + + // get the document properties + CPPUNIT_ASSERT(xDocProps.is()); + + // the doc's property ModifiedBy is set correctly, ... + CPPUNIT_ASSERT_EQUAL(OUString("Blah"), xDocProps->getModifiedBy()); + + uno::Reference xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference xFields(xFieldsAccess->createEnumeration()); + + // ...but there is no comment 'HTML: ' + CPPUNIT_ASSERT(!xFields->hasMoreElements()); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testTableBorder1px) +{ + createSwWebDoc("table_border_1px.html"); + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount()); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + + table::BorderLine2 aBorder; + + uno::Reference xCellA1(xTable->getCellByName("A1"), uno::UNO_QUERY); + aBorder = getProperty(xCellA1, "TopBorder"); + CPPUNIT_ASSERT_MESSAGE("Missing cell top border", aBorder.InnerLineWidth > 0); + aBorder = getProperty(xCellA1, "BottomBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Unexpected cell bottom border", sal_Int16(0), aBorder.InnerLineWidth); + aBorder = getProperty(xCellA1, "LeftBorder"); + CPPUNIT_ASSERT_MESSAGE("Missing cell left border", aBorder.InnerLineWidth > 0); + aBorder = getProperty(xCellA1, "RightBorder"); + CPPUNIT_ASSERT_MESSAGE("Missing cell right border", aBorder.InnerLineWidth > 0); + + uno::Reference xCellB1(xTable->getCellByName("B1"), uno::UNO_QUERY); + aBorder = getProperty(xCellB1, "TopBorder"); + CPPUNIT_ASSERT_MESSAGE("Missing cell top border", aBorder.InnerLineWidth > 0); + aBorder = getProperty(xCellB1, "BottomBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Unexpected cell bottom border", sal_Int16(0), aBorder.InnerLineWidth); + aBorder = getProperty(xCellB1, "LeftBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Unexpected cell left border", sal_Int16(0), aBorder.InnerLineWidth); + aBorder = getProperty(xCellB1, "RightBorder"); + CPPUNIT_ASSERT_MESSAGE("Missing cell right border", aBorder.InnerLineWidth > 0); + + uno::Reference xCellA2(xTable->getCellByName("A2"), uno::UNO_QUERY); + aBorder = getProperty(xCellA2, "TopBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Unexpected cell top border", sal_Int16(0), aBorder.InnerLineWidth); + aBorder = getProperty(xCellA2, "BottomBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Unexpected cell bottom border", sal_Int16(0), aBorder.InnerLineWidth); + aBorder = getProperty(xCellA2, "LeftBorder"); + CPPUNIT_ASSERT_MESSAGE("Missing cell left border", aBorder.InnerLineWidth > 0); + aBorder = getProperty(xCellA2,"RightBorder"); + CPPUNIT_ASSERT_MESSAGE("Missing cell right border", aBorder.InnerLineWidth > 0); + + uno::Reference xCellB2(xTable->getCellByName("B2"), uno::UNO_QUERY); + aBorder = getProperty(xCellB2, "TopBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Unexpected cell top border", sal_Int16(0), aBorder.InnerLineWidth); + aBorder = getProperty(xCellB2, "BottomBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Unexpected cell bottom border", sal_Int16(0), aBorder.InnerLineWidth); + aBorder = getProperty(xCellB2, "LeftBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Unexpected cell left border", sal_Int16(0), aBorder.InnerLineWidth); + aBorder = getProperty(xCellB2, "RightBorder"); + CPPUNIT_ASSERT_MESSAGE("Missing cell right border", aBorder.InnerLineWidth > 0); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testOutlineLevel) +{ + createSwWebDoc("outline-level.html"); + // This was 0, HTML imported into Writer lost the outline numbering for + // Heading 1 styles. + CPPUNIT_ASSERT_EQUAL(static_cast(1), + getProperty(getParagraph(1), "OutlineLevel")); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testReqIfBr) +{ + setImportFilterOptions("xhtmlns=reqif-xhtml"); + setImportFilterName("HTML (StarWriter)"); + createSwDoc("reqif-br.xhtml"); + // was not recognized as a line break from a ReqIf file. + CPPUNIT_ASSERT(getParagraph(1)->getString().startsWith("aaa\nbbb")); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testTdf80194_subscript) +{ + createSwWebDoc("tdf80194_subscript.html"); + uno::Reference xPara = getParagraph(1); + CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.f, getProperty(getRun(xPara, 1), "CharEscapement"), 0); + // Most recently, the default subscript was 33%, which is much too large for a subscript. + // The original 8% (derived from a mathematical calculation) is much better in general, + // and for HTML was a better match when testing with firefox. + // DFLT_ESC_AUTO_SUB was tested, but HTML specs are pretty loose, and generally + // it exceeds the font ascent - so the formula-based-escapement is not appropriate. + CPPUNIT_ASSERT_DOUBLES_EQUAL( -8.f, getProperty(getRun(xPara, 2, "p"), "CharEscapement"), 1); + + xPara.set(getParagraph(2)); + CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.f, getProperty(getRun(xPara, 1), "CharEscapement"), 0); + uno::Reference xRun (getRun(xPara, 2, "L")); + CPPUNIT_ASSERT_DOUBLES_EQUAL( 33.f, getProperty(xRun, "CharEscapement"), 1); + // HTML (although unspecified) tends to use a fairly large font. Definitely more than DFLT_ESC_PROP. + CPPUNIT_ASSERT( 70 < getProperty(xRun, "CharEscapementHeight")); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testReqIfTable) +{ + setImportFilterOptions("xhtmlns=reqif-xhtml"); + setImportFilterName("HTML (StarWriter)"); + createSwDoc("reqif-table.xhtml"); + // to see this: soffice --infilter="HTML (StarWriter):xhtmlns=reqif-xhtml" sw/qa/extras/htmlimport/data/reqif-table.xhtml + // Load a table with xhtmlns=reqif-xhtml filter param. + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(3), xTables->getCount()); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + auto aBorder = getProperty(xCell, "TopBorder"); + // This was 0, tables had no borders, even if the default autoformat has + // borders and the markup allows no custom borders. + CPPUNIT_ASSERT_EQUAL_MESSAGE("Top Border", static_cast(18), aBorder.LineWidth); + aBorder = getProperty(xCell, "BottomBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Bottom Border", static_cast(18), aBorder.LineWidth); + aBorder = getProperty(xCell, "LeftBorder"); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Left Border", static_cast(18), aBorder.LineWidth); + aBorder = getProperty(xCell, "RightBorder"); + // This was 0. Single column tables had no right border. tdf#115576 + CPPUNIT_ASSERT_EQUAL_MESSAGE("Right Border", static_cast(18), aBorder.LineWidth); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testImageSize) +{ + createSwWebDoc("image-size.html"); + awt::Size aSize = getShape(1)->getSize(); + OutputDevice* pDevice = Application::GetDefaultDevice(); + Size aPixelSize(200, 400); + Size aExpected = pDevice->PixelToLogic(aPixelSize, MapMode(MapUnit::Map100thMM)); + + // This was 1997, i.e. a hardcoded default, we did not look at the image + // header when the HTML markup declared no size. + CPPUNIT_ASSERT_EQUAL(static_cast(aExpected.getWidth()), aSize.Width); + CPPUNIT_ASSERT_EQUAL(static_cast(aExpected.getHeight()), aSize.Height); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testTdf142781) +{ + createSwWebDoc("tdf142781.html"); + OutputDevice* pDevice = Application::GetDefaultDevice(); + Size aPixelSize(672, 480); + Size aExpected = pDevice->PixelToLogic(aPixelSize, MapMode(MapUnit::Map100thMM)); + awt::Size aSize = getShape(1)->getSize(); + // Without the fix in place, this test would have failed with + // - Expected: 12700 + // - Actual: 25400 + // CPPUNIT_ASSERT_EQUAL(static_cast(aExpected.getHeight()), aSize.Height); + aSize = getShape(2)->getSize(); + // Without the fix in place, this test would have failed with + // - Expected: 17780 + // - Actual: 35560 + CPPUNIT_ASSERT_EQUAL(static_cast(aExpected.getWidth()), aSize.Width); +} + + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testTdf122789) +{ + createSwWebDoc("tdf122789.html"); + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + const auto& rFormats = *pDoc->GetSpzFrameFormats(); + CPPUNIT_ASSERT_EQUAL(static_cast(1), rFormats.size()); + // This failed, the image had an absolute size, not a relative one. + CPPUNIT_ASSERT_EQUAL(static_cast(70), rFormats[0]->GetAttrSet().GetFrameSize().GetWidthPercent()); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testTdf118579) +{ + createSwWebDoc("tdf118579.html"); + //Without the fix in place, the file fails to load + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testReqIfPageStyle) +{ + setImportFilterOptions("xhtmlns=reqif-xhtml"); + setImportFilterName("HTML (StarWriter)"); + createSwDoc("reqif-page-style.xhtml"); + // Without the accompanying fix in place, this test would have failed with + // 'Expected: Standard, Actual : HTML'. + CPPUNIT_ASSERT_EQUAL(OUString("Standard"), + getProperty(getParagraph(1), "PageStyleName")); +} + +/// HTML import to the sw doc model tests. +class SwHtmlOptionsImportTest : public SwModelTestBase +{ + public: + SwHtmlOptionsImportTest() : SwModelTestBase("/sw/qa/extras/htmlimport/data/", "HTML (StarWriter)") {} +}; + +CPPUNIT_TEST_FIXTURE(SwHtmlOptionsImportTest, testAllowedRTFOLEMimeTypes) +{ + uno::Sequence aTypes = { OUString("test/rtf") }; + uno::Sequence aLoadProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")), + comphelper::makePropertyValue("AllowedRTFOLEMimeTypes", aTypes), + }; + OUString aURL = createFileURL(u"allowed-rtf-ole-mime-types.xhtml"); + mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", aLoadProperties); + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xObjects(xSupplier->getEmbeddedObjects(), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(1), xObjects->getCount()); + uno::Reference xObject(xObjects->getByIndex(0), + uno::UNO_QUERY); + CPPUNIT_ASSERT(xObject.is()); + uno::Reference xEmbeddedObject( + xObject->getExtendedControlOverEmbeddedObject(), uno::UNO_QUERY); + // Without the accompanying fix in place, this test would have failed, because the returned + // embedded object was a dummy one, which does not support in-place editing. + CPPUNIT_ASSERT(xEmbeddedObject.is()); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlOptionsImportTest, testHiddenTextframe) +{ + // Load HTML content into Writer, similar to HTML paste. + createSwWebDoc("hidden-textframe.html"); + + // Check the content of the draw page. + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xDrawPage = xSupplier->getDrawPage(); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 0 + // - Actual : 1 + // i.e. an unexpected text frame was created, covering the actual content. + CPPUNIT_ASSERT_EQUAL(static_cast(0), xDrawPage->getCount()); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlOptionsImportTest, testOleImg) +{ + // Given an XHTML with an (containing GIF) and an inner (containing PNG, to be + // ignored): + setImportFilterOptions("xhtmlns=reqif-xhtml"); + setImportFilterName("HTML (StarWriter)"); + createSwDoc("ole-img.xhtml"); + + // Then make sure the result is a single Writer image: + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xObjects(xSupplier->getGraphicObjects(), + uno::UNO_QUERY); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 0 + // - Actual : 1 + // i.e. the image was not imported as a Writer image (but as an OLE object). + CPPUNIT_ASSERT_EQUAL(static_cast(1), xObjects->getCount()); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlOptionsImportTest, testOleImgSvg) +{ + // Given an XHTML with an (containing SVG) and an inner (containing PNG, to be + // ignored): + setImportFilterOptions("xhtmlns=reqif-xhtml"); + setImportFilterName("HTML (StarWriter)"); + createSwDoc("ole-img-svg.xhtml"); + + // Then make sure the result is a single Writer image: + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xObjects(xSupplier->getGraphicObjects(), + uno::UNO_QUERY); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 0 + // - Actual : 1 + // i.e. the image was not imported as a Writer image (but as an OLE object). + CPPUNIT_ASSERT_EQUAL(static_cast(1), xObjects->getCount()); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testUTF16_nonBMP) +{ + createSwWebDoc("emojis16BE.html"); + // tdf#146173: non-BMP characters' surrogates didn't combine correctly + CPPUNIT_ASSERT_EQUAL(u"a text with emojis: 🌾 β˜€πŸ‘¨πŸΌβ€πŸŒΎπŸƒπŸΌβ€β™‚οΈπŸ€™πŸ½πŸ”"_ustr, + getParagraph(1)->getString()); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testTdf154273) +{ + createSwWebDoc("tdf154273.html"); + + // Without the fix in place, this test would have failed with + // - Expected: 'test' + // - Actual : 'test' + CPPUNIT_ASSERT_EQUAL(OUString("'test' "), getParagraph(1)->getString()); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlOptionsImportTest, testOleData) +{ + // Given an XHTML with an (containing non-image, non-OLE2 data) and an inner + // (containing PNG): + setImportFilterOptions("xhtmlns=reqif-xhtml"); + setImportFilterName("HTML (StarWriter)"); + createSwDoc("ole-data.xhtml"); + + // Then make sure the result is a single clickable Writer image: + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xObjects(xSupplier->getGraphicObjects(), + uno::UNO_QUERY); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 0 + // - Actual : 1 + // i.e. the image was not imported as a Writer image (but as an OLE object). + CPPUNIT_ASSERT_EQUAL(static_cast(1), xObjects->getCount()); + uno::Reference xShape = getShape(1); + // And then the image was not clickable: this was empty. + CPPUNIT_ASSERT(getProperty(xShape, "HyperLinkURL").endsWith("/data.ole")); +} + +CPPUNIT_TEST_FIXTURE(SwHtmlOptionsImportTest, testOleData2) +{ + // Given an XHTML with 2 objects: the first has a link, the second does not have: + setImportFilterOptions("xhtmlns=reqif-xhtml"); + setImportFilterName("HTML (StarWriter)"); + createSwDoc("ole-data2.xhtml"); + + // Then make sure that the second image doesn't have a link set: + uno::Reference xSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xObjects(xSupplier->getGraphicObjects(), + uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(static_cast(2), xObjects->getCount()); + uno::Reference xShape = getShape(1); + CPPUNIT_ASSERT(getProperty(xShape, "HyperLinkURL").endsWith("/data.ole")); + xShape = getShape(2); + // Without the accompanying fix in place, this test would have failed, the link from the 1st + // image leaked to the 2nd image. + CPPUNIT_ASSERT(getProperty(xShape, "HyperLinkURL").isEmpty()); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testRGBAColor) +{ + createSwWebDoc("green-highlight.html"); + const uno::Reference xPara = getParagraph(1); + const uno::Reference xRun(getRun(xPara,1), uno::UNO_QUERY); + const Color nBackColor(0xaed89a); + + // Without the accompanying fix in place, this test would have failed, the background + // color was not imported at all, when it was in hex RGBA format in HTML. + CPPUNIT_ASSERT_EQUAL(nBackColor, getProperty(xRun, "CharBackColor")); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testTdf153341) +{ + createSwWebDoc("tdf153341.html"); + + const uno::Reference xPara1 = getParagraph(1); + const uno::Reference xRun1(getRun(xPara1,1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(ColorTransparency, 0x00, 0xFF, 0x00, 0x00), getProperty(xRun1, "CharColor")); + + const uno::Reference xPara2 = getParagraph(2); + const uno::Reference xRun2(getRun(xPara2,1), uno::UNO_QUERY); + + // Without the fix in place, this test would have failed with + // - Expected: rgba[ff00007f] + // - Actual : rgba[ff0000ff] + CPPUNIT_ASSERT_EQUAL(Color(ColorTransparency, 0x80, 0xFF, 0x00, 0x00), getProperty(xRun2, "CharColor")); + + const uno::Reference xPara3 = getParagraph(3); + const uno::Reference xRun3(getRun(xPara3,1), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(Color(ColorTransparency, 0xB3, 0xFF, 0x00, 0x00), getProperty(xRun3, "CharColor")); +} + +CPPUNIT_TEST_FIXTURE(HtmlImportTest, testTdf155011) +{ + createSwWebDoc("tdf155011.html"); + // Must not crash / fail asserts +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit v1.2.3