diff -Nru libreoffice-3.4.4/debian/changelog libreoffice-3.4.5/debian/changelog --- libreoffice-3.4.4/debian/changelog 2011-11-09 13:01:51.000000000 +0000 +++ libreoffice-3.4.5/debian/changelog 2012-01-19 00:30:41.000000000 +0000 @@ -1,15 +1,90 @@ -libreoffice (1:3.4.4-0ubuntu1~ppa1) oneiric; urgency=low +libreoffice (1:3.4.5-0ubuntu1~ppa1) oneiric; urgency=low - * patch only update to upstream 3.4.4.2 + * make upstream microrelease first hotpatch fix to be applied + * patch only update to upstream 3.4.5.2 (LP: #915223) + - fix dnd crash from default assignment operators ({{fdo|39950}}) [Caolán McNamara] + - reenable ADO URL helper UI ({{fdo|32347}}) [Lionel Elie Mamane] + - add .ppsx ({{fdo|39963}}) [Tor Lillqvist] + - avoid using ulimit_cast between signed and unsigned. ({{fdo|39589}}) [Kohei Yoshida] + - boolean values are valid for matrix evaluation ({{fdo|40967}}) [Markus Mohrhard] + - correctly map external ranges into matrix instances. ({{fdo|40110}}) [Kohei Yoshida] + - display caption strings without format detection. ({{fdo|42169}}) [Kohei Yoshida] + - fixed Libreoffice calc crashes when re-opening a xlxs file ({{rhbz|754051}}) [Eike Rathke] + - prevent access to non existing mdds elements ({{fdo|41807}}) [Markus Mohrhard] + - set the logic straight for "center across selection" setting. ({{fdo|43308}}) [Kohei Yoshida] + - change logic of IsOfficeRunning custom action ({{fdo|36677}}) [Andras Timar] + - fix ({{bnc|653688}}) [Thorsten Behrens] + - fix handling of SAFEARRAY(s) returned as variant in olebridge ({{fdo|38441}}) [Noel Power] + - fix : Auto fit text VIEWING too small in PPT ({{fdo|41245}}) [Arnaud Versini] + - fix crash while opening certain pptx files. ({{bnc|706792}}) [Muthu Subramanian] + - - turn DocBasicItems into an rtl::Static to improve shutdown on mac ({{fdo|39520}}) [Michael Meeks] + - fix the drawing of dotted and dashed borders in Calc. ({{fdo|37129}}) [Tomofumi Yagi] + - pImplementationName is not a compile-time constant ({{fdo|36555}}) [Lionel Elie Mamane] + - fix crash at exit ( access of deleted GtkSalDisplay instance ) ({{bnc|728603}}) [Noel Power] + - fix horizontal scrollbars with KDE oxygen style ({{bnc|722918}}) [LuboÅ¡ Luňák] + - fix the drawing of dotted and dashed borders in Calc. ({{fdo|37129}}) [Tomofumi Yagi] + - resolves tmp name reuse in mass pdf export ({{fdo|41295}}) [Caolán McNamara] + - make the 3D transitions work again ({{bnc|728559}}) [Radek Doulik] + - workaround, remove access key to prevent crash ({{fdo|30977}}) [Andras Timar] + - backport of 3524727db0f3cfecf3a47046795c527808c10c3e ({{issue|58612}}) [LuboÅ¡ Luňák] + - fix fallout - recognize .svg in odt container ({{fdo|41995}}) [Thorsten Behrens] + - nO_STYLE default for borderlines mso import, fixes image size issue ({{bnc|718971}}) [Noel Power] + - swDoc::ReplaceRangeImpl: ({{issue|102333}}) [Michael Stahl] + - swView::ExecSearch: ({{fdo|40831}}) [Michael Stahl] + * remove libebook-1.2.so.11.diff as it is included in the upstream + microrelease + * remove fdo42749.diff as it is included in the upstream microrelease + * backport rhbz#761009 by Caolan McNamara (possibly fixes: LP#766153) + + -- Bjoern Michaelsen Thu, 19 Jan 2012 01:12:35 +0100 + +libreoffice (1:3.4.4-0ubuntu2) precise; urgency=low - -- Bjoern Michaelsen Wed, 09 Nov 2011 13:40:33 +0100 + * release to precise -libreoffice (1:3.4.4~rc1-0ubuntu1~ppa1) oneiric; urgency=low + -- Bjoern Michaelsen Mon, 28 Nov 2011 16:12:31 +0100 - * patch only update to upstream 3.4.4.1 +libreoffice (1:3.4.4-0ubuntu1) oneiric-proposed; urgency=low + + [ Bjoern Michaelsen ] + * patch only update to upstream 3.4.4.2 + - Perhaps it could be simplified {{fdo|38286}} [Julien Nabet] + - fix building of the 64-bit Windows Explorer extension {{fdo|36950}} [Tor Lillqvist] + - fix recalculate matrix formula dimension correctly {{fdo|39485}} [Eike Rathke] + - mark all formula cells dirty when appending a new sheet {{fdo|35965}} [Kohei Yoshida] + - speed up range name lookup by index. {{bnc|715104}} [Kohei Yoshida] + - get testtool working {{fdo|37164}} [Noel Power] + - move init that depends on parent to post-parent avail {{fdo|36678}} [Caolán McNamara] + - toggling grammar checkbox deletes sentence {{fdo|39348}} [Caolán McNamara] + - fix handling of SAFEARRAY(s) returned as variant in olebridge {{fdo|38441}} [Noel Power] + - libreoffice doesn't build with poppler-0.17.3 {{rhbz|735182}} [Caolán McNamara] + - fix : Auto fit text VIEWING too small in PPT {{fdo|41245}} [Arnaud Versini] + - don't crash while dropping texture {{fdo|38391}} [Ivan Timofeev] + - fix hang in slideshow. {{fdo|32861}} [Thorsten Behrens] + - backport collection of operator= fixes {{fdo|37403}} [Caolán McNamara] + - createProcessServiceFactory can't happen before sync {{fdo|37195}} [Caolán McNamara] + - dbGridControl::RemoveColumn even if no corresponding Model column {{fdo|40701}} [Lionel Elie Mamane] + - fix fallout - recognize .svg in odf container {{fdo|41995}} [Thorsten Behrens] + - fmXGridPeer::getByIndex: Error checking of pGrid->GetModelColumnPos(nId) call {{fdo|40701}} [Lionel Elie Mamane] + - get testtool working {{fdo|37164}} [Noel Power] + - load Dialog library before trying to get embedded images {{fdo|40079}} [Lionel Elie Mamane] + - fix the drawing of dotted and dashed borders in Calc {{fdo|37129}} [Tomofumi Yagi] + - reenable "use typedefs and endianess from sal" patch hunk {{fdo|39355}} [Lionel Elie Mamane] + - activation order crashes address database {{fdo|41022}} [julien2412] + - let Qt call XInitThreads(), so that it knows it's been called {{fdo|40298}} [LuboÅ¡ Luňák] + - fix the drawing of dotted and dashed borders in Calc {{fdo|37129}} [Tomofumi Yagi] + - comment added {{fdo|39510}} [Bjoern Michaelsen] + - crash on closing document with footnotes {{fdo|39510}}, {{lp|854626}} [Bjoern Michaelsen] + - fix for avoid crash while processing incorrect range of pages {{fdo|35513}} [Ivan Timofeev] + - fix leak in pdf export. {{i|116448}} [Andor Ertsey] + - hide 'math baseline alignment' unless available {{fdo|40341}} [Takeshi Abe] + - fix fallout - recognize .svg in odt container {{fdo|41995}} [Thorsten Behrens] + + [ Lubos Lunak ] + * fix for "Libreoffice-kde breaks with kde oxygen theme on scrollbars" (LP: #856210) + + -- Bjoern Michaelsen Fri, 11 Nov 2011 15:13:24 +0100 - -- Bjoern Michaelsen Thu, 27 Oct 2011 13:35:51 +0200 - libreoffice (1:3.4.3-3ubuntu2) oneiric; urgency=low * hard hack to make upload happy: Pre-Depends on xz-capable dpkg diff -Nru libreoffice-3.4.4/debian/patches/libebook-1.2.so.11.diff libreoffice-3.4.5/debian/patches/libebook-1.2.so.11.diff --- libreoffice-3.4.4/debian/patches/libebook-1.2.so.11.diff 2011-11-09 13:01:51.000000000 +0000 +++ libreoffice-3.4.5/debian/patches/libebook-1.2.so.11.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -Index: libreoffice-3.4.1/libreoffice-build/patches/hotfixes/ubuntufixes.diff -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ libreoffice-3.4.1/libreoffice-build/patches/hotfixes/libebook-1.2.so.11.diff 2011-07-19 16:29:10.855486007 +0200 -@@ -0,0 +1,23 @@ -+From 795ac1b9088af83e36661d59b816edbe5aef5eab Mon Sep 17 00:00:00 2001 -+From: Bjoern Michaelsen -+Date: Tue, 19 Jul 2011 15:48:36 +0200 -+Subject: [PATCH 2/2] libebook-1.2.so SONAME bumped again -+ -+--- -+ connectivity/source/drivers/evoab2/EApi.cxx | 1 + -+ 1 files changed, 1 insertions(+), 0 deletions(-) -+ -+diff --git a/connectivity/source/drivers/evoab2/EApi.cxx b/connectivity/source/drivers/evoab2/EApi.cxx -+index 1767ec1..f93d67a 100644 -+--- connectivity/source/drivers/evoab2/EApi.cxx -++++ connectivity/source/drivers/evoab2/EApi.cxx -+@@ -35,6 +35,7 @@ -+ #define DECLARE_FN_POINTERS 1 -+ #include "EApi.h" -+ static const char *eBookLibNames[] = { -++ "libebook-1.2.so.11", // bumped again -+ "libebook-1.2.so.10", // bumped again -+ "libebook-1.2.so.9", // evolution-2.8 -+ "libebook-1.2.so.5", // evolution-2.4 and 2.6+ -+-- -+1.7.5.4 diff -Nru libreoffice-3.4.4/debian/patches/series libreoffice-3.4.5/debian/patches/series --- libreoffice-3.4.4/debian/patches/series 2011-11-09 13:01:51.000000000 +0000 +++ libreoffice-3.4.5/debian/patches/series 2012-01-19 00:30:41.000000000 +0000 @@ -13,7 +13,6 @@ mips-openjdk-jre-paths.diff autogen.diff disable-dynamic-list-cpp.diff -libebook-1.2.so.11.diff vbaobj-visibility-fix.diff make-gengal-work-again.diff fix-distro-config.diff @@ -31,3 +30,4 @@ apply-ext-human-updates.diff disable-test-apply.diff update-from-libreoffice-3.4.3.2-to-libreoffice-3.4.4.2.diff +update-from-libreoffice-3.4.4.2-to-libreoffice-3.4.5.2.diff diff -Nru libreoffice-3.4.4/debian/patches/ubuntufixes-core.diff libreoffice-3.4.5/debian/patches/ubuntufixes-core.diff --- libreoffice-3.4.4/debian/patches/ubuntufixes-core.diff 2011-11-09 13:01:51.000000000 +0000 +++ libreoffice-3.4.5/debian/patches/ubuntufixes-core.diff 2012-01-19 00:30:41.000000000 +0000 @@ -1,13 +1,11 @@ -Index: libreoffice-3.4.2/libreoffice-build/patches/hotfixes/ubuntufixes-core.diff -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ libreoffice-3.4.2/libreoffice-build/patches/hotfixes/ubuntufixes-core.diff 2011-08-30 10:58:19.602625234 +0200 -@@ -0,0 +1,1122 @@ +--- /dev/null 2012-01-17 08:57:40.635399120 +0100 ++++ libreoffice-3.4.2/libreoffice-build/patches/hotfixes/ubuntufixes-core.diff 2012-01-17 17:33:15.484532677 +0100 +@@ -0,0 +1,1153 @@ +git format-patch --stdout libreoffice-3.4.2.3..distro/ubuntu/oneiric-3.4 |sed -e 's|^--- a/|--- |' -e 's|^+++ b/|+++ |' +From 1821350817000893ed9643f3081fca225ca151c2 Mon Sep 17 00:00:00 2001 +From: Rene Engelhard +Date: Thu, 30 Jun 2011 10:18:47 +0200 -+Subject: [PATCH 1/8] apply system-lpsolve-rpath.diff from libreoffice-build ++Subject: [PATCH 1/9] apply system-lpsolve-rpath.diff from libreoffice-build + +--- + solenv/inc/libs.mk | 6 ++++++ @@ -38,7 +36,7 @@ +From 83eed6f49ede0f7b60d3b19e9cc558a90c762ecc Mon Sep 17 00:00:00 2001 +From: Bjoern Michaelsen +Date: Fri, 1 Jul 2011 10:45:59 +0200 -+Subject: [PATCH 2/8] disable default as-needed on linking ++Subject: [PATCH 2/9] disable default as-needed on linking + + * for not breaking pkg-config provided link switches (because of order) +--- @@ -64,7 +62,7 @@ +From 903c82fa3bfeafe33965ca5d38c4ff144dbad572 Mon Sep 17 00:00:00 2001 +From: Bjoern Michaelsen +Date: Sun, 3 Jul 2011 11:37:02 +0200 -+Subject: [PATCH 3/8] adding human theme to scp2 ++Subject: [PATCH 3/9] adding human theme to scp2 + +--- + scp2/source/ooo/file_ooo.scp | 9 +++++++++ @@ -114,7 +112,7 @@ +From 4441ba7add7cd954b7f9077585d10033cc4ded2b Mon Sep 17 00:00:00 2001 +From: Bjoern Michaelsen +Date: Tue, 19 Jul 2011 13:16:14 +0200 -+Subject: [PATCH 4/8] disable default as-needed on linking for gbuild too ++Subject: [PATCH 4/9] disable default as-needed on linking for gbuild too + + * for not breaking pkg-config provided link switches (because of order) +--- @@ -140,7 +138,7 @@ +From 2c1ac0ff6558bd2b3dafe79a76a5fbaaa6507ba3 Mon Sep 17 00:00:00 2001 +From: Bjoern Michaelsen +Date: Wed, 29 Jun 2011 19:49:36 +0200 -+Subject: [PATCH 5/8] apply ubuntu-palette.diff ++Subject: [PATCH 5/9] apply ubuntu-palette.diff + +--- + extras/source/palettes/standard.soc | 3 + @@ -278,7 +276,7 @@ +From 9d3fb278999edb233eb1c2612412a06cd150e396 Mon Sep 17 00:00:00 2001 +From: Bjoern Michaelsen +Date: Wed, 29 Jun 2011 19:15:31 +0200 -+Subject: [PATCH 6/8] lp#720716: more translations in desktop files ++Subject: [PATCH 6/9] lp#720716: more translations in desktop files + +--- + sysui/desktop/menus/base.desktop | 5 + @@ -1023,7 +1021,7 @@ +From 1518416ac6a692c2234dfa3cb4b98a382ebe65cc Mon Sep 17 00:00:00 2001 +From: Bjoern Michaelsen +Date: Wed, 29 Jun 2011 19:20:43 +0200 -+Subject: [PATCH 7/8] lp#746375: soffice.bin crashed with SIGSEGV in ++Subject: [PATCH 7/9] lp#746375: soffice.bin crashed with SIGSEGV in + uno_type_sequence_construct() + +--- @@ -1072,10 +1070,10 @@ +1.7.5.4 + + -+From 6d237a078605ae43157206d1da99ba7f2af26784 Mon Sep 17 00:00:00 2001 ++From 6a98980289ecc5b21a9c1044ca22e8de4f8f9c93 Mon Sep 17 00:00:00 2001 +From: Bjoern Michaelsen +Date: Thu, 25 Aug 2011 00:23:31 +0200 -+Subject: [PATCH 8/8] lp#832121: libgcc_s magic breaks horribly on armel and ++Subject: [PATCH 8/9] lp#832121: libgcc_s magic breaks horribly on armel and + powerpc + +--- @@ -1084,7 +1082,7 @@ + 2 files changed, 10 insertions(+), 0 deletions(-) + +diff --git a/external/gcc3_specific/makefile.mk b/external/gcc3_specific/makefile.mk -+index 0b18d2c..1c44f6c 100644 ++index 0b18d2c..ee1123b 100644 +--- external/gcc3_specific/makefile.mk ++++ external/gcc3_specific/makefile.mk +@@ -6,6 +6,14 @@ TARGET=gcc3_specific @@ -1125,3 +1123,34 @@ +-- +1.7.5.4 + ++ ++From 3129d7d23d06ac9609957d141cedbc04ac42c48a Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= ++Date: Tue, 13 Dec 2011 21:01:28 +0000 ++Subject: [PATCH 9/9] Resolves: rhbz#761009 IFSD_Equal is asymmetrical ++ ++--- ++ vcl/source/glyphs/glyphcache.cxx | 6 ++++-- ++ 1 files changed, 4 insertions(+), 2 deletions(-) ++ ++diff --git a/vcl/source/glyphs/glyphcache.cxx b/vcl/source/glyphs/glyphcache.cxx ++index ab56853..ea696f3 100644 ++--- vcl/source/glyphs/glyphcache.cxx +++++ vcl/source/glyphs/glyphcache.cxx ++@@ -150,9 +150,11 @@ bool GlyphCache::IFSD_Equal::operator()( const ImplFontSelectData& rA, const Imp ++ // NOTE: ignoring meFamily deliberately ++ ++ // compare with the requested width, allow default width ++- if( (rA.mnWidth != rB.mnWidth) ++- && ((rA.mnHeight != rB.mnWidth) || (rA.mnWidth != 0)) ) +++ int nAWidth = rA.mnWidth != 0 ? rA.mnWidth : rA.mnHeight; +++ int nBWidth = rB.mnWidth != 0 ? rB.mnWidth : rB.mnHeight; +++ if( nAWidth != nBWidth ) ++ return false; +++ ++ #ifdef ENABLE_GRAPHITE ++ if (rA.meLanguage != rB.meLanguage) ++ return false; ++-- ++1.7.5.4 ++ diff -Nru libreoffice-3.4.4/debian/patches/update-from-libreoffice-3.4.3.2-to-libreoffice-3.4.4.2.diff libreoffice-3.4.5/debian/patches/update-from-libreoffice-3.4.3.2-to-libreoffice-3.4.4.2.diff --- libreoffice-3.4.4/debian/patches/update-from-libreoffice-3.4.3.2-to-libreoffice-3.4.4.2.diff 2011-11-09 13:01:51.000000000 +0000 +++ libreoffice-3.4.5/debian/patches/update-from-libreoffice-3.4.3.2-to-libreoffice-3.4.4.2.diff 2012-01-19 00:30:41.000000000 +0000 @@ -1,5 +1,5 @@ --- /dev/null 2011-11-06 09:16:48.298589546 -0500 -+++ libreoffice/libreoffice-build/patches/hotfixes/update-from-libreoffice-3.4.3.2-to-libreoffice-3.4.4.2.diff 2011-11-06 11:38:00.015855513 -0500 ++++ libreoffice/libreoffice-build/patches/hotfixes/0001-update-from-libreoffice-3.4.3.2-to-libreoffice-3.4.4.2.diff 2011-11-06 11:38:00.015855513 -0500 @@ -0,0 +1,7509 @@ +reverting on repository artwork from libreoffice-3.4.3.2 to merge-base b22f33f85962d8a55e0adf46912bd5290b359295 +commits on repository artwork merge-base b22f33f85962d8a55e0adf46912bd5290b359295 to libreoffice-3.4.4.2 diff -Nru libreoffice-3.4.4/debian/patches/update-from-libreoffice-3.4.4.2-to-libreoffice-3.4.5.2.diff libreoffice-3.4.5/debian/patches/update-from-libreoffice-3.4.4.2-to-libreoffice-3.4.5.2.diff --- libreoffice-3.4.4/debian/patches/update-from-libreoffice-3.4.4.2-to-libreoffice-3.4.5.2.diff 1970-01-01 00:00:00.000000000 +0000 +++ libreoffice-3.4.5/debian/patches/update-from-libreoffice-3.4.4.2-to-libreoffice-3.4.5.2.diff 2012-01-19 00:30:41.000000000 +0000 @@ -0,0 +1,39717 @@ +--- /dev/null 2012-01-11 09:18:11.819468123 +0100 ++++ libreoffice/libreoffice-build/patches/hotfixes/0002-update-from-libreoffice-3.4.4.2-to-libreoffice-3.4.5.2.diff 2012-01-11 15:24:25.851325105 +0100 +@@ -0,0 +1,39714 @@ ++reverting on repository artwork from libreoffice-3.4.4.2 to merge-base b96346f212443b3787f953e19cd5c684008fb4db ++commits on repository artwork merge-base b96346f212443b3787f953e19cd5c684008fb4db to libreoffice-3.4.5.2 ++reverting on repository base from libreoffice-3.4.4.2 to merge-base 20ba7c31bb4f922b7875436aca762a67d2051c3b ++commits on repository base merge-base 20ba7c31bb4f922b7875436aca762a67d2051c3b to libreoffice-3.4.5.2 ++From e86982ad35010aa52375b6949eecb2b742e6485f Mon Sep 17 00:00:00 2001 ++From: Lionel Elie Mamane ++Date: Thu, 24 Nov 2011 19:01:22 +0100 ++Subject: [base 1/6] fdo#32347: reenable ADO URL helper UI ++ ++cleanup obsolete DISABLE_ADO logic ++--- ++ dbaccess/source/ui/dlg/ConnectionHelper.cxx | 2 +- ++ dbaccess/source/ui/dlg/makefile.mk | 6 +----- ++ 2 files changed, 2 insertions(+), 6 deletions(-) ++ ++diff --git a/dbaccess/source/ui/dlg/ConnectionHelper.cxx b/dbaccess/source/ui/dlg/ConnectionHelper.cxx ++index 3b70cbe..da2af7e 100644 ++--- dbaccess/source/ui/dlg/ConnectionHelper.cxx +++++ dbaccess/source/ui/dlg/ConnectionHelper.cxx ++@@ -70,7 +70,7 @@ ++ #include ++ #include ++ #include ++-#if !defined(WINDOWS_VISTA_PSDK) && defined(WNT) +++#if defined(WNT) ++ #define _ADO_DATALINK_BROWSE_ ++ #endif ++ ++diff --git a/dbaccess/source/ui/dlg/makefile.mk b/dbaccess/source/ui/dlg/makefile.mk ++index 8fa615d..55f9027 100644 ++--- dbaccess/source/ui/dlg/makefile.mk +++++ dbaccess/source/ui/dlg/makefile.mk ++@@ -128,11 +128,7 @@ SLOFILES= \ ++ $(EXCEPTIONSFILES) \ ++ $(SLO)$/optionalboolitem.obj ++ ++-.IF "$(WINDOWS_VISTA_PSDK)"!="" && "$(PROF_EDITION)"=="" ++-DISABLE_ADO=TRUE ++-.ENDIF # "$(WINDOWS_VISTA_PSDK)"!="" && "$(PROF_EDITION)"=="" ++- ++-.IF "$(GUI)"=="WNT" && "$(DISABLE_ADO)"=="" +++.IF "$(GUI)"=="WNT" ++ SLOFILES+= $(SLO)$/adodatalinks.obj ++ .ENDIF ++ ++-- ++1.7.5.4 ++ ++ ++From a34fee81312413f38f7db3facaac643b2c289d19 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= ++Date: Fri, 25 Nov 2011 20:16:36 +0000 ++Subject: [base 2/6] Resolves: fdo#39950 fix dnd crash from default assignment ++ operators ++ ++Signed-off-by: Lionel Elie Mamane ++Signed-off-by: Michael Meeks ++--- ++ reportdesign/inc/RptObject.hxx | 4 ++ ++ reportdesign/source/core/sdr/RptObject.cxx | 58 ++++++++++++++++++---------- ++ 2 files changed, 41 insertions(+), 21 deletions(-) ++ ++diff --git a/reportdesign/inc/RptObject.hxx b/reportdesign/inc/RptObject.hxx ++index d58950b..e24d51f 100644 ++--- reportdesign/inc/RptObject.hxx +++++ reportdesign/inc/RptObject.hxx ++@@ -224,6 +224,8 @@ public: ++ virtual OOle2Obj* Clone() const; ++ virtual void initializeOle(); ++ +++ OOle2Obj& operator=(const OOle2Obj& rObj); +++ ++ void initializeChart( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel>& _xModel); ++ }; ++ ++@@ -275,6 +277,8 @@ public: ++ virtual sal_uInt32 GetObjInventor() const; ++ virtual OUnoObject* Clone() const; ++ +++ OUnoObject& operator=(const OUnoObject& rObj); +++ ++ private: ++ void impl_setReportComponent_nothrow(); ++ void impl_initializeModel_nothrow(); ++diff --git a/reportdesign/source/core/sdr/RptObject.cxx b/reportdesign/source/core/sdr/RptObject.cxx ++index 1f6a01a..80d56cb 100644 ++--- reportdesign/source/core/sdr/RptObject.cxx +++++ reportdesign/source/core/sdr/RptObject.cxx ++@@ -941,18 +941,24 @@ uno::Reference< uno::XInterface > OUnoObject::getUnoShape() ++ { ++ return OObjectBase::getUnoShapeOf( *this ); ++ } ++-// ----------------------------------------------------------------------------- +++ +++OUnoObject& OUnoObject::operator=(const OUnoObject& rObj) +++{ +++ if( this == &rObj ) +++ return *this; +++ SdrUnoObj::operator=(rObj); +++ +++ Reference xSource(const_cast(rObj).getUnoShape(), uno::UNO_QUERY); +++ Reference xDest(getUnoShape(), uno::UNO_QUERY); +++ if ( xSource.is() && xDest.is() ) +++ comphelper::copyProperties(xSource.get(), xDest.get()); +++ +++ return *this; +++} +++ ++ OUnoObject* OUnoObject::Clone() const ++ { ++- OUnoObject* pClone = CloneHelper< OUnoObject >(); ++- if ( pClone ) ++- { ++- Reference xSource(const_cast(this)->getUnoShape(),uno::UNO_QUERY); ++- Reference xDest(pClone->getUnoShape(),uno::UNO_QUERY); ++- if ( xSource.is() && xDest.is() ) ++- comphelper::copyProperties(xSource.get(),xDest.get()); ++- } ++- return pClone; +++ return CloneHelper< OUnoObject >(); ++ } ++ //---------------------------------------------------------------------------- ++ // OOle2Obj ++@@ -1128,22 +1134,32 @@ uno::Reference< chart2::data::XDatabaseDataProvider > lcl_getDataProvider(const ++ } ++ return xSource; ++ } ++-// ----------------------------------------------------------------------------- ++-// Clone() soll eine komplette Kopie des Objektes erzeugen. ++-OOle2Obj* OOle2Obj::Clone() const +++ +++OOle2Obj& OOle2Obj::operator=(const OOle2Obj& rObj) ++ { ++- OOle2Obj* pObj = CloneHelper< OOle2Obj >(); ++- OReportModel* pRptModel = static_cast(GetModel()); ++- svt::EmbeddedObjectRef::TryRunningState( pObj->GetObjRef() ); ++- pObj->impl_createDataProvider_nothrow(pRptModel->getReportDefinition().get()); +++ if( this == &rObj ) +++ return *this; +++ SdrOle2Obj::operator=(rObj); ++ ++- uno::Reference< chart2::data::XDatabaseDataProvider > xSource( lcl_getDataProvider(GetObjRef()) ); ++- uno::Reference< chart2::data::XDatabaseDataProvider > xDest( lcl_getDataProvider(pObj->GetObjRef()) ); +++ OReportModel* pRptModel = static_cast(rObj.GetModel()); +++ svt::EmbeddedObjectRef::TryRunningState( GetObjRef() ); +++ impl_createDataProvider_nothrow(pRptModel->getReportDefinition().get()); +++ +++ uno::Reference< chart2::data::XDatabaseDataProvider > xSource( lcl_getDataProvider(rObj.GetObjRef()) ); +++ uno::Reference< chart2::data::XDatabaseDataProvider > xDest( lcl_getDataProvider(GetObjRef()) ); ++ if ( xSource.is() && xDest.is() ) ++ comphelper::copyProperties(xSource.get(),xDest.get()); ++ ++- pObj->initializeChart(pRptModel->getReportDefinition().get()); ++- return pObj; +++ initializeChart(pRptModel->getReportDefinition().get()); +++ +++ return *this; +++} +++ +++// ----------------------------------------------------------------------------- +++// Clone() soll eine komplette Kopie des Objektes erzeugen. +++OOle2Obj* OOle2Obj::Clone() const +++{ +++ return CloneHelper< OOle2Obj >(); ++ } ++ // ----------------------------------------------------------------------------- ++ void OOle2Obj::impl_createDataProvider_nothrow(const uno::Reference< frame::XModel>& _xModel) ++-- ++1.7.5.4 ++ ++ ++From 88e31643c7036cc68571752f8ecdf486e67282da Mon Sep 17 00:00:00 2001 ++From: Andras Timar ++Date: Mon, 26 Dec 2011 22:34:08 +0100 ++Subject: [base 5/6] missing icons in Index Design dialog fdo#38435 ++ ++Signed-off-by: Jan Holesovsky ++Signed-off-by: Muthu Subramanian K ++Signed-off-by: Petr Mladek ++--- ++ dbaccess/source/ui/dlg/indexdialog.cxx | 2 +- ++ 1 files changed, 1 insertions(+), 1 deletions(-) ++ ++diff --git a/dbaccess/source/ui/dlg/indexdialog.cxx b/dbaccess/source/ui/dlg/indexdialog.cxx ++index 550a667..31877aa 100644 ++--- dbaccess/source/ui/dlg/indexdialog.cxx +++++ dbaccess/source/ui/dlg/indexdialog.cxx ++@@ -884,7 +884,7 @@ DBG_NAME(DbaIndexDialog) ++ { ++ nN = IMG_INDEX_DLG_LC; ++ } ++- return ImageList( nN ); +++ return ImageList(ModuleRes(nN)); ++ } ++ //------------------------------------------------------------------ ++ void DbaIndexDialog::resizeControls(const Size& _rDiff) ++-- ++1.7.5.4 ++ ++reverting on repository binfilter from libreoffice-3.4.4.2 to merge-base ++commits on repository binfilter merge-base to libreoffice-3.4.5.2 ++reverting on repository bootstrap from libreoffice-3.4.4.2 to merge-base 0f47bcd002877464c50c7b4b2df46e2ca627c0a1 ++diff --git a/configure.in b/configure.in ++index 638f982..1c88874 100755 ++--- configure.in +++++ configure.in ++@@ -2164,8 +2164,6 @@ if test "$_os" = "WINNT"; then ++ else ++ with_cl_home=`cygpath -u "$with_cl_home"` ++ fi ++- with_cl_home=`cygpath -d "$with_cl_home"` ++- with_cl_home=`cygpath -u "$with_cl_home"` ++ AC_MSG_RESULT([$with_cl_home]) ++ ++ dnl =========================================================== ++@@ -2238,7 +2236,7 @@ if test "$_os" = "WINNT"; then ++ export INCLUDE=`cygpath -d "$COMPATH/Include"` ++ dnl Check which Microsoft C/C++ compiler is found ++ AC_MSG_CHECKING([the Version of Microsoft C/C++ Compiler]) ++- # The following finds Microsoft, matches nn.nn.nnnn then pulls numbers out. ++++ # The following finds Microsoft, matches nn.nn.nnnn then pulls numbers out. ++ CCNUMVER=`$CC 2>&1 | $AWK "/Microsoft/ && /..\\...\\...../ { ++ x = match( \\\$0, /..\\...\\...../ ) ++ CCversion = substr( \\\$0, RSTART, RLENGTH) ++diff --git a/instsetoo_native/util/openoffice.lst b/instsetoo_native/util/openoffice.lst ++index 7266218..c981a32 100644 ++--- instsetoo_native/util/openoffice.lst +++++ instsetoo_native/util/openoffice.lst ++@@ -57,7 +57,7 @@ LibreOffice ++ PRODUCTVERSION 3.4 ++ PRODUCTEXTENSION ++ LONG_PRODUCTEXTENSION ++- SHORT_PRODUCTEXTENSION rc2 +++ SHORT_PRODUCTEXTENSION rc1 ++ POSTVERSIONEXTENSION ++ POSTVERSIONEXTENSIONUNIX ++ BRANDPACKAGEVERSION 3.4 ++@@ -125,7 +125,7 @@ LibreOffice_wJRE ++ PRODUCTVERSION 3.4 ++ PRODUCTEXTENSION ++ LONG_PRODUCTEXTENSION ++- SHORT_PRODUCTEXTENSION rc2 +++ SHORT_PRODUCTEXTENSION rc1 ++ POSTVERSIONEXTENSION ++ POSTVERSIONEXTENSIONUNIX ++ BRANDPACKAGEVERSION 3.4 ++@@ -189,7 +189,7 @@ LibreOffice_Dev ++ PRODUCTVERSION 3.4 ++ PRODUCTEXTENSION ++ LONG_PRODUCTEXTENSION ++- SHORT_PRODUCTEXTENSION rc2 +++ SHORT_PRODUCTEXTENSION rc1 ++ BASISROOTNAME LibO-dev ++ UNIXBASISROOTNAME lo-dev ++ POSTVERSIONEXTENSION ++@@ -266,7 +266,7 @@ URE ++ PRODUCTEXTENSION ++ BRANDPACKAGEVERSION 3.4 ++ LONG_PRODUCTEXTENSION ++- SHORT_PRODUCTEXTENSION rc2 +++ SHORT_PRODUCTEXTENSION rc1 ++ LICENSENAME LGPL ++ SETSTATICPATH 1 ++ NOVERSIONINDIRNAME 1 ++@@ -305,7 +305,7 @@ LibreOffice_SDK ++ PRODUCTVERSION 3.4 ++ PRODUCTEXTENSION ++ LONG_PRODUCTEXTENSION ++- SHORT_PRODUCTEXTENSION rc2 +++ SHORT_PRODUCTEXTENSION rc1 ++ POSTVERSIONEXTENSION SDK ++ POSTVERSIONEXTENSIONUNIX sdk ++ BRANDPACKAGEVERSION 3.4 ++@@ -351,7 +351,7 @@ LibreOffice_Dev_SDK ++ PRODUCTVERSION 3.4 ++ PRODUCTEXTENSION ++ LONG_PRODUCTEXTENSION ++- SHORT_PRODUCTEXTENSION rc2 +++ SHORT_PRODUCTEXTENSION rc1 ++ BASISROOTNAME LibO-dev ++ UNIXBASISROOTNAME lo-dev ++ POSTVERSIONEXTENSION SDK ++@@ -403,7 +403,7 @@ OxygenOffice ++ PRODUCTVERSION 3.4 ++ PRODUCTEXTENSION ++ LONG_PRODUCTEXTENSION ++- SHORT_PRODUCTEXTENSION rc2 +++ SHORT_PRODUCTEXTENSION rc1 ++ POSTVERSIONEXTENSION ++ POSTVERSIONEXTENSIONUNIX ++ BRANDPACKAGEVERSION 3.4 ++@@ -473,7 +473,7 @@ OxygenOffice_wJRE ++ PRODUCTVERSION 3.4 ++ PRODUCTEXTENSION ++ LONG_PRODUCTEXTENSION ++- SHORT_PRODUCTEXTENSION rc2 +++ SHORT_PRODUCTEXTENSION rc1 ++ POSTVERSIONEXTENSION ++ POSTVERSIONEXTENSIONUNIX ++ BRANDPACKAGEVERSION 3.4 ++diff --git a/solenv/inc/minor.mk b/solenv/inc/minor.mk ++index f44858d..75772f2 100644 ++--- solenv/inc/minor.mk +++++ solenv/inc/minor.mk ++@@ -1,5 +1,5 @@ ++ RSCVERSION=340 ++-RSCREVISION=340m1(Build:402) ++-BUILD=402 +++RSCREVISION=340m1(Build:401) +++BUILD=401 ++ LAST_MINOR=m1 ++ SOURCEVERSION=OOO340 ++commits on repository bootstrap merge-base 0f47bcd002877464c50c7b4b2df46e2ca627c0a1 to libreoffice-3.4.5.2 ++From b1e37e258351a51556d4128d08768edd8fd05d3d Mon Sep 17 00:00:00 2001 ++From: Andras Timar ++Date: Thu, 19 May 2011 19:51:11 +0200 ++Subject: [bootstrap 01/11] use short paths, because '(x86)' in the path ++ causes problem ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++Signed-off-by: Fridrich Å trba ++--- ++ configure.in | 2 ++ ++ 1 files changed, 2 insertions(+), 0 deletions(-) ++ ++diff --git a/configure.in b/configure.in ++index 1c88874..68e3193 100755 ++--- configure.in +++++ configure.in ++@@ -2164,6 +2164,8 @@ if test "$_os" = "WINNT"; then ++ else ++ with_cl_home=`cygpath -u "$with_cl_home"` ++ fi +++ with_cl_home=`cygpath -d "$with_cl_home"` +++ with_cl_home=`cygpath -u "$with_cl_home"` ++ AC_MSG_RESULT([$with_cl_home]) ++ ++ dnl =========================================================== ++-- ++1.7.5.4 ++ ++ ++From 7ca50e2afb84320913868f95d0247528ef90b4f6 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Fridrich=20=C5=A0trba?= ++Date: Wed, 26 Oct 2011 11:55:22 +0200 ++Subject: [bootstrap 02/11] Remove a stray leading '+' ++ ++--- ++ configure.in | 2 +- ++ 1 files changed, 1 insertions(+), 1 deletions(-) ++ ++diff --git a/configure.in b/configure.in ++index 68e3193..638f982 100755 ++--- configure.in +++++ configure.in ++@@ -2238,7 +2238,7 @@ if test "$_os" = "WINNT"; then ++ export INCLUDE=`cygpath -d "$COMPATH/Include"` ++ dnl Check which Microsoft C/C++ compiler is found ++ AC_MSG_CHECKING([the Version of Microsoft C/C++ Compiler]) ++-+ # The following finds Microsoft, matches nn.nn.nnnn then pulls numbers out. +++ # The following finds Microsoft, matches nn.nn.nnnn then pulls numbers out. ++ CCNUMVER=`$CC 2>&1 | $AWK "/Microsoft/ && /..\\...\\...../ { ++ x = match( \\\$0, /..\\...\\...../ ) ++ CCversion = substr( \\\$0, RSTART, RLENGTH) ++-- ++1.7.5.4 ++ ++ ++From 4e8524bdf3d4cec373bf0d1eb7295d8963a7bcdd Mon Sep 17 00:00:00 2001 ++From: Tor Lillqvist ++Date: Thu, 25 Aug 2011 15:25:35 +0300 ++Subject: [bootstrap 03/11] Add .ppsx fdo#39963 ++ ++Signed-off-by: Andras Timar ++--- ++ scp2/source/impress/registryitem_impress.scp | 1 + ++ 1 files changed, 1 insertions(+), 0 deletions(-) ++ ++diff --git a/scp2/source/impress/registryitem_impress.scp b/scp2/source/impress/registryitem_impress.scp ++index 063bcf9..ead0603 100644 ++--- scp2/source/impress/registryitem_impress.scp +++++ scp2/source/impress/registryitem_impress.scp ++@@ -1034,6 +1034,7 @@ REGISTER_PROPERTY_HANDLER_FOR_EXTENSION( sti ) ++ ++ CONDITIONAL_REGISTER_DOC_EXTENSION( Ppt, gid_Module_Prg_Impress_MSO_Reg, ppt, PPT, MS_POWERPOINT_PRESENTATION_OLD, 33, simpress.exe, open, Impress ) ++ CONDITIONAL_REGISTER_DOC_EXTENSION( Pps, gid_Module_Prg_Impress_MSO_Reg, pps, PPS, MS_POWERPOINT_SHOW, 33, simpress.exe, open, Impress ) +++CONDITIONAL_REGISTER_DOC_EXTENSION( Ppsx, gid_Module_Prg_Impress_MSO_Reg, ppsx, PPSX, MS_POWERPOINT_SHOW, 33, simpress.exe, open, Impress ) ++ CONDITIONAL_REGISTER_DOC_EXTENSION( Pptx, gid_Module_Prg_Impress_MSO_Reg, pptx, PPTX, MS_POWERPOINT_PRESENTATION, 33, simpress.exe, open, Impress ) ++ CONDITIONAL_REGISTER_DOC_EXTENSION( Pptm, gid_Module_Prg_Impress_MSO_Reg, pptm, PPTM, MS_POWERPOINT_PRESENTATION, 33, simpress.exe, open, Impress ) ++ CONDITIONAL_REGISTER_DOCTEMPLATE_EXTENSION( Pot, gid_Module_Prg_Impress_MSO_Reg, pot, POT, MS_POWERPOINT_TEMPLATE_OLD, 34, simpress.exe, new, Impress ) ++-- ++1.7.5.4 ++ ++ ++From 5a5fd169cb471192cc9d1602b1bd88107af9280b Mon Sep 17 00:00:00 2001 ++From: Andras Timar ++Date: Wed, 23 Nov 2011 13:40:17 +0100 ++Subject: [bootstrap 04/11] create this dir so uninstall can remove it ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++Signed-off-by: Fridrich Å trba ++--- ++ scp2/source/ooo/common_brand.scp | 6 ++++++ ++ 1 files changed, 6 insertions(+), 0 deletions(-) ++ ++diff --git a/scp2/source/ooo/common_brand.scp b/scp2/source/ooo/common_brand.scp ++index 2557f0d..19f560f 100644 ++--- scp2/source/ooo/common_brand.scp +++++ scp2/source/ooo/common_brand.scp ++@@ -413,6 +413,12 @@ Directory gid_Brand_Dir_Share_Uno_Packages_Cache ++ Styles = (CREATE); ++ End ++ +++Directory gid_Brand_Dir_Share_Uno_Packages_Cache_Uno_Packages +++ ParentID = gid_Brand_Dir_Share_Uno_Packages_Cache; +++ DosName = "uno_packages"; +++ Styles = (CREATE); +++End +++ ++ Directory gid_Brand_Dir_Share_Registry ++ ParentID = gid_Brand_Dir_Share; ++ DosName = "registry"; ++-- ++1.7.5.4 ++ ++ ++From 5ef39cd1e648d6d71e70d6e5770065bd9c8a37a3 Mon Sep 17 00:00:00 2001 ++From: Andras Timar ++Date: Tue, 13 Dec 2011 13:27:58 +0100 ++Subject: [bootstrap 05/11] use latest versions of DejaVu and Liberation fonts ++ ++Signed-off-by: Michael Meeks ++--- ++ ooo.lst.in | 4 ++-- ++ 1 files changed, 2 insertions(+), 2 deletions(-) ++ ++diff --git a/ooo.lst.in b/ooo.lst.in ++index afdd4b0..1bd539e 100644 ++--- ooo.lst.in +++++ ooo.lst.in ++@@ -14,7 +14,6 @@ http://hg.services.openoffice.org/binaries ++ 2a177023f9ea8ec8bd00837605c5df1b-jakarta-tomcat-5.0.30-src.tar.gz ++ 2ae988b339daec234019a7066f96733e-commons-lang-2.3-src.tar.gz ++ 2c9b0f83ed5890af02c0df1c1776f39b-commons-httpclient-3.1-src.tar.gz ++-ca4870d899fd7e943ffc310a5421ad4d-liberation-fonts-ttf-1.06.0.20100721.tar.gz ++ 35c94d2df8893241173de1d16b6034c0-swingExSrc.zip ++ 35efabc239af896dfb79be7ebdd6e6b9-gentiumbasic-fonts-1.10.zip ++ 39bb3fcea1514f1369fcfc87542390fd-sacjava-1.3.zip ++@@ -51,7 +50,6 @@ ee8b492592568805593f81f8cdf2a04c-expat-2.0.1.tar.gz ++ fb7ba5c2182be4e73748859967455455-README_stax-api-1.0-2-sources.txt ++ fca8706f2c4619e2fa3f8f42f8fc1e9d-rasqal-0.9.16.tar.gz ++ fdb27bfe2dbe2e7b57ae194d9bf36bab-SampleICC-1.3.2.tar.gz ++-37282537d0ed1a087b1c8f050dc812d9-dejavu-fonts-ttf-2.32.zip ++ 831126a1ee5af269923cfab6050769fe-mysql-connector-cpp.zip ++ 067201ea8b126597670b5eff72e1f66c-mythes-1.2.0.tar.gz ++ 3404ab6b1792ae5f16bbd603bd1e1d03-libformula-1.1.7.zip ++@@ -80,6 +78,8 @@ debc62758716a169df9f62e6ab2bc634-zlib-1.2.3.tar.gz ++ f02578f5218f217a9f20e9c30e119c6a-boost_1_44_0.tar.bz2 ++ 9ed97fce60a9a65852402248a6659492-hunspell-1.3.1.tar.gz ++ http://dev-www.libreoffice.org/src +++0be45d54cc5e1c2e3102e32b8c190346-liberation-fonts-ttf-1.07.1.tar.gz +++f872f4ac066433d8ff92f5e316b36ff9-dejavu-fonts-ttf-2.33.zip ++ 3bf481ca95109b14435125c0dd1f2217-graphite2-1.0.3.tgz ++ http://download.go-oo.org/extern ++ 185d60944ea767075d27247c3162b3bc-unowinreg.dll ++-- ++1.7.5.4 ++ ++ ++From a89006502622e22340b6ee5d24bea5331e1f8b31 Mon Sep 17 00:00:00 2001 ++From: Petr Mladek ++Date: Wed, 14 Dec 2011 15:43:07 +0100 ++Subject: [bootstrap 06/11] bump product version to 3.4.5-rc1, release number ++ to 501 ++ ++--- ++ instsetoo_native/util/openoffice.lst | 28 ++++++++++++++-------------- ++ solenv/inc/minor.mk | 4 ++-- ++ 2 files changed, 16 insertions(+), 16 deletions(-) ++ ++diff --git a/instsetoo_native/util/openoffice.lst b/instsetoo_native/util/openoffice.lst ++index c981a32..f34f689 100644 ++--- instsetoo_native/util/openoffice.lst +++++ instsetoo_native/util/openoffice.lst ++@@ -5,8 +5,8 @@ Globals ++ variables ++ { ++ OOOBASEVERSION 3.4 ++- OOOPACKAGEVERSION 3.4.4 ++- UREPACKAGEVERSION 3.4.4 +++ OOOPACKAGEVERSION 3.4.5 +++ UREPACKAGEVERSION 3.4.5 ++ URELAYERVERSION 1 ++ BASISROOTNAME LibreOffice ++ UNIXBASISROOTNAME libreoffice3.4 ++@@ -62,7 +62,7 @@ LibreOffice ++ POSTVERSIONEXTENSIONUNIX ++ BRANDPACKAGEVERSION 3.4 ++ USERDIRPRODUCTVERSION 3 ++- ABOUTBOXPRODUCTVERSION 3.4.4 +++ ABOUTBOXPRODUCTVERSION 3.4.5 ++ BASEPRODUCTVERSION 3.4 ++ PCPFILENAME openoffice.pcp ++ UPDATEURL http://update.libreoffice.org/ProductUpdateService/check.Update ++@@ -74,7 +74,7 @@ LibreOffice ++ FILEFORMATNAME OpenOffice.org ++ FILEFORMATVERSION 1.0 ++ WRITERCOMPATIBILITYVERSIONOOO11 OpenOffice.org 1.1 ++- PACKAGEVERSION 3.4.4 +++ PACKAGEVERSION 3.4.5 ++ PACKAGEREVISION {buildid} ++ LICENSENAME LGPL ++ GLOBALFILEGID gid_File_Lib_Vcl ++@@ -130,7 +130,7 @@ LibreOffice_wJRE ++ POSTVERSIONEXTENSIONUNIX ++ BRANDPACKAGEVERSION 3.4 ++ USERDIRPRODUCTVERSION 3 ++- ABOUTBOXPRODUCTVERSION 3.4.4 +++ ABOUTBOXPRODUCTVERSION 3.4.5 ++ BASEPRODUCTVERSION 3.4 ++ UPDATEURL http://update.libreoffice.org/ProductUpdateService/check.Update ++ ODFNOTIFYURL http://odfnotify.libreoffice.org/OOo3.0/notification.jsp?version=ODF ++@@ -141,7 +141,7 @@ LibreOffice_wJRE ++ FILEFORMATNAME OpenOffice.org ++ FILEFORMATVERSION 1.0 ++ WRITERCOMPATIBILITYVERSIONOOO11 OpenOffice.org 1.1 ++- PACKAGEVERSION 3.4.4 +++ PACKAGEVERSION 3.4.5 ++ PACKAGEREVISION {buildid} ++ LICENSENAME LGPL ++ WITHJREPRODUCT 1 ++@@ -196,7 +196,7 @@ LibreOffice_Dev ++ POSTVERSIONEXTENSIONUNIX ++ BRANDPACKAGEVERSION 3.4 ++ USERDIRPRODUCTVERSION 3 ++- ABOUTBOXPRODUCTVERSION 3.4.4 +++ ABOUTBOXPRODUCTVERSION 3.4.5 ++ BASEPRODUCTVERSION 3.4 ++ DEVELOPMENTPRODUCT 1 ++ BASISPACKAGEPREFIX libobasis-dev ++@@ -211,7 +211,7 @@ LibreOffice_Dev ++ FILEFORMATNAME OpenOffice.org ++ FILEFORMATVERSION 1.0 ++ WRITERCOMPATIBILITYVERSIONOOO11 OpenOffice.org 1.1 ++- PACKAGEVERSION 3.4.4 +++ PACKAGEVERSION 3.4.5 ++ PACKAGEREVISION {buildid} ++ LICENSENAME LGPL ++ GLOBALFILEGID gid_File_Lib_Vcl ++@@ -309,7 +309,7 @@ LibreOffice_SDK ++ POSTVERSIONEXTENSION SDK ++ POSTVERSIONEXTENSIONUNIX sdk ++ BRANDPACKAGEVERSION 3.4 ++- PACKAGEVERSION 3.4.4 +++ PACKAGEVERSION 3.4.5 ++ PACKAGEREVISION {buildid} ++ PACK_INSTALLED 1 ++ POOLPRODUCT 0 ++@@ -357,7 +357,7 @@ LibreOffice_Dev_SDK ++ POSTVERSIONEXTENSION SDK ++ POSTVERSIONEXTENSIONUNIX sdk ++ BRANDPACKAGEVERSION 3.4 ++- PACKAGEVERSION 3.4.4 +++ PACKAGEVERSION 3.4.5 ++ PACKAGEREVISION {buildid} ++ BASISPACKAGEPREFIX libobasis-dev ++ UREPACKAGEPREFIX lodev ++@@ -408,7 +408,7 @@ OxygenOffice ++ POSTVERSIONEXTENSIONUNIX ++ BRANDPACKAGEVERSION 3.4 ++ USERDIRPRODUCTVERSION 3 ++- ABOUTBOXPRODUCTVERSION 3.4.4 +++ ABOUTBOXPRODUCTVERSION 3.4.5 ++ BASEPRODUCTVERSION 3.4 ++ PCPFILENAME openoffice.pcp ++ UPDATEURL http://update.libreoffice.org/ProductUpdateService/check.Update ++@@ -420,7 +420,7 @@ OxygenOffice ++ FILEFORMATNAME OpenOffice.org ++ FILEFORMATVERSION 1.0 ++ WRITERCOMPATIBILITYVERSIONOOO11 OpenOffice.org 1.1 ++- PACKAGEVERSION 3.4.4 +++ PACKAGEVERSION 3.4.5 ++ PACKAGEREVISION {buildid} ++ LICENSENAME LGPL ++ SERVICESPROJEKT 1 ++@@ -478,7 +478,7 @@ OxygenOffice_wJRE ++ POSTVERSIONEXTENSIONUNIX ++ BRANDPACKAGEVERSION 3.4 ++ USERDIRPRODUCTVERSION 3 ++- ABOUTBOXPRODUCTVERSION 3.4.4 +++ ABOUTBOXPRODUCTVERSION 3.4.5 ++ BASEPRODUCTVERSION 3.4 ++ UPDATEURL http://update.libreoffice.org/ProductUpdateService/check.Update ++ ODFNOTIFYURL http://odfnotify.libreoffice.org/OOo3.0/notification.jsp?version=ODF ++@@ -489,7 +489,7 @@ OxygenOffice_wJRE ++ FILEFORMATNAME OpenOffice.org ++ FILEFORMATVERSION 1.0 ++ WRITERCOMPATIBILITYVERSIONOOO11 OpenOffice.org 1.1 ++- PACKAGEVERSION 3.4.4 +++ PACKAGEVERSION 3.4.5 ++ PACKAGEREVISION {buildid} ++ LICENSENAME LGPL ++ SERVICESPROJEKT 1 ++diff --git a/solenv/inc/minor.mk b/solenv/inc/minor.mk ++index 75772f2..485a1d3 100644 ++--- solenv/inc/minor.mk +++++ solenv/inc/minor.mk ++@@ -1,5 +1,5 @@ ++ RSCVERSION=340 ++-RSCREVISION=340m1(Build:401) ++-BUILD=401 +++RSCREVISION=340m1(Build:501) +++BUILD=501 ++ LAST_MINOR=m1 ++ SOURCEVERSION=OOO340 ++-- ++1.7.5.4 ++ ++ ++From 47bc6c1726198de2acc43cb7d5282e3fcb7a32d9 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= ++Date: Wed, 21 Dec 2011 13:10:02 +0100 ++Subject: [bootstrap 09/11] fix build with bleeding edge external boost and ++ gcc ++ ++It seems that a recent boost and recent gcc causes a problem when ++boost::unordered_map is used as a baseclass for something. ++Asking gcc to use -std=c++0x mode makes gcc do the right thing. ++ ++Signed-off-by: Petr Mladek ++Signed-off-by: Michael Meeks ++Signed-off-by: David Tardon ++--- ++ solenv/gbuild/platform/unxgcc.mk | 6 ++++++ ++ 1 files changed, 6 insertions(+), 0 deletions(-) ++ ++diff --git a/solenv/gbuild/platform/unxgcc.mk b/solenv/gbuild/platform/unxgcc.mk ++index d3b63ed..3d6a088 100755 ++--- solenv/gbuild/platform/unxgcc.mk +++++ solenv/gbuild/platform/unxgcc.mk ++@@ -97,6 +97,12 @@ gb_CFLAGS += -fno-strict-aliasing ++ gb_CXXFLAGS += -fno-strict-aliasing ++ endif ++ +++ifeq ($(HAVE_CXX0X),TRUE) +++#Currently, as well as for its own merits, c++11/c++0x mode allows use to use +++#a template for SAL_N_ELEMENTS to detect at compiler time its misuse +++gb_CXXFLAGS += -std=c++0x -Wno-deprecated-declarations +++endif +++ ++ ifneq ($(EXTERNAL_WARNINGS_NOT_ERRORS),TRUE) ++ gb_CFLAGS_WERROR := -Werror ++ gb_CXXFLAGS_WERROR := -Werror ++-- ++1.7.5.4 ++ ++ ++From 9e0b7280f00eb33b7f0395aa130d1779bdb5b86f Mon Sep 17 00:00:00 2001 ++From: Petr Mladek ++Date: Tue, 3 Jan 2012 14:52:31 +0100 ++Subject: [bootstrap 10/11] bump product version to 3.4.5-rc2, release number ++ to 502 ++ ++--- ++ instsetoo_native/util/openoffice.lst | 16 ++++++++-------- ++ solenv/inc/minor.mk | 4 ++-- ++ 2 files changed, 10 insertions(+), 10 deletions(-) ++ ++diff --git a/instsetoo_native/util/openoffice.lst b/instsetoo_native/util/openoffice.lst ++index f34f689..d7de8f7 100644 ++--- instsetoo_native/util/openoffice.lst +++++ instsetoo_native/util/openoffice.lst ++@@ -57,7 +57,7 @@ LibreOffice ++ PRODUCTVERSION 3.4 ++ PRODUCTEXTENSION ++ LONG_PRODUCTEXTENSION ++- SHORT_PRODUCTEXTENSION rc1 +++ SHORT_PRODUCTEXTENSION rc2 ++ POSTVERSIONEXTENSION ++ POSTVERSIONEXTENSIONUNIX ++ BRANDPACKAGEVERSION 3.4 ++@@ -125,7 +125,7 @@ LibreOffice_wJRE ++ PRODUCTVERSION 3.4 ++ PRODUCTEXTENSION ++ LONG_PRODUCTEXTENSION ++- SHORT_PRODUCTEXTENSION rc1 +++ SHORT_PRODUCTEXTENSION rc2 ++ POSTVERSIONEXTENSION ++ POSTVERSIONEXTENSIONUNIX ++ BRANDPACKAGEVERSION 3.4 ++@@ -189,7 +189,7 @@ LibreOffice_Dev ++ PRODUCTVERSION 3.4 ++ PRODUCTEXTENSION ++ LONG_PRODUCTEXTENSION ++- SHORT_PRODUCTEXTENSION rc1 +++ SHORT_PRODUCTEXTENSION rc2 ++ BASISROOTNAME LibO-dev ++ UNIXBASISROOTNAME lo-dev ++ POSTVERSIONEXTENSION ++@@ -266,7 +266,7 @@ URE ++ PRODUCTEXTENSION ++ BRANDPACKAGEVERSION 3.4 ++ LONG_PRODUCTEXTENSION ++- SHORT_PRODUCTEXTENSION rc1 +++ SHORT_PRODUCTEXTENSION rc2 ++ LICENSENAME LGPL ++ SETSTATICPATH 1 ++ NOVERSIONINDIRNAME 1 ++@@ -305,7 +305,7 @@ LibreOffice_SDK ++ PRODUCTVERSION 3.4 ++ PRODUCTEXTENSION ++ LONG_PRODUCTEXTENSION ++- SHORT_PRODUCTEXTENSION rc1 +++ SHORT_PRODUCTEXTENSION rc2 ++ POSTVERSIONEXTENSION SDK ++ POSTVERSIONEXTENSIONUNIX sdk ++ BRANDPACKAGEVERSION 3.4 ++@@ -351,7 +351,7 @@ LibreOffice_Dev_SDK ++ PRODUCTVERSION 3.4 ++ PRODUCTEXTENSION ++ LONG_PRODUCTEXTENSION ++- SHORT_PRODUCTEXTENSION rc1 +++ SHORT_PRODUCTEXTENSION rc2 ++ BASISROOTNAME LibO-dev ++ UNIXBASISROOTNAME lo-dev ++ POSTVERSIONEXTENSION SDK ++@@ -403,7 +403,7 @@ OxygenOffice ++ PRODUCTVERSION 3.4 ++ PRODUCTEXTENSION ++ LONG_PRODUCTEXTENSION ++- SHORT_PRODUCTEXTENSION rc1 +++ SHORT_PRODUCTEXTENSION rc2 ++ POSTVERSIONEXTENSION ++ POSTVERSIONEXTENSIONUNIX ++ BRANDPACKAGEVERSION 3.4 ++@@ -473,7 +473,7 @@ OxygenOffice_wJRE ++ PRODUCTVERSION 3.4 ++ PRODUCTEXTENSION ++ LONG_PRODUCTEXTENSION ++- SHORT_PRODUCTEXTENSION rc1 +++ SHORT_PRODUCTEXTENSION rc2 ++ POSTVERSIONEXTENSION ++ POSTVERSIONEXTENSIONUNIX ++ BRANDPACKAGEVERSION 3.4 ++diff --git a/solenv/inc/minor.mk b/solenv/inc/minor.mk ++index 485a1d3..cd04a68 100644 ++--- solenv/inc/minor.mk +++++ solenv/inc/minor.mk ++@@ -1,5 +1,5 @@ ++ RSCVERSION=340 ++-RSCREVISION=340m1(Build:501) ++-BUILD=501 +++RSCREVISION=340m1(Build:502) +++BUILD=502 ++ LAST_MINOR=m1 ++ SOURCEVERSION=OOO340 ++-- ++1.7.5.4 ++ ++reverting on repository calc from libreoffice-3.4.4.2 to merge-base e9efd55a0b53792e03d3d18b9a6dcb979cfc9009 ++commits on repository calc merge-base e9efd55a0b53792e03d3d18b9a6dcb979cfc9009 to libreoffice-3.4.5.2 ++From e6c3ff17ced2aa004eda5ab3a52bc26d4fea74b7 Mon Sep 17 00:00:00 2001 ++From: Kohei Yoshida ++Date: Tue, 1 Nov 2011 15:49:42 +0000 ++Subject: [calc 01/12] fdo#40110: Correctly map external ranges into matrix ++ instances. ++ ++This is a simple silly mistake; the matrix representation of the ++external range should've preserved the original range; not the data ++range which can be smaller than the originally requested range. ++ ++Signed-off-by: Markus Mohrhard ++--- ++ sc/source/ui/docshell/externalrefmgr.cxx | 79 +++++++++++++++--------------- ++ 1 files changed, 39 insertions(+), 40 deletions(-) ++ ++diff --git a/sc/source/ui/docshell/externalrefmgr.cxx b/sc/source/ui/docshell/externalrefmgr.cxx ++index 1bfdc8b..295b123 100644 ++--- sc/source/ui/docshell/externalrefmgr.cxx +++++ sc/source/ui/docshell/externalrefmgr.cxx ++@@ -1403,8 +1403,8 @@ static ScTokenArray* lcl_convertToTokenArray(const ScDocument* pSrcDoc, ScRange& ++ pUsedRange.reset(new ScRange(nDataCol1, nDataRow1, 0, nDataCol2, nDataRow2, 0)); ++ ++ ScMatrixRef xMat = new ScMatrix( ++- static_cast(nDataCol2-nDataCol1+1), ++- static_cast(nDataRow2-nDataRow1+1)); +++ static_cast(nCol2-nCol1+1), +++ static_cast(nRow2-nRow1+1), ScMatrix::SPARSE_EMPTY); ++ ++ for (SCCOL nCol = nDataCol1; nCol <= nDataCol2; ++nCol) ++ { ++@@ -1414,53 +1414,52 @@ static ScTokenArray* lcl_convertToTokenArray(const ScDocument* pSrcDoc, ScRange& ++ ScBaseCell* pCell; ++ pSrcDoc->GetCell(nCol, nRow, nTab, pCell); ++ if (!pCell || pCell->HasEmptyData()) ++- xMat->PutEmpty(nC, nR); ++- else +++ // Skip empty cells. Matrix's default values are empty elements. +++ continue; +++ +++ switch (pCell->GetCellType()) ++ { ++- switch (pCell->GetCellType()) +++ case CELLTYPE_EDIT: +++ { +++ String aStr; +++ static_cast(pCell)->GetString(aStr); +++ xMat->PutString(aStr, nC, nR); +++ } +++ break; +++ case CELLTYPE_STRING: +++ { +++ String aStr; +++ static_cast(pCell)->GetString(aStr); +++ xMat->PutString(aStr, nC, nR); +++ } +++ break; +++ case CELLTYPE_VALUE: +++ { +++ double fVal = static_cast(pCell)->GetValue(); +++ xMat->PutDouble(fVal, nC, nR); +++ } +++ break; +++ case CELLTYPE_FORMULA: ++ { ++- case CELLTYPE_EDIT: +++ ScFormulaCell* pFCell = static_cast(pCell); +++ sal_uInt16 nError = pFCell->GetErrCode(); +++ if (nError) +++ xMat->PutDouble( CreateDoubleError( nError), nC, nR); +++ else if (pFCell->IsValue()) ++ { ++- String aStr; ++- static_cast(pCell)->GetString(aStr); ++- xMat->PutString(aStr, nC, nR); +++ double fVal = pFCell->GetValue(); +++ xMat->PutDouble(fVal, nC, nR); ++ } ++- break; ++- case CELLTYPE_STRING: +++ else ++ { ++ String aStr; ++- static_cast(pCell)->GetString(aStr); +++ pFCell->GetString(aStr); ++ xMat->PutString(aStr, nC, nR); ++ } ++- break; ++- case CELLTYPE_VALUE: ++- { ++- double fVal = static_cast(pCell)->GetValue(); ++- xMat->PutDouble(fVal, nC, nR); ++- } ++- break; ++- case CELLTYPE_FORMULA: ++- { ++- ScFormulaCell* pFCell = static_cast(pCell); ++- sal_uInt16 nError = pFCell->GetErrCode(); ++- if (nError) ++- xMat->PutDouble( CreateDoubleError( nError), nC, nR); ++- else if (pFCell->IsValue()) ++- { ++- double fVal = pFCell->GetValue(); ++- xMat->PutDouble(fVal, nC, nR); ++- } ++- else ++- { ++- String aStr; ++- pFCell->GetString(aStr); ++- xMat->PutString(aStr, nC, nR); ++- } ++- } ++- break; ++- default: ++- OSL_FAIL("attempted to convert an unknown cell type."); ++ } +++ break; +++ default: +++ OSL_FAIL("attempted to convert an unknown cell type."); ++ } ++ } ++ } ++-- ++1.7.5.4 ++ ++ ++From 68b5341c063fde933a347db6104c0df774d9ab26 Mon Sep 17 00:00:00 2001 ++From: Markus Mohrhard ++Date: Tue, 1 Nov 2011 17:08:19 +0100 ++Subject: [calc 02/12] boolean values are valid for matrix evaluation ++ (fdo#49967) ++ ++Signed-off-by: Kohei Yoshida ++--- ++ sc/source/core/tool/scmatrix.cxx | 2 +- ++ 1 files changed, 1 insertions(+), 1 deletions(-) ++ ++diff --git a/sc/source/core/tool/scmatrix.cxx b/sc/source/core/tool/scmatrix.cxx ++index fcdf412..ac1c7a4 100644 ++--- sc/source/core/tool/scmatrix.cxx +++++ sc/source/core/tool/scmatrix.cxx ++@@ -733,7 +733,7 @@ bool EvalMatrix(const MatrixImplType& rMat) ++ for (size_t j = 0; j < nCols; ++j) ++ { ++ matrix_element_t eType = rMat.get_type(i, j); ++- if (eType != mdds::element_numeric && eType == mdds::element_boolean) +++ if (eType != mdds::element_numeric && eType != mdds::element_boolean) ++ // assuming a CompareMat this is an error ++ return CreateDoubleError(errIllegalArgument); ++ ++-- ++1.7.5.4 ++ ++ ++From 65d15137bae588574107680846097fe5c4d7c533 Mon Sep 17 00:00:00 2001 ++From: Markus Mohrhard ++Date: Tue, 1 Nov 2011 21:56:10 +0100 ++Subject: [calc 03/12] prevent access to non existing mdds elements ++ (fdo#41807) ++ ++Signed-off-by: Kohei Yoshida ++--- ++ sc/source/core/tool/scmatrix.cxx | 6 ++++-- ++ 1 files changed, 4 insertions(+), 2 deletions(-) ++ ++diff --git a/sc/source/core/tool/scmatrix.cxx b/sc/source/core/tool/scmatrix.cxx ++index ac1c7a4..3074e36 100644 ++--- sc/source/core/tool/scmatrix.cxx +++++ sc/source/core/tool/scmatrix.cxx ++@@ -592,8 +592,10 @@ bool ScMatrixImpl::IsEmpty( SCSIZE nC, SCSIZE nR ) const ++ bool ScMatrixImpl::IsEmptyPath( SCSIZE nC, SCSIZE nR ) const ++ { ++ // 'Empty path' is empty plus non-zero flag. ++- ValidColRowReplicated( nC, nR ); ++- return maMat.get_type(nR, nC) == ::mdds::element_empty && maMat.get_flag(nR, nC) != 0; +++ if (ValidColRowReplicated( nC, nR )) +++ return maMat.get_type(nR, nC) == ::mdds::element_empty && maMat.get_flag(nR, nC) != 0; +++ else +++ return true; ++ } ++ ++ bool ScMatrixImpl::IsValue( SCSIZE nIndex ) const ++-- ++1.7.5.4 ++ ++ ++From 19e143362cd88917c0466d5133fa4ca63988c106 Mon Sep 17 00:00:00 2001 ++From: Markus Mohrhard ++Date: Wed, 2 Nov 2011 12:34:27 +0100 ++Subject: [calc 04/12] we need to use ValidColRowOrRepeated, silly mistake by ++ me. ++ ++Signed-off-by: Kohei Yoshida ++--- ++ sc/source/core/tool/scmatrix.cxx | 2 +- ++ 1 files changed, 1 insertions(+), 1 deletions(-) ++ ++diff --git a/sc/source/core/tool/scmatrix.cxx b/sc/source/core/tool/scmatrix.cxx ++index 3074e36..912eef1 100644 ++--- sc/source/core/tool/scmatrix.cxx +++++ sc/source/core/tool/scmatrix.cxx ++@@ -592,7 +592,7 @@ bool ScMatrixImpl::IsEmpty( SCSIZE nC, SCSIZE nR ) const ++ bool ScMatrixImpl::IsEmptyPath( SCSIZE nC, SCSIZE nR ) const ++ { ++ // 'Empty path' is empty plus non-zero flag. ++- if (ValidColRowReplicated( nC, nR )) +++ if (ValidColRowOrReplicated( nC, nR )) ++ return maMat.get_type(nR, nC) == ::mdds::element_empty && maMat.get_flag(nR, nC) != 0; ++ else ++ return true; ++-- ++1.7.5.4 ++ ++ ++From 0aff5fa1f53a3172463663c2546793e84ea2492f Mon Sep 17 00:00:00 2001 ++From: Kohei Yoshida ++Date: Mon, 24 Oct 2011 14:35:26 -0400 ++Subject: [calc 05/12] fdo#42169: Display caption strings without format ++ detection. ++ ++We don't need to auto-detect the formats of caption values; they are ++already formatted by the time they arrive in to ScDPOutput. ++ ++Signed-off-by: Markus Mohrhard ++--- ++ sc/source/core/data/dpoutput.cxx | 15 +++++++++++++-- ++ 1 files changed, 13 insertions(+), 2 deletions(-) ++ ++diff --git a/sc/source/core/data/dpoutput.cxx b/sc/source/core/data/dpoutput.cxx ++index a48f0b6..6902252 100644 ++--- sc/source/core/data/dpoutput.cxx +++++ sc/source/core/data/dpoutput.cxx ++@@ -57,6 +57,8 @@ ++ #include "unonames.hxx" ++ #include "sc.hrc" ++ #include "dpglobal.hxx" +++#include "stringutil.hxx" +++ ++ #include ++ ++ #include ++@@ -795,7 +797,11 @@ void ScDPOutput::HeaderCell( SCCOL nCol, SCROW nRow, SCTAB nTab, ++ ++ if ( nFlags & sheet::MemberResultFlags::HASMEMBER ) ++ { ++- pDoc->SetString( nCol, nRow, nTab, rData.Caption); +++ // Avoid unwanted automatic format detection. +++ ScSetStringParam aParam; +++ aParam.mbDetectNumberFormat = false; +++ aParam.mbSetTextCellFormat = true; +++ pDoc->SetString(nCol, nRow, nTab, rData.Caption, &aParam); ++ } ++ ++ if ( nFlags & sheet::MemberResultFlags::SUBTOTAL ) ++@@ -827,7 +833,12 @@ void ScDPOutput::HeaderCell( SCCOL nCol, SCROW nRow, SCTAB nTab, ++ void ScDPOutput::FieldCell( SCCOL nCol, SCROW nRow, SCTAB nTab, const String& rCaption, ++ bool bInTable, bool bPopup, bool bHasHiddenMember ) ++ { ++- pDoc->SetString( nCol, nRow, nTab, rCaption ); +++ // Avoid unwanted automatic format detection. +++ ScSetStringParam aParam; +++ aParam.mbDetectNumberFormat = false; +++ aParam.mbSetTextCellFormat = true; +++ pDoc->SetString(nCol, nRow, nTab, rCaption, &aParam); +++ ++ if (bInTable) ++ lcl_SetFrame( pDoc,nTab, nCol,nRow, nCol,nRow, 20 ); ++ ++-- ++1.7.5.4 ++ ++ ++From a1582914e1150efe1664204b53fdcbaf9b713652 Mon Sep 17 00:00:00 2001 ++From: Kohei Yoshida ++Date: Fri, 11 Nov 2011 13:00:25 +0100 ++Subject: [calc 06/12] Fixed the wrong keyboard selection behavior in ++ reference mode. ++ ++This one is pretty bad, especially for those who like to select ++ranges using keyboard. ++ ++Signed-off-by: Eike Rathke ++--- ++ sc/source/ui/view/tabview2.cxx | 2 ++ ++ 1 files changed, 2 insertions(+), 0 deletions(-) ++ ++diff --git a/sc/source/ui/view/tabview2.cxx b/sc/source/ui/view/tabview2.cxx ++index d755e54..db9a8b7 100644 ++--- sc/source/ui/view/tabview2.cxx +++++ sc/source/ui/view/tabview2.cxx ++@@ -426,6 +426,8 @@ void ScTabView::GetAreaMoveEndPosition(SCsCOL nMovX, SCsROW nMovY, ScFollowMode ++ { ++ nNewX = aViewData.GetRefEndX(); ++ nNewY = aViewData.GetRefEndY(); +++ nCurX = aViewData.GetRefStartX(); +++ nCurY = aViewData.GetRefStartY(); ++ } ++ else if (IsBlockMode()) ++ { ++-- ++1.7.5.4 ++ ++ ++From 0bde24644b5457aa193ecc84ba37169a967de1c6 Mon Sep 17 00:00:00 2001 ++From: Kohei Yoshida ++Date: Wed, 23 Nov 2011 18:23:14 -0500 ++Subject: [calc 07/12] fdo#39589: Avoid using ulimit_cast between signed and ++ unsigned. ++ ++If you do, things go very very wrong. These *limit_cast try to be ++clever and check ranges of various types before casting, but they ++fail to do the right thing when casting a signed integer into unsigned. ++ ++Signed-off-by: Lionel Elie Mamane ++--- ++ sc/source/filter/excel/xeview.cxx | 4 ++-- ++ 1 files changed, 2 insertions(+), 2 deletions(-) ++ ++diff --git a/sc/source/filter/excel/xeview.cxx b/sc/source/filter/excel/xeview.cxx ++index 437a953..5a02c3f 100644 ++--- sc/source/filter/excel/xeview.cxx +++++ sc/source/filter/excel/xeview.cxx ++@@ -368,8 +368,8 @@ XclExpTabViewSettings::XclExpTabViewSettings( const XclExpRoot& rRoot, SCTAB nSc ++ else ++ { ++ // split window: position is in twips ++- maData.mnSplitX = ulimit_cast< sal_uInt16 >( rTabSett.maSplitPos.X() ); ++- maData.mnSplitY = ulimit_cast< sal_uInt32 >( rTabSett.maSplitPos.Y() ); +++ maData.mnSplitX = static_cast(rTabSett.maSplitPos.X()); +++ maData.mnSplitY = static_cast(rTabSett.maSplitPos.Y()); ++ } ++ ++ // selection ++-- ++1.7.5.4 ++ ++ ++From 53757e9d714d6b3cde83d5b4c390e9e2739bfb2c Mon Sep 17 00:00:00 2001 ++From: Kohei Yoshida ++Date: Wed, 7 Dec 2011 10:38:25 -0500 ++Subject: [calc 08/12] fdo#43308: Set the logic straight for "center across ++ selection" setting. ++ ++Another unfortunate logic change introduced via DECLARE_LIST removal. ++Reverting the logic to the original one. ++ ++Signed-off-by: Eike Rathke ++--- ++ sc/source/filter/excel/xistyle.cxx | 12 +++--------- ++ 1 files changed, 3 insertions(+), 9 deletions(-) ++ ++diff --git a/sc/source/filter/excel/xistyle.cxx b/sc/source/filter/excel/xistyle.cxx ++index 1f6e680..045e753 100644 ++--- sc/source/filter/excel/xistyle.cxx +++++ sc/source/filter/excel/xistyle.cxx ++@@ -1833,15 +1833,9 @@ void XclImpXFRangeBuffer::SetXF( const ScAddress& rScPos, sal_uInt16 nXFIndex, X ++ if( pXF && ((pXF->GetHorAlign() == EXC_XF_HOR_CENTER_AS) || (pXF->GetHorAlign() == EXC_XF_HOR_FILL)) ) ++ { ++ // expand last merged range if this attribute is set repeatedly ++- if ( !maMergeList.empty() ) ++- { ++- ScRange* pRange = maMergeList.back(); ++- if( (pRange->aEnd.Row() == nScRow) ++- && (pRange->aEnd.Col() + 1 == nScCol) ++- && (eMode == xlXFModeBlank) ++- ) ++- pRange->aEnd.IncCol(); ++- } +++ ScRange* pRange = maMergeList.empty() ? NULL : maMergeList.back(); +++ if (pRange && (pRange->aEnd.Row() == nScRow) && (pRange->aEnd.Col() + 1 == nScCol) && (eMode == xlXFModeBlank)) +++ pRange->aEnd.IncCol(); ++ else if( eMode != xlXFModeBlank ) // do not merge empty cells ++ SetMerge( nScCol, nScRow ); ++ } ++-- ++1.7.5.4 ++ ++ ++From fbdddb784108b9f4e5e3d76c50b9aac81c73a019 Mon Sep 17 00:00:00 2001 ++From: Eike Rathke ++Date: Mon, 12 Dec 2011 19:01:42 +0100 ++Subject: [calc 09/12] fixed rhbz#754051 Libreoffice calc crashes when ++ re-opening a xlxs file ++ ++ScMatrixImpl lacked initialization of pErrorInterpreter=NULL. ++ ++Signed-off-by: Kohei Yoshida ++--- ++ sc/source/core/tool/scmatrix.cxx | 1 + ++ 1 files changed, 1 insertions(+), 0 deletions(-) ++ ++diff --git a/sc/source/core/tool/scmatrix.cxx b/sc/source/core/tool/scmatrix.cxx ++index 912eef1..e53ca6b 100644 ++--- sc/source/core/tool/scmatrix.cxx +++++ sc/source/core/tool/scmatrix.cxx ++@@ -244,6 +244,7 @@ private: ++ ScMatrixImpl::ScMatrixImpl(SCSIZE nC, SCSIZE nR, ScMatrix::DensityType eType) : ++ maMat(nR, nC, toMddsDensityType(eType)), ++ meType(eType), +++ pErrorInterpreter(NULL), ++ mbCloneIfConst(true) ++ { ++ } ++-- ++1.7.5.4 ++ ++reverting on repository components from libreoffice-3.4.4.2 to merge-base 4e6f5a0fdf498fa932cde42b3a920e34cd666df2 ++diff --git a/extensions/source/ole/unoconversionutilities.hxx b/extensions/source/ole/unoconversionutilities.hxx ++index 99f49c9..328fec4 100644 ++--- extensions/source/ole/unoconversionutilities.hxx +++++ extensions/source/ole/unoconversionutilities.hxx ++@@ -134,7 +134,7 @@ public: ++ /** @exception com.sun.star.lang.IllegalArgumentException ++ If rSeq does not contain a sequence then the exception is thrown. ++ */ ++- VARTYPE createUnoSequenceWrapper(const Any& rSeq, SAFEARRAY*& pOutArray ); +++ SAFEARRAY* createUnoSequenceWrapper(const Any& rSeq); ++ /** @exception com.sun.star.lang.IllegalArgumentException ++ If rSeq does not contain a sequence or elemtype has no proper value ++ then the exception is thrown. ++@@ -779,12 +779,11 @@ void UnoConversionUtilities::anyToVariant(VARIANT* pVariant, const Any& rAny) ++ } ++ case TypeClass_SEQUENCE: // sequence ??? SafeArray descriptor ++ { ++- SAFEARRAY* pOutArray = NULL; ++- VARTYPE eArrayType = createUnoSequenceWrapper(rAny, pOutArray ); ++- if (pOutArray) +++ SAFEARRAY* pArray = createUnoSequenceWrapper(rAny); +++ if (pArray) ++ { ++- V_VT(pVariant) = VT_ARRAY | eArrayType; ++- V_ARRAY(pVariant) = pOutArray; +++ V_VT(pVariant) = VT_ARRAY | VT_VARIANT; +++ V_ARRAY(pVariant) = pArray; ++ } ++ else ++ { ++@@ -1296,8 +1295,9 @@ void UnoConversionUtilities::getElementCountAndTypeOfSequence( const Any& rS ++ ++ ++ template ++-VARTYPE UnoConversionUtilities::createUnoSequenceWrapper(const Any& rSeq, SAFEARRAY*& pArray) +++SAFEARRAY* UnoConversionUtilities::createUnoSequenceWrapper(const Any& rSeq) ++ { +++ SAFEARRAY* pArray = NULL; ++ sal_uInt32 n = 0; ++ ++ if( rSeq.getValueTypeClass() != TypeClass_SEQUENCE ) ++@@ -1361,7 +1361,7 @@ VARTYPE UnoConversionUtilities::createUnoSequenceWrapper(const Any& rSeq, SA ++ ++ TYPELIB_DANGER_RELEASE( pSeqElementDesc); ++ ++- return eTargetElementType; +++ return pArray; ++ } ++ ++ /* The argument rObj can contain ++diff --git a/setup_native/source/mac/ooo/DS_Store b/setup_native/source/mac/ooo/DS_Store ++index fec0edc..9431578 100644 ++Binary files a/setup_native/source/mac/ooo/DS_Store and b/setup_native/source/mac/ooo/DS_Store differ ++commits on repository components merge-base 4e6f5a0fdf498fa932cde42b3a920e34cd666df2 to libreoffice-3.4.5.2 ++From ab802aee181ca6df397ca53e461d5f53808cef9d Mon Sep 17 00:00:00 2001 ++From: Noel Power ++Date: Wed, 26 Oct 2011 17:28:51 +0100 ++Subject: [components 1/9] fix handling of SAFEARRAY(s) returned as variant in ++ olebridge (fdo#38441) ++ ++Signed-off-by: Michael Stahl ++--- ++ extensions/source/ole/unoconversionutilities.hxx | 16 ++++++++-------- ++ 1 files changed, 8 insertions(+), 8 deletions(-) ++ ++diff --git a/extensions/source/ole/unoconversionutilities.hxx b/extensions/source/ole/unoconversionutilities.hxx ++index 328fec4..99f49c9 100644 ++--- extensions/source/ole/unoconversionutilities.hxx +++++ extensions/source/ole/unoconversionutilities.hxx ++@@ -134,7 +134,7 @@ public: ++ /** @exception com.sun.star.lang.IllegalArgumentException ++ If rSeq does not contain a sequence then the exception is thrown. ++ */ ++- SAFEARRAY* createUnoSequenceWrapper(const Any& rSeq); +++ VARTYPE createUnoSequenceWrapper(const Any& rSeq, SAFEARRAY*& pOutArray ); ++ /** @exception com.sun.star.lang.IllegalArgumentException ++ If rSeq does not contain a sequence or elemtype has no proper value ++ then the exception is thrown. ++@@ -779,11 +779,12 @@ void UnoConversionUtilities::anyToVariant(VARIANT* pVariant, const Any& rAny) ++ } ++ case TypeClass_SEQUENCE: // sequence ??? SafeArray descriptor ++ { ++- SAFEARRAY* pArray = createUnoSequenceWrapper(rAny); ++- if (pArray) +++ SAFEARRAY* pOutArray = NULL; +++ VARTYPE eArrayType = createUnoSequenceWrapper(rAny, pOutArray ); +++ if (pOutArray) ++ { ++- V_VT(pVariant) = VT_ARRAY | VT_VARIANT; ++- V_ARRAY(pVariant) = pArray; +++ V_VT(pVariant) = VT_ARRAY | eArrayType; +++ V_ARRAY(pVariant) = pOutArray; ++ } ++ else ++ { ++@@ -1295,9 +1296,8 @@ void UnoConversionUtilities::getElementCountAndTypeOfSequence( const Any& rS ++ ++ ++ template ++-SAFEARRAY* UnoConversionUtilities::createUnoSequenceWrapper(const Any& rSeq) +++VARTYPE UnoConversionUtilities::createUnoSequenceWrapper(const Any& rSeq, SAFEARRAY*& pArray) ++ { ++- SAFEARRAY* pArray = NULL; ++ sal_uInt32 n = 0; ++ ++ if( rSeq.getValueTypeClass() != TypeClass_SEQUENCE ) ++@@ -1361,7 +1361,7 @@ SAFEARRAY* UnoConversionUtilities::createUnoSequenceWrapper(const Any& rSeq) ++ ++ TYPELIB_DANGER_RELEASE( pSeqElementDesc); ++ ++- return pArray; +++ return eTargetElementType; ++ } ++ ++ /* The argument rObj can contain ++-- ++1.7.5.4 ++ ++ ++From 4fc80f9a1dcd3a1705a0e4c2b092a3804ca4b554 Mon Sep 17 00:00:00 2001 ++From: Thorsten Behrens ++Date: Tue, 1 Nov 2011 14:26:25 +0100 ++Subject: [components 2/9] Fix .dmg background image some more. ++ ++Signed-off-by: Alexander Thurgood ++--- ++ setup_native/source/mac/ooo/DS_Store | Bin 15364 -> 15364 bytes ++ 1 files changed, 0 insertions(+), 0 deletions(-) ++ ++diff --git a/setup_native/source/mac/ooo/DS_Store b/setup_native/source/mac/ooo/DS_Store ++index 9431578cebb32e64e13ce1db4aa0babb93692eac..fec0edc61bc534022ce6021f52bd1720b5cd8326 100644 ++GIT binary patch ++delta 942 ++zcmZpvXsOt+QGmnP*hojg$lPS|PJz2jtlE=j2x{ua3kWAACTFJ?<(KBAIOpf&7dhpW ++zrbc8Y=jR1yR;9+~BqpWi_~$w0mz3n^PW~>~G5LX@_~c$8c_I4`3}B$_-~(ZBPQEQ- ++z&gC!2oCM-CCrw@|s=#vUY~J+ACq;cgjH#0)#f$__oee4n$_p}ZFfahwrIVw@*0O&A ++zX<_^_nO|H%=al77T@P&_pLgD2d7sQA|9E3P6FrlnWW#vh#AN^A_zGoL7b8<=y_DSa ++ziG_;ne3xQQU1`#qY%MHb&*_q1o|luKm{QEZAON<(@-8pjwksu4AZr+SKt?mLCa+>( ++zC@5uMVz39Ao0(UVU!0-f;bIk9oLW?Dm78h>H_M8ED;OB~7%~`)8GM8oG8vK>{2Ahb ++z96bgT5T2|rVJ@u8P{feRkjRk2P!42eGL$f+PEM83lyd{yrJtLs54TGnVb|o<64Ld$ ++zMX8A?Ivn%{!sUNt|1qUwg@C;o?#?3++pM)ni@BsiWP4Qd+ ++ ++delta 818 ++zcmd6k&ubGw6vyB0D9r{f*(7ahEhG?%2}%}X71>LpUQ$x&L5uaE>t?egtDBja*_5>^ ++zDN=u6_0SH27xCa9pe1+^58^>E;6-}sA*Tx7L=Z1t>dTL!m)@P>&HKK`y1z#d-BAw#8mc_cpK`-WLrE_)5?NlF?!xvvc(5=G-iaNMbo-ouCoR$%~Z{@ecE+Q ++zF21V|hcCNk(RSzP8RmJcDxQSnhjX*gTgmAkeKDuX<6R|>3n!YGY!~jY=Z^v?tCb65 ++zjQb^8awzvq*EJ|}S(#;Ow7hoXNB|2K+M7?`i%v9tjxfdmLJ$CG7yP@}PVMQZ?7fb};ZgDc{PVolB(b<5UWr^t-snJL|J ++z8MSqbRcq*}$8~OdjhaDC&sntfL3P!%bR^OD;)Y?!!Wb~%;6n*0nu8|?4@_`z8yGS4 ++zEC^*38K?mjosneInCEt#YhI_9TM{NE*Nh4j{O* ++z1CY$6y1#;=`%&U^INekN$=s!W5{H|{r{od10(amsyo6Wq4n9E#zQHePNQy`k(j+-c ++zX30FcNUjox)CngIvP5o?+x;H0H0Tu{_< ++Date: Wed, 9 Nov 2011 08:54:35 +0100 ++Subject: [components 3/9] Backport reading AES-encrypted ODF 1.2 documents ++ (as genereated by LibO 3.5). ++ ++This backports the reading half of CWS mav60 plus "Produce ++correct sha256 uri, consume correct uri and original spec typo." It spans the ++repos components, libs-core, libs-gui, and ure. ++--- ++ package/inc/EncryptedDataHeader.hxx | 8 +- ++ package/inc/EncryptionData.hxx | 52 ++- ++ package/inc/PackageConstants.hxx | 20 +- ++ package/inc/ZipFile.hxx | 35 +- ++ package/inc/ZipOutputStream.hxx | 37 +- ++ package/inc/ZipPackage.hxx | 15 +- ++ package/inc/ZipPackageEntry.hxx | 106 ++++ ++ package/inc/ZipPackageFolder.hxx | 4 +- ++ package/inc/ZipPackageStream.hxx | 216 ++++++++ ++ package/qa/storages/TestHelper.java | 16 +- ++ package/source/manifest/Base64Codec.cxx | 8 +- ++ package/source/manifest/Base64Codec.hxx | 4 +- ++ package/source/manifest/ManifestDefines.hxx | 20 + ++ package/source/manifest/ManifestExport.cxx | 2 +- ++ package/source/manifest/ManifestImport.cxx | 134 +++++- ++ package/source/manifest/ManifestImport.hxx | 29 +- ++ package/source/xstor/owriteablestream.cxx | 162 +++---- ++ package/source/xstor/xstorage.cxx | 139 +++++- ++ package/source/xstor/xstorage.hxx | 9 +- ++ package/source/zipapi/EntryInputStream.cxx | 205 -------- ++ package/source/zipapi/EntryInputStream.hxx | 85 ---- ++ package/source/zipapi/XFileStream.cxx | 230 --------- ++ package/source/zipapi/XFileStream.hxx | 95 ---- ++ package/source/zipapi/XMemoryStream.cxx | 55 -- ++ package/source/zipapi/XMemoryStream.hxx | 45 -- ++ package/source/zipapi/XUnbufferedStream.cxx | 75 ++-- ++ package/source/zipapi/XUnbufferedStream.hxx | 13 +- ++ package/source/zipapi/ZipFile.cxx | 288 ++++++++--- ++ package/source/zipapi/ZipOutputStream.cxx | 102 +++-- ++ package/source/zipapi/blowfishcontext.cxx | 122 +++++ ++ package/source/zipapi/blowfishcontext.hxx | 58 +++ ++ package/source/zipapi/makefile.mk | 2 + ++ package/source/zipapi/sha1context.cxx | 97 ++++ ++ package/source/zipapi/sha1context.hxx | 57 +++ ++ package/source/zippackage/ZipPackage.cxx | 252 ++++++++-- ++ package/source/zippackage/ZipPackageEntry.hxx | 106 ---- ++ package/source/zippackage/ZipPackageFolder.cxx | 54 ++- ++ package/source/zippackage/ZipPackageStream.cxx | 238 +++++++-- ++ package/source/zippackage/ZipPackageStream.hxx | 196 -------- ++ package/source/zippackage/zipfileaccess.cxx | 5 +- ++ .../inc/xmlsecurity/digitalsignaturesdialog.hxx | 2 +- ++ xmlsecurity/inc/xmlsecurity/xmlsignaturehelper.hxx | 5 +- ++ .../source/component/documentdigitalsignatures.cxx | 8 +- ++ .../source/dialogs/digitalsignaturesdialog.cxx | 4 +- ++ xmlsecurity/source/helper/xmlsignaturehelper.cxx | 6 +- ++ xmlsecurity/source/xmlsec/makefile.mk | 6 +- ++ xmlsecurity/source/xmlsec/nss/ciphercontext.cxx | 276 +++++++++++ ++ xmlsecurity/source/xmlsec/nss/ciphercontext.hxx | 89 ++++ ++ xmlsecurity/source/xmlsec/nss/digestcontext.cxx | 101 ++++ ++ xmlsecurity/source/xmlsec/nss/digestcontext.hxx | 68 +++ ++ xmlsecurity/source/xmlsec/nss/makefile.mk | 20 +- ++ xmlsecurity/source/xmlsec/nss/nssinitializer.cxx | 521 ++++++++++++++++++++ ++ xmlsecurity/source/xmlsec/nss/nssinitializer.hxx | 90 ++++ ++ .../xmlsec/nss/securityenvironment_nssimpl.cxx | 38 ++- ++ .../source/xmlsec/nss/seinitializer_nssimpl.cxx | 355 +------------- ++ .../source/xmlsec/nss/seinitializer_nssimpl.hxx | 34 +- ++ .../source/xmlsec/nss/x509certificate_nssimpl.cxx | 28 +- ++ xmlsecurity/source/xmlsec/nss/xsec_nss.cxx | 34 +- ++ xmlsecurity/source/xmlsec/xsec_xmlsec.cxx | 4 - ++ xmlsecurity/util/makefile.mk | 10 +- ++ xmlsecurity/util/xsec_xmlsec.component | 1 + ++ xmlsecurity/util/xsec_xmlsec.windows.component | 3 + ++ 62 files changed, 3208 insertions(+), 1891 deletions(-) ++ create mode 100644 package/inc/ZipPackageEntry.hxx ++ create mode 100644 package/inc/ZipPackageStream.hxx ++ delete mode 100644 package/source/zipapi/EntryInputStream.cxx ++ delete mode 100644 package/source/zipapi/EntryInputStream.hxx ++ delete mode 100644 package/source/zipapi/XFileStream.cxx ++ delete mode 100644 package/source/zipapi/XFileStream.hxx ++ delete mode 100644 package/source/zipapi/XMemoryStream.cxx ++ delete mode 100644 package/source/zipapi/XMemoryStream.hxx ++ create mode 100644 package/source/zipapi/blowfishcontext.cxx ++ create mode 100644 package/source/zipapi/blowfishcontext.hxx ++ create mode 100644 package/source/zipapi/sha1context.cxx ++ create mode 100644 package/source/zipapi/sha1context.hxx ++ delete mode 100644 package/source/zippackage/ZipPackageEntry.hxx ++ delete mode 100644 package/source/zippackage/ZipPackageStream.hxx ++ create mode 100644 xmlsecurity/source/xmlsec/nss/ciphercontext.cxx ++ create mode 100644 xmlsecurity/source/xmlsec/nss/ciphercontext.hxx ++ create mode 100644 xmlsecurity/source/xmlsec/nss/digestcontext.cxx ++ create mode 100644 xmlsecurity/source/xmlsec/nss/digestcontext.hxx ++ create mode 100644 xmlsecurity/source/xmlsec/nss/nssinitializer.cxx ++ create mode 100644 xmlsecurity/source/xmlsec/nss/nssinitializer.hxx ++ ++diff --git a/package/inc/EncryptedDataHeader.hxx b/package/inc/EncryptedDataHeader.hxx ++index 88cdaa5..4e35664 100644 ++--- package/inc/EncryptedDataHeader.hxx +++++ package/inc/EncryptedDataHeader.hxx ++@@ -36,6 +36,10 @@ ++ Version number 2 bytes ++ Iteraction count 4 bytes ++ Size 4 bytes +++ EncAlgorithm 4 bytes +++ DigestAlgorithm 4 bytes +++ DerivedKeySize 4 bytes +++ StartKeyAlgorithm 4 bytes ++ Salt length 2 bytes ++ IV length 2 bytes ++ Digest length 2 bytes ++@@ -46,8 +50,8 @@ ++ MediaType X bytes ++ ++ */ ++-const sal_uInt32 n_ConstHeader = 0x0502474dL; // "MG\002\005" ++-const sal_Int32 n_ConstHeaderSize = 22; // + salt length + iv length + digest length + mediatype length +++const sal_uInt32 n_ConstHeader = 0x05024d4dL; // "MM\002\005" +++const sal_Int32 n_ConstHeaderSize = 38; // + salt length + iv length + digest length + mediatype length ++ const sal_Int16 n_ConstCurrentVersion = 1; ++ #endif ++ ++diff --git a/package/inc/EncryptionData.hxx b/package/inc/EncryptionData.hxx ++index 4dba2e3..1662510 100644 ++--- package/inc/EncryptionData.hxx +++++ package/inc/EncryptionData.hxx ++@@ -31,16 +31,54 @@ ++ #include ++ #include ++ ++-class EncryptionData : public cppu::OWeakObject +++class BaseEncryptionData : public cppu::OWeakObject ++ { ++ public: ++- // On export aKey holds the derived key ++- // On import aKey holds the hash of the user enterred key ++- com::sun::star::uno::Sequence < sal_Int8 > aKey; ++- com::sun::star::uno::Sequence < sal_uInt8 > aSalt, aInitVector, aDigest; ++- sal_Int32 nIterationCount; ++- EncryptionData(): nIterationCount ( 0 ){} +++ ::com::sun::star::uno::Sequence< sal_Int8 > m_aSalt; +++ ::com::sun::star::uno::Sequence< sal_Int8 > m_aInitVector; +++ ::com::sun::star::uno::Sequence< sal_Int8 > m_aDigest; +++ sal_Int32 m_nIterationCount; +++ +++ BaseEncryptionData() +++ : m_nIterationCount ( 0 ){} +++ +++ BaseEncryptionData( const BaseEncryptionData& aData ) +++ : cppu::OWeakObject() +++ , m_aSalt( aData.m_aSalt ) +++ , m_aInitVector( aData.m_aInitVector ) +++ , m_aDigest( aData.m_aDigest ) +++ , m_nIterationCount( aData.m_nIterationCount ) +++ {} ++ }; +++ +++class EncryptionData : public BaseEncryptionData +++{ +++public: +++ ::com::sun::star::uno::Sequence < sal_Int8 > m_aKey; +++ sal_Int32 m_nEncAlg; +++ sal_Int32 m_nCheckAlg; +++ sal_Int32 m_nDerivedKeySize; +++ sal_Int32 m_nStartKeyGenID; +++ +++ EncryptionData( const BaseEncryptionData& aData, const ::com::sun::star::uno::Sequence< sal_Int8 >& aKey, sal_Int32 nEncAlg, sal_Int32 nCheckAlg, sal_Int32 nDerivedKeySize, sal_Int32 nStartKeyGenID ) +++ : BaseEncryptionData( aData ) +++ , m_aKey( aKey ) +++ , m_nEncAlg( nEncAlg ) +++ , m_nCheckAlg( nCheckAlg ) +++ , m_nDerivedKeySize( nDerivedKeySize ) +++ , m_nStartKeyGenID( nStartKeyGenID ) +++ {} +++ +++ EncryptionData( const EncryptionData& aData ) +++ : BaseEncryptionData( aData ) +++ , m_aKey( aData.m_aKey ) +++ , m_nEncAlg( aData.m_nEncAlg ) +++ , m_nCheckAlg( aData.m_nCheckAlg ) +++ , m_nDerivedKeySize( aData.m_nDerivedKeySize ) +++ , m_nStartKeyGenID( aData.m_nStartKeyGenID ) +++ {} +++}; +++ ++ #endif ++ ++ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ++diff --git a/package/inc/PackageConstants.hxx b/package/inc/PackageConstants.hxx ++index 229f739..7507ada 100644 ++--- package/inc/PackageConstants.hxx +++++ package/inc/PackageConstants.hxx ++@@ -32,7 +32,12 @@ ++ ++ const sal_Int32 n_ConstBufferSize = 32768; ++ const sal_Int32 n_ConstMaxMemoryStreamSize = 20480; +++ +++// by calculation of the digest we read 32 bytes more ( if available ) +++// it allows to ignore the padding if the stream is longer than n_ConstDigestDecrypt since we read at least two blocks more; +++// if the stream is shorter or equal the padding will be done successfully ++ const sal_Int32 n_ConstDigestLength = 1024; +++const sal_Int32 n_ConstDigestDecrypt = 1056; // 1024 + 32 ++ ++ // the constants related to the manifest.xml entries ++ #define PKG_MNFST_MEDIATYPE 0 ++@@ -44,9 +49,22 @@ const sal_Int32 n_ConstDigestLength = 1024; ++ #define PKG_MNFST_ITERATION 5 ++ #define PKG_MNFST_UCOMPSIZE 6 ++ #define PKG_MNFST_DIGEST 7 +++#define PKG_MNFST_ENCALG 8 +++#define PKG_MNFST_STARTALG 9 +++#define PKG_MNFST_DIGESTALG 10 +++#define PKG_MNFST_DERKEYSIZE 11 ++ ++ #define PKG_SIZE_NOENCR_MNFST 3 ++-#define PKG_SIZE_ENCR_MNFST 8 +++#define PKG_SIZE_ENCR_MNFST 12 +++ +++// the properties related constants +++#define ENCRYPTION_KEY_PROPERTY "EncryptionKey" +++#define STORAGE_ENCRYPTION_KEYS_PROPERTY "StorageEncryptionKeys" +++#define ENCRYPTION_ALGORITHMS_PROPERTY "EncryptionAlgorithms" +++#define HAS_ENCRYPTED_ENTRIES_PROPERTY "HasEncryptedEntries" +++#define HAS_NONENCRYPTED_ENTRIES_PROPERTY "HasNonEncryptedEntries" +++#define IS_INCONSISTENT_PROPERTY "IsInconsistent" +++#define MEDIATYPE_FALLBACK_USED_PROPERTY "MediaTypeFallbackUsed" ++ ++ ++ #endif ++diff --git a/package/inc/ZipFile.hxx b/package/inc/ZipFile.hxx ++index c64500c..bd108b3 100644 ++--- package/inc/ZipFile.hxx +++++ package/inc/ZipFile.hxx ++@@ -32,9 +32,15 @@ ++ #include ++ #include ++ #include +++#include +++#include +++ +++#include +++ ++ #include ++ #include ++ #include +++#include ++ ++ #include ++ ++@@ -56,7 +62,6 @@ namespace rtl ++ ++ typedef void* rtlCipher; ++ class ZipEnumeration; ++-class EncryptionData; ++ ++ class ZipFile ++ { ++@@ -69,7 +74,7 @@ protected: ++ ZipUtils::Inflater aInflater; ++ com::sun::star::uno::Reference < com::sun::star::io::XInputStream > xStream; ++ com::sun::star::uno::Reference < com::sun::star::io::XSeekable > xSeek; ++- const ::com::sun::star::uno::Reference < com::sun::star::lang::XMultiServiceFactory > xFactory; +++ const ::com::sun::star::uno::Reference < com::sun::star::lang::XMultiServiceFactory > m_xFactory; ++ ::com::sun::star::uno::Reference < ::com::sun::star::ucb::XProgressHandler > xProgressHandler; ++ ++ sal_Bool bRecoveryMode; ++@@ -133,25 +138,41 @@ public: ++ ++ static sal_Bool StaticGetCipher ( const rtl::Reference < EncryptionData > & xEncryptionData, rtlCipher &rCipher, sal_Bool bDecode ); ++ ++- static void StaticFillHeader ( const rtl::Reference < EncryptionData > & rData, +++ static ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XDigestContext > StaticGetDigestContextForChecksum( +++ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xArgFactory, +++ const ::rtl::Reference< EncryptionData >& xEncryptionData ); +++ +++ static ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XCipherContext > StaticGetCipher( +++ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xArgFactory, +++ const ::rtl::Reference< EncryptionData >& xEncryptionData, +++ bool bEncrypt ); +++ +++ static void StaticFillHeader ( const ::rtl::Reference < EncryptionData > & rData, ++ sal_Int32 nSize, ++ const ::rtl::OUString& aMediaType, ++ sal_Int8 * & pHeader ); ++ ++- static sal_Bool StaticFillData ( rtl::Reference < EncryptionData > & rData, +++ static sal_Bool StaticFillData ( ::rtl::Reference < BaseEncryptionData > & rData, +++ sal_Int32 &rEncAlgorithm, +++ sal_Int32 &rChecksumAlgorithm, +++ sal_Int32 &rDerivedKeySize, +++ sal_Int32 &rStartKeyGenID, ++ sal_Int32 &rSize, ++ ::rtl::OUString& aMediaType, ++- ::com::sun::star::uno::Reference < com::sun::star::io::XInputStream > &rStream ); +++ const ::com::sun::star::uno::Reference < com::sun::star::io::XInputStream >& rStream ); ++ ++ static ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > StaticGetDataFromRawStream( +++ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xFactory, ++ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xStream, ++ const rtl::Reference < EncryptionData > &rData ) ++ throw ( ::com::sun::star::packages::WrongPasswordException, ++ ::com::sun::star::packages::zip::ZipIOException, ++ ::com::sun::star::uno::RuntimeException ); ++ ++- static sal_Bool StaticHasValidPassword ( const ::com::sun::star::uno::Sequence< sal_Int8 > &aReadBuffer, ++- const rtl::Reference < EncryptionData > &rData ); +++ static sal_Bool StaticHasValidPassword ( +++ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xFactory, +++ const ::com::sun::star::uno::Sequence< sal_Int8 > &aReadBuffer, +++ const ::rtl::Reference < EncryptionData > &rData ); ++ ++ ++ ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getInputStream( ++diff --git a/package/inc/ZipOutputStream.hxx b/package/inc/ZipOutputStream.hxx ++index b36f4d2..506e913 100644 ++--- package/inc/ZipOutputStream.hxx +++++ package/inc/ZipOutputStream.hxx ++@@ -28,39 +28,48 @@ ++ #ifndef _ZIP_OUTPUT_STREAM_HXX ++ #define _ZIP_OUTPUT_STREAM_HXX ++ +++#include +++#include +++#include +++#include +++#include +++ ++ #include ++ #include ++ #include ++-#include ++-#include ++ ++ #include ++ ++ struct ZipEntry; ++-class EncryptionData; ++-namespace rtl ++-{ ++- template < class T > class Reference; ++-} +++class ZipPackageStream; +++ ++ class ZipOutputStream ++ { ++ protected: ++- com::sun::star::uno::Reference < com::sun::star::io::XOutputStream > xStream; +++ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xFactory; +++ ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > xStream; +++ ++ ::std::vector < ZipEntry * > aZipList; ++- com::sun::star::uno::Sequence < sal_Int8 > aBuffer, aEncryptionBuffer; +++ +++ ::com::sun::star::uno::Sequence< sal_Int8 > m_aDeflateBuffer; +++ ++ ::rtl::OUString sComment; ++ ZipUtils::Deflater aDeflater; ++- rtlCipher aCipher; ++- rtlDigest aDigest; +++ +++ ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XCipherContext > m_xCipherContext; +++ ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XDigestContext > m_xDigestContext; +++ ++ CRC32 aCRC; ++ ByteChucker aChucker; ++ ZipEntry *pCurrentEntry; ++ sal_Int16 nMethod, nLevel, mnDigested; ++ sal_Bool bFinished, bEncryptCurrentEntry; ++- EncryptionData *pCurrentEncryptData; +++ ZipPackageStream* m_pCurrentStream; ++ ++ public: ++- ZipOutputStream( com::sun::star::uno::Reference < com::sun::star::io::XOutputStream > &xOStream ); +++ ZipOutputStream( +++ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xFactory, +++ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > &xOStream ); ++ ~ZipOutputStream(); ++ ++ // rawWrite to support a direct write to the output stream ++@@ -75,7 +84,7 @@ public: ++ void SAL_CALL setLevel( sal_Int32 nNewLevel ) ++ throw(::com::sun::star::uno::RuntimeException); ++ void SAL_CALL putNextEntry( ZipEntry& rEntry, ++- rtl::Reference < EncryptionData > &rData, +++ ZipPackageStream* pStream, ++ sal_Bool bEncrypt = sal_False ) ++ throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++ void SAL_CALL closeEntry( ) ++diff --git a/package/inc/ZipPackage.hxx b/package/inc/ZipPackage.hxx ++index 8ea3f60..a4aed11 100644 ++--- package/inc/ZipPackage.hxx +++++ package/inc/ZipPackage.hxx ++@@ -36,7 +36,9 @@ ++ #include ++ #include ++ #include +++#include ++ #include +++#include ++ #include ++ #include ++ #include ++@@ -83,13 +85,17 @@ class ZipPackage : public cppu::WeakImplHelper7 ++ protected: ++ SotMutexHolderRef m_aMutexHolder; ++ +++ ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue > m_aStorageEncryptionKeys; ++ ::com::sun::star::uno::Sequence < sal_Int8 > m_aEncryptionKey; ++ FolderHash m_aRecent; ++ ::rtl::OUString m_aURL; +++ +++ sal_Int32 m_nStartKeyGenerationID; +++ sal_Int32 m_nChecksumDigestID; +++ sal_Int32 m_nCommonEncryptionID; ++ sal_Bool m_bHasEncryptedEntries; ++ sal_Bool m_bHasNonEncryptedEntries; ++ sal_Bool m_bInconsistent; ++- sal_Bool m_bUseManifest; ++ sal_Bool m_bForceRecovery; ++ ++ sal_Bool m_bMediaTypeFallbackUsed; ++@@ -124,12 +130,17 @@ public: ++ ZipPackage (const ::com::sun::star::uno::Reference < com::sun::star::lang::XMultiServiceFactory > &xNewFactory); ++ virtual ~ZipPackage( void ); ++ ZipFile& getZipFile() { return *m_pZipFile;} ++- const com::sun::star::uno::Sequence < sal_Int8 > & getEncryptionKey ( ) {return m_aEncryptionKey;} ++ sal_Int32 getFormat() const { return m_nFormat; } ++ +++ sal_Int32 GetStartKeyGenID() const { return m_nStartKeyGenerationID; } +++ sal_Int32 GetEncAlgID() const { return m_nCommonEncryptionID; } +++ sal_Int32 GetChecksumAlgID() const { return m_nChecksumDigestID; } +++ sal_Int32 GetDefaultDerivedKeySize() const { return m_nCommonEncryptionID == ::com::sun::star::xml::crypto::CipherID::AES_CBC_W3C_PADDING ? 32 : 16; } +++ ++ SotMutexHolderRef GetSharedMutexRef() { return m_aMutexHolder; } ++ ++ void ConnectTo( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xInStream ); +++ const ::com::sun::star::uno::Sequence< sal_Int8 > GetEncryptionKey(); ++ ++ // XInitialization ++ virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) ++diff --git a/package/inc/ZipPackageEntry.hxx b/package/inc/ZipPackageEntry.hxx ++new file mode 100644 ++index 0000000..18adfdc ++--- /dev/null +++++ package/inc/ZipPackageEntry.hxx ++@@ -0,0 +1,106 @@ +++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++#ifndef _ZIP_PACKAGE_ENTRY_HXX +++#define _ZIP_PACKAGE_ENTRY_HXX +++ +++#include +++#include +++#include +++#include +++#include +++#include +++#include +++#include +++ +++class ZipPackageFolder; +++ +++class ZipPackageEntry : public cppu::WeakImplHelper5 +++< +++ com::sun::star::container::XNamed, +++ com::sun::star::container::XChild, +++ com::sun::star::lang::XUnoTunnel, +++ com::sun::star::beans::XPropertySet, +++ com::sun::star::lang::XServiceInfo +++> +++{ +++protected: +++ ::rtl::OUString msName; +++ bool mbIsFolder:1; +++ bool mbAllowRemoveOnInsert:1; +++ // com::sun::star::uno::Reference < com::sun::star::container::XNameContainer > xParent; +++ ::rtl::OUString sMediaType; +++ ZipPackageFolder * pParent; +++public: +++ ZipEntry aEntry; +++ ZipPackageEntry ( bool bNewFolder = sal_False ); +++ virtual ~ZipPackageEntry( void ); +++ +++ ::rtl::OUString & GetMediaType () { return sMediaType; } +++ void SetMediaType ( const ::rtl::OUString & sNewType) { sMediaType = sNewType; } +++ void doSetParent ( ZipPackageFolder * pNewParent, sal_Bool bInsert ); +++ bool IsFolder ( ) { return mbIsFolder; } +++ ZipPackageFolder* GetParent ( ) { return pParent; } +++ void SetFolder ( bool bSetFolder ) { mbIsFolder = bSetFolder; } +++ +++ void clearParent ( void ) +++ { +++ // xParent.clear(); +++ pParent = NULL; +++ } +++ // XNamed +++ virtual ::rtl::OUString SAL_CALL getName( ) +++ throw(::com::sun::star::uno::RuntimeException); +++ virtual void SAL_CALL setName( const ::rtl::OUString& aName ) +++ throw(::com::sun::star::uno::RuntimeException); +++ // XChild +++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getParent( ) +++ throw(::com::sun::star::uno::RuntimeException); +++ virtual void SAL_CALL setParent( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& Parent ) +++ throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); +++ // XUnoTunnel +++ virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) +++ throw(::com::sun::star::uno::RuntimeException) = 0; +++ // XPropertySet +++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) +++ throw(::com::sun::star::uno::RuntimeException); +++ virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) +++ throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException) = 0; +++ virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const ::rtl::OUString& PropertyName ) +++ throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException) = 0; +++ virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) +++ throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); +++ virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener ) +++ throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); +++ virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) +++ throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); +++ virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) +++ throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); +++}; +++#endif +++ +++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ++diff --git a/package/inc/ZipPackageFolder.hxx b/package/inc/ZipPackageFolder.hxx ++index c6ace8e..59be1b7 100644 ++--- package/inc/ZipPackageFolder.hxx +++++ package/inc/ZipPackageFolder.hxx ++@@ -92,10 +92,10 @@ public: ++ void setPackageFormat_Impl( sal_Int32 nFormat ) { m_nFormat = nFormat; } ++ void setRemoveOnInsertMode_Impl( sal_Bool bRemove ) { this->mbAllowRemoveOnInsert = bRemove; } ++ ++- bool saveChild(const rtl::OUString &rShortName, const com::sun::star::packages::ContentInfo &rInfo, rtl::OUString &rPath, std::vector < com::sun::star::uno::Sequence < com::sun::star::beans::PropertyValue > > &rManList, ZipOutputStream & rZipOut, com::sun::star::uno::Sequence < sal_Int8 > &rEncryptionKey, rtlRandomPool & rRandomPool); +++ bool saveChild(const rtl::OUString &rShortName, const com::sun::star::packages::ContentInfo &rInfo, rtl::OUString &rPath, std::vector < com::sun::star::uno::Sequence < com::sun::star::beans::PropertyValue > > &rManList, ZipOutputStream & rZipOut, const com::sun::star::uno::Sequence < sal_Int8 >& rEncryptionKey, rtlRandomPool & rRandomPool); ++ ++ // Recursive functions ++- void saveContents(rtl::OUString &rPath, std::vector < com::sun::star::uno::Sequence < com::sun::star::beans::PropertyValue > > &rManList, ZipOutputStream & rZipOut, com::sun::star::uno::Sequence < sal_Int8 > &rEncryptionKey, rtlRandomPool & rRandomPool) +++ void saveContents(rtl::OUString &rPath, std::vector < com::sun::star::uno::Sequence < com::sun::star::beans::PropertyValue > > &rManList, ZipOutputStream & rZipOut, const com::sun::star::uno::Sequence< sal_Int8 > &rEncryptionKey, rtlRandomPool & rRandomPool) ++ throw(::com::sun::star::uno::RuntimeException); ++ void releaseUpwardRef(); ++ ++diff --git a/package/inc/ZipPackageStream.hxx b/package/inc/ZipPackageStream.hxx ++new file mode 100644 ++index 0000000..a3bbf73 ++--- /dev/null +++++ package/inc/ZipPackageStream.hxx ++@@ -0,0 +1,216 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++#ifndef _ZIP_PACKAGE_STREAM_HXX +++#define _ZIP_PACKAGE_STREAM_HXX +++ +++#include +++#include +++#include +++#include +++ +++#include +++#include +++ +++#include +++#include +++#include +++ +++#define PACKAGE_STREAM_NOTSET 0 +++#define PACKAGE_STREAM_PACKAGEMEMBER 1 +++#define PACKAGE_STREAM_DETECT 2 +++#define PACKAGE_STREAM_DATA 3 +++#define PACKAGE_STREAM_RAW 4 +++ +++class ZipPackage; +++struct ZipEntry; +++class ZipPackageStream : public cppu::ImplInheritanceHelper2 +++< +++ ZipPackageEntry, +++ ::com::sun::star::io::XActiveDataSink, +++ ::com::sun::star::packages::XDataSinkEncrSupport +++> +++{ +++protected: +++ com::sun::star::uno::Reference < com::sun::star::io::XInputStream > xStream; +++ const ::com::sun::star::uno::Reference < com::sun::star::lang::XMultiServiceFactory > m_xFactory; +++ ZipPackage &rZipPackage; +++ sal_Bool bToBeCompressed, bToBeEncrypted, bHaveOwnKey, bIsEncrypted; +++ +++ ::rtl::Reference< BaseEncryptionData > m_xBaseEncryptionData; +++ ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue > m_aStorageEncryptionKeys; +++ ::com::sun::star::uno::Sequence< sal_Int8 > m_aEncryptionKey; +++ +++ sal_Int32 m_nImportedStartKeyAlgorithm; +++ sal_Int32 m_nImportedEncryptionAlgorithm; +++ sal_Int32 m_nImportedChecksumAlgorithm; +++ sal_Int32 m_nImportedDerivedKeySize; +++ +++ sal_uInt8 m_nStreamMode; +++ sal_uInt32 m_nMagicalHackPos; +++ sal_uInt32 m_nMagicalHackSize; +++ +++ sal_Bool m_bHasSeekable; +++ +++ sal_Bool m_bCompressedIsSetFromOutside; +++ +++ sal_Bool m_bFromManifest; +++ +++ bool m_bUseWinEncoding; +++ +++ ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > GetOwnSeekStream(); +++ +++public: +++ sal_Bool HasOwnKey () const { return bHaveOwnKey;} +++ sal_Bool IsToBeCompressed () const { return bToBeCompressed;} +++ sal_Bool IsToBeEncrypted () const { return bToBeEncrypted;} +++ sal_Bool IsEncrypted () const { return bIsEncrypted;} +++ sal_Bool IsPackageMember () const { return m_nStreamMode == PACKAGE_STREAM_PACKAGEMEMBER;} +++ +++ sal_Bool IsFromManifest() const { return m_bFromManifest; } +++ void SetFromManifest( sal_Bool bValue ) { m_bFromManifest = bValue; } +++ +++ ::rtl::Reference< EncryptionData > GetEncryptionData( bool bWinEncoding = false ); +++ void SetBaseEncryptionData( const ::rtl::Reference< BaseEncryptionData >& xData ); +++ +++ ::com::sun::star::uno::Sequence< sal_Int8 > GetEncryptionKey( bool bWinEncoding = false ); +++ +++ sal_Int32 GetStartKeyGenID(); +++ +++ const com::sun::star::uno::Sequence < sal_Int8 > getInitialisationVector () const +++ { return m_xBaseEncryptionData->m_aInitVector;} +++ const com::sun::star::uno::Sequence < sal_Int8 > getDigest () const +++ { return m_xBaseEncryptionData->m_aDigest;} +++ const com::sun::star::uno::Sequence < sal_Int8 > getSalt () const +++ { return m_xBaseEncryptionData->m_aSalt;} +++ sal_Int32 getIterationCount () const +++ { return m_xBaseEncryptionData->m_nIterationCount;} +++ sal_Int32 getSize () const +++ { return aEntry.nSize;} +++ +++ sal_uInt8 GetStreamMode() const { return m_nStreamMode; } +++ sal_uInt32 GetMagicalHackPos() const { return m_nMagicalHackPos; } +++ sal_uInt32 GetMagicalHackSize() const { return m_nMagicalHackSize; } +++ sal_Int32 GetEncryptionAlgorithm() const; +++ sal_Int32 GetBlockSize() const; +++ +++ void SetToBeCompressed (sal_Bool bNewValue) { bToBeCompressed = bNewValue;} +++ void SetIsEncrypted (sal_Bool bNewValue) { bIsEncrypted = bNewValue;} +++ void SetImportedStartKeyAlgorithm( sal_Int32 nAlgorithm ) { m_nImportedStartKeyAlgorithm = nAlgorithm; } +++ void SetImportedEncryptionAlgorithm( sal_Int32 nAlgorithm ) { m_nImportedEncryptionAlgorithm = nAlgorithm; } +++ void SetImportedChecksumAlgorithm( sal_Int32 nAlgorithm ) { m_nImportedChecksumAlgorithm = nAlgorithm; } +++ void SetImportedDerivedKeySize( sal_Int32 nSize ) { m_nImportedDerivedKeySize = nSize; } +++ void SetToBeEncrypted (sal_Bool bNewValue) +++ { +++ bToBeEncrypted = bNewValue; +++ if ( bToBeEncrypted && !m_xBaseEncryptionData.is()) +++ m_xBaseEncryptionData = new BaseEncryptionData; +++ else if ( !bToBeEncrypted && m_xBaseEncryptionData.is() ) +++ m_xBaseEncryptionData.clear(); +++ } +++ void SetPackageMember (sal_Bool bNewValue); +++ +++ void setKey (const com::sun::star::uno::Sequence < sal_Int8 >& rNewKey ) +++ { m_aEncryptionKey = rNewKey; m_aStorageEncryptionKeys.realloc( 0 ); } +++ void setInitialisationVector (const com::sun::star::uno::Sequence < sal_Int8 >& rNewVector ) +++ { m_xBaseEncryptionData->m_aInitVector = rNewVector;} +++ void setSalt (const com::sun::star::uno::Sequence < sal_Int8 >& rNewSalt ) +++ { m_xBaseEncryptionData->m_aSalt = rNewSalt;} +++ void setDigest (const com::sun::star::uno::Sequence < sal_Int8 >& rNewDigest ) +++ { m_xBaseEncryptionData->m_aDigest = rNewDigest;} +++ void setIterationCount (const sal_Int32 nNewCount) +++ { m_xBaseEncryptionData->m_nIterationCount = nNewCount;} +++ void setSize (const sal_Int32 nNewSize); +++ +++ ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > GetOwnStreamNoWrap() { return xStream; } +++ +++ void CloseOwnStreamIfAny(); +++ +++ ZipPackageStream ( ZipPackage & rNewPackage, +++ const ::com::sun::star::uno::Reference < com::sun::star::lang::XMultiServiceFactory >& xFactory, +++ sal_Bool bAllowRemoveOnInsert ); +++ virtual ~ZipPackageStream( void ); +++ +++ ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > GetRawEncrStreamNoHeaderCopy(); +++ ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > TryToGetRawFromDataStream( +++ sal_Bool bAddHeaderForEncr ); +++ +++ sal_Bool ParsePackageRawStream(); +++ +++ void setZipEntryOnLoading( const ZipEntry &rInEntry); +++ ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getRawData() +++ throw(::com::sun::star::uno::RuntimeException); +++ +++ static const ::com::sun::star::uno::Sequence < sal_Int8 >& static_getImplementationId(); +++ +++ // XActiveDataSink +++ virtual void SAL_CALL setInputStream( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& aStream ) +++ throw(::com::sun::star::uno::RuntimeException); +++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getInputStream( ) +++ throw(::com::sun::star::uno::RuntimeException); +++ +++ // XDataSinkEncrSupport +++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getDataStream() +++ throw ( ::com::sun::star::packages::WrongPasswordException, +++ ::com::sun::star::io::IOException, +++ ::com::sun::star::uno::RuntimeException ); +++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getRawStream() +++ throw ( ::com::sun::star::packages::NoEncryptionException, +++ ::com::sun::star::io::IOException, +++ ::com::sun::star::uno::RuntimeException ); +++ virtual void SAL_CALL setDataStream( +++ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& aStream ) +++ throw ( ::com::sun::star::io::IOException, +++ ::com::sun::star::uno::RuntimeException ); +++ virtual void SAL_CALL setRawStream( +++ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& aStream ) +++ throw ( ::com::sun::star::packages::EncryptionNotAllowedException, +++ ::com::sun::star::packages::NoRawFormatException, +++ ::com::sun::star::io::IOException, +++ ::com::sun::star::uno::RuntimeException ); +++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getPlainRawStream() +++ throw ( ::com::sun::star::io::IOException, +++ ::com::sun::star::uno::RuntimeException ); +++ +++ // XUnoTunnel +++ virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) +++ throw(::com::sun::star::uno::RuntimeException); +++ +++ // XPropertySet +++ virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) +++ throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); +++ virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const ::rtl::OUString& PropertyName ) +++ throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); +++ +++ // XServiceInfo +++ virtual ::rtl::OUString SAL_CALL getImplementationName( ) +++ throw (::com::sun::star::uno::RuntimeException); +++ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) +++ throw (::com::sun::star::uno::RuntimeException); +++ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) +++ throw (::com::sun::star::uno::RuntimeException); +++}; +++#endif ++diff --git a/package/qa/storages/TestHelper.java b/package/qa/storages/TestHelper.java ++index 0c1580f..b0b3434 100644 ++--- package/qa/storages/TestHelper.java +++++ package/qa/storages/TestHelper.java ++@@ -1434,24 +1434,24 @@ public class TestHelper { ++ ++ try ++ { ++- byte pData[][] = new byte[1][22]; ++- if ( xHeadRawStream.readBytes( pData, 22 ) != 22 ) +++ byte pData[][] = new byte[1][38]; +++ if ( xHeadRawStream.readBytes( pData, 38 ) != 38 ) ++ { ++ Error( "Can't read header of encrypted stream '" + sStreamName + "' raw representations!" ); ++ return false; ++ } ++ ++- if ( pData[0][0] != 0x4d || pData[0][1] != 0x47 || pData[0][2] != 0x02 || pData[0][3] != 0x05 ) +++ if ( pData[0][0] != 0x4d || pData[0][1] != 0x4d || pData[0][2] != 0x02 || pData[0][3] != 0x05 ) ++ { ++ Error( "No signature in the header of encrypted stream '" + sStreamName + "' raw representations!" ); ++ return false; ++ } ++ ++ int nVariableHeaderLength = ++- ( pData[0][14] + pData[0][15] * 0x100 ) // salt length ++- + ( pData[0][16] + pData[0][17] * 0x100 ) // iv length ++- + ( pData[0][18] + pData[0][19] * 0x100 ) // digest length ++- + ( pData[0][20] + pData[0][21] * 0x100 ); // mediatype length +++ ( pData[0][30] + pData[0][31] * 0x100 ) // salt length +++ + ( pData[0][32] + pData[0][33] * 0x100 ) // iv length +++ + ( pData[0][34] + pData[0][35] * 0x100 ) // digest length +++ + ( pData[0][36] + pData[0][37] * 0x100 ); // mediatype length ++ ++ xHeadRawStream.skipBytes( nVariableHeaderLength ); ++ ++@@ -1467,7 +1467,7 @@ public class TestHelper { ++ ++ if ( nRead1 != nRead2 ) ++ { ++- Error( "The encrypted stream '" + sStreamName + "' raw representations have different size!" ); +++ Error( "The encrypted stream '" + sStreamName + "' raw representations have different size! nRead1 - nRead2 = " + ( new Integer( nRead1 - nRead2 ) ).toString() ); ++ return false; ++ } ++ ++diff --git a/package/source/manifest/Base64Codec.cxx b/package/source/manifest/Base64Codec.cxx ++index 1438d86..5dc4ebf 100644 ++--- package/source/manifest/Base64Codec.cxx +++++ package/source/manifest/Base64Codec.cxx ++@@ -131,11 +131,11 @@ void ThreeByteToFourByte (const sal_uInt8* pBuffer, const sal_Int32 nStart, cons ++ sBuffer.setCharAt(3, aBase64EncodeTable [nIndex]); ++ } ++ ++-void Base64Codec::encodeBase64(rtl::OUStringBuffer& aStrBuffer, const uno::Sequence < sal_uInt8 >& aPass) +++void Base64Codec::encodeBase64(rtl::OUStringBuffer& aStrBuffer, const uno::Sequence < sal_Int8 >& aPass) ++ { ++ sal_Int32 i(0); ++ sal_Int32 nBufferLength(aPass.getLength()); ++- const sal_uInt8* pBuffer = aPass.getConstArray(); +++ const sal_uInt8* pBuffer = reinterpret_cast< const sal_uInt8* >( aPass.getConstArray() ); ++ while (i < nBufferLength) ++ { ++ rtl::OUStringBuffer sBuffer; ++@@ -185,7 +185,7 @@ void FourByteToThreeByte (sal_uInt8* pBuffer, sal_Int32& nLength, const sal_Int3 ++ pBuffer[nStart + 2] = OneByte; ++ } ++ ++-void Base64Codec::decodeBase64(uno::Sequence< sal_uInt8 >& aBuffer, const rtl::OUString& sBuffer) +++void Base64Codec::decodeBase64(uno::Sequence< sal_Int8 >& aBuffer, const rtl::OUString& sBuffer) ++ { ++ sal_Int32 nFirstLength((sBuffer.getLength() / 4) * 3); ++ sal_uInt8* pBuffer = new sal_uInt8[nFirstLength]; ++@@ -201,7 +201,7 @@ void Base64Codec::decodeBase64(uno::Sequence< sal_uInt8 >& aBuffer, const rtl::O ++ i += 4; ++ k += 3; ++ } ++- aBuffer = uno::Sequence(pBuffer, nSecondLength); +++ aBuffer = uno::Sequence( reinterpret_cast< sal_Int8* >( pBuffer ), nSecondLength ); ++ delete[] pBuffer; ++ } ++ ++diff --git a/package/source/manifest/Base64Codec.hxx b/package/source/manifest/Base64Codec.hxx ++index 941c115..60456ad 100644 ++--- package/source/manifest/Base64Codec.hxx +++++ package/source/manifest/Base64Codec.hxx ++@@ -40,8 +40,8 @@ class OUStringBuffer; ++ class Base64Codec ++ { ++ public: ++- static void encodeBase64(rtl::OUStringBuffer& aStrBuffer, const com::sun::star::uno::Sequence& aPass); ++- static void decodeBase64(com::sun::star::uno::Sequence& aPass, const rtl::OUString& sBuffer); +++ static void encodeBase64(rtl::OUStringBuffer& aStrBuffer, const com::sun::star::uno::Sequence& aPass); +++ static void decodeBase64(com::sun::star::uno::Sequence& aPass, const rtl::OUString& sBuffer); ++ }; ++ #endif ++ ++diff --git a/package/source/manifest/ManifestDefines.hxx b/package/source/manifest/ManifestDefines.hxx ++index 67159ee..dc9c47e 100644 ++--- package/source/manifest/ManifestDefines.hxx +++++ package/source/manifest/ManifestDefines.hxx ++@@ -65,6 +65,26 @@ ++ #define CHECKSUM_TYPE "SHA1/1K" ++ #define DERIVED_KEY_SIZE "16" ++ +++#define SHA256_URL "http://www.w3.org/2001/04/xmlenc#sha256" +++//http://tools.oasis-open.org/issues/browse/OFFICE-3702 +++//http://tools.oasis-open.org/issues/browse/OFFICE-3708 +++#define SHA256_URL_TYPO "http://www.w3.org/2000/09/xmldsig#sha256" +++#define SHA1_NAME "SHA1" +++#define SHA1_URL "http://www.w3.org/2000/09/xmldsig#sha1" +++ +++#define SHA1_1K_NAME "SHA1/1K" +++#define SHA1_1K_URL "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0#sha1-1k" +++#define SHA256_1K_URL "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0#sha256-1k" +++ +++#define BLOWFISH_NAME "Blowfish CFB" +++#define BLOWFISH_URL "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0#blowfish" +++#define AES128_URL "http://www.w3.org/2001/04/xmlenc#aes128-cbc" +++#define AES192_URL "http://www.w3.org/2001/04/xmlenc#aes192-cbc" +++#define AES256_URL "http://www.w3.org/2001/04/xmlenc#aes256-cbc" +++ +++#define PBKDF2_NAME "PBKDF2" +++#define PBKDF2_URL "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0#pbkdf2" +++ ++ #endif ++ ++ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ++diff --git a/package/source/manifest/ManifestExport.cxx b/package/source/manifest/ManifestExport.cxx ++index dfdcf2f..bb53541 100644 ++--- package/source/manifest/ManifestExport.cxx +++++ package/source/manifest/ManifestExport.cxx ++@@ -239,7 +239,7 @@ ManifestExport::ManifestExport(Reference < XDocumentHandler > xHandler, const S ++ ::comphelper::AttributeList * pNewAttrList = new ::comphelper::AttributeList; ++ Reference < XAttributeList > xNewAttrList (pNewAttrList); ++ OUStringBuffer aBuffer; ++- Sequence < sal_uInt8 > aSequence; +++ Sequence < sal_Int8 > aSequence; ++ ++ xHandler->ignorableWhitespace ( sWhiteSpace ); ++ if ( pDigest ) ++diff --git a/package/source/manifest/ManifestImport.cxx b/package/source/manifest/ManifestImport.cxx ++index 2f99d66..abd67d5 100644 ++--- package/source/manifest/ManifestImport.cxx +++++ package/source/manifest/ManifestImport.cxx ++@@ -32,6 +32,8 @@ ++ #include ++ #include ++ #include +++#include +++#include ++ #include ++ ++ using namespace com::sun::star::uno; ++@@ -45,12 +47,14 @@ using ::rtl::OUString; ++ ManifestImport::ManifestImport( vector < Sequence < PropertyValue > > & rNewManVector ) ++ : nNumProperty ( 0 ) ++ , bIgnoreEncryptData ( sal_False ) +++, nDerivedKeySize( 0 ) ++ , rManVector ( rNewManVector ) ++ ++ , sFileEntryElement ( RTL_CONSTASCII_USTRINGPARAM ( ELEMENT_FILE_ENTRY ) ) ++ , sManifestElement ( RTL_CONSTASCII_USTRINGPARAM ( ELEMENT_MANIFEST ) ) ++ , sEncryptionDataElement( RTL_CONSTASCII_USTRINGPARAM ( ELEMENT_ENCRYPTION_DATA ) ) ++ , sAlgorithmElement ( RTL_CONSTASCII_USTRINGPARAM ( ELEMENT_ALGORITHM ) ) +++, sStartKeyAlgElement ( RTL_CONSTASCII_USTRINGPARAM ( ELEMENT_START_KEY_GENERATION ) ) ++ , sKeyDerivationElement( RTL_CONSTASCII_USTRINGPARAM ( ELEMENT_KEY_DERIVATION ) ) ++ ++ , sCdataAttribute ( RTL_CONSTASCII_USTRINGPARAM ( ATTRIBUTE_CDATA ) ) ++@@ -61,7 +65,9 @@ ManifestImport::ManifestImport( vector < Sequence < PropertyValue > > & rNewManV ++ , sSaltAttribute ( RTL_CONSTASCII_USTRINGPARAM ( ATTRIBUTE_SALT ) ) ++ , sInitialisationVectorAttribute ( RTL_CONSTASCII_USTRINGPARAM ( ATTRIBUTE_INITIALISATION_VECTOR ) ) ++ , sIterationCountAttribute ( RTL_CONSTASCII_USTRINGPARAM ( ATTRIBUTE_ITERATION_COUNT ) ) +++, sKeySizeAttribute ( RTL_CONSTASCII_USTRINGPARAM ( ATTRIBUTE_KEY_SIZE ) ) ++ , sAlgorithmNameAttribute ( RTL_CONSTASCII_USTRINGPARAM ( ATTRIBUTE_ALGORITHM_NAME ) ) +++, sStartKeyAlgNameAttribute ( RTL_CONSTASCII_USTRINGPARAM ( ATTRIBUTE_START_KEY_GENERATION_NAME ) ) ++ , sKeyDerivationNameAttribute ( RTL_CONSTASCII_USTRINGPARAM ( ATTRIBUTE_KEY_DERIVATION_NAME ) ) ++ , sChecksumAttribute ( RTL_CONSTASCII_USTRINGPARAM ( ATTRIBUTE_CHECKSUM ) ) ++ , sChecksumTypeAttribute ( RTL_CONSTASCII_USTRINGPARAM ( ATTRIBUTE_CHECKSUM_TYPE ) ) ++@@ -70,15 +76,34 @@ ManifestImport::ManifestImport( vector < Sequence < PropertyValue > > & rNewManV ++ , sMediaTypeProperty ( RTL_CONSTASCII_USTRINGPARAM ( "MediaType" ) ) ++ , sVersionProperty ( RTL_CONSTASCII_USTRINGPARAM ( "Version" ) ) ++ , sIterationCountProperty ( RTL_CONSTASCII_USTRINGPARAM ( "IterationCount" ) ) +++, sDerivedKeySizeProperty ( RTL_CONSTASCII_USTRINGPARAM ( "DerivedKeySize" ) ) ++ , sSaltProperty ( RTL_CONSTASCII_USTRINGPARAM ( "Salt" ) ) ++ , sInitialisationVectorProperty ( RTL_CONSTASCII_USTRINGPARAM ( "InitialisationVector" ) ) ++ , sSizeProperty ( RTL_CONSTASCII_USTRINGPARAM ( "Size" ) ) ++ , sDigestProperty ( RTL_CONSTASCII_USTRINGPARAM ( "Digest" ) ) +++, sEncryptionAlgProperty ( RTL_CONSTASCII_USTRINGPARAM ( "EncryptionAlgorithm" ) ) +++, sStartKeyAlgProperty ( RTL_CONSTASCII_USTRINGPARAM ( "StartKeyAlgorithm" ) ) +++, sDigestAlgProperty ( RTL_CONSTASCII_USTRINGPARAM ( "DigestAlgorithm" ) ) ++ ++ , sWhiteSpace ( RTL_CONSTASCII_USTRINGPARAM ( " " ) ) ++-, sBlowfish ( RTL_CONSTASCII_USTRINGPARAM ( "Blowfish CFB" ) ) ++-, sPBKDF2 ( RTL_CONSTASCII_USTRINGPARAM ( "PBKDF2" ) ) ++-, sChecksumType ( RTL_CONSTASCII_USTRINGPARAM ( CHECKSUM_TYPE ) ) +++ +++, sSHA256_URL ( RTL_CONSTASCII_USTRINGPARAM ( SHA256_URL ) ) +++, sSHA256_URL_TYPO ( RTL_CONSTASCII_USTRINGPARAM ( SHA256_URL_TYPO ) ) +++, sSHA1_Name ( RTL_CONSTASCII_USTRINGPARAM ( SHA1_NAME ) ) +++, sSHA1_URL ( RTL_CONSTASCII_USTRINGPARAM ( SHA1_URL ) ) +++ +++, sSHA256_1k_URL ( RTL_CONSTASCII_USTRINGPARAM ( SHA256_1K_URL ) ) +++, sSHA1_1k_Name ( RTL_CONSTASCII_USTRINGPARAM ( SHA1_1K_NAME ) ) +++, sSHA1_1k_URL ( RTL_CONSTASCII_USTRINGPARAM ( SHA1_1K_URL ) ) +++ +++, sBlowfish_Name ( RTL_CONSTASCII_USTRINGPARAM ( BLOWFISH_NAME ) ) +++, sBlowfish_URL ( RTL_CONSTASCII_USTRINGPARAM ( BLOWFISH_URL ) ) +++, sAES128_URL ( RTL_CONSTASCII_USTRINGPARAM ( AES128_URL ) ) +++, sAES192_URL ( RTL_CONSTASCII_USTRINGPARAM ( AES192_URL ) ) +++, sAES256_URL ( RTL_CONSTASCII_USTRINGPARAM ( AES256_URL ) ) +++ +++, sPBKDF2_Name ( RTL_CONSTASCII_USTRINGPARAM ( PBKDF2_NAME ) ) +++, sPBKDF2_URL ( RTL_CONSTASCII_USTRINGPARAM ( PBKDF2_URL ) ) ++ { ++ aStack.reserve( 10 ); ++ } ++@@ -143,43 +168,90 @@ void SAL_CALL ManifestImport::startElement( const OUString& aName, const uno::Re ++ if ( aConvertedName.equals( sEncryptionDataElement ) ) ++ { ++ // If this element exists, then this stream is encrypted and we need ++- // to store the initialisation vector, salt and iteration count used +++ // to import the initialisation vector, salt and iteration count used +++ nDerivedKeySize = 0; ++ OUString aString = aConvertedAttribs[sChecksumTypeAttribute]; ++- if ( aString == sChecksumType && !bIgnoreEncryptData ) +++ if ( !bIgnoreEncryptData ) +++ { +++ if ( aString.equals( sSHA1_1k_Name ) || aString.equals( sSHA1_1k_URL ) ) +++ { +++ aSequence[nNumProperty].Name = sDigestAlgProperty; +++ aSequence[nNumProperty++].Value <<= xml::crypto::DigestID::SHA1_1K; +++ } +++ else if ( aString.equals( sSHA256_1k_URL ) ) +++ { +++ aSequence[nNumProperty].Name = sDigestAlgProperty; +++ aSequence[nNumProperty++].Value <<= xml::crypto::DigestID::SHA256_1K; +++ } +++ else +++ bIgnoreEncryptData = sal_True; +++ +++ if ( !bIgnoreEncryptData ) ++ { ++ aString = aConvertedAttribs[sChecksumAttribute]; ++- Sequence < sal_uInt8 > aDecodeBuffer; +++ Sequence < sal_Int8 > aDecodeBuffer; ++ Base64Codec::decodeBase64 ( aDecodeBuffer, aString ); ++ aSequence[nNumProperty].Name = sDigestProperty; ++ aSequence[nNumProperty++].Value <<= aDecodeBuffer; ++ } ++ } ++ } +++ } ++ else if ( aIter->m_aConvertedName.equals( sEncryptionDataElement ) ) ++ { ++ if ( aConvertedName == sAlgorithmElement ) ++ { +++ if ( !bIgnoreEncryptData ) +++ { ++ OUString aString = aConvertedAttribs[sAlgorithmNameAttribute]; ++- if ( aString == sBlowfish && !bIgnoreEncryptData ) +++ if ( aString.equals( sBlowfish_Name ) || aString.equals( sBlowfish_URL ) ) +++ { +++ aSequence[nNumProperty].Name = sEncryptionAlgProperty; +++ aSequence[nNumProperty++].Value <<= xml::crypto::CipherID::BLOWFISH_CFB_8; +++ } +++ else if ( aString.equals( sAES256_URL ) ) +++ { +++ aSequence[nNumProperty].Name = sEncryptionAlgProperty; +++ aSequence[nNumProperty++].Value <<= xml::crypto::CipherID::AES_CBC_W3C_PADDING; +++ OSL_ENSURE( !nDerivedKeySize || nDerivedKeySize == 32, "Unexpected derived key length!" ); +++ nDerivedKeySize = 32; +++ } +++ else if ( aString.equals( sAES192_URL ) ) +++ { +++ aSequence[nNumProperty].Name = sEncryptionAlgProperty; +++ aSequence[nNumProperty++].Value <<= xml::crypto::CipherID::AES_CBC_W3C_PADDING; +++ OSL_ENSURE( !nDerivedKeySize || nDerivedKeySize == 24, "Unexpected derived key length!" ); +++ nDerivedKeySize = 24; +++ } +++ else if ( aString.equals( sAES128_URL ) ) +++ { +++ aSequence[nNumProperty].Name = sEncryptionAlgProperty; +++ aSequence[nNumProperty++].Value <<= xml::crypto::CipherID::AES_CBC_W3C_PADDING; +++ OSL_ENSURE( !nDerivedKeySize || nDerivedKeySize == 16, "Unexpected derived key length!" ); +++ nDerivedKeySize = 16; +++ } +++ else +++ bIgnoreEncryptData = sal_True; +++ +++ if ( !bIgnoreEncryptData ) ++ { ++ aString = aConvertedAttribs[sInitialisationVectorAttribute]; ++- Sequence < sal_uInt8 > aDecodeBuffer; +++ Sequence < sal_Int8 > aDecodeBuffer; ++ Base64Codec::decodeBase64 ( aDecodeBuffer, aString ); ++ aSequence[nNumProperty].Name = sInitialisationVectorProperty; ++ aSequence[nNumProperty++].Value <<= aDecodeBuffer; ++ } ++- else ++- // If we don't recognise the algorithm, then the key derivation info ++- // is useless to us ++- bIgnoreEncryptData = sal_True; +++ } ++ } ++ else if ( aConvertedName == sKeyDerivationElement ) ++ { +++ if ( !bIgnoreEncryptData ) +++ { ++ OUString aString = aConvertedAttribs[sKeyDerivationNameAttribute]; ++- if ( aString == sPBKDF2 && !bIgnoreEncryptData ) +++ if ( aString.equals( sPBKDF2_Name ) || aString.equals( sPBKDF2_URL ) ) ++ { ++ aString = aConvertedAttribs[sSaltAttribute]; ++- Sequence < sal_uInt8 > aDecodeBuffer; +++ Sequence < sal_Int8 > aDecodeBuffer; ++ Base64Codec::decodeBase64 ( aDecodeBuffer, aString ); ++ aSequence[nNumProperty].Name = sSaltProperty; ++ aSequence[nNumProperty++].Value <<= aDecodeBuffer; ++@@ -187,10 +259,40 @@ void SAL_CALL ManifestImport::startElement( const OUString& aName, const uno::Re ++ aString = aConvertedAttribs[sIterationCountAttribute]; ++ aSequence[nNumProperty].Name = sIterationCountProperty; ++ aSequence[nNumProperty++].Value <<= aString.toInt32(); +++ +++ aString = aConvertedAttribs[sKeySizeAttribute]; +++ if ( aString.getLength() ) +++ { +++ sal_Int32 nKey = aString.toInt32(); +++ OSL_ENSURE( !nDerivedKeySize || nKey == nDerivedKeySize , "Provided derived key length differs from the expected one!" ); +++ nDerivedKeySize = nKey; +++ } +++ else if ( !nDerivedKeySize ) +++ nDerivedKeySize = 16; +++ else if ( nDerivedKeySize != 16 ) +++ OSL_ENSURE( sal_False, "Default derived key length differs from the expected one!" ); +++ +++ aSequence[nNumProperty].Name = sDerivedKeySizeProperty; +++ aSequence[nNumProperty++].Value <<= nDerivedKeySize; +++ } +++ else +++ bIgnoreEncryptData = sal_True; +++ } +++ } +++ else if ( aConvertedName == sStartKeyAlgElement ) +++ { +++ OUString aString = aConvertedAttribs[sStartKeyAlgNameAttribute]; +++ if (aString.equals(sSHA256_URL) || aString.equals(sSHA256_URL_TYPO)) +++ { +++ aSequence[nNumProperty].Name = sStartKeyAlgProperty; +++ aSequence[nNumProperty++].Value <<= xml::crypto::DigestID::SHA256; +++ } +++ else if ( aString.equals( sSHA1_Name ) || aString.equals( sSHA1_URL ) ) +++ { +++ aSequence[nNumProperty].Name = sStartKeyAlgProperty; +++ aSequence[nNumProperty++].Value <<= xml::crypto::DigestID::SHA1; ++ } ++ else ++- // If we don't recognise the key derivation technique, then the ++- // algorithm info is useless to us ++ bIgnoreEncryptData = sal_True; ++ } ++ } ++diff --git a/package/source/manifest/ManifestImport.hxx b/package/source/manifest/ManifestImport.hxx ++index 9655e71..4b92797 100644 ++--- package/source/manifest/ManifestImport.hxx +++++ package/source/manifest/ManifestImport.hxx ++@@ -65,12 +65,14 @@ protected: ++ sal_Int16 nNumProperty; ++ ManifestStack aStack; ++ sal_Bool bIgnoreEncryptData; +++ sal_Int32 nDerivedKeySize; ++ ::std::vector < ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue > > & rManVector; ++ ++ const ::rtl::OUString sFileEntryElement; ++ const ::rtl::OUString sManifestElement; ++ const ::rtl::OUString sEncryptionDataElement; ++ const ::rtl::OUString sAlgorithmElement; +++ const ::rtl::OUString sStartKeyAlgElement; ++ const ::rtl::OUString sKeyDerivationElement; ++ ++ const ::rtl::OUString sCdataAttribute; ++@@ -81,7 +83,9 @@ protected: ++ const ::rtl::OUString sSaltAttribute; ++ const ::rtl::OUString sInitialisationVectorAttribute; ++ const ::rtl::OUString sIterationCountAttribute; +++ const ::rtl::OUString sKeySizeAttribute; ++ const ::rtl::OUString sAlgorithmNameAttribute; +++ const ::rtl::OUString sStartKeyAlgNameAttribute; ++ const ::rtl::OUString sKeyDerivationNameAttribute; ++ const ::rtl::OUString sChecksumAttribute; ++ const ::rtl::OUString sChecksumTypeAttribute; ++@@ -90,15 +94,34 @@ protected: ++ const ::rtl::OUString sMediaTypeProperty; ++ const ::rtl::OUString sVersionProperty; ++ const ::rtl::OUString sIterationCountProperty; +++ const ::rtl::OUString sDerivedKeySizeProperty; ++ const ::rtl::OUString sSaltProperty; ++ const ::rtl::OUString sInitialisationVectorProperty; ++ const ::rtl::OUString sSizeProperty; ++ const ::rtl::OUString sDigestProperty; +++ const ::rtl::OUString sEncryptionAlgProperty; +++ const ::rtl::OUString sStartKeyAlgProperty; +++ const ::rtl::OUString sDigestAlgProperty; ++ ++ const ::rtl::OUString sWhiteSpace; ++- const ::rtl::OUString sBlowfish; ++- const ::rtl::OUString sPBKDF2; ++- const ::rtl::OUString sChecksumType; +++ +++ const ::rtl::OUString sSHA256_URL; +++ const ::rtl::OUString sSHA256_URL_TYPO; +++ const ::rtl::OUString sSHA1_Name; +++ const ::rtl::OUString sSHA1_URL; +++ +++ const ::rtl::OUString sSHA256_1k_URL; +++ const ::rtl::OUString sSHA1_1k_Name; +++ const ::rtl::OUString sSHA1_1k_URL; +++ +++ const ::rtl::OUString sBlowfish_Name; +++ const ::rtl::OUString sBlowfish_URL; +++ const ::rtl::OUString sAES128_URL; +++ const ::rtl::OUString sAES192_URL; +++ const ::rtl::OUString sAES256_URL; +++ +++ const ::rtl::OUString sPBKDF2_Name; +++ const ::rtl::OUString sPBKDF2_URL; ++ ++ ++ ::rtl::OUString PushNameAndNamespaces( const ::rtl::OUString& aName, ++diff --git a/package/source/xstor/owriteablestream.cxx b/package/source/xstor/owriteablestream.cxx ++index c1c5e8f..03e1776 100644 ++--- package/source/xstor/owriteablestream.cxx +++++ package/source/xstor/owriteablestream.cxx ++@@ -47,6 +47,8 @@ ++ #include ++ #include ++ +++#include +++ ++ #include "selfterminatefilestream.hxx" ++ #include "owriteablestream.hxx" ++ #include "oseekinstream.hxx" ++@@ -111,15 +113,14 @@ namespace ++ { ++ //----------------------------------------------- ++ void SetEncryptionKeyProperty_Impl( const uno::Reference< beans::XPropertySet >& xPropertySet, ++- const uno::Sequence< sal_Int8 >& aKey ) +++ const uno::Sequence< beans::NamedValue >& aKey ) ++ { ++ OSL_ENSURE( xPropertySet.is(), "No property set is provided!\n" ); ++ if ( !xPropertySet.is() ) ++ throw uno::RuntimeException(); ++ ++- ::rtl::OUString aString_EncryptionKey (RTL_CONSTASCII_USTRINGPARAM("EncryptionKey") ); ++ try { ++- xPropertySet->setPropertyValue( aString_EncryptionKey, uno::makeAny( aKey ) ); +++ xPropertySet->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( STORAGE_ENCRYPTION_KEYS_PROPERTY ) ), uno::makeAny( aKey ) ); ++ } ++ catch ( uno::Exception& aException ) ++ { ++@@ -137,9 +138,8 @@ uno::Any GetEncryptionKeyProperty_Impl( const uno::Reference< beans::XPropertySe ++ if ( !xPropertySet.is() ) ++ throw uno::RuntimeException(); ++ ++- ::rtl::OUString aString_EncryptionKey (RTL_CONSTASCII_USTRINGPARAM("EncryptionKey") ); ++ try { ++- return xPropertySet->getPropertyValue( aString_EncryptionKey ); +++ return xPropertySet->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( STORAGE_ENCRYPTION_KEYS_PROPERTY ) ) ); ++ } ++ catch ( uno::Exception& aException ) ++ { ++@@ -152,16 +152,65 @@ uno::Any GetEncryptionKeyProperty_Impl( const uno::Reference< beans::XPropertySe ++ } ++ ++ //----------------------------------------------- ++-sal_Bool SequencesEqual( uno::Sequence< sal_Int8 > aSequence1, uno::Sequence< sal_Int8 > aSequence2 ) +++bool SequencesEqual( const uno::Sequence< sal_Int8 >& aSequence1, const uno::Sequence< sal_Int8 >& aSequence2 ) ++ { ++ if ( aSequence1.getLength() != aSequence2.getLength() ) ++- return sal_False; +++ return false; ++ ++ for ( sal_Int32 nInd = 0; nInd < aSequence1.getLength(); nInd++ ) ++ if ( aSequence1[nInd] != aSequence2[nInd] ) ++- return sal_False; +++ return false; +++ +++ return true; +++} +++ +++//----------------------------------------------- +++bool SequencesEqual( const uno::Sequence< beans::NamedValue >& aSequence1, const uno::Sequence< beans::NamedValue >& aSequence2 ) +++{ +++ if ( aSequence1.getLength() != aSequence2.getLength() ) +++ return false; +++ +++ for ( sal_Int32 nInd = 0; nInd < aSequence1.getLength(); nInd++ ) +++ { +++ bool bHasMember = false; +++ uno::Sequence< sal_Int8 > aMember1; +++ sal_Int32 nMember1 = 0; +++ if ( ( aSequence1[nInd].Value >>= aMember1 ) ) +++ { +++ for ( sal_Int32 nInd2 = 0; nInd2 < aSequence2.getLength(); nInd2++ ) +++ { +++ if ( aSequence1[nInd].Name.equals( aSequence2[nInd2].Name ) ) +++ { +++ bHasMember = true; +++ +++ uno::Sequence< sal_Int8 > aMember2; +++ if ( !( aSequence2[nInd2].Value >>= aMember2 ) || !SequencesEqual( aMember1, aMember2 ) ) +++ return false; +++ } +++ } +++ } +++ else if ( ( aSequence1[nInd].Value >>= nMember1 ) ) +++ { +++ for ( sal_Int32 nInd2 = 0; nInd2 < aSequence2.getLength(); nInd2++ ) +++ { +++ if ( aSequence1[nInd].Name.equals( aSequence2[nInd2].Name ) ) +++ { +++ bHasMember = true; ++ ++- return sal_True; +++ sal_Int32 nMember2 = 0; +++ if ( !( aSequence2[nInd2].Value >>= nMember2 ) || nMember1 != nMember2 ) +++ return false; +++ } +++ } +++ } +++ else +++ return false; +++ +++ if ( !bHasMember ) +++ return false; +++ } +++ +++ return true; ++ } ++ ++ //----------------------------------------------- ++@@ -395,7 +444,7 @@ sal_Bool OWriteStream_Impl::IsEncrypted() ++ ++ // since a new key set to the package stream it should not be removed except the case when ++ // the stream becomes nonencrypted ++- uno::Sequence< sal_Int8 > aKey; +++ uno::Sequence< beans::NamedValue > aKey; ++ if ( bToBeEncr ) ++ GetEncryptionKeyProperty_Impl( xPropSet ) >>= aKey; ++ ++@@ -822,8 +871,8 @@ void OWriteStream_Impl::InsertStreamDirectly( const uno::Reference< io::XInputSt ++ throw uno::RuntimeException(); ++ ++ // set to be encrypted but do not use encryption key ++- xPropertySet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EncryptionKey") ), ++- uno::makeAny( uno::Sequence< sal_Int8 >() ) ); +++ xPropertySet->setPropertyValue( ::rtl::OUString::createFromAscii( STORAGE_ENCRYPTION_KEYS_PROPERTY ), +++ uno::makeAny( uno::Sequence< beans::NamedValue >() ) ); ++ xPropertySet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Encrypted") ), ++ uno::makeAny( sal_True ) ); ++ } ++@@ -921,8 +970,8 @@ void OWriteStream_Impl::Commit() ++ throw uno::RuntimeException(); ++ ++ // set to be encrypted but do not use encryption key ++- xPropertySet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EncryptionKey") ), ++- uno::makeAny( uno::Sequence< sal_Int8 >() ) ); +++ xPropertySet->setPropertyValue( ::rtl::OUString::createFromAscii( STORAGE_ENCRYPTION_KEYS_PROPERTY ), +++ uno::makeAny( uno::Sequence< beans::NamedValue >() ) ); ++ xPropertySet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Encrypted") ), ++ uno::makeAny( sal_True ) ); ++ } ++@@ -931,8 +980,8 @@ void OWriteStream_Impl::Commit() ++ if ( m_nStorageType != embed::StorageFormats::PACKAGE ) ++ throw uno::RuntimeException(); ++ ++- xPropertySet->setPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EncryptionKey") ), ++- uno::makeAny( m_aEncryptionData.getUnpackedValueOrDefault( PACKAGE_ENCRYPTIONDATA_SHA1UTF8, uno::Sequence< sal_Int8 >() ) ) ); +++ xPropertySet->setPropertyValue( ::rtl::OUString::createFromAscii( STORAGE_ENCRYPTION_KEYS_PROPERTY ), +++ uno::makeAny( m_aEncryptionData.getAsConstNamedValueList() ) ); ++ } ++ ++ // the stream should be free soon, after package is stored ++@@ -1265,7 +1314,7 @@ uno::Reference< io::XStream > OWriteStream_Impl::GetStream( sal_Int32 nStreamMod ++ } ++ else ++ { ++- SetEncryptionKeyProperty_Impl( xPropertySet, aEncryptionData.getUnpackedValueOrDefault( PACKAGE_ENCRYPTIONDATA_SHA1UTF8, uno::Sequence< sal_Int8 >() ) ); +++ SetEncryptionKeyProperty_Impl( xPropertySet, aEncryptionData.getAsConstNamedValueList() ); ++ ++ try { ++ xResultStream = GetStream_Impl( nStreamMode, bHierarchyAccess ); ++@@ -1274,32 +1323,9 @@ uno::Reference< io::XStream > OWriteStream_Impl::GetStream( sal_Int32 nStreamMod ++ m_bHasCachedEncryptionData = sal_True; ++ m_aEncryptionData = aEncryptionData; ++ } ++- catch( packages::WrongPasswordException& ) ++- { ++- // retry with different encoding ++- SetEncryptionKeyProperty_Impl( xPropertySet, aEncryptionData.getUnpackedValueOrDefault( PACKAGE_ENCRYPTIONDATA_SHA1MS1252, uno::Sequence< sal_Int8 >() ) ); ++- try { ++- // the stream must be cashed to be resaved ++- xResultStream = GetStream_Impl( nStreamMode | embed::ElementModes::SEEKABLE, bHierarchyAccess ); ++- ++- m_bUseCommonEncryption = sal_False; // very important to set it to false ++- m_bHasCachedEncryptionData = sal_True; ++- m_aEncryptionData = aEncryptionData; ++- ++- // the stream must be resaved with new password encryption ++- if ( nStreamMode & embed::ElementModes::WRITE ) ++- { ++- FillTempGetFileName(); ++- m_bHasDataToFlush = sal_True; ++- ++- // TODO/LATER: should the notification be done? ++- if ( m_pParent ) ++- m_pParent->m_bIsModified = sal_True; ++- } ++- } ++ catch( packages::WrongPasswordException& aWrongPasswordException ) ++ { ++- SetEncryptionKeyProperty_Impl( xPropertySet, uno::Sequence< sal_Int8 >() ); +++ SetEncryptionKeyProperty_Impl( xPropertySet, uno::Sequence< beans::NamedValue >() ); ++ AddLog( aWrongPasswordException.Message ); ++ AddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Rethrow" ) ) ); ++ throw; ++@@ -1310,20 +1336,10 @@ uno::Reference< io::XStream > OWriteStream_Impl::GetStream( sal_Int32 nStreamMod ++ AddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Quiet exception" ) ) ); ++ ++ OSL_FAIL( "Can't write encryption related properties!\n" ); ++- SetEncryptionKeyProperty_Impl( xPropertySet, uno::Sequence< sal_Int8 >() ); +++ SetEncryptionKeyProperty_Impl( xPropertySet, uno::Sequence< beans::NamedValue >() ); ++ throw io::IOException(); // TODO: ++ } ++ } ++- catch( uno::Exception& aException ) ++- { ++- SetEncryptionKeyProperty_Impl( xPropertySet, uno::Sequence< sal_Int8 >() ); ++- ++- AddLog( aException.Message ); ++- AddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Rethrow" ) ) ); ++- throw; ++- } ++- ++- } ++ ++ OSL_ENSURE( xResultStream.is(), "In case stream can not be retrieved an exception must be thrown!\n" ); ++ ++@@ -1625,8 +1641,7 @@ void OWriteStream_Impl::GetCopyOfLastCommit( uno::Reference< io::XStream >& xTar ++ { ++ // TODO: introduce last commited cashed password information and use it here ++ // that means "use common pass" also should be remembered on flash ++- uno::Sequence< sal_Int8 > aNewKey = aEncryptionData.getUnpackedValueOrDefault( PACKAGE_ENCRYPTIONDATA_SHA1UTF8, uno::Sequence< sal_Int8 >() ); ++- uno::Sequence< sal_Int8 > aOldKey = aEncryptionData.getUnpackedValueOrDefault( PACKAGE_ENCRYPTIONDATA_SHA1MS1252, uno::Sequence< sal_Int8 >() ); +++ uno::Sequence< beans::NamedValue > aKey = aEncryptionData.getAsConstNamedValueList(); ++ ++ uno::Reference< beans::XPropertySet > xProps( m_xPackageStream, uno::UNO_QUERY ); ++ if ( !xProps.is() ) ++@@ -1637,9 +1652,9 @@ void OWriteStream_Impl::GetCopyOfLastCommit( uno::Reference< io::XStream >& xTar ++ if ( !bEncr ) ++ throw packages::NoEncryptionException(); ++ ++- uno::Sequence< sal_Int8 > aEncrKey; ++- xProps->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EncryptionKey") ) ) >>= aEncrKey; ++- if ( !SequencesEqual( aNewKey, aEncrKey ) && !SequencesEqual( aOldKey, aEncrKey ) ) +++ uno::Sequence< beans::NamedValue > aPackKey; +++ xProps->getPropertyValue( ::rtl::OUString::createFromAscii( STORAGE_ENCRYPTION_KEYS_PROPERTY ) ) >>= aPackKey; +++ if ( !SequencesEqual( aKey, aPackKey ) ) ++ throw packages::WrongPasswordException(); ++ ++ // the correct key must be set already ++@@ -1648,7 +1663,7 @@ void OWriteStream_Impl::GetCopyOfLastCommit( uno::Reference< io::XStream >& xTar ++ else ++ { ++ uno::Reference< beans::XPropertySet > xPropertySet( m_xPackageStream, uno::UNO_QUERY ); ++- SetEncryptionKeyProperty_Impl( xPropertySet, aEncryptionData.getUnpackedValueOrDefault( PACKAGE_ENCRYPTIONDATA_SHA1UTF8, uno::Sequence< sal_Int8 >() ) ); +++ SetEncryptionKeyProperty_Impl( xPropertySet, aEncryptionData.getAsConstNamedValueList() ); ++ ++ try { ++ xDataToCopy = m_xPackageStream->getDataStream(); ++@@ -1656,42 +1671,19 @@ void OWriteStream_Impl::GetCopyOfLastCommit( uno::Reference< io::XStream >& xTar ++ if ( !xDataToCopy.is() ) ++ { ++ OSL_FAIL( "Encrypted ZipStream must already have input stream inside!\n" ); ++- SetEncryptionKeyProperty_Impl( xPropertySet, uno::Sequence< sal_Int8 >() ); ++- } ++- } ++- catch( packages::WrongPasswordException& aWrongPasswordException ) ++- { ++- SetEncryptionKeyProperty_Impl( xPropertySet, aEncryptionData.getUnpackedValueOrDefault( PACKAGE_ENCRYPTIONDATA_SHA1MS1252, uno::Sequence< sal_Int8 >() ) ); ++- try { ++- xDataToCopy = m_xPackageStream->getDataStream(); ++- ++- if ( !xDataToCopy.is() ) ++- { ++- OSL_FAIL( "Encrypted ZipStream must already have input stream inside!\n" ); ++- SetEncryptionKeyProperty_Impl( xPropertySet, uno::Sequence< sal_Int8 >() ); ++- AddLog( aWrongPasswordException.Message ); ++- AddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Rethrow" ) ) ); ++- throw; +++ SetEncryptionKeyProperty_Impl( xPropertySet, uno::Sequence< beans::NamedValue >() ); ++ } ++ } ++ catch( uno::Exception& aException ) ++ { ++- SetEncryptionKeyProperty_Impl( xPropertySet, uno::Sequence< sal_Int8 >() ); +++ OSL_FAIL( "Can't open encrypted stream!" ); +++ SetEncryptionKeyProperty_Impl( xPropertySet, uno::Sequence< beans::NamedValue >() ); ++ AddLog( aException.Message ); ++ AddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Rethrow" ) ) ); ++ throw; ++ } ++- } ++- catch( uno::Exception& aException ) ++- { ++- OSL_FAIL( "Can't open encrypted stream!\n" ); ++- SetEncryptionKeyProperty_Impl( xPropertySet, uno::Sequence< sal_Int8 >() ); ++- AddLog( aException.Message ); ++- AddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Rethrow" ) ) ); ++- throw; ++- } ++ ++- SetEncryptionKeyProperty_Impl( xPropertySet, uno::Sequence< sal_Int8 >() ); +++ SetEncryptionKeyProperty_Impl( xPropertySet, uno::Sequence< beans::NamedValue >() ); ++ } ++ ++ // in case of new inserted package stream it is possible that input stream still was not set ++diff --git a/package/source/xstor/xstorage.cxx b/package/source/xstor/xstorage.cxx ++index ab3c5f3..1eca31c 100644 ++--- package/source/xstor/xstorage.cxx +++++ package/source/xstor/xstorage.cxx ++@@ -46,6 +46,7 @@ ++ #include ++ #include ++ +++#include ++ ++ #include ++ #include ++@@ -572,7 +573,7 @@ void OStorage_Impl::GetStorageProperties() ++ if ( !m_bControlMediaType ) ++ { ++ uno::Reference< beans::XPropertySet > xPackageProps( m_xPackage, uno::UNO_QUERY_THROW ); ++- xPackageProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "MediaTypeFallbackUsed" ) ) ) >>= m_bMTFallbackUsed; +++ xPackageProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( MEDIATYPE_FALLBACK_USED_PROPERTY ) ) ) >>= m_bMTFallbackUsed; ++ ++ xProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "MediaType" ) ) ) >>= m_aMediaType; ++ m_bControlMediaType = sal_True; ++@@ -750,9 +751,17 @@ void OStorage_Impl::CopyToStorage( const uno::Reference< embed::XStorage >& xDes ++ { ++ try ++ { ++- uno::Reference< embed::XEncryptionProtectedSource2 > xEncr( xDest, uno::UNO_QUERY ); +++ uno::Reference< embed::XEncryptionProtectedStorage > xEncr( xDest, uno::UNO_QUERY ); ++ if ( xEncr.is() ) +++ { ++ xEncr->setEncryptionData( GetCommonRootEncryptionData().getAsConstNamedValueList() ); +++ +++ uno::Sequence< beans::NamedValue > aAlgorithms; +++ uno::Reference< beans::XPropertySet > xPackPropSet( m_xPackage, uno::UNO_QUERY_THROW ); +++ xPackPropSet->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ENCRYPTION_ALGORITHMS_PROPERTY ) ) ) +++ >>= aAlgorithms; +++ xEncr->setEncryptionAlgorithms( aAlgorithms ); +++ } ++ } ++ catch( packages::NoEncryptionException& aNoEncryptionException ) ++ { ++@@ -985,7 +994,9 @@ void OStorage_Impl::CopyStorageElement( SotElement_Impl* pElement, ++ AddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Handled exception" ) ) ); ++ ++ // If the common storage password does not allow to open the stream ++- // it must be copyed in raw way +++ // it could be copyed in raw way, the problem is that the StartKey should be the same +++ // in the ODF1.2 package, so an invalid package could be produced if the stream +++ // is copied from ODF1.1 package, where it is allowed to have different StartKeys ++ uno::Reference< embed::XStorageRawAccess > xRawDest( xDest, uno::UNO_QUERY_THROW ); ++ uno::Reference< io::XInputStream > xRawInStream = pElement->m_pStream->GetRawInStream(); ++ xRawDest->insertRawEncrStreamElement( aName, xRawInStream ); ++@@ -2278,7 +2289,8 @@ uno::Any SAL_CALL OStorage::queryInterface( const uno::Type& rType ) ++ ( rType ++ , static_cast ( this ) ++ , static_cast ( this ) ++- , static_cast ( this ) ); +++ , static_cast ( this ) +++ , static_cast ( this ) ); ++ } ++ else ++ { ++@@ -2338,6 +2350,7 @@ uno::Sequence< uno::Type > SAL_CALL OStorage::getTypes() ++ , ::getCppuType( ( const uno::Reference< embed::XTransactedObject >* )NULL ) ++ , ::getCppuType( ( const uno::Reference< embed::XTransactionBroadcaster >* )NULL ) ++ , ::getCppuType( ( const uno::Reference< util::XModifiable >* )NULL ) +++ , ::getCppuType( ( const uno::Reference< embed::XEncryptionProtectedStorage >* )NULL ) ++ , ::getCppuType( ( const uno::Reference< embed::XEncryptionProtectedSource2 >* )NULL ) ++ , ::getCppuType( ( const uno::Reference< embed::XEncryptionProtectedSource >* )NULL ) ++ , ::getCppuType( ( const uno::Reference< beans::XPropertySet >* )NULL ) ); ++@@ -4697,18 +4710,23 @@ void SAL_CALL OStorage::removeEncryption() ++ // TODO: check if the password is valid ++ // update all streams that was encrypted with old password ++ ++- uno::Reference< beans::XPropertySet > xPackPropSet( m_pImpl->m_xPackage, uno::UNO_QUERY ); ++- if ( !xPackPropSet.is() ) ++- throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++- +++ uno::Reference< beans::XPropertySet > xPackPropSet( m_pImpl->m_xPackage, uno::UNO_QUERY_THROW ); ++ try ++ { ++- xPackPropSet->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "EncryptionKey" ) ), ++- uno::makeAny( uno::Sequence< sal_Int8 >() ) ); +++ xPackPropSet->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( STORAGE_ENCRYPTION_KEYS_PROPERTY ) ), +++ uno::makeAny( uno::Sequence< beans::NamedValue >() ) ); ++ ++ m_pImpl->m_bHasCommonEncryptionData = sal_False; ++ m_pImpl->m_aCommonEncryptionData.clear(); ++ } +++ catch( uno::RuntimeException& aRException ) +++ { +++ m_pImpl->AddLog( aRException.Message ); +++ m_pImpl->AddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Rethrow" ) ) ); +++ +++ OSL_FAIL( "The call must not fail, it is pretty simple!" ); +++ throw; +++ } ++ catch( uno::Exception& aException ) ++ { ++ m_pImpl->AddLog( aException.Message ); ++@@ -4767,16 +4785,13 @@ void SAL_CALL OStorage::setEncryptionData( const uno::Sequence< beans::NamedValu ++ uno::UNO_QUERY ), ++ aCaught ); ++ } ++- ++- uno::Reference< beans::XPropertySet > xPackPropSet( m_pImpl->m_xPackage, uno::UNO_QUERY ); ++- if ( !xPackPropSet.is() ) ++- throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++ +++ uno::Reference< beans::XPropertySet > xPackPropSet( m_pImpl->m_xPackage, uno::UNO_QUERY_THROW ); ++ try ++ { ++ ::comphelper::SequenceAsHashMap aEncryptionMap( aEncryptionData ); ++- xPackPropSet->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "EncryptionKey" ) ), ++- uno::makeAny( aEncryptionMap.getUnpackedValueOrDefault( PACKAGE_ENCRYPTIONDATA_SHA1UTF8, uno::Sequence< sal_Int8 >() ) ) ); +++ xPackPropSet->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( STORAGE_ENCRYPTION_KEYS_PROPERTY ) ), +++ uno::makeAny( aEncryptionMap.getAsConstNamedValueList() ) ); ++ ++ m_pImpl->m_bHasCommonEncryptionData = sal_True; ++ m_pImpl->m_aCommonEncryptionData = aEncryptionMap; ++@@ -4792,6 +4807,82 @@ void SAL_CALL OStorage::setEncryptionData( const uno::Sequence< beans::NamedValu ++ ++ } ++ +++//____________________________________________________________________________________________________ +++// XEncryptionProtectedStorage +++//____________________________________________________________________________________________________ +++ +++//----------------------------------------------- +++void SAL_CALL OStorage::setEncryptionAlgorithms( const uno::Sequence< beans::NamedValue >& aAlgorithms ) +++ throw (lang::IllegalArgumentException, uno::RuntimeException) +++{ +++ RTL_LOGFILE_CONTEXT( aLog, "package (mv76033) OStorage::setEncryptionAlgorithms" ); +++ +++ ::osl::MutexGuard aGuard( m_pData->m_rSharedMutexRef->GetMutex() ); +++ +++ if ( !m_pImpl ) +++ { +++ ::package::StaticAddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Disposed!" ) ) ); +++ throw lang::DisposedException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); +++ } +++ +++ if ( m_pData->m_nStorageType != embed::StorageFormats::PACKAGE ) +++ throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); // the interface must be visible only for package storage +++ +++ if ( !aAlgorithms.getLength() ) +++ throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Unexpected empty encryption algorithms list!") ), uno::Reference< uno::XInterface >() ); +++ +++ OSL_ENSURE( m_pData->m_bIsRoot, "setEncryptionAlgorithms() method is not available for nonroot storages!\n" ); +++ if ( m_pData->m_bIsRoot ) +++ { +++ try { +++ m_pImpl->ReadContents(); +++ } +++ catch ( uno::RuntimeException& aRuntimeException ) +++ { +++ m_pImpl->AddLog( aRuntimeException.Message ); +++ m_pImpl->AddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Rethrow" ) ) ); +++ throw; +++ } +++ catch ( uno::Exception& aException ) +++ { +++ m_pImpl->AddLog( aException.Message ); +++ m_pImpl->AddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Rethrow" ) ) ); +++ +++ uno::Any aCaught( ::cppu::getCaughtException() ); +++ throw lang::WrappedTargetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Can not open package!\n" ) ), +++ uno::Reference< uno::XInterface >( static_cast< OWeakObject* >( this ), +++ uno::UNO_QUERY ), +++ aCaught ); +++ } +++ +++ uno::Reference< beans::XPropertySet > xPackPropSet( m_pImpl->m_xPackage, uno::UNO_QUERY_THROW ); +++ try +++ { +++ xPackPropSet->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ENCRYPTION_ALGORITHMS_PROPERTY ) ), +++ uno::makeAny( aAlgorithms ) ); +++ } +++ catch ( uno::RuntimeException& aRuntimeException ) +++ { +++ m_pImpl->AddLog( aRuntimeException.Message ); +++ m_pImpl->AddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Rethrow" ) ) ); +++ throw; +++ } +++ catch( lang::IllegalArgumentException& aIAException ) +++ { +++ m_pImpl->AddLog( aIAException.Message ); +++ m_pImpl->AddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Rethrow" ) ) ); +++ +++ throw; +++ } +++ catch( uno::Exception& aException ) +++ { +++ m_pImpl->AddLog( aException.Message ); +++ m_pImpl->AddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Rethrow" ) ) ); +++ +++ throw io::IOException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); +++ } +++ } +++} ++ ++ //____________________________________________________________________________________________________ ++ // XPropertySet ++@@ -4864,13 +4955,13 @@ void SAL_CALL OStorage::setPropertyValue( const ::rtl::OUString& aPropertyName, ++ m_pImpl->m_bIsModified = sal_True; ++ } ++ } ++- else if ( ( m_pData->m_bIsRoot && ( aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "HasEncryptedEntries" ) ) ++- || aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "HasNonEncryptedEntries" ) ) ++- || aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "IsInconsistent" ) ) +++ else if ( ( m_pData->m_bIsRoot && ( aPropertyName.equalsAscii( HAS_ENCRYPTED_ENTRIES_PROPERTY ) +++ || aPropertyName.equalsAscii( HAS_NONENCRYPTED_ENTRIES_PROPERTY ) +++ || aPropertyName.equalsAscii( IS_INCONSISTENT_PROPERTY ) ++ || aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "URL" ) ) ++ || aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "RepairPackage" ) ) ) ) ++ || aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "IsRoot" ) ) ++- || aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "MediaTypeFallbackUsed" ) ) ) +++ || aPropertyName.equalsAscii( MEDIATYPE_FALLBACK_USED_PROPERTY ) ) ++ throw beans::PropertyVetoException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++ else ++ throw beans::UnknownPropertyException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++@@ -4944,7 +5035,7 @@ uno::Any SAL_CALL OStorage::getPropertyValue( const ::rtl::OUString& aPropertyNa ++ ++ if ( m_pData->m_nStorageType == embed::StorageFormats::PACKAGE ++ && ( aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "MediaType" ) ) ++- || aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "MediaTypeFallbackUsed" ) ) +++ || aPropertyName.equalsAscii( MEDIATYPE_FALLBACK_USED_PROPERTY ) ++ || aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Version" ) ) ) ) ++ { ++ try ++@@ -5001,9 +5092,9 @@ uno::Any SAL_CALL OStorage::getPropertyValue( const ::rtl::OUString& aPropertyNa ++ return uno::makeAny( sal_False ); // RepairPackage ++ } ++ else if ( m_pData->m_nStorageType == embed::StorageFormats::PACKAGE ++- && ( aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "HasEncryptedEntries" ) ) ++- || aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "HasNonEncryptedEntries" ) ) ++- || aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "IsInconsistent" ) ) ) ) +++ && ( aPropertyName.equalsAscii( HAS_ENCRYPTED_ENTRIES_PROPERTY ) +++ || aPropertyName.equalsAscii( HAS_NONENCRYPTED_ENTRIES_PROPERTY ) +++ || aPropertyName.equalsAscii( IS_INCONSISTENT_PROPERTY ) ) ) ++ { ++ try { ++ m_pImpl->ReadContents(); ++diff --git a/package/source/xstor/xstorage.hxx b/package/source/xstor/xstorage.hxx ++index 66a626e..46764df 100644 ++--- package/source/xstor/xstorage.hxx +++++ package/source/xstor/xstorage.hxx ++@@ -37,7 +37,7 @@ ++ #include ++ #include ++ #include ++-#include +++#include ++ #include ++ #include ++ #include ++@@ -297,7 +297,7 @@ class OStorage : public ::com::sun::star::lang::XTypeProvider ++ , public ::com::sun::star::embed::XTransactedObject ++ , public ::com::sun::star::embed::XTransactionBroadcaster ++ , public ::com::sun::star::util::XModifiable ++- , public ::com::sun::star::embed::XEncryptionProtectedSource2 +++ , public ::com::sun::star::embed::XEncryptionProtectedStorage ++ , public ::com::sun::star::beans::XPropertySet ++ , public ::com::sun::star::embed::XOptimizedStorage ++ , public ::com::sun::star::embed::XRelationshipAccess ++@@ -647,6 +647,11 @@ public: ++ throw ( ::com::sun::star::io::IOException, ++ ::com::sun::star::uno::RuntimeException ); ++ +++ //____________________________________________________________________________________________________ +++ // XEncryptionProtectedStorage +++ //____________________________________________________________________________________________________ +++ +++ virtual void SAL_CALL setEncryptionAlgorithms( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aAlgorithms ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); ++ ++ //____________________________________________________________________________________________________ ++ // XPropertySet ++diff --git a/package/source/zipapi/EntryInputStream.cxx b/package/source/zipapi/EntryInputStream.cxx ++deleted file mode 100644 ++index 00ae61f..0000000 ++--- package/source/zipapi/EntryInputStream.cxx +++++ /dev/null ++@@ -1,205 +0,0 @@ ++-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ ++-/************************************************************************* ++- * ++- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++- * ++- * Copyright 2000, 2010 Oracle and/or its affiliates. ++- * ++- * OpenOffice.org - a multi-platform office productivity suite ++- * ++- * This file is part of OpenOffice.org. ++- * ++- * OpenOffice.org is free software: you can redistribute it and/or modify ++- * it under the terms of the GNU Lesser General Public License version 3 ++- * only, as published by the Free Software Foundation. ++- * ++- * OpenOffice.org is distributed in the hope that it will be useful, ++- * but WITHOUT ANY WARRANTY; without even the implied warranty of ++- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++- * GNU Lesser General Public License version 3 for more details ++- * (a copy is included in the LICENSE file that accompanied this code). ++- * ++- * You should have received a copy of the GNU Lesser General Public License ++- * version 3 along with OpenOffice.org. If not, see ++- * ++- * for a copy of the LGPLv3 License. ++- * ++- ************************************************************************/ ++- ++-// MARKER(update_precomp.py): autogen include statement, do not remove ++-#include "precompiled_package.hxx" ++-#include ++-#include ++-#include ++-#include ++-#include // for memcpy ++- ++-using namespace com::sun::star; ++-using namespace com::sun::star::uno; ++-using namespace com::sun::star::packages::zip; ++-using namespace com::sun::star::packages::zip::ZipConstants; ++- ++-using ::rtl::OUString; ++- ++-/** Provides access to the compressed data in a zipfile. ++- * ++- * uncompresses the stream into memory and seeks on it 'in memory' ++- * This and the ZipPackageBuffer used in the ZipOutputStream are memory hogs ++- * and will hopefully be replaced eventually ++- * ++- * Acts on the same underlying XInputStream as both the full Zip File and other ++- * EntryInputStreams, and thus must maintain its current position in the stream and ++- * seek to it before performing any reads. ++- */ ++- ++-EntryInputStream::EntryInputStream( Reference < io::XInputStream > xNewInput, ++- const ZipEntry & rNewEntry, ++- const rtl::Reference < EncryptionData > &xEncryptData, ++- sal_Bool bGetRawStream) ++-: xStream( xNewInput ) ++-, xSeek( xNewInput, UNO_QUERY ) ++-, aEntry (rNewEntry ) ++-, nCurrent( 0 ) ++-, bHaveInMemory ( sal_False ) ++-, aInflater( sal_True ) ++-, aBuffer( 0 ) ++-, xEncryptionData (xEncryptData) ++-, bRawStream (bGetRawStream) ++-{ ++- if (bGetRawStream) ++- { ++- nUncompressedSize = aEntry.nMethod == DEFLATED ? aEntry.nCompressedSize : aEntry.nSize; ++- nEnd = aEntry.nOffset + nUncompressedSize; ++- } ++- else ++- { ++- nEnd = aEntry.nMethod == DEFLATED ? aEntry.nOffset + aEntry.nCompressedSize : aEntry.nOffset + aEntry.nSize; ++- nUncompressedSize = aEntry.nSize; ++- } ++-} ++-void EntryInputStream::readIntoMemory() ++- throw(io::NotConnectedException, io::BufferSizeExceededException, io::IOException, RuntimeException) ++-{ ++- if (!bHaveInMemory) ++- { ++- Sequence < sal_Int8 > aReadBuffer; ++- xSeek->seek(aEntry.nOffset); ++- sal_Int32 nSize = aEntry.nMethod == DEFLATED ? aEntry.nCompressedSize : aEntry.nSize; ++- ++- if (nSize <0) ++- throw io::BufferSizeExceededException(::rtl::OUString(), *this); ++- ++- xStream->readBytes( aReadBuffer, nSize ); // Now it holds the raw stuff from disk ++- ++- if (xEncryptionData->aSalt.getLength()) ++- { ++- // Have salt, will travel ++- Sequence < sal_uInt8 > aDerivedKey (16); ++- rtlCipherError aResult; ++- Sequence < sal_Int8 > aDecryptBuffer; ++- ++- // Get the key ++- rtl_digest_PBKDF2 ( aDerivedKey.getArray(), 16, ++- reinterpret_cast < const sal_uInt8 * > (xEncryptionData->aKey.getConstArray()), ++- xEncryptionData->aKey.getLength(), ++- xEncryptionData->aSalt.getConstArray(), ++- xEncryptionData->aSalt.getLength(), ++- xEncryptionData->nIterationCount ); ++- ++- rtlCipher aCipher = rtl_cipher_create (rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeStream); ++- aResult = rtl_cipher_init( aCipher, rtl_Cipher_DirectionDecode, ++- aDerivedKey.getConstArray(), ++- aDerivedKey.getLength(), ++- xEncryptionData->aInitVector.getConstArray(), ++- xEncryptionData->aInitVector.getLength()); ++- OSL_ASSERT (aResult == rtl_Cipher_E_None); ++- aDecryptBuffer.realloc ( nSize ); ++- aResult = rtl_cipher_decode ( aCipher, ++- aReadBuffer.getConstArray(), ++- nSize, ++- reinterpret_cast < sal_uInt8 * > (aDecryptBuffer.getArray()), ++- nSize); ++- OSL_ASSERT (aResult == rtl_Cipher_E_None); ++- aReadBuffer = aDecryptBuffer; // Now it holds the decrypted data ++- } ++- if (bRawStream || aEntry.nMethod == STORED) ++- aBuffer = aReadBuffer; // bRawStream means the caller doesn't want it decompressed ++- else ++- { ++- aInflater.setInputSegment(aReadBuffer, 0, nSize ); ++- aBuffer.realloc( aEntry.nSize ); ++- aInflater.doInflate(aBuffer); ++- aInflater.end(); ++- } ++- bHaveInMemory = sal_True; ++- } ++-} ++-EntryInputStream::~EntryInputStream( void ) ++-{ ++-} ++- ++-sal_Int32 SAL_CALL EntryInputStream::readBytes( Sequence< sal_Int8 >& aData, ++- sal_Int32 nBytesToRead ) ++- throw(io::NotConnectedException, io::BufferSizeExceededException, io::IOException, RuntimeException) ++-{ ++- if (nBytesToRead <0) ++- throw io::BufferSizeExceededException(::rtl::OUString(), *this); ++- if (!bHaveInMemory) ++- readIntoMemory(); ++- if (nBytesToRead + nCurrent > nUncompressedSize) ++- nBytesToRead = static_cast < sal_Int32> ( nUncompressedSize - nCurrent ); ++- ++- aData.realloc( nBytesToRead ); ++- memcpy(aData.getArray(), aBuffer.getConstArray() + nCurrent, nBytesToRead); ++- nCurrent+=nBytesToRead; ++- ++- return nBytesToRead; ++-} ++-sal_Int32 SAL_CALL EntryInputStream::readSomeBytes( Sequence< sal_Int8 >& aData, ++- sal_Int32 nMaxBytesToRead ) ++- throw(io::NotConnectedException, io::BufferSizeExceededException, io::IOException, RuntimeException) ++-{ ++- return readBytes( aData, nMaxBytesToRead ); ++-} ++-void SAL_CALL EntryInputStream::skipBytes( sal_Int32 nBytesToSkip ) ++- throw(io::NotConnectedException, io::BufferSizeExceededException, io::IOException, RuntimeException) ++-{ ++- if (nBytesToSkip < 0) ++- throw io::BufferSizeExceededException(::rtl::OUString(), *this); ++- ++- if (nBytesToSkip + nCurrent > nUncompressedSize) ++- nBytesToSkip = static_cast < sal_Int32 > (nUncompressedSize- nCurrent); ++- ++- nCurrent+=nBytesToSkip; ++-} ++-sal_Int32 SAL_CALL EntryInputStream::available( ) ++- throw(io::NotConnectedException, io::IOException, RuntimeException) ++-{ ++- return static_cast < sal_Int32 > (nUncompressedSize - nCurrent); ++-} ++-void SAL_CALL EntryInputStream::closeInput( ) ++- throw(io::NotConnectedException, io::IOException, RuntimeException) ++-{ ++-} ++- ++-void SAL_CALL EntryInputStream::seek( sal_Int64 location ) ++- throw(lang::IllegalArgumentException, io::IOException, RuntimeException) ++-{ ++- if (location > nUncompressedSize) ++- location = nUncompressedSize; ++- if (location <0) ++- location = 0; ++- nCurrent = location; ++-} ++-sal_Int64 SAL_CALL EntryInputStream::getPosition( ) ++- throw(io::IOException, RuntimeException) ++-{ ++- return nCurrent; ++-} ++-sal_Int64 SAL_CALL EntryInputStream::getLength( ) ++- throw(io::IOException, RuntimeException) ++-{ ++- return nUncompressedSize; ++-} ++- ++-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ++diff --git a/package/source/zipapi/EntryInputStream.hxx b/package/source/zipapi/EntryInputStream.hxx ++deleted file mode 100644 ++index cf1bf5a..0000000 ++--- package/source/zipapi/EntryInputStream.hxx +++++ /dev/null ++@@ -1,85 +0,0 @@ ++-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ ++-/************************************************************************* ++- * ++- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++- * ++- * Copyright 2000, 2010 Oracle and/or its affiliates. ++- * ++- * OpenOffice.org - a multi-platform office productivity suite ++- * ++- * This file is part of OpenOffice.org. ++- * ++- * OpenOffice.org is free software: you can redistribute it and/or modify ++- * it under the terms of the GNU Lesser General Public License version 3 ++- * only, as published by the Free Software Foundation. ++- * ++- * OpenOffice.org is distributed in the hope that it will be useful, ++- * but WITHOUT ANY WARRANTY; without even the implied warranty of ++- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++- * GNU Lesser General Public License version 3 for more details ++- * (a copy is included in the LICENSE file that accompanied this code). ++- * ++- * You should have received a copy of the GNU Lesser General Public License ++- * version 3 along with OpenOffice.org. If not, see ++- * ++- * for a copy of the LGPLv3 License. ++- * ++- ************************************************************************/ ++-#ifndef _ENTRY_INPUT_STREAM_HXX ++-#define _ENTRY_INPUT_STREAM_HXX ++- ++-#include // helper for implementations ++-#include ++-#include ++-#include ++-#include ++-#include ++-#include ++-class EntryInputStream : public cppu::WeakImplHelper2< com::sun::star::io::XInputStream, ++- com::sun::star::io::XSeekable > ++-{ ++-protected: ++- com::sun::star::uno::Reference< com::sun::star::io::XInputStream > xStream; ++- com::sun::star::uno::Reference< com::sun::star::io::XSeekable > xSeek; ++- sal_Int64 nEnd, nCurrent, nUncompressedSize; ++- sal_Bool bRawStream, bHaveInMemory, bEncrypted; ++- com::sun::star::uno::Sequence < sal_Int8 > aBuffer; ++- const rtl::Reference < EncryptionData > xEncryptionData; ++- const com::sun::star::packages::zip::ZipEntry aEntry; ++- Inflater aInflater; ++- void readIntoMemory() ++- throw(::com::sun::star::io::NotConnectedException, ::com::sun::star::io::BufferSizeExceededException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++-public: ++- EntryInputStream( com::sun::star::uno::Reference < com::sun::star::io::XInputStream > xInput, ++- const com::sun::star::packages::zip::ZipEntry &rNewEntry, ++- const rtl::Reference < EncryptionData > &xEncryptData, ++- sal_Bool bGetRawStream = sal_False); ++- virtual ~EntryInputStream(); ++- ++- // XInputStream ++- virtual sal_Int32 SAL_CALL readBytes( ::com::sun::star::uno::Sequence< sal_Int8 >& aData, sal_Int32 nBytesToRead ) ++- throw(::com::sun::star::io::NotConnectedException, ::com::sun::star::io::BufferSizeExceededException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++- virtual sal_Int32 SAL_CALL readSomeBytes( ::com::sun::star::uno::Sequence< sal_Int8 >& aData, sal_Int32 nMaxBytesToRead ) ++- throw(::com::sun::star::io::NotConnectedException, ::com::sun::star::io::BufferSizeExceededException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++- virtual void SAL_CALL skipBytes( sal_Int32 nBytesToSkip ) ++- throw(::com::sun::star::io::NotConnectedException, ::com::sun::star::io::BufferSizeExceededException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++- virtual sal_Int32 SAL_CALL available( ) ++- throw(::com::sun::star::io::NotConnectedException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++- virtual void SAL_CALL closeInput( ) ++- throw(::com::sun::star::io::NotConnectedException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++- // XSeekable ++- virtual void SAL_CALL seek( sal_Int64 location ) ++- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++- virtual sal_Int64 SAL_CALL getPosition( ) ++- throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++- virtual sal_Int64 SAL_CALL getLength( ) ++- throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++- /* ++-private: ++- void fill( void ); ++- */ ++-}; ++- ++-#endif ++- ++-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ++diff --git a/package/source/zipapi/XFileStream.cxx b/package/source/zipapi/XFileStream.cxx ++deleted file mode 100644 ++index 6afe807..0000000 ++--- package/source/zipapi/XFileStream.cxx +++++ /dev/null ++@@ -1,230 +0,0 @@ ++-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ ++-/************************************************************************* ++- * ++- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++- * ++- * Copyright 2000, 2010 Oracle and/or its affiliates. ++- * ++- * OpenOffice.org - a multi-platform office productivity suite ++- * ++- * This file is part of OpenOffice.org. ++- * ++- * OpenOffice.org is free software: you can redistribute it and/or modify ++- * it under the terms of the GNU Lesser General Public License version 3 ++- * only, as published by the Free Software Foundation. ++- * ++- * OpenOffice.org is distributed in the hope that it will be useful, ++- * but WITHOUT ANY WARRANTY; without even the implied warranty of ++- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++- * GNU Lesser General Public License version 3 for more details ++- * (a copy is included in the LICENSE file that accompanied this code). ++- * ++- * You should have received a copy of the GNU Lesser General Public License ++- * version 3 along with OpenOffice.org. If not, see ++- * ++- * for a copy of the LGPLv3 License. ++- * ++- ************************************************************************/ ++- ++-// MARKER(update_precomp.py): autogen include statement, do not remove ++-#include "precompiled_package.hxx" ++-#include ++-#include ++-#include ++-#include ++-#include ++-#include ++-#include ++-#include ++- ++-using namespace com::sun::star::packages::zip::ZipConstants; ++-using namespace com::sun::star::io; ++-using namespace com::sun::star::uno; ++-using com::sun::star::lang::IllegalArgumentException; ++-using ::rtl::OUString; ++- ++-XFileStream::XFileStream( ZipEntry & rEntry, ++- com::sun::star::uno::Reference < com::sun::star::io::XInputStream > xNewZipStream, ++- com::sun::star::uno::Reference < com::sun::star::io::XInputStream > xNewTempStream, ++- const rtl::Reference < EncryptionData > &rData, ++- sal_Bool bNewRawStream, ++- sal_Bool bIsEncrypted ) ++-: maEntry ( rEntry ) ++-, mxData ( rData ) ++-, mbRawStream ( bNewRawStream ) ++-, mbFinished ( sal_False ) ++-, mxTempIn ( xNewTempStream ) ++-, mxTempSeek ( xNewTempStream, UNO_QUERY ) ++-, mxTempOut ( xNewTempStream, UNO_QUERY ) ++-, mxZipStream ( xNewZipStream ) ++-, mxZipSeek ( xNewZipStream, UNO_QUERY ) ++-, maInflater ( sal_True ) ++-, maCipher ( NULL ) ++-{ ++- mnZipCurrent = maEntry.nOffset; ++- if (mbRawStream) ++- { ++- mnZipSize = maEntry.nMethod == DEFLATED ? maEntry.nCompressedSize : maEntry.nSize; ++- mnZipEnd = maEntry.nOffset + mnZipSize; ++- } ++- else ++- { ++- mnZipSize = maEntry.nSize; ++- mnZipEnd = maEntry.nMethod == DEFLATED ? maEntry.nOffset + maEntry.nCompressedSize : maEntry.nOffset + maEntry.nSize; ++- } ++- ++- if ( bIsEncrypted ) ++- { ++- sal_Bool bHaveEncryptData = ( !rData.isEmpty() && rData->aSalt.getLength() && rData->aInitVector.getLength() && rData->nIterationCount != 0 ) ? sal_True : sal_False; ++- ++- // if we have all the encrypted data, and want a raw stream, then prepend it to the stream, otherwise ++- // make a cipher so we can decrypt it ++- if ( bHaveEncryptData ) ++- { ++- if ( !bNewRawStream ) ++- ZipFile::StaticGetCipher ( rData, maCipher, sal_True ); ++- else ++- { ++- // Put in the EncryptedDataHeader ++- Sequence < sal_Int8 > aEncryptedDataHeader ( n_ConstHeaderSize + ++- rData->aInitVector.getLength() + ++- rData->aSalt.getLength() + ++- rData->aDigest.getLength() ); ++- sal_Int8 * pHeader = aEncryptedDataHeader.getArray(); ++- ZipFile::StaticFillHeader ( rData, rEntry.nSize, pHeader ); ++- mxTempOut->writeBytes ( aEncryptedDataHeader ); ++- mnZipSize += mxTempSeek->getPosition(); ++- mxTempSeek->seek ( 0 ); ++- } ++- } ++- } ++-} ++- ++-XFileStream::~XFileStream() ++-{ ++- if ( maCipher ) ++- rtl_cipher_destroy ( maCipher ); ++-} ++- ++-void XFileStream::fill( sal_Int64 nUntil) ++-{ ++- sal_Int32 nRead; ++- sal_Int64 nPosition = mxTempSeek->getPosition(); ++- mxTempSeek->seek ( mxTempSeek->getLength() ); ++- maBuffer.realloc ( n_ConstBufferSize ); ++- ++- while ( mxTempSeek->getLength() < nUntil ) ++- { ++- if ( !mbRawStream ) ++- { ++- while ( 0 == ( nRead = maInflater.doInflate( maBuffer ) ) ) ++- { ++- if ( maInflater.finished() || maInflater.needsDictionary() ) ++- { ++- // some error handling ? ++- return; ++- } ++- ++- sal_Int64 nDiff = mnZipEnd - mnZipCurrent; ++- if ( nDiff > 0 ) ++- { ++- mxZipSeek->seek ( mnZipCurrent ); ++- nRead = mxZipStream->readBytes ( maCompBuffer, static_cast < sal_Int32 > ( nDiff < n_ConstBufferSize ? nDiff : n_ConstBufferSize ) ); ++- mnZipCurrent += nRead; ++- // maCompBuffer now has the uncompressed data, check if we need to decrypt ++- // before passing to the Inflater ++- if ( maCipher ) ++- { ++- Sequence < sal_Int8 > aCryptBuffer ( nRead ); ++- rtlCipherError aResult = rtl_cipher_decode ( maCipher, ++- maCompBuffer.getConstArray(), ++- nRead, ++- reinterpret_cast < sal_uInt8 * > (aCryptBuffer.getArray()), ++- nRead); ++- OSL_ASSERT (aResult == rtl_Cipher_E_None); ++- maCompBuffer = aCryptBuffer; // Now it holds the decrypted data ++- ++- } ++- maInflater.setInput ( maCompBuffer ); ++- } ++- else ++- { ++- // some error handling ? ++- return; ++- } ++- } ++- } ++- else ++- { ++- sal_Int64 nDiff = mnZipEnd - mnZipCurrent; ++- mxZipSeek->seek ( mnZipCurrent ); ++- nRead = mxZipStream->readBytes ( maBuffer, static_cast < sal_Int32 > ( nDiff < n_ConstBufferSize ? nDiff : n_ConstBufferSize ) ); ++- mnZipCurrent += nRead; ++- } ++- Sequence < sal_Int8 > aTmpBuffer ( maBuffer.getConstArray(), nRead ); ++- mxTempOut->writeBytes ( aTmpBuffer ); ++- } ++- mxTempSeek->seek ( nPosition ); ++-} ++- ++-sal_Int32 SAL_CALL XFileStream::readBytes( Sequence< sal_Int8 >& aData, sal_Int32 nBytesToRead ) ++- throw( NotConnectedException, BufferSizeExceededException, IOException, RuntimeException) ++-{ ++- sal_Int64 nPosition = mxTempSeek->getPosition(); ++- if ( nPosition + nBytesToRead > mnZipSize ) ++- nBytesToRead = static_cast < sal_Int32 > ( mnZipSize - nPosition ); ++- ++- sal_Int64 nUntil = nBytesToRead + nPosition + n_ConstBufferSize; ++- if (nUntil > mnZipSize ) ++- nUntil = mnZipSize; ++- if ( nUntil > mxTempSeek->getLength() ) ++- fill ( nUntil ); ++- sal_Int32 nRead = mxTempIn->readBytes ( aData, nBytesToRead ); ++- return nRead; ++-} ++- ++-sal_Int32 SAL_CALL XFileStream::readSomeBytes( Sequence< sal_Int8 >& aData, sal_Int32 nMaxBytesToRead ) ++- throw( NotConnectedException, BufferSizeExceededException, IOException, RuntimeException) ++-{ ++- return readBytes ( aData, nMaxBytesToRead ); ++-} ++-void SAL_CALL XFileStream::skipBytes( sal_Int32 nBytesToSkip ) ++- throw( NotConnectedException, BufferSizeExceededException, IOException, RuntimeException) ++-{ ++- seek ( mxTempSeek->getPosition() + nBytesToSkip ); ++-} ++- ++-sal_Int32 SAL_CALL XFileStream::available( ) ++- throw( NotConnectedException, IOException, RuntimeException) ++-{ ++- return static_cast < sal_Int32 > ( mnZipSize - mxTempSeek->getPosition() ); ++-} ++- ++-void SAL_CALL XFileStream::closeInput( ) ++- throw( NotConnectedException, IOException, RuntimeException) ++-{ ++-} ++-void SAL_CALL XFileStream::seek( sal_Int64 location ) ++- throw( IllegalArgumentException, IOException, RuntimeException) ++-{ ++- if ( location > mnZipSize || location < 0 ) ++- throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), 1 ); ++- if ( location > mxTempSeek->getLength() ) ++- { ++- sal_Int64 nUntil = location + n_ConstBufferSize > mnZipSize ? mnZipSize : location + n_ConstBufferSize; ++- fill ( nUntil ); ++- } ++- mxTempSeek->seek ( location ); ++-} ++-sal_Int64 SAL_CALL XFileStream::getPosition( ) ++- throw(IOException, RuntimeException) ++-{ ++- return mxTempSeek->getPosition(); ++-} ++-sal_Int64 SAL_CALL XFileStream::getLength( ) ++- throw(IOException, RuntimeException) ++-{ ++- return mnZipSize; ++-} ++- ++-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ++diff --git a/package/source/zipapi/XFileStream.hxx b/package/source/zipapi/XFileStream.hxx ++deleted file mode 100644 ++index 51518de..0000000 ++--- package/source/zipapi/XFileStream.hxx +++++ /dev/null ++@@ -1,95 +0,0 @@ ++-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ ++-/************************************************************************* ++- * ++- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++- * ++- * Copyright 2000, 2010 Oracle and/or its affiliates. ++- * ++- * OpenOffice.org - a multi-platform office productivity suite ++- * ++- * This file is part of OpenOffice.org. ++- * ++- * OpenOffice.org is free software: you can redistribute it and/or modify ++- * it under the terms of the GNU Lesser General Public License version 3 ++- * only, as published by the Free Software Foundation. ++- * ++- * OpenOffice.org is distributed in the hope that it will be useful, ++- * but WITHOUT ANY WARRANTY; without even the implied warranty of ++- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++- * GNU Lesser General Public License version 3 for more details ++- * (a copy is included in the LICENSE file that accompanied this code). ++- * ++- * You should have received a copy of the GNU Lesser General Public License ++- * version 3 along with OpenOffice.org. If not, see ++- * ++- * for a copy of the LGPLv3 License. ++- * ++- ************************************************************************/ ++-#ifndef _XFILE_STREAM_HXX ++-#define _XFILE_STREAM_HXX ++- ++-#include ++-#include ++-#include ++-#include ++-#include ++-#include ++-#include ++- ++-namespace com { namespace sun { namespace star { ++- namespace io { class XOutputStream; } ++-} } } ++-class EncryptionData; ++-typedef void* rtlCipher; ++-class XFileStream : public cppu::WeakImplHelper2 ++-< ++- com::sun::star::io::XInputStream, ++- com::sun::star::io::XSeekable ++-> ++-{ ++-protected: ++- com::sun::star::uno::Reference < com::sun::star::io::XInputStream > mxZipStream; ++- com::sun::star::uno::Reference < com::sun::star::io::XSeekable > mxZipSeek; ++- com::sun::star::uno::Reference < com::sun::star::io::XInputStream > mxTempIn; ++- com::sun::star::uno::Reference < com::sun::star::io::XSeekable > mxTempSeek; ++- com::sun::star::uno::Reference < com::sun::star::io::XOutputStream > mxTempOut; ++- com::sun::star::uno::Sequence < sal_Int8 > maBuffer, maCompBuffer; ++- ZipEntry maEntry; ++- rtl::Reference < EncryptionData > mxData; ++- rtlCipher maCipher; ++- Inflater maInflater; ++- sal_Bool mbRawStream, mbFinished; ++- sal_Int64 mnZipCurrent, mnZipEnd, mnZipSize; ++- void fill( sal_Int64 nUntil ); ++- ++-public: ++- XFileStream( ZipEntry & rEntry, ++- com::sun::star::uno::Reference < com::sun::star::io::XInputStream > xNewZipStream, ++- com::sun::star::uno::Reference < com::sun::star::io::XInputStream > xNewTempStream, ++- const rtl::Reference < EncryptionData > &rData, ++- sal_Bool bRawStream, ++- sal_Bool bIsEncrypted ); ++- virtual ~XFileStream(); ++- ++- // XInputStream ++- virtual sal_Int32 SAL_CALL readBytes( ::com::sun::star::uno::Sequence< sal_Int8 >& aData, sal_Int32 nBytesToRead ) ++- throw(::com::sun::star::io::NotConnectedException, ::com::sun::star::io::BufferSizeExceededException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++- virtual sal_Int32 SAL_CALL readSomeBytes( ::com::sun::star::uno::Sequence< sal_Int8 >& aData, sal_Int32 nMaxBytesToRead ) ++- throw(::com::sun::star::io::NotConnectedException, ::com::sun::star::io::BufferSizeExceededException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++- virtual void SAL_CALL skipBytes( sal_Int32 nBytesToSkip ) ++- throw(::com::sun::star::io::NotConnectedException, ::com::sun::star::io::BufferSizeExceededException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++- virtual sal_Int32 SAL_CALL available( ) ++- throw(::com::sun::star::io::NotConnectedException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++- virtual void SAL_CALL closeInput( ) ++- throw(::com::sun::star::io::NotConnectedException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++- // XSeekable ++- virtual void SAL_CALL seek( sal_Int64 location ) ++- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++- virtual sal_Int64 SAL_CALL getPosition( ) ++- throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++- virtual sal_Int64 SAL_CALL getLength( ) ++- throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); ++-}; ++-#endif ++- ++-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ++diff --git a/package/source/zipapi/XMemoryStream.cxx b/package/source/zipapi/XMemoryStream.cxx ++deleted file mode 100644 ++index 8b737db..0000000 ++--- package/source/zipapi/XMemoryStream.cxx +++++ /dev/null ++@@ -1,55 +0,0 @@ ++-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ ++-/************************************************************************* ++- * ++- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++- * ++- * Copyright 2000, 2010 Oracle and/or its affiliates. ++- * ++- * OpenOffice.org - a multi-platform office productivity suite ++- * ++- * This file is part of OpenOffice.org. ++- * ++- * OpenOffice.org is free software: you can redistribute it and/or modify ++- * it under the terms of the GNU Lesser General Public License version 3 ++- * only, as published by the Free Software Foundation. ++- * ++- * OpenOffice.org is distributed in the hope that it will be useful, ++- * but WITHOUT ANY WARRANTY; without even the implied warranty of ++- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++- * GNU Lesser General Public License version 3 for more details ++- * (a copy is included in the LICENSE file that accompanied this code). ++- * ++- * You should have received a copy of the GNU Lesser General Public License ++- * version 3 along with OpenOffice.org. If not, see ++- * ++- * for a copy of the LGPLv3 License. ++- * ++- ************************************************************************/ ++- ++-// MARKER(update_precomp.py): autogen include statement, do not remove ++-#include "precompiled_package.hxx" ++-#include ++- ++-using namespace com::sun::star::io; ++-using namespace com::sun::star::uno; ++- ++-XMemoryStream::XMemoryStream ( com::sun::star::uno::Sequence < sal_Int8 > & rNewBuffer ) ++-: ZipPackageBuffer ( rNewBuffer ) ++-{ ++-} ++-XMemoryStream::~XMemoryStream(void) ++-{ ++-} ++-::com::sun::star::uno::Any SAL_CALL XMemoryStream::queryInterface( const com::sun::star::uno::Type& rType ) ++- throw(com::sun::star::uno::RuntimeException) ++-{ ++- return ::cppu::queryInterface ( rType , ++- // OWeakObject interfaces ++- reinterpret_cast< XInterface* > ( this ) , ++- static_cast< XWeak* > ( this ) , ++- // my interfaces ++- static_cast< XInputStream* > ( this ) , ++- static_cast< XSeekable* > ( this ) ); ++-} ++- ++-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ++diff --git a/package/source/zipapi/XMemoryStream.hxx b/package/source/zipapi/XMemoryStream.hxx ++deleted file mode 100644 ++index e6bc88e..0000000 ++--- package/source/zipapi/XMemoryStream.hxx +++++ /dev/null ++@@ -1,45 +0,0 @@ ++-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ ++-/************************************************************************* ++- * ++- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++- * ++- * Copyright 2000, 2010 Oracle and/or its affiliates. ++- * ++- * OpenOffice.org - a multi-platform office productivity suite ++- * ++- * This file is part of OpenOffice.org. ++- * ++- * OpenOffice.org is free software: you can redistribute it and/or modify ++- * it under the terms of the GNU Lesser General Public License version 3 ++- * only, as published by the Free Software Foundation. ++- * ++- * OpenOffice.org is distributed in the hope that it will be useful, ++- * but WITHOUT ANY WARRANTY; without even the implied warranty of ++- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++- * GNU Lesser General Public License version 3 for more details ++- * (a copy is included in the LICENSE file that accompanied this code). ++- * ++- * You should have received a copy of the GNU Lesser General Public License ++- * version 3 along with OpenOffice.org. If not, see ++- * ++- * for a copy of the LGPLv3 License. ++- * ++- ************************************************************************/ ++-#ifndef _XMEMORY_STREAM_HXX ++-#define _XMEMORY_STREAM_HXX ++- ++-#include ++- ++-class ZipPackage; ++- ++-class XMemoryStream: public ZipPackageBuffer ++-{ ++-public: ++- XMemoryStream ( com::sun::star::uno::Sequence < sal_Int8 > & rNewBuffer ); ++- virtual ~XMemoryStream(void); ++- virtual com::sun::star::uno::Any SAL_CALL queryInterface( const com::sun::star::uno::Type& rType ) ++- throw(com::sun::star::uno::RuntimeException); ++-}; ++-#endif ++- ++-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ++diff --git a/package/source/zipapi/XUnbufferedStream.cxx b/package/source/zipapi/XUnbufferedStream.cxx ++index 1cad883..bb757e6 100644 ++--- package/source/zipapi/XUnbufferedStream.cxx +++++ package/source/zipapi/XUnbufferedStream.cxx ++@@ -32,8 +32,9 @@ ++ #include ++ #include ++ #include +++#include +++ ++ #include ++-#include ++ #include ++ #include ++ #include ++@@ -48,6 +49,7 @@ ++ using namespace ::com::sun::star; ++ #endif ++ +++using namespace ::com::sun::star; ++ using namespace com::sun::star::packages::zip::ZipConstants; ++ using namespace com::sun::star::io; ++ using namespace com::sun::star::uno; ++@@ -55,7 +57,9 @@ using com::sun::star::lang::IllegalArgumentException; ++ using com::sun::star::packages::zip::ZipIOException; ++ using ::rtl::OUString; ++ ++-XUnbufferedStream::XUnbufferedStream( SotMutexHolderRef aMutexHolder, +++XUnbufferedStream::XUnbufferedStream( +++ const uno::Reference< lang::XMultiServiceFactory >& xFactory, +++ SotMutexHolderRef aMutexHolder, ++ ZipEntry & rEntry, ++ Reference < XInputStream > xNewZipStream, ++ const rtl::Reference < EncryptionData > &rData, ++@@ -68,7 +72,7 @@ XUnbufferedStream::XUnbufferedStream( SotMutexHolderRef aMutexHolder, ++ , mxZipSeek ( xNewZipStream, UNO_QUERY ) ++ , maEntry ( rEntry ) ++ , mxData ( rData ) ++-, maCipher ( NULL ) +++, mnBlockSize( 1 ) ++ , maInflater ( sal_True ) ++ , mbRawStream ( nStreamMode == UNBUFF_STREAM_RAW || nStreamMode == UNBUFF_STREAM_WRAPPEDRAW ) ++ , mbWrappedRaw ( nStreamMode == UNBUFF_STREAM_WRAPPEDRAW ) ++@@ -91,11 +95,15 @@ XUnbufferedStream::XUnbufferedStream( SotMutexHolderRef aMutexHolder, ++ mnZipSize = maEntry.nSize; ++ mnZipEnd = maEntry.nMethod == DEFLATED ? maEntry.nOffset + maEntry.nCompressedSize : maEntry.nOffset + maEntry.nSize; ++ } ++- sal_Bool bHaveEncryptData = ( rData.is() && rData->aSalt.getLength() && rData->aInitVector.getLength() && rData->nIterationCount != 0 ) ? sal_True : sal_False; +++ sal_Bool bHaveEncryptData = ( rData.is() && rData->m_aSalt.getLength() && rData->m_aInitVector.getLength() && rData->m_nIterationCount != 0 ) ? sal_True : sal_False; ++ sal_Bool bMustDecrypt = ( nStreamMode == UNBUFF_STREAM_DATA && bHaveEncryptData && bIsEncrypted ) ? sal_True : sal_False; ++ ++ if ( bMustDecrypt ) ++- ZipFile::StaticGetCipher ( rData, maCipher, sal_True ); +++ { +++ m_xCipherContext = ZipFile::StaticGetCipher( xFactory, rData, false ); +++ mnBlockSize = ( rData->m_nEncAlg == xml::crypto::CipherID::AES_CBC_W3C_PADDING ? 16 : 1 ); +++ } +++ ++ if ( bHaveEncryptData && mbWrappedRaw && bIsEncrypted ) ++ { ++ // if we have the data needed to decrypt it, but didn't want it decrypted (or ++@@ -104,24 +112,26 @@ XUnbufferedStream::XUnbufferedStream( SotMutexHolderRef aMutexHolder, ++ ++ // Make a buffer big enough to hold both the header and the data itself ++ maHeader.realloc ( n_ConstHeaderSize + ++- rData->aInitVector.getLength() + ++- rData->aSalt.getLength() + ++- rData->aDigest.getLength() + +++ rData->m_aInitVector.getLength() + +++ rData->m_aSalt.getLength() + +++ rData->m_aDigest.getLength() + ++ aMediaType.getLength() * sizeof( sal_Unicode ) ); ++ sal_Int8 * pHeader = maHeader.getArray(); ++- ZipFile::StaticFillHeader ( rData, rEntry.nSize, aMediaType, pHeader ); +++ ZipFile::StaticFillHeader( rData, rEntry.nSize, aMediaType, pHeader ); ++ mnHeaderToRead = static_cast < sal_Int16 > ( maHeader.getLength() ); ++ } ++ } ++ ++ // allows to read package raw stream ++-XUnbufferedStream::XUnbufferedStream( const Reference < XInputStream >& xRawStream, ++- const rtl::Reference < EncryptionData > &rData ) +++XUnbufferedStream::XUnbufferedStream( +++ const uno::Reference< lang::XMultiServiceFactory >& /*xFactory*/, +++ const Reference < XInputStream >& xRawStream, +++ const ::rtl::Reference< EncryptionData >& rData ) ++ : maMutexHolder( new SotMutexHolder ) ++ , mxZipStream ( xRawStream ) ++ , mxZipSeek ( xRawStream, UNO_QUERY ) ++ , mxData ( rData ) ++-, maCipher ( NULL ) +++, mnBlockSize( 1 ) ++ , maInflater ( sal_True ) ++ , mbRawStream ( sal_False ) ++ , mbWrappedRaw ( sal_False ) ++@@ -137,8 +147,8 @@ XUnbufferedStream::XUnbufferedStream( const Reference < XInputStream >& xRawStre ++ OSL_ENSURE( mxZipSeek.is(), "The stream must be seekable!\n" ); ++ ++ // skip raw header, it must be already parsed to rData ++- mnZipCurrent = n_ConstHeaderSize + rData->aInitVector.getLength() + ++- rData->aSalt.getLength() + rData->aDigest.getLength(); +++ mnZipCurrent = n_ConstHeaderSize + rData->m_aInitVector.getLength() + +++ rData->m_aSalt.getLength() + rData->m_aDigest.getLength(); ++ ++ try { ++ if ( mxZipSeek.is() ) ++@@ -150,13 +160,12 @@ XUnbufferedStream::XUnbufferedStream( const Reference < XInputStream >& xRawStre ++ ++ mnZipEnd = mnZipCurrent + mnZipSize; ++ ++- ZipFile::StaticGetCipher ( rData, maCipher, sal_True ); +++ // the raw data will not be decrypted, no need for the cipher +++ // m_xCipherContext = ZipFile::StaticGetCipher( xFactory, rData, false ); ++ } ++ ++ XUnbufferedStream::~XUnbufferedStream() ++ { ++- if ( maCipher ) ++- rtl_cipher_destroy ( maCipher ); ++ } ++ ++ sal_Int32 SAL_CALL XUnbufferedStream::readBytes( Sequence< sal_Int8 >& aData, sal_Int32 nBytesToRead ) ++@@ -249,7 +258,12 @@ sal_Int32 SAL_CALL XUnbufferedStream::readBytes( Sequence< sal_Int8 >& aData, sa ++ if ( nDiff > 0 ) ++ { ++ mxZipSeek->seek ( mnZipCurrent ); ++- sal_Int32 nToRead = std::min ( nDiff, std::max ( nRequestedBytes, static_cast< sal_Int32 >( 8192 ) ) ); +++ +++ sal_Int32 nToRead = std::max( nRequestedBytes, static_cast< sal_Int32 >( 8192 ) ); +++ if ( mnBlockSize > 1 ) +++ nToRead = nToRead + mnBlockSize - nToRead % mnBlockSize; +++ nToRead = std::min( nDiff, nToRead ); +++ ++ sal_Int32 nZipRead = mxZipStream->readBytes ( maCompBuffer, nToRead ); ++ if ( nZipRead < nToRead ) ++ throw ZipIOException( OUString( RTL_CONSTASCII_USTRINGPARAM( "No expected data!" ) ), ++@@ -258,23 +272,22 @@ sal_Int32 SAL_CALL XUnbufferedStream::readBytes( Sequence< sal_Int8 >& aData, sa ++ mnZipCurrent += nZipRead; ++ // maCompBuffer now has the data, check if we need to decrypt ++ // before passing to the Inflater ++- if ( maCipher ) +++ if ( m_xCipherContext.is() ) ++ { ++ if ( mbCheckCRC ) ++ maCRC.update( maCompBuffer ); ++ ++- Sequence < sal_Int8 > aCryptBuffer ( nZipRead ); ++- rtlCipherError aResult = ++- rtl_cipher_decode ( maCipher, ++- maCompBuffer.getConstArray(), ++- nZipRead, ++- reinterpret_cast < sal_uInt8 * > (aCryptBuffer.getArray()), ++- nZipRead); ++- if( aResult != rtl_Cipher_E_None ) { ++- OSL_ASSERT (aResult == rtl_Cipher_E_None); +++ maCompBuffer = m_xCipherContext->convertWithCipherContext( maCompBuffer ); +++ if ( mnZipCurrent == mnZipEnd ) +++ { +++ Sequence< sal_Int8 > aSuffix = m_xCipherContext->finalizeCipherContextAndDispose(); +++ if ( aSuffix.getLength() ) +++ { +++ sal_Int32 nOldLen = maCompBuffer.getLength(); +++ maCompBuffer.realloc( nOldLen + aSuffix.getLength() ); +++ rtl_copyMemory( maCompBuffer.getArray() + nOldLen, aSuffix.getConstArray(), aSuffix.getLength() ); +++ } ++ } ++- maCompBuffer = aCryptBuffer; // Now it holds the decrypted data ++- ++ } ++ maInflater.setInput ( maCompBuffer ); ++ } ++@@ -293,7 +306,7 @@ sal_Int32 SAL_CALL XUnbufferedStream::readBytes( Sequence< sal_Int8 >& aData, sa ++ ++ if ( mbCheckCRC && ( !mbRawStream || mbWrappedRaw ) ) ++ { ++- if ( !maCipher && !mbWrappedRaw ) +++ if ( !m_xCipherContext.is() && !mbWrappedRaw ) ++ maCRC.update( aData ); ++ ++ #if 0 ++diff --git a/package/source/zipapi/XUnbufferedStream.hxx b/package/source/zipapi/XUnbufferedStream.hxx ++index 5cf7272..aa58ca7 100644 ++--- package/source/zipapi/XUnbufferedStream.hxx +++++ package/source/zipapi/XUnbufferedStream.hxx ++@@ -32,6 +32,8 @@ ++ #include ++ #include ++ #include +++#include +++ ++ #include ++ #include ++ #include ++@@ -44,7 +46,6 @@ ++ #define UNBUFF_STREAM_WRAPPEDRAW 2 ++ ++ class EncryptionData; ++-typedef void* rtlCipher; ++ class XUnbufferedStream : public cppu::WeakImplHelper1 ++ < ++ com::sun::star::io::XInputStream ++@@ -58,7 +59,8 @@ protected: ++ com::sun::star::uno::Sequence < sal_Int8 > maCompBuffer, maHeader; ++ ZipEntry maEntry; ++ rtl::Reference < EncryptionData > mxData; ++- rtlCipher maCipher; +++ sal_Int32 mnBlockSize; +++ ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XCipherContext > m_xCipherContext; ++ ZipUtils::Inflater maInflater; ++ sal_Bool mbRawStream, mbWrappedRaw, mbFinished; ++ sal_Int16 mnHeaderToRead; ++@@ -68,6 +70,7 @@ protected: ++ ++ public: ++ XUnbufferedStream( +++ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xFactory, ++ SotMutexHolderRef aMutexHolder, ++ ZipEntry & rEntry, ++ com::sun::star::uno::Reference < com::sun::star::io::XInputStream > xNewZipStream, ++@@ -78,8 +81,10 @@ public: ++ sal_Bool bRecoveryMode ); ++ ++ // allows to read package raw stream ++- XUnbufferedStream( const com::sun::star::uno::Reference < com::sun::star::io::XInputStream >& xRawStream, ++- const rtl::Reference < EncryptionData > &rData ); +++ XUnbufferedStream( +++ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xFactory, +++ const com::sun::star::uno::Reference < com::sun::star::io::XInputStream >& xRawStream, +++ const ::rtl::Reference< EncryptionData >& rData ); ++ ++ ++ virtual ~XUnbufferedStream(); ++diff --git a/package/source/zipapi/ZipFile.cxx b/package/source/zipapi/ZipFile.cxx ++index 2e9576b..fb56c28 100644 ++--- package/source/zipapi/ZipFile.cxx +++++ package/source/zipapi/ZipFile.cxx ++@@ -32,11 +32,22 @@ ++ #include ++ #include ++ #include +++#include +++#include +++#include +++#include +++#include +++#include +++ +++#include ++ #include ++ /* ++ #include ++ #include ++ */ +++ +++#include "blowfishcontext.hxx" +++#include "sha1context.hxx" ++ #include ++ #include ++ #include ++@@ -47,10 +58,10 @@ ++ ++ #include ++ ++-#include // for memcpy ++ #include ++ ++ #include +++#define AES_CBC_BLOCK_SIZE 16 ++ ++ using namespace com::sun::star; ++ using namespace com::sun::star::io; ++@@ -72,7 +83,7 @@ ZipFile::ZipFile( Reference < XInputStream > &xInput, const Reference < XMultiSe ++ , aInflater (sal_True) ++ , xStream(xInput) ++ , xSeek(xInput, UNO_QUERY) ++-, xFactory ( xNewFactory ) +++, m_xFactory ( xNewFactory ) ++ , bRecoveryMode( sal_False ) ++ { ++ if (bInitialise) ++@@ -93,7 +104,7 @@ ZipFile::ZipFile( Reference < XInputStream > &xInput, const Reference < XMultiSe ++ , aInflater (sal_True) ++ , xStream(xInput) ++ , xSeek(xInput, UNO_QUERY) ++-, xFactory ( xNewFactory ) +++, m_xFactory ( xNewFactory ) ++ , xProgressHandler( xProgress ) ++ , bRecoveryMode( bForceRecovery ) ++ { ++@@ -136,18 +147,18 @@ sal_Bool ZipFile::StaticGetCipher ( const rtl::Reference < EncryptionData > & xE ++ ++ // Get the key ++ rtl_digest_PBKDF2 ( aDerivedKey.getArray(), 16, ++- reinterpret_cast < const sal_uInt8 * > (xEncryptionData->aKey.getConstArray() ), ++- xEncryptionData->aKey.getLength(), ++- reinterpret_cast < const sal_uInt8 * > ( xEncryptionData->aSalt.getConstArray() ), ++- xEncryptionData->aSalt.getLength(), ++- xEncryptionData->nIterationCount ); +++ reinterpret_cast < const sal_uInt8 * > (xEncryptionData->m_aKey.getConstArray() ), +++ xEncryptionData->m_aKey.getLength(), +++ reinterpret_cast < const sal_uInt8 * > ( xEncryptionData->m_aSalt.getConstArray() ), +++ xEncryptionData->m_aSalt.getLength(), +++ xEncryptionData->m_nIterationCount ); ++ ++ rCipher = rtl_cipher_create (rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeStream); ++ aResult = rtl_cipher_init( rCipher, bDecode ? rtl_Cipher_DirectionDecode : rtl_Cipher_DirectionEncode, ++ aDerivedKey.getConstArray(), ++ aDerivedKey.getLength(), ++- reinterpret_cast < const sal_uInt8 * > ( xEncryptionData->aInitVector.getConstArray() ), ++- xEncryptionData->aInitVector.getLength()); +++ reinterpret_cast < const sal_uInt8 * > ( xEncryptionData->m_aInitVector.getConstArray() ), +++ xEncryptionData->m_aInitVector.getLength()); ++ OSL_ASSERT (aResult == rtl_Cipher_E_None); ++ ++ bResult = ( aResult == rtl_Cipher_E_None ); ++@@ -156,15 +167,85 @@ sal_Bool ZipFile::StaticGetCipher ( const rtl::Reference < EncryptionData > & xE ++ return bResult; ++ } ++ +++uno::Reference< xml::crypto::XDigestContext > ZipFile::StaticGetDigestContextForChecksum( const uno::Reference< lang::XMultiServiceFactory >& xArgFactory, const ::rtl::Reference< EncryptionData >& xEncryptionData ) +++{ +++ uno::Reference< xml::crypto::XDigestContext > xDigestContext; +++ if ( xEncryptionData->m_nCheckAlg == xml::crypto::DigestID::SHA256_1K ) +++ { +++ uno::Reference< lang::XMultiServiceFactory > xFactory = xArgFactory; +++ if ( !xFactory.is() ) +++ xFactory.set( comphelper::getProcessServiceFactory(), uno::UNO_SET_THROW ); +++ +++ uno::Reference< xml::crypto::XDigestContextSupplier > xDigestContextSupplier( +++ xFactory->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.xml.crypto.NSSInitializer" ) ) ), +++ uno::UNO_QUERY_THROW ); +++ +++ xDigestContext.set( xDigestContextSupplier->getDigestContext( xEncryptionData->m_nCheckAlg, uno::Sequence< beans::NamedValue >() ), uno::UNO_SET_THROW ); +++ } +++ else if ( xEncryptionData->m_nCheckAlg == xml::crypto::DigestID::SHA1_1K ) +++ xDigestContext.set( SHA1DigestContext::Create(), uno::UNO_SET_THROW ); +++ +++ return xDigestContext; +++} +++ +++uno::Reference< xml::crypto::XCipherContext > ZipFile::StaticGetCipher( const uno::Reference< lang::XMultiServiceFactory >& xArgFactory, const ::rtl::Reference< EncryptionData >& xEncryptionData, bool bEncrypt ) +++{ +++ uno::Reference< xml::crypto::XCipherContext > xResult; +++ +++ try +++ { +++ uno::Sequence< sal_Int8 > aDerivedKey( xEncryptionData->m_nDerivedKeySize ); +++ if ( rtl_Digest_E_None != rtl_digest_PBKDF2( reinterpret_cast< sal_uInt8* >( aDerivedKey.getArray() ), +++ aDerivedKey.getLength(), +++ reinterpret_cast< const sal_uInt8 * > (xEncryptionData->m_aKey.getConstArray() ), +++ xEncryptionData->m_aKey.getLength(), +++ reinterpret_cast< const sal_uInt8 * > ( xEncryptionData->m_aSalt.getConstArray() ), +++ xEncryptionData->m_aSalt.getLength(), +++ xEncryptionData->m_nIterationCount ) ) +++ { +++ throw ZipIOException( ::rtl::OUString::createFromAscii( "Can not create derived key!\n" ), +++ uno::Reference< XInterface >() ); +++ } +++ +++ if ( xEncryptionData->m_nEncAlg == xml::crypto::CipherID::AES_CBC_W3C_PADDING ) +++ { +++ uno::Reference< lang::XMultiServiceFactory > xFactory = xArgFactory; +++ if ( !xFactory.is() ) +++ xFactory.set( comphelper::getProcessServiceFactory(), uno::UNO_SET_THROW ); +++ +++ uno::Reference< xml::crypto::XCipherContextSupplier > xCipherContextSupplier( +++ xFactory->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.xml.crypto.NSSInitializer" ) ) ), +++ uno::UNO_QUERY_THROW ); +++ +++ xResult = xCipherContextSupplier->getCipherContext( xEncryptionData->m_nEncAlg, aDerivedKey, xEncryptionData->m_aInitVector, bEncrypt, uno::Sequence< beans::NamedValue >() ); +++ } +++ else if ( xEncryptionData->m_nEncAlg == xml::crypto::CipherID::BLOWFISH_CFB_8 ) +++ { +++ xResult = BlowfishCFB8CipherContext::Create( aDerivedKey, xEncryptionData->m_aInitVector, bEncrypt ); +++ } +++ else +++ { +++ throw ZipIOException( ::rtl::OUString::createFromAscii( "Unknown cipher algorithm is requested!\n" ), +++ uno::Reference< XInterface >() ); +++ } +++ } +++ catch( uno::Exception& ) +++ { +++ OSL_ENSURE( sal_False, "Can not create cipher context!" ); +++ } +++ +++ return xResult; +++} +++ ++ void ZipFile::StaticFillHeader ( const rtl::Reference < EncryptionData > & rData, ++ sal_Int32 nSize, ++ const ::rtl::OUString& aMediaType, ++ sal_Int8 * & pHeader ) ++ { ++ // I think it's safe to restrict vector and salt length to 2 bytes ! ++- sal_Int16 nIVLength = static_cast < sal_Int16 > ( rData->aInitVector.getLength() ); ++- sal_Int16 nSaltLength = static_cast < sal_Int16 > ( rData->aSalt.getLength() ); ++- sal_Int16 nDigestLength = static_cast < sal_Int16 > ( rData->aDigest.getLength() ); +++ sal_Int16 nIVLength = static_cast < sal_Int16 > ( rData->m_aInitVector.getLength() ); +++ sal_Int16 nSaltLength = static_cast < sal_Int16 > ( rData->m_aSalt.getLength() ); +++ sal_Int16 nDigestLength = static_cast < sal_Int16 > ( rData->m_aDigest.getLength() ); ++ sal_Int16 nMediaTypeLength = static_cast < sal_Int16 > ( aMediaType.getLength() * sizeof( sal_Unicode ) ); ++ ++ // First the header ++@@ -178,7 +259,7 @@ void ZipFile::StaticFillHeader ( const rtl::Reference < EncryptionData > & rData ++ *(pHeader++) = ( n_ConstCurrentVersion >> 8 ) & 0xFF; ++ ++ // Then the iteration Count ++- sal_Int32 nIterationCount = rData->nIterationCount; +++ sal_Int32 nIterationCount = rData->m_nIterationCount; ++ *(pHeader++) = static_cast< sal_Int8 >(( nIterationCount >> 0 ) & 0xFF); ++ *(pHeader++) = static_cast< sal_Int8 >(( nIterationCount >> 8 ) & 0xFF); ++ *(pHeader++) = static_cast< sal_Int8 >(( nIterationCount >> 16 ) & 0xFF); ++@@ -190,6 +271,34 @@ void ZipFile::StaticFillHeader ( const rtl::Reference < EncryptionData > & rData ++ *(pHeader++) = static_cast< sal_Int8 >(( nSize >> 16 ) & 0xFF); ++ *(pHeader++) = static_cast< sal_Int8 >(( nSize >> 24 ) & 0xFF); ++ +++ // Then the encryption algorithm +++ sal_Int32 nEncAlgID = rData->m_nEncAlg; +++ *(pHeader++) = static_cast< sal_Int8 >(( nEncAlgID >> 0 ) & 0xFF); +++ *(pHeader++) = static_cast< sal_Int8 >(( nEncAlgID >> 8 ) & 0xFF); +++ *(pHeader++) = static_cast< sal_Int8 >(( nEncAlgID >> 16 ) & 0xFF); +++ *(pHeader++) = static_cast< sal_Int8 >(( nEncAlgID >> 24 ) & 0xFF); +++ +++ // Then the checksum algorithm +++ sal_Int32 nChecksumAlgID = rData->m_nCheckAlg; +++ *(pHeader++) = static_cast< sal_Int8 >(( nChecksumAlgID >> 0 ) & 0xFF); +++ *(pHeader++) = static_cast< sal_Int8 >(( nChecksumAlgID >> 8 ) & 0xFF); +++ *(pHeader++) = static_cast< sal_Int8 >(( nChecksumAlgID >> 16 ) & 0xFF); +++ *(pHeader++) = static_cast< sal_Int8 >(( nChecksumAlgID >> 24 ) & 0xFF); +++ +++ // Then the derived key size +++ sal_Int32 nDerivedKeySize = rData->m_nDerivedKeySize; +++ *(pHeader++) = static_cast< sal_Int8 >(( nDerivedKeySize >> 0 ) & 0xFF); +++ *(pHeader++) = static_cast< sal_Int8 >(( nDerivedKeySize >> 8 ) & 0xFF); +++ *(pHeader++) = static_cast< sal_Int8 >(( nDerivedKeySize >> 16 ) & 0xFF); +++ *(pHeader++) = static_cast< sal_Int8 >(( nDerivedKeySize >> 24 ) & 0xFF); +++ +++ // Then the start key generation algorithm +++ sal_Int32 nKeyAlgID = rData->m_nStartKeyGenID; +++ *(pHeader++) = static_cast< sal_Int8 >(( nKeyAlgID >> 0 ) & 0xFF); +++ *(pHeader++) = static_cast< sal_Int8 >(( nKeyAlgID >> 8 ) & 0xFF); +++ *(pHeader++) = static_cast< sal_Int8 >(( nKeyAlgID >> 16 ) & 0xFF); +++ *(pHeader++) = static_cast< sal_Int8 >(( nKeyAlgID >> 24 ) & 0xFF); +++ ++ // Then the salt length ++ *(pHeader++) = static_cast< sal_Int8 >(( nSaltLength >> 0 ) & 0xFF); ++ *(pHeader++) = static_cast< sal_Int8 >(( nSaltLength >> 8 ) & 0xFF); ++@@ -207,26 +316,30 @@ void ZipFile::StaticFillHeader ( const rtl::Reference < EncryptionData > & rData ++ *(pHeader++) = static_cast< sal_Int8 >(( nMediaTypeLength >> 8 ) & 0xFF); ++ ++ // Then the salt content ++- memcpy ( pHeader, rData->aSalt.getConstArray(), nSaltLength ); +++ rtl_copyMemory ( pHeader, rData->m_aSalt.getConstArray(), nSaltLength ); ++ pHeader += nSaltLength; ++ ++ // Then the IV content ++- memcpy ( pHeader, rData->aInitVector.getConstArray(), nIVLength ); +++ rtl_copyMemory ( pHeader, rData->m_aInitVector.getConstArray(), nIVLength ); ++ pHeader += nIVLength; ++ ++ // Then the digest content ++- memcpy ( pHeader, rData->aDigest.getConstArray(), nDigestLength ); +++ rtl_copyMemory ( pHeader, rData->m_aDigest.getConstArray(), nDigestLength ); ++ pHeader += nDigestLength; ++ ++ // Then the mediatype itself ++- memcpy ( pHeader, aMediaType.getStr(), nMediaTypeLength ); +++ rtl_copyMemory ( pHeader, aMediaType.getStr(), nMediaTypeLength ); ++ pHeader += nMediaTypeLength; ++ } ++ ++-sal_Bool ZipFile::StaticFillData ( rtl::Reference < EncryptionData > & rData, +++sal_Bool ZipFile::StaticFillData ( rtl::Reference < BaseEncryptionData > & rData, +++ sal_Int32 &rEncAlg, +++ sal_Int32 &rChecksumAlg, +++ sal_Int32 &rDerivedKeySize, +++ sal_Int32 &rStartKeyGenID, ++ sal_Int32 &rSize, ++ ::rtl::OUString& aMediaType, ++- Reference < XInputStream > &rStream ) +++ const Reference< XInputStream >& rStream ) ++ { ++ sal_Bool bOk = sal_False; ++ const sal_Int32 nHeaderSize = n_ConstHeaderSize - 4; ++@@ -243,13 +356,33 @@ sal_Bool ZipFile::StaticFillData ( rtl::Reference < EncryptionData > & rData, ++ nCount |= ( pBuffer[nPos++] & 0xFF ) << 8; ++ nCount |= ( pBuffer[nPos++] & 0xFF ) << 16; ++ nCount |= ( pBuffer[nPos++] & 0xFF ) << 24; ++- rData->nIterationCount = nCount; +++ rData->m_nIterationCount = nCount; ++ ++ rSize = pBuffer[nPos++] & 0xFF; ++ rSize |= ( pBuffer[nPos++] & 0xFF ) << 8; ++ rSize |= ( pBuffer[nPos++] & 0xFF ) << 16; ++ rSize |= ( pBuffer[nPos++] & 0xFF ) << 24; ++ +++ rEncAlg = pBuffer[nPos++] & 0xFF; +++ rEncAlg |= ( pBuffer[nPos++] & 0xFF ) << 8; +++ rEncAlg |= ( pBuffer[nPos++] & 0xFF ) << 16; +++ rEncAlg |= ( pBuffer[nPos++] & 0xFF ) << 24; +++ +++ rChecksumAlg = pBuffer[nPos++] & 0xFF; +++ rChecksumAlg |= ( pBuffer[nPos++] & 0xFF ) << 8; +++ rChecksumAlg |= ( pBuffer[nPos++] & 0xFF ) << 16; +++ rChecksumAlg |= ( pBuffer[nPos++] & 0xFF ) << 24; +++ +++ rDerivedKeySize = pBuffer[nPos++] & 0xFF; +++ rDerivedKeySize |= ( pBuffer[nPos++] & 0xFF ) << 8; +++ rDerivedKeySize |= ( pBuffer[nPos++] & 0xFF ) << 16; +++ rDerivedKeySize |= ( pBuffer[nPos++] & 0xFF ) << 24; +++ +++ rStartKeyGenID = pBuffer[nPos++] & 0xFF; +++ rStartKeyGenID |= ( pBuffer[nPos++] & 0xFF ) << 8; +++ rStartKeyGenID |= ( pBuffer[nPos++] & 0xFF ) << 16; +++ rStartKeyGenID |= ( pBuffer[nPos++] & 0xFF ) << 24; +++ ++ sal_Int16 nSaltLength = pBuffer[nPos++] & 0xFF; ++ nSaltLength |= ( pBuffer[nPos++] & 0xFF ) << 8; ++ sal_Int16 nIVLength = ( pBuffer[nPos++] & 0xFF ); ++@@ -262,16 +395,16 @@ sal_Bool ZipFile::StaticFillData ( rtl::Reference < EncryptionData > & rData, ++ ++ if ( nSaltLength == rStream->readBytes ( aBuffer, nSaltLength ) ) ++ { ++- rData->aSalt.realloc ( nSaltLength ); ++- memcpy ( rData->aSalt.getArray(), aBuffer.getConstArray(), nSaltLength ); +++ rData->m_aSalt.realloc ( nSaltLength ); +++ rtl_copyMemory ( rData->m_aSalt.getArray(), aBuffer.getConstArray(), nSaltLength ); ++ if ( nIVLength == rStream->readBytes ( aBuffer, nIVLength ) ) ++ { ++- rData->aInitVector.realloc ( nIVLength ); ++- memcpy ( rData->aInitVector.getArray(), aBuffer.getConstArray(), nIVLength ); +++ rData->m_aInitVector.realloc ( nIVLength ); +++ rtl_copyMemory ( rData->m_aInitVector.getArray(), aBuffer.getConstArray(), nIVLength ); ++ if ( nDigestLength == rStream->readBytes ( aBuffer, nDigestLength ) ) ++ { ++- rData->aDigest.realloc ( nDigestLength ); ++- memcpy ( rData->aDigest.getArray(), aBuffer.getConstArray(), nDigestLength ); +++ rData->m_aDigest.realloc ( nDigestLength ); +++ rtl_copyMemory ( rData->m_aDigest.getArray(), aBuffer.getConstArray(), nDigestLength ); ++ ++ if ( nMediaTypeLength == rStream->readBytes ( aBuffer, nMediaTypeLength ) ) ++ { ++@@ -287,7 +420,8 @@ sal_Bool ZipFile::StaticFillData ( rtl::Reference < EncryptionData > & rData, ++ return bOk; ++ } ++ ++-Reference< XInputStream > ZipFile::StaticGetDataFromRawStream( const Reference< XInputStream >& xStream, +++Reference< XInputStream > ZipFile::StaticGetDataFromRawStream( const Reference< lang::XMultiServiceFactory >& xFactory, +++ const Reference< XInputStream >& xStream, ++ const rtl::Reference < EncryptionData > &rData ) ++ throw ( packages::WrongPasswordException, ZipIOException, RuntimeException ) ++ { ++@@ -295,7 +429,7 @@ Reference< XInputStream > ZipFile::StaticGetDataFromRawStream( const Reference< ++ throw ZipIOException( OUString(RTL_CONSTASCII_USTRINGPARAM( "Encrypted stream without encryption data!\n" )), ++ Reference< XInterface >() ); ++ ++- if ( !rData->aKey.getLength() ) +++ if ( !rData->m_aKey.getLength() ) ++ throw packages::WrongPasswordException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++ ++ Reference< XSeekable > xSeek( xStream, UNO_QUERY ); ++@@ -306,66 +440,72 @@ Reference< XInputStream > ZipFile::StaticGetDataFromRawStream( const Reference< ++ ++ // if we have a digest, then this file is an encrypted one and we should ++ // check if we can decrypt it or not ++- OSL_ENSURE( rData->aDigest.getLength(), "Can't detect password correctness without digest!\n" ); ++- if ( rData->aDigest.getLength() ) +++ OSL_ENSURE( rData->m_aDigest.getLength(), "Can't detect password correctness without digest!\n" ); +++ if ( rData->m_aDigest.getLength() ) ++ { ++ sal_Int32 nSize = sal::static_int_cast< sal_Int32 >( xSeek->getLength() ); ++- nSize = nSize > n_ConstDigestLength ? n_ConstDigestLength : nSize; +++ if ( nSize > n_ConstDigestLength + 32 ) +++ nSize = n_ConstDigestLength + 32; ++ ++ // skip header ++- xSeek->seek( n_ConstHeaderSize + rData->aInitVector.getLength() + ++- rData->aSalt.getLength() + rData->aDigest.getLength() ); +++ xSeek->seek( n_ConstHeaderSize + rData->m_aInitVector.getLength() + +++ rData->m_aSalt.getLength() + rData->m_aDigest.getLength() ); ++ ++ // Only want to read enough to verify the digest ++ Sequence < sal_Int8 > aReadBuffer ( nSize ); ++ ++ xStream->readBytes( aReadBuffer, nSize ); ++ ++- if ( !StaticHasValidPassword( aReadBuffer, rData ) ) +++ if ( !StaticHasValidPassword( xFactory, aReadBuffer, rData ) ) ++ throw packages::WrongPasswordException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++ } ++ ++- return new XUnbufferedStream ( xStream, rData ); +++ return new XUnbufferedStream( xFactory, xStream, rData ); ++ } ++ ++-sal_Bool ZipFile::StaticHasValidPassword( const Sequence< sal_Int8 > &aReadBuffer, const rtl::Reference < EncryptionData > &rData ) +++sal_Bool ZipFile::StaticHasValidPassword( const Reference< lang::XMultiServiceFactory >& xFactory, const Sequence< sal_Int8 > &aReadBuffer, const rtl::Reference< EncryptionData > &rData ) ++ { ++- if ( !rData.is() || !rData->aKey.getLength() ) +++ if ( !rData.is() || !rData->m_aKey.getLength() ) ++ return sal_False; ++ ++ sal_Bool bRet = sal_False; ++- sal_Int32 nSize = aReadBuffer.getLength(); ++ ++- // make a temporary cipher ++- rtlCipher aCipher; ++- StaticGetCipher ( rData, aCipher, sal_True ); ++- ++- Sequence < sal_Int8 > aDecryptBuffer ( nSize ); ++- rtlDigest aDigest = rtl_digest_createSHA1(); ++- rtlDigestError aDigestResult; ++- Sequence < sal_uInt8 > aDigestSeq ( RTL_DIGEST_LENGTH_SHA1 ); ++- rtlCipherError aResult = rtl_cipher_decode ( aCipher, ++- aReadBuffer.getConstArray(), ++- nSize, ++- reinterpret_cast < sal_uInt8 * > (aDecryptBuffer.getArray()), ++- nSize); ++- if(aResult != rtl_Cipher_E_None ) { ++- OSL_ASSERT ( aResult == rtl_Cipher_E_None); +++ uno::Reference< xml::crypto::XCipherContext > xCipher( StaticGetCipher( xFactory, rData, false ), uno::UNO_SET_THROW ); +++ +++ uno::Sequence< sal_Int8 > aDecryptBuffer; +++ uno::Sequence< sal_Int8 > aDecryptBuffer2; +++ try +++ { +++ aDecryptBuffer = xCipher->convertWithCipherContext( aReadBuffer ); +++ aDecryptBuffer2 = xCipher->finalizeCipherContextAndDispose(); +++ } +++ catch( uno::Exception& ) +++ { +++ // decryption with padding will throw the exception in finalizing if the buffer represent only part of the stream +++ // it is no problem, actually this is why we read 32 additional bytes ( two of maximal possible encryption blocks ) +++ } +++ +++ if ( aDecryptBuffer2.getLength() ) +++ { +++ sal_Int32 nOldLen = aDecryptBuffer.getLength(); +++ aDecryptBuffer.realloc( nOldLen + aDecryptBuffer2.getLength() ); +++ rtl_copyMemory( aDecryptBuffer.getArray() + nOldLen, aDecryptBuffer2.getArray(), aDecryptBuffer2.getLength() ); ++ } ++ ++- aDigestResult = rtl_digest_updateSHA1 ( aDigest, ++- static_cast < const void * > ( aDecryptBuffer.getConstArray() ), nSize ); ++- OSL_ASSERT ( aDigestResult == rtl_Digest_E_None ); +++ if ( aDecryptBuffer.getLength() > n_ConstDigestLength ) +++ aDecryptBuffer.realloc( n_ConstDigestLength ); +++ +++ uno::Sequence< sal_Int8 > aDigestSeq; +++ uno::Reference< xml::crypto::XDigestContext > xDigestContext( StaticGetDigestContextForChecksum( xFactory, rData ), uno::UNO_SET_THROW ); ++ ++- aDigestResult = rtl_digest_getSHA1 ( aDigest, aDigestSeq.getArray(), RTL_DIGEST_LENGTH_SHA1 ); ++- OSL_ASSERT ( aDigestResult == rtl_Digest_E_None ); ++- (void)aDigestResult; +++ xDigestContext->updateDigest( aDecryptBuffer ); +++ aDigestSeq = xDigestContext->finalizeDigestAndDispose(); ++ ++ // If we don't have a digest, then we have to assume that the password is correct ++- if ( rData->aDigest.getLength() != 0 && ++- ( aDigestSeq.getLength() != rData->aDigest.getLength() || +++ if ( rData->m_aDigest.getLength() != 0 && +++ ( aDigestSeq.getLength() != rData->m_aDigest.getLength() || ++ 0 != rtl_compareMemory ( aDigestSeq.getConstArray(), ++- rData->aDigest.getConstArray(), +++ rData->m_aDigest.getConstArray(), ++ aDigestSeq.getLength() ) ) ) ++ { ++ // We should probably tell the user that the password they entered was wrong ++@@ -373,8 +513,6 @@ sal_Bool ZipFile::StaticHasValidPassword( const Sequence< sal_Int8 > &aReadBuffe ++ else ++ bRet = sal_True; ++ ++- rtl_digest_destroySHA1 ( aDigest ); ++- ++ return bRet; ++ } ++ ++@@ -383,18 +521,20 @@ sal_Bool ZipFile::hasValidPassword ( ZipEntry & rEntry, const rtl::Reference < E ++ ::osl::MutexGuard aGuard( m_aMutex ); ++ ++ sal_Bool bRet = sal_False; ++- if ( rData->aKey.getLength() ) +++ if ( rData.is() && rData->m_aKey.getLength() ) ++ { ++ xSeek->seek( rEntry.nOffset ); ++ sal_Int32 nSize = rEntry.nMethod == DEFLATED ? rEntry.nCompressedSize : rEntry.nSize; ++ ++ // Only want to read enough to verify the digest ++- nSize = nSize > n_ConstDigestLength ? n_ConstDigestLength : nSize; +++ if ( nSize > n_ConstDigestDecrypt ) +++ nSize = n_ConstDigestDecrypt; +++ ++ Sequence < sal_Int8 > aReadBuffer ( nSize ); ++ ++ xStream->readBytes( aReadBuffer, nSize ); ++ ++- bRet = StaticHasValidPassword( aReadBuffer, rData ); +++ bRet = StaticHasValidPassword( m_xFactory, aReadBuffer, rData ); ++ } ++ return bRet; ++ } ++@@ -502,7 +642,7 @@ Reference < XInputStream > ZipFile::createUnbufferedStream( ++ { ++ ::osl::MutexGuard aGuard( m_aMutex ); ++ ++- return new XUnbufferedStream ( aMutexHolder, rEntry, xStream, rData, nStreamMode, bIsEncrypted, aMediaType, bRecoveryMode ); +++ return new XUnbufferedStream ( m_xFactory, aMutexHolder, rEntry, xStream, rData, nStreamMode, bIsEncrypted, aMediaType, bRecoveryMode ); ++ } ++ ++ ++@@ -512,7 +652,7 @@ ZipEnumeration * SAL_CALL ZipFile::entries( ) ++ } ++ ++ Reference< XInputStream > SAL_CALL ZipFile::getInputStream( ZipEntry& rEntry, ++- const rtl::Reference < EncryptionData > &rData, +++ const rtl::Reference< EncryptionData > &rData, ++ sal_Bool bIsEncrypted, ++ SotMutexHolderRef aMutexHolder ) ++ throw(IOException, ZipException, RuntimeException) ++@@ -529,7 +669,7 @@ Reference< XInputStream > SAL_CALL ZipFile::getInputStream( ZipEntry& rEntry, ++ ++ // if we have a digest, then this file is an encrypted one and we should ++ // check if we can decrypt it or not ++- if ( bIsEncrypted && rData.is() && rData->aDigest.getLength() ) +++ if ( bIsEncrypted && rData.is() && rData->m_aDigest.getLength() ) ++ bNeedRawStream = !hasValidPassword ( rEntry, rData ); ++ ++ return createUnbufferedStream ( aMutexHolder, ++@@ -540,7 +680,7 @@ Reference< XInputStream > SAL_CALL ZipFile::getInputStream( ZipEntry& rEntry, ++ } ++ ++ Reference< XInputStream > SAL_CALL ZipFile::getDataStream( ZipEntry& rEntry, ++- const rtl::Reference < EncryptionData > &rData, +++ const rtl::Reference< EncryptionData > &rData, ++ sal_Bool bIsEncrypted, ++ SotMutexHolderRef aMutexHolder ) ++ throw ( packages::WrongPasswordException, ++@@ -566,8 +706,8 @@ Reference< XInputStream > SAL_CALL ZipFile::getDataStream( ZipEntry& rEntry, ++ ++ // if we have a digest, then this file is an encrypted one and we should ++ // check if we can decrypt it or not ++- OSL_ENSURE( rData->aDigest.getLength(), "Can't detect password correctness without digest!\n" ); ++- if ( rData->aDigest.getLength() && !hasValidPassword ( rEntry, rData ) ) +++ OSL_ENSURE( rData->m_aDigest.getLength(), "Can't detect password correctness without digest!\n" ); +++ if ( rData->m_aDigest.getLength() && !hasValidPassword ( rEntry, rData ) ) ++ throw packages::WrongPasswordException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++ } ++ else ++diff --git a/package/source/zipapi/ZipOutputStream.cxx b/package/source/zipapi/ZipOutputStream.cxx ++index 1d29e17..26c468d 100644 ++--- package/source/zipapi/ZipOutputStream.cxx +++++ package/source/zipapi/ZipOutputStream.cxx ++@@ -39,7 +39,9 @@ ++ #include ++ ++ #include +++#include ++ +++using namespace com::sun::star; ++ using namespace com::sun::star::io; ++ using namespace com::sun::star::uno; ++ using namespace com::sun::star::packages; ++@@ -48,17 +50,18 @@ using namespace com::sun::star::packages::zip::ZipConstants; ++ ++ /** This class is used to write Zip files ++ */ ++-ZipOutputStream::ZipOutputStream( Reference < XOutputStream > &xOStream ) ++-: xStream(xOStream) ++-, aBuffer(n_ConstBufferSize) +++ZipOutputStream::ZipOutputStream( const uno::Reference< lang::XMultiServiceFactory >& xFactory, +++ const uno::Reference < XOutputStream > &xOStream ) +++: m_xFactory( xFactory ) +++, xStream(xOStream) +++, m_aDeflateBuffer(n_ConstBufferSize) ++ , aDeflater(DEFAULT_COMPRESSION, sal_True) ++ , aChucker(xOStream) ++ , pCurrentEntry(NULL) ++ , nMethod(DEFLATED) ++ , bFinished(sal_False) ++ , bEncryptCurrentEntry(sal_False) ++- ++- +++, m_pCurrentStream(NULL) ++ { ++ } ++ ++@@ -80,7 +83,7 @@ void SAL_CALL ZipOutputStream::setLevel( sal_Int32 nNewLevel ) ++ } ++ ++ void SAL_CALL ZipOutputStream::putNextEntry( ZipEntry& rEntry, ++- rtl::Reference < EncryptionData > &xEncryptData, +++ ZipPackageStream* pStream, ++ sal_Bool bEncrypt) ++ throw(IOException, RuntimeException) ++ { ++@@ -94,18 +97,20 @@ void SAL_CALL ZipOutputStream::putNextEntry( ZipEntry& rEntry, ++ rEntry.nFlag = 1 << 11; ++ if (rEntry.nSize == -1 || rEntry.nCompressedSize == -1 || ++ rEntry.nCrc == -1) +++ { +++ rEntry.nSize = rEntry.nCompressedSize = 0; ++ rEntry.nFlag |= 8; +++ } ++ ++ if (bEncrypt) ++ { ++ bEncryptCurrentEntry = sal_True; ++ ++- ZipFile::StaticGetCipher( xEncryptData, aCipher, sal_False ); ++- ++- aDigest = rtl_digest_createSHA1(); +++ m_xCipherContext = ZipFile::StaticGetCipher( m_xFactory, pStream->GetEncryptionData(), true ); +++ m_xDigestContext = ZipFile::StaticGetDigestContextForChecksum( m_xFactory, pStream->GetEncryptionData() ); ++ mnDigested = 0; ++ rEntry.nFlag |= 1 << 4; ++- pCurrentEncryptData = xEncryptData.get(); +++ m_pCurrentStream = pStream; ++ } ++ sal_Int32 nLOCLength = writeLOC(rEntry); ++ rEntry.nOffset = static_cast < sal_Int32 > (aChucker.GetPosition()) - nLOCLength; ++@@ -144,11 +149,12 @@ void SAL_CALL ZipOutputStream::closeEntry( ) ++ } ++ else ++ { +++ if ( !bEncryptCurrentEntry ) +++ { ++ pEntry->nSize = aDeflater.getTotalIn(); ++ pEntry->nCompressedSize = aDeflater.getTotalOut(); +++ } ++ pEntry->nCrc = aCRC.getValue(); ++- if ( bEncryptCurrentEntry ) ++- pEntry->nSize = pEntry->nCompressedSize; ++ writeEXT(*pEntry); ++ } ++ aDeflater.reset(); ++@@ -165,19 +171,22 @@ void SAL_CALL ZipOutputStream::closeEntry( ) ++ ++ if (bEncryptCurrentEntry) ++ { ++- rtlDigestError aDigestResult; ++- aEncryptionBuffer.realloc ( 0 ); ++ bEncryptCurrentEntry = sal_False; ++- rtl_cipher_destroy ( aCipher ); ++- pCurrentEncryptData->aDigest.realloc ( RTL_DIGEST_LENGTH_SHA1 ); ++- aDigestResult = rtl_digest_getSHA1 ( aDigest, ++- reinterpret_cast < sal_uInt8 * > ( pCurrentEncryptData->aDigest.getArray() ), ++- RTL_DIGEST_LENGTH_SHA1 ); ++- OSL_ASSERT( aDigestResult == rtl_Digest_E_None ); ++- (void)aDigestResult; ++- rtl_digest_destroySHA1 ( aDigest ); +++ +++ m_xCipherContext.clear(); +++ +++ uno::Sequence< sal_Int8 > aDigestSeq; +++ if ( m_xDigestContext.is() ) +++ { +++ aDigestSeq = m_xDigestContext->finalizeDigestAndDispose(); +++ m_xDigestContext.clear(); +++ } +++ +++ if ( m_pCurrentStream ) +++ m_pCurrentStream->setDigest( aDigestSeq ); ++ } ++ pCurrentEntry = NULL; +++ m_pCurrentStream = NULL; ++ } ++ } ++ ++@@ -242,42 +251,51 @@ void SAL_CALL ZipOutputStream::finish( ) ++ ++ void ZipOutputStream::doDeflate() ++ { ++- sal_Int32 nLength = aDeflater.doDeflateSegment(aBuffer, 0, aBuffer.getLength()); ++- sal_Int32 nOldLength = aBuffer.getLength(); +++ sal_Int32 nLength = aDeflater.doDeflateSegment(m_aDeflateBuffer, 0, m_aDeflateBuffer.getLength()); ++ ++ if ( nLength > 0 ) ++ { ++- Sequence < sal_Int8 > aTmpBuffer ( aBuffer.getConstArray(), nLength ); ++- const void *pTmpBuffer = static_cast < const void * > ( aTmpBuffer.getConstArray() ); ++- if (bEncryptCurrentEntry) +++ Sequence< sal_Int8 > aTmpBuffer ( m_aDeflateBuffer.getConstArray(), nLength ); +++ if (bEncryptCurrentEntry && m_xDigestContext.is() && m_xCipherContext.is()) ++ { ++ // Need to update our digest before encryption... ++- rtlDigestError aDigestResult = rtl_Digest_E_None; ++- sal_Int16 nDiff = n_ConstDigestLength - mnDigested; +++ sal_Int32 nDiff = n_ConstDigestLength - mnDigested; ++ if ( nDiff ) ++ { ++- sal_Int16 nEat = static_cast < sal_Int16 > ( nDiff > nLength ? nLength : nDiff ); ++- aDigestResult = rtl_digest_updateSHA1 ( aDigest, pTmpBuffer, nEat ); ++- mnDigested = mnDigested + nEat; +++ sal_Int32 nEat = ::std::min( nLength, nDiff ); +++ uno::Sequence< sal_Int8 > aTmpSeq( aTmpBuffer.getConstArray(), nEat ); +++ m_xDigestContext->updateDigest( aTmpSeq ); +++ mnDigested = mnDigested + static_cast< sal_Int16 >( nEat ); ++ } ++- OSL_ASSERT( aDigestResult == rtl_Digest_E_None ); ++- (void)aDigestResult; ++- ++- aEncryptionBuffer.realloc ( nLength ); ++ ++- rtlCipherError aCipherResult; ++- aCipherResult = rtl_cipher_encode ( aCipher, pTmpBuffer, ++- nLength, reinterpret_cast < sal_uInt8 * > (aEncryptionBuffer.getArray()), nLength ); ++- OSL_ASSERT( aCipherResult == rtl_Cipher_E_None ); ++- (void)aCipherResult; +++ uno::Sequence< sal_Int8 > aEncryptionBuffer = m_xCipherContext->convertWithCipherContext( aTmpBuffer ); ++ ++ aChucker.WriteBytes( aEncryptionBuffer ); +++ +++ // the sizes as well as checksum for encrypted streams is calculated here +++ pCurrentEntry->nCompressedSize += aEncryptionBuffer.getLength(); +++ pCurrentEntry->nSize = pCurrentEntry->nCompressedSize; ++ aCRC.update ( aEncryptionBuffer ); ++- aEncryptionBuffer.realloc ( nOldLength ); ++ } ++ else +++ { ++ aChucker.WriteBytes ( aTmpBuffer ); ++ } +++ } +++ +++ if ( aDeflater.finished() && bEncryptCurrentEntry && m_xDigestContext.is() && m_xCipherContext.is() ) +++ { +++ uno::Sequence< sal_Int8 > aEncryptionBuffer = m_xCipherContext->finalizeCipherContextAndDispose(); +++ if ( aEncryptionBuffer.getLength() ) +++ { +++ aChucker.WriteBytes( aEncryptionBuffer ); +++ +++ // the sizes as well as checksum for encrypted streams is calculated hier +++ pCurrentEntry->nCompressedSize += aEncryptionBuffer.getLength(); +++ pCurrentEntry->nSize = pCurrentEntry->nCompressedSize; +++ aCRC.update( aEncryptionBuffer ); +++ } +++ } ++ } ++ void ZipOutputStream::writeEND(sal_uInt32 nOffset, sal_uInt32 nLength) ++ throw(IOException, RuntimeException) ++diff --git a/package/source/zipapi/blowfishcontext.cxx b/package/source/zipapi/blowfishcontext.cxx ++new file mode 100644 ++index 0000000..1739bb1 ++--- /dev/null +++++ package/source/zipapi/blowfishcontext.cxx ++@@ -0,0 +1,122 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++// MARKER(update_precomp.py): autogen include statement, do not remove +++#include "precompiled_package.hxx" +++ +++#include +++#include +++ +++#include "blowfishcontext.hxx" +++ +++using namespace ::com::sun::star; +++ +++// static +++uno::Reference< xml::crypto::XCipherContext > BlowfishCFB8CipherContext::Create( const uno::Sequence< sal_Int8 >& aDerivedKey, const uno::Sequence< sal_Int8 >& aInitVector, bool bEncrypt ) +++{ +++ ::rtl::Reference< BlowfishCFB8CipherContext > xResult = new BlowfishCFB8CipherContext(); +++ xResult->m_pCipher = rtl_cipher_create( rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeStream ); +++ if ( !xResult->m_pCipher ) +++ throw uno::RuntimeException( ::rtl::OUString::createFromAscii( "Can not create cipher!\n" ), +++ uno::Reference< XInterface >() ); +++ +++ if ( rtl_Cipher_E_None != rtl_cipher_init( +++ xResult->m_pCipher, +++ bEncrypt ? rtl_Cipher_DirectionEncode : rtl_Cipher_DirectionDecode, +++ reinterpret_cast< const sal_uInt8* >( aDerivedKey.getConstArray() ), +++ aDerivedKey.getLength(), +++ reinterpret_cast< const sal_uInt8* >( aInitVector.getConstArray() ), +++ aInitVector.getLength() ) ) +++ { +++ throw uno::RuntimeException( ::rtl::OUString::createFromAscii( "Can not initialize cipher!\n" ), +++ uno::Reference< XInterface >() ); +++ } +++ +++ xResult->m_bEncrypt = bEncrypt; +++ +++ return uno::Reference< xml::crypto::XCipherContext >( xResult.get() ); +++} +++ +++BlowfishCFB8CipherContext::~BlowfishCFB8CipherContext() +++{ +++ if ( m_pCipher ) +++ { +++ rtl_cipher_destroy ( m_pCipher ); +++ m_pCipher = NULL; +++ } +++} +++ +++uno::Sequence< sal_Int8 > SAL_CALL BlowfishCFB8CipherContext::convertWithCipherContext( const uno::Sequence< ::sal_Int8 >& aData ) +++ throw( lang::IllegalArgumentException, lang::DisposedException, uno::RuntimeException ) +++{ +++ ::osl::MutexGuard aGuard( m_aMutex ); +++ if ( !m_pCipher ) +++ throw lang::DisposedException(); +++ +++ uno::Sequence< sal_Int8 > aResult( aData.getLength() ); +++ rtlCipherError nError = rtl_Cipher_E_None; +++ +++ if ( m_bEncrypt ) +++ { +++ rtl_cipher_encode( m_pCipher, +++ aData.getConstArray(), +++ aData.getLength(), +++ reinterpret_cast< sal_uInt8* >( aResult.getArray() ), +++ aResult.getLength() ); +++ } +++ else +++ { +++ rtl_cipher_decode( m_pCipher, +++ aData.getConstArray(), +++ aData.getLength(), +++ reinterpret_cast< sal_uInt8* >( aResult.getArray() ), +++ aResult.getLength() ); +++ } +++ +++ if ( rtl_Cipher_E_None != nError ) +++ { +++ throw uno::RuntimeException( ::rtl::OUString::createFromAscii( "Can not decrypt/encrypt with cipher!\n" ), +++ uno::Reference< uno::XInterface >() ); +++ } +++ +++ return aResult; +++} +++ +++uno::Sequence< ::sal_Int8 > SAL_CALL BlowfishCFB8CipherContext::finalizeCipherContextAndDispose() +++ throw( lang::DisposedException, uno::RuntimeException ) +++{ +++ ::osl::MutexGuard aGuard( m_aMutex ); +++ if ( !m_pCipher ) +++ throw lang::DisposedException(); +++ +++ rtl_cipher_destroy ( m_pCipher ); +++ m_pCipher = NULL; +++ +++ return uno::Sequence< sal_Int8 >(); +++} +++ +++ ++diff --git a/package/source/zipapi/blowfishcontext.hxx b/package/source/zipapi/blowfishcontext.hxx ++new file mode 100644 ++index 0000000..49cce2f ++--- /dev/null +++++ package/source/zipapi/blowfishcontext.hxx ++@@ -0,0 +1,58 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++#ifndef _BLOWFISHCONTEXT_HXX +++#define _BLOWFISHCONTEXT_HXX +++ +++#include +++ +++#include +++#include +++ +++class BlowfishCFB8CipherContext : public cppu::WeakImplHelper1< ::com::sun::star::xml::crypto::XCipherContext > +++{ +++ ::osl::Mutex m_aMutex; +++ void* m_pCipher; +++ bool m_bEncrypt; +++ +++ BlowfishCFB8CipherContext() +++ : m_pCipher( NULL ) +++ , m_bEncrypt( false ) +++ {} +++ +++public: +++ +++ virtual ~BlowfishCFB8CipherContext(); +++ +++ static ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XCipherContext > +++ Create( const ::com::sun::star::uno::Sequence< sal_Int8 >& aDerivedKey, const ::com::sun::star::uno::Sequence< sal_Int8 >& aInitVector, bool bEncrypt ); +++ +++ virtual ::com::sun::star::uno::Sequence< ::sal_Int8 > SAL_CALL convertWithCipherContext( const ::com::sun::star::uno::Sequence< ::sal_Int8 >& aData ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::DisposedException, ::com::sun::star::uno::RuntimeException); +++ virtual ::com::sun::star::uno::Sequence< ::sal_Int8 > SAL_CALL finalizeCipherContextAndDispose( ) throw (::com::sun::star::lang::DisposedException, ::com::sun::star::uno::RuntimeException); +++}; +++ +++#endif // _BLOWFISHCONTEXT_HXX +++ ++diff --git a/package/source/zipapi/makefile.mk b/package/source/zipapi/makefile.mk ++index ec8d636..8a07d44 100644 ++--- package/source/zipapi/makefile.mk +++++ package/source/zipapi/makefile.mk ++@@ -46,8 +46,10 @@ SLOFILES= \ ++ $(SLO)$/CRC32.obj \ ++ $(SLO)$/ByteChucker.obj \ ++ $(SLO)$/ByteGrabber.obj \ +++ $(SLO)$/blowfishcontext.obj \ ++ $(SLO)$/Inflater.obj \ ++ $(SLO)$/Deflater.obj \ +++ $(SLO)$/sha1context.obj \ ++ $(SLO)$/ZipEnumeration.obj \ ++ $(SLO)$/ZipFile.obj \ ++ $(SLO)$/ZipOutputStream.obj \ ++diff --git a/package/source/zipapi/sha1context.cxx b/package/source/zipapi/sha1context.cxx ++new file mode 100644 ++index 0000000..a71f20a ++--- /dev/null +++++ package/source/zipapi/sha1context.cxx ++@@ -0,0 +1,97 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++// MARKER(update_precomp.py): autogen include statement, do not remove +++#include "precompiled_package.hxx" +++ +++#include +++#include +++ +++#include "sha1context.hxx" +++ +++using namespace ::com::sun::star; +++ +++// static +++uno::Reference< xml::crypto::XDigestContext > SHA1DigestContext::Create() +++{ +++ ::rtl::Reference< SHA1DigestContext > xResult = new SHA1DigestContext(); +++ xResult->m_pDigest = rtl_digest_createSHA1(); +++ if ( !xResult->m_pDigest ) +++ throw uno::RuntimeException( ::rtl::OUString::createFromAscii( "Can not create cipher!\n" ), +++ uno::Reference< XInterface >() ); +++ +++ return uno::Reference< xml::crypto::XDigestContext >( xResult.get() ); +++} +++ +++SHA1DigestContext::~SHA1DigestContext() +++{ +++ if ( m_pDigest ) +++ { +++ rtl_digest_destroySHA1( m_pDigest ); +++ m_pDigest = NULL; +++ } +++} +++ +++void SAL_CALL SHA1DigestContext::updateDigest( const uno::Sequence< ::sal_Int8 >& aData ) +++ throw( lang::DisposedException, uno::RuntimeException ) +++{ +++ ::osl::MutexGuard aGuard( m_aMutex ); +++ if ( !m_pDigest ) +++ throw lang::DisposedException(); +++ +++ if ( rtl_Digest_E_None != rtl_digest_updateSHA1( m_pDigest, aData.getConstArray(), aData.getLength() ) ) +++ { +++ rtl_digest_destroySHA1( m_pDigest ); +++ m_pDigest = NULL; +++ +++ throw uno::RuntimeException(); +++ } +++} +++ +++uno::Sequence< ::sal_Int8 > SAL_CALL SHA1DigestContext::finalizeDigestAndDispose() +++ throw( lang::DisposedException, uno::RuntimeException ) +++{ +++ ::osl::MutexGuard aGuard( m_aMutex ); +++ if ( !m_pDigest ) +++ throw lang::DisposedException(); +++ +++ uno::Sequence< sal_Int8 > aResult( RTL_DIGEST_LENGTH_SHA1 ); +++ if ( rtl_Digest_E_None != rtl_digest_getSHA1( m_pDigest, reinterpret_cast< sal_uInt8* >( aResult.getArray() ), aResult.getLength() ) ) +++ { +++ rtl_digest_destroySHA1( m_pDigest ); +++ m_pDigest = NULL; +++ +++ throw uno::RuntimeException(); +++ } +++ +++ rtl_digest_destroySHA1( m_pDigest ); +++ m_pDigest = NULL; +++ +++ return aResult; +++} +++ +++ ++diff --git a/package/source/zipapi/sha1context.hxx b/package/source/zipapi/sha1context.hxx ++new file mode 100644 ++index 0000000..dbd1207 ++--- /dev/null +++++ package/source/zipapi/sha1context.hxx ++@@ -0,0 +1,57 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++#ifndef _SHA1CONTEXT_HXX +++#define _SHA1CONTEXT_HXX +++ +++#include +++ +++#include +++#include +++ +++class SHA1DigestContext : public cppu::WeakImplHelper1< ::com::sun::star::xml::crypto::XDigestContext > +++{ +++ ::osl::Mutex m_aMutex; +++ void* m_pDigest; +++ +++ SHA1DigestContext() +++ : m_pDigest( NULL ) +++ {} +++ +++public: +++ +++ virtual ~SHA1DigestContext(); +++ +++ static ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XDigestContext > +++ Create(); +++ +++ virtual void SAL_CALL updateDigest( const ::com::sun::star::uno::Sequence< ::sal_Int8 >& aData ) throw (::com::sun::star::lang::DisposedException, ::com::sun::star::uno::RuntimeException); +++ virtual ::com::sun::star::uno::Sequence< ::sal_Int8 > SAL_CALL finalizeDigestAndDispose() throw (::com::sun::star::lang::DisposedException, ::com::sun::star::uno::RuntimeException); +++ +++}; +++ +++#endif // _SHA1CONTEXT_HXX +++ ++diff --git a/package/source/zippackage/ZipPackage.cxx b/package/source/zippackage/ZipPackage.cxx ++index 1f1e48a..b4809a0 100644 ++--- package/source/zippackage/ZipPackage.cxx +++++ package/source/zippackage/ZipPackage.cxx ++@@ -63,6 +63,8 @@ ++ #include ++ #include ++ #include +++#include +++#include ++ #include ++ #include ++ #include ++@@ -83,6 +85,7 @@ ++ #include ++ #include ++ #include +++#include ++ ++ using namespace std; ++ using namespace osl; ++@@ -181,10 +184,12 @@ class DummyInputStream : public ::cppu::WeakImplHelper1< XInputStream > ++ ++ ZipPackage::ZipPackage (const uno::Reference < XMultiServiceFactory > &xNewFactory) ++ : m_aMutexHolder( new SotMutexHolder ) +++, m_nStartKeyGenerationID( xml::crypto::DigestID::SHA1 ) +++, m_nChecksumDigestID( xml::crypto::DigestID::SHA1_1K ) +++, m_nCommonEncryptionID( xml::crypto::CipherID::BLOWFISH_CFB_8 ) ++ , m_bHasEncryptedEntries ( sal_False ) ++ , m_bHasNonEncryptedEntries ( sal_False ) ++ , m_bInconsistent ( sal_False ) ++-, m_bUseManifest ( sal_True ) ++ , m_bForceRecovery ( sal_False ) ++ , m_bMediaTypeFallbackUsed ( sal_False ) ++ , m_nFormat( embed::StorageFormats::PACKAGE ) // package is the default format ++@@ -224,6 +229,7 @@ void ZipPackage::parseManifest() ++ if ( m_nFormat == embed::StorageFormats::PACKAGE ) ++ { ++ sal_Bool bManifestParsed = sal_False; +++ bool bDifferentStartKeyAlgorithm = false; ++ const OUString sMeta ( RTL_CONSTASCII_USTRINGPARAM ( "META-INF" ) ); ++ if ( m_xRootFolder->hasByName( sMeta ) ) ++ { ++@@ -253,6 +259,10 @@ void ZipPackage::parseManifest() ++ const OUString sPropIterationCount ( RTL_CONSTASCII_USTRINGPARAM ( "IterationCount" ) ); ++ const OUString sPropSize ( RTL_CONSTASCII_USTRINGPARAM ( "Size" ) ); ++ const OUString sPropDigest ( RTL_CONSTASCII_USTRINGPARAM ( "Digest" ) ); +++ const OUString sPropDerivedKeySize ( RTL_CONSTASCII_USTRINGPARAM ( "DerivedKeySize" ) ); +++ const OUString sPropDigestAlgorithm ( RTL_CONSTASCII_USTRINGPARAM ( "DigestAlgorithm" ) ); +++ const OUString sPropEncryptionAlgorithm ( RTL_CONSTASCII_USTRINGPARAM ( "EncryptionAlgorithm" ) ); +++ const OUString sPropStartKeyAlgorithm ( RTL_CONSTASCII_USTRINGPARAM ( "StartKeyAlgorithm" ) ); ++ ++ Sequence < Sequence < PropertyValue > > aManifestSequence = xReader->readManifestSequence ( xSink->getInputStream() ); ++ sal_Int32 nLength = aManifestSequence.getLength(); ++@@ -264,7 +274,7 @@ void ZipPackage::parseManifest() ++ { ++ OUString sPath, sMediaType, sVersion; ++ const PropertyValue *pValue = pSequence->getConstArray(); ++- const Any *pSalt = NULL, *pVector = NULL, *pCount = NULL, *pSize = NULL, *pDigest = NULL; +++ const Any *pSalt = NULL, *pVector = NULL, *pCount = NULL, *pSize = NULL, *pDigest = NULL, *pDigestAlg = NULL, *pEncryptionAlg = NULL, *pStartKeyAlg = NULL, *pDerivedKeySize = NULL; ++ for (sal_Int32 j = 0, nNum = pSequence->getLength(); j < nNum; j++ ) ++ { ++ if (pValue[j].Name.equals( sPropFullPath ) ) ++@@ -283,6 +293,14 @@ void ZipPackage::parseManifest() ++ pSize = &(pValue[j].Value); ++ else if (pValue[j].Name.equals( sPropDigest ) ) ++ pDigest = &(pValue[j].Value); +++ else if ( pValue[j].Name.equals( sPropDigestAlgorithm ) ) +++ pDigestAlg = &( pValue[j].Value ); +++ else if ( pValue[j].Name.equals( sPropEncryptionAlgorithm ) ) +++ pEncryptionAlg = &( pValue[j].Value ); +++ else if ( pValue[j].Name.equals( sPropStartKeyAlgorithm ) ) +++ pStartKeyAlg = &( pValue[j].Value ); +++ else if ( pValue[j].Name.equals( sPropDerivedKeySize ) ) +++ pDerivedKeySize = &( pValue[j].Value ); ++ } ++ ++ if (sPath.getLength() && hasByHierarchicalName ( sPath ) ) ++@@ -303,10 +321,10 @@ void ZipPackage::parseManifest() ++ pStream->SetMediaType ( sMediaType ); ++ pStream->SetFromManifest( sal_True ); ++ ++- if (pSalt && pVector && pCount && pSize) +++ if (pSalt && pVector && pCount && pSize && pDigest && pDigestAlg && pEncryptionAlg ) ++ { ++- Sequence < sal_uInt8 > aSequence; ++- sal_Int32 nCount = 0, nSize = 0; +++ Sequence < sal_Int8 > aSequence; +++ sal_Int32 nCount = 0, nSize = 0, nDigestAlg = 0, nEncryptionAlg = 0, nDerivedKeySize = 16, nStartKeyAlg = xml::crypto::DigestID::SHA1; ++ pStream->SetToBeEncrypted ( sal_True ); ++ ++ *pSalt >>= aSequence; ++@@ -321,18 +339,34 @@ void ZipPackage::parseManifest() ++ *pSize >>= nSize; ++ pStream->setSize ( nSize ); ++ ++- if ( pDigest ) ++- { ++- *pDigest >>= aSequence; ++- pStream->setDigest ( aSequence ); ++- } +++ *pDigest >>= aSequence; +++ pStream->setDigest ( aSequence ); +++ +++ *pDigestAlg >>= nDigestAlg; +++ pStream->SetImportedChecksumAlgorithm( nDigestAlg ); +++ +++ *pEncryptionAlg >>= nEncryptionAlg; +++ pStream->SetImportedEncryptionAlgorithm( nEncryptionAlg ); +++ +++ if ( pDerivedKeySize ) +++ *pDerivedKeySize >>= nDerivedKeySize; +++ pStream->SetImportedDerivedKeySize( nDerivedKeySize ); +++ +++ if ( pStartKeyAlg ) +++ *pStartKeyAlg >>= nStartKeyAlg; +++ pStream->SetImportedStartKeyAlgorithm( nStartKeyAlg ); ++ ++ pStream->SetToBeCompressed ( sal_True ); ++ pStream->SetToBeEncrypted ( sal_True ); ++ pStream->SetIsEncrypted ( sal_True ); ++ if ( !m_bHasEncryptedEntries ++ && pStream->getName().equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "content.xml" ) ) ) ) +++ { ++ m_bHasEncryptedEntries = sal_True; +++ m_nStartKeyGenerationID = nStartKeyAlg; +++ m_nChecksumDigestID = nDigestAlg; +++ m_nCommonEncryptionID = nEncryptionAlg; +++ } ++ } ++ else ++ m_bHasNonEncryptedEntries = sal_True; ++@@ -411,20 +445,30 @@ void ZipPackage::parseManifest() ++ ++ m_bInconsistent = m_pRootFolder->LookForUnexpectedODF12Streams( ::rtl::OUString() ); ++ ++- sal_Bool bODF12AndOlder = ( m_pRootFolder->GetVersion().compareTo( ODFVER_012_TEXT ) >= 0 ); ++- if ( !m_bForceRecovery && bODF12AndOlder && m_bInconsistent ) +++ sal_Bool bODF12AndNewer = ( m_pRootFolder->GetVersion().compareTo( ODFVER_012_TEXT ) >= 0 ); +++ if ( !m_bForceRecovery && bODF12AndNewer ) ++ { ++- // this is an ODF1.2 document that contains streams not referred in the manifest.xml; ++- // in case of ODF1.2 documents without version in manifest.xml the property IsInconsistent ++- // should be checked later ++- throw ZipIOException( ++- ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "there are streams not referred in manifest.xml\n" ) ), ++- uno::Reference< uno::XInterface >() ); +++ if ( m_bInconsistent ) +++ { +++ // this is an ODF1.2 document that contains streams not referred in the manifest.xml; +++ // in case of ODF1.2 documents without version in manifest.xml the property IsInconsistent +++ // should be checked later +++ throw ZipIOException( +++ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "there are streams not referred in manifest.xml\n" ) ), +++ uno::Reference< uno::XInterface >() ); +++ } +++ else if ( bDifferentStartKeyAlgorithm ) +++ { +++ // all the streams should be encrypted with the same StartKey in ODF1.2 +++ // TODO/LATER: in future the exception should be thrown +++ OSL_ENSURE( false, "ODF1.2 contains different StartKey Algorithms" ); +++ // throw ZipIOException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "More than one Start Key Generation algorithm is specified!" ) ), uno::Reference< uno::XInterface >() ); +++ } ++ } ++ ++ // in case it is a correct ODF1.2 document, the version must be set ++ // and the META-INF folder is reserved for package format ++- if ( bODF12AndOlder ) +++ if ( bODF12AndNewer ) ++ m_xRootFolder->removeByName( sMeta ); ++ } ++ } ++@@ -981,14 +1025,12 @@ void ZipPackage::WriteMimetypeMagicFile( ZipOutputStream& aZipOut ) ++ ++ try ++ { ++- rtl::Reference < EncryptionData > xEmpty; ++- aZipOut.putNextEntry( *pEntry, xEmpty ); +++ aZipOut.putNextEntry( *pEntry, NULL ); ++ aZipOut.write( aType, 0, nBufferLength ); ++ aZipOut.closeEntry(); ++ } ++ catch ( ::com::sun::star::io::IOException & r ) ++ { ++- OSL_FAIL( "Error adding mimetype to the ZipOutputStream" ); ++ throw WrappedTargetException( ++ OUString( RTL_CONSTASCII_USTRINGPARAM ( OSL_LOG_PREFIX "Error adding mimetype to the ZipOutputStream!" ) ), ++ static_cast < OWeakObject * > ( this ), ++@@ -1015,19 +1057,20 @@ void ZipPackage::WriteManifest( ZipOutputStream& aZipOut, const vector< Sequence ++ ++ // Convert vector into a Sequence ++ Sequence < Sequence < PropertyValue > > aManifestSequence ( aManList.size() ); ++- Sequence < PropertyValue > * pSequence = aManifestSequence.getArray(); +++ sal_Int32 nInd = 0; ++ for (vector < Sequence < PropertyValue > >::const_iterator aIter = aManList.begin(), aEnd = aManList.end(); ++ aIter != aEnd; ++- ++aIter, ++pSequence) ++- *pSequence= (*aIter); +++ aIter++, nInd++ ) +++ { +++ aManifestSequence[nInd] = ( *aIter ); +++ } ++ xWriter->writeManifestSequence ( xManOutStream, aManifestSequence ); ++ ++ sal_Int32 nBufferLength = static_cast < sal_Int32 > ( pBuffer->getPosition() ); ++ pBuffer->realloc( nBufferLength ); ++ ++ // the manifest.xml is never encrypted - so pass an empty reference ++- rtl::Reference < EncryptionData > xEmpty; ++- aZipOut.putNextEntry( *pEntry, xEmpty ); +++ aZipOut.putNextEntry( *pEntry, NULL ); ++ aZipOut.write( pBuffer->getSequence(), 0, nBufferLength ); ++ aZipOut.closeEntry(); ++ } ++@@ -1089,8 +1132,7 @@ void ZipPackage::WriteContentTypes( ZipOutputStream& aZipOut, const vector< Sequ ++ pBuffer->realloc( nBufferLength ); ++ ++ // there is no encryption in this format currently ++- rtl::Reference < EncryptionData > xEmpty; ++- aZipOut.putNextEntry( *pEntry, xEmpty ); +++ aZipOut.putNextEntry( *pEntry, NULL ); ++ aZipOut.write( pBuffer->getSequence(), 0, nBufferLength ); ++ aZipOut.closeEntry(); ++ } ++@@ -1154,7 +1196,7 @@ uno::Reference< io::XInputStream > ZipPackage::writeTempFile() ++ } ++ ++ // Hand it to the ZipOutputStream: ++- ZipOutputStream aZipOut ( xTempOut ); +++ ZipOutputStream aZipOut ( m_xFactory, xTempOut ); ++ aZipOut.setMethod(DEFLATED); ++ aZipOut.setLevel(DEFAULT_COMPRESSION); ++ ++@@ -1224,12 +1266,12 @@ uno::Reference< io::XInputStream > ZipPackage::writeTempFile() ++ ++ // call saveContents (it will recursively save sub-directories ++ OUString aEmptyString; ++- m_pRootFolder->saveContents( aEmptyString, aManList, aZipOut, m_aEncryptionKey, aRandomPool ); +++ m_pRootFolder->saveContents( aEmptyString, aManList, aZipOut, GetEncryptionKey(), aRandomPool ); ++ ++ // Clean up random pool memory ++ rtl_random_destroyPool ( aRandomPool ); ++ ++- if( m_bUseManifest && m_nFormat == embed::StorageFormats::PACKAGE ) +++ if( m_nFormat == embed::StorageFormats::PACKAGE ) ++ { ++ WriteManifest( aZipOut, aManList ); ++ } ++@@ -1549,6 +1591,36 @@ void ZipPackage::DisconnectFromTargetAndThrowException_Impl( const uno::Referenc ++ makeAny ( aException ) ); ++ } ++ +++//-------------------------------------------------------- +++const uno::Sequence< sal_Int8 > ZipPackage::GetEncryptionKey() +++{ +++ uno::Sequence< sal_Int8 > aResult; +++ +++ if ( m_aStorageEncryptionKeys.getLength() ) +++ { +++ ::rtl::OUString aNameToFind; +++ if ( m_nStartKeyGenerationID == xml::crypto::DigestID::SHA256 ) +++ aNameToFind = PACKAGE_ENCRYPTIONDATA_SHA256UTF8; +++ else if ( m_nStartKeyGenerationID == xml::crypto::DigestID::SHA1 ) +++ aNameToFind = PACKAGE_ENCRYPTIONDATA_SHA1UTF8; +++ else +++ throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "No expected key is provided!" ) ), uno::Reference< uno::XInterface >() ); +++ +++ for ( sal_Int32 nInd = 0; nInd < m_aStorageEncryptionKeys.getLength(); nInd++ ) +++ if ( m_aStorageEncryptionKeys[nInd].Name.equals( aNameToFind ) ) +++ m_aStorageEncryptionKeys[nInd].Value >>= aResult; +++ +++ // empty keys are not allowed here +++ // so it is not important whether there is no key, or the key is empty, it is an error +++ if ( !aResult.getLength() ) +++ throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "No expected key is provided!" ) ), uno::Reference< uno::XInterface >() ); +++ } +++ else +++ aResult = m_aEncryptionKey; +++ +++ return aResult; +++} +++ ++ sal_Bool SAL_CALL ZipPackage::hasPendingChanges( ) ++ throw(RuntimeException) ++ { ++@@ -1639,20 +1711,91 @@ void SAL_CALL ZipPackage::setPropertyValue( const OUString& aPropertyName, const ++ if ( m_nFormat != embed::StorageFormats::PACKAGE ) ++ throw UnknownPropertyException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++ ++- if (aPropertyName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("HasEncryptedEntries") ) ++- ||aPropertyName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("HasNonEncryptedEntries") ) ++- ||aPropertyName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("IsInconsistent") ) ++- ||aPropertyName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("MediaTypeFallbackUsed") ) ) +++ if ( aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( HAS_ENCRYPTED_ENTRIES_PROPERTY ) ) +++ ||aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( HAS_NONENCRYPTED_ENTRIES_PROPERTY ) ) +++ ||aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( IS_INCONSISTENT_PROPERTY ) ) +++ ||aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MEDIATYPE_FALLBACK_USED_PROPERTY ) ) ) ++ throw PropertyVetoException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++- else if (aPropertyName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("EncryptionKey") ) ) +++ else if ( aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( ENCRYPTION_KEY_PROPERTY ) ) ) ++ { ++- if (!( aValue >>= m_aEncryptionKey ) || m_aEncryptionKey.getLength() == 0 ) +++ if (!( aValue >>= m_aEncryptionKey ) ) ++ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), 2 ); +++ +++ m_aStorageEncryptionKeys.realloc( 0 ); ++ } ++- else if (aPropertyName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("UseManifest") ) ) +++ else if (aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( STORAGE_ENCRYPTION_KEYS_PROPERTY ) ) ) ++ { ++- if (!( aValue >>= m_bUseManifest ) ) +++ // this property is only necessary to support raw passwords in storage API; +++ // because of this support the storage has to operate with more than one key dependent on storage generation algorithm; +++ // when this support is removed, the storage will get only one key from outside +++ // TODO/LATER: Get rid of this property as well as of support of raw passwords in storages +++ uno::Sequence< beans::NamedValue > aKeys; +++ if ( !( aValue >>= aKeys ) || ( aKeys.getLength() && aKeys.getLength() < 2 ) ) ++ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), 2 ); +++ +++ if ( aKeys.getLength() ) +++ { +++ bool bHasSHA256 = false; +++ bool bHasSHA1 = false; +++ for ( sal_Int32 nInd = 0; nInd < aKeys.getLength(); nInd++ ) +++ { +++ if ( aKeys[nInd].Name.equals( PACKAGE_ENCRYPTIONDATA_SHA256UTF8 ) ) +++ bHasSHA256 = true; +++ if ( aKeys[nInd].Name.equals( PACKAGE_ENCRYPTIONDATA_SHA1UTF8 ) ) +++ bHasSHA1 = true; +++ } +++ +++ if ( !bHasSHA256 || !bHasSHA1 ) +++ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Expected keys are not provided!" ) ), uno::Reference< uno::XInterface >(), 2 ); +++ } +++ +++ m_aStorageEncryptionKeys = aKeys; +++ m_aEncryptionKey.realloc( 0 ); +++ } +++ else if ( aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( ENCRYPTION_ALGORITHMS_PROPERTY ) ) ) +++ { +++ uno::Sequence< beans::NamedValue > aAlgorithms; +++ if ( m_pZipFile || !( aValue >>= aAlgorithms ) || aAlgorithms.getLength() == 0 ) +++ { +++ // the algorithms can not be changed if the file has a persistence based on the algorithms ( m_pZipFile ) +++ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "unexpected algorithms list is provided." ) ), uno::Reference< uno::XInterface >(), 2 ); +++ } +++ +++ for ( sal_Int32 nInd = 0; nInd < aAlgorithms.getLength(); nInd++ ) +++ { +++ if ( aAlgorithms[nInd].Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "StartKeyGenerationAlgorithm" ) ) ) +++ { +++ sal_Int32 nID = 0; +++ if ( !( aAlgorithms[nInd].Value >>= nID ) +++ || ( nID != xml::crypto::DigestID::SHA256 && nID != xml::crypto::DigestID::SHA1 ) ) +++ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Unexpected start key generation algorithm is provided!" ) ), uno::Reference< uno::XInterface >(), 2 ); +++ +++ m_nStartKeyGenerationID = nID; +++ } +++ else if ( aAlgorithms[nInd].Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "EncryptionAlgorithm" ) ) ) +++ { +++ sal_Int32 nID = 0; +++ if ( !( aAlgorithms[nInd].Value >>= nID ) +++ || ( nID != xml::crypto::CipherID::AES_CBC_W3C_PADDING && nID != xml::crypto::CipherID::BLOWFISH_CFB_8 ) ) +++ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Unexpected start key generation algorithm is provided!" ) ), uno::Reference< uno::XInterface >(), 2 ); +++ +++ m_nCommonEncryptionID = nID; +++ } +++ else if ( aAlgorithms[nInd].Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "ChecksumAlgorithm" ) ) ) +++ { +++ sal_Int32 nID = 0; +++ if ( !( aAlgorithms[nInd].Value >>= nID ) +++ || ( nID != xml::crypto::DigestID::SHA1_1K && nID != xml::crypto::DigestID::SHA256_1K ) ) +++ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Unexpected start key generation algorithm is provided!" ) ), uno::Reference< uno::XInterface >(), 2 ); +++ +++ m_nChecksumDigestID = nID; +++ } +++ else +++ { +++ OSL_ENSURE( sal_False, "Unexpected encryption algorithm is provided!" ); +++ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "unexpected algorithms list is provided." ) ), uno::Reference< uno::XInterface >(), 2 ); +++ } +++ } ++ } ++ else ++ throw UnknownPropertyException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++@@ -1665,32 +1808,41 @@ Any SAL_CALL ZipPackage::getPropertyValue( const OUString& PropertyName ) ++ // throw UnknownPropertyException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++ ++ Any aAny; ++- if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "EncryptionKey" ) ) ) +++ if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( ENCRYPTION_KEY_PROPERTY ) ) ) ++ { ++ aAny <<= m_aEncryptionKey; ++ return aAny; ++ } ++- else if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "HasEncryptedEntries" ) ) ) +++ else if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( ENCRYPTION_ALGORITHMS_PROPERTY ) ) ) ++ { ++- aAny <<= m_bHasEncryptedEntries; +++ ::comphelper::SequenceAsHashMap aAlgorithms; +++ aAlgorithms[ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "StartKeyGenerationAlgorithm" ) ) ] <<= m_nStartKeyGenerationID; +++ aAlgorithms[ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "EncryptionAlgorithm" ) ) ] <<= m_nCommonEncryptionID; +++ aAlgorithms[ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ChecksumAlgorithm" ) ) ] <<= m_nChecksumDigestID; +++ aAny <<= aAlgorithms.getAsConstNamedValueList(); ++ return aAny; ++ } ++- else if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "HasNonEncryptedEntries" ) ) ) +++ if ( PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( STORAGE_ENCRYPTION_KEYS_PROPERTY ) ) ) ++ { ++- aAny <<= m_bHasNonEncryptedEntries; +++ aAny <<= m_aStorageEncryptionKeys; ++ return aAny; ++ } ++- else if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "IsInconsistent" ) ) ) +++ else if ( PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( HAS_ENCRYPTED_ENTRIES_PROPERTY ) ) ) ++ { ++- aAny <<= m_bInconsistent; +++ aAny <<= m_bHasEncryptedEntries; ++ return aAny; ++ } ++- else if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "UseManifest" ) ) ) +++ else if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( HAS_NONENCRYPTED_ENTRIES_PROPERTY ) ) ) ++ { ++- aAny <<= m_bUseManifest; +++ aAny <<= m_bHasNonEncryptedEntries; +++ return aAny; +++ } +++ else if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( IS_INCONSISTENT_PROPERTY ) ) ) +++ { +++ aAny <<= m_bInconsistent; ++ return aAny; ++ } ++- else if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "MediaTypeFallbackUsed" ) ) ) +++ else if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( MEDIATYPE_FALLBACK_USED_PROPERTY ) ) ) ++ { ++ aAny <<= m_bMediaTypeFallbackUsed; ++ return aAny; ++diff --git a/package/source/zippackage/ZipPackageEntry.hxx b/package/source/zippackage/ZipPackageEntry.hxx ++deleted file mode 100644 ++index eef9dd9..0000000 ++--- package/source/zippackage/ZipPackageEntry.hxx +++++ /dev/null ++@@ -1,106 +0,0 @@ ++-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ ++-/************************************************************************* ++- * ++- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++- * ++- * Copyright 2000, 2010 Oracle and/or its affiliates. ++- * ++- * OpenOffice.org - a multi-platform office productivity suite ++- * ++- * This file is part of OpenOffice.org. ++- * ++- * OpenOffice.org is free software: you can redistribute it and/or modify ++- * it under the terms of the GNU Lesser General Public License version 3 ++- * only, as published by the Free Software Foundation. ++- * ++- * OpenOffice.org is distributed in the hope that it will be useful, ++- * but WITHOUT ANY WARRANTY; without even the implied warranty of ++- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++- * GNU Lesser General Public License version 3 for more details ++- * (a copy is included in the LICENSE file that accompanied this code). ++- * ++- * You should have received a copy of the GNU Lesser General Public License ++- * version 3 along with OpenOffice.org. If not, see ++- * ++- * for a copy of the LGPLv3 License. ++- * ++- ************************************************************************/ ++-#ifndef _ZIP_PACKAGE_ENTRY_HXX ++-#define _ZIP_PACKAGE_ENTRY_HXX ++- ++-#include ++-#include ++-#include ++-#include ++-#include ++-#include ++-#include ++-#include ++- ++-class ZipPackageFolder; ++- ++-class ZipPackageEntry : public cppu::WeakImplHelper5 ++-< ++- com::sun::star::container::XNamed, ++- com::sun::star::container::XChild, ++- com::sun::star::lang::XUnoTunnel, ++- com::sun::star::beans::XPropertySet, ++- com::sun::star::lang::XServiceInfo ++-> ++-{ ++-protected: ++- ::rtl::OUString msName; ++- bool mbIsFolder:1; ++- bool mbAllowRemoveOnInsert:1; ++- // com::sun::star::uno::Reference < com::sun::star::container::XNameContainer > xParent; ++- ::rtl::OUString sMediaType; ++- ZipPackageFolder * pParent; ++-public: ++- ZipEntry aEntry; ++- ZipPackageEntry ( bool bNewFolder = sal_False ); ++- virtual ~ZipPackageEntry( void ); ++- ++- ::rtl::OUString & GetMediaType () { return sMediaType; } ++- void SetMediaType ( const ::rtl::OUString & sNewType) { sMediaType = sNewType; } ++- void doSetParent ( ZipPackageFolder * pNewParent, sal_Bool bInsert ); ++- bool IsFolder ( ) { return mbIsFolder; } ++- ZipPackageFolder* GetParent ( ) { return pParent; } ++- void SetFolder ( bool bSetFolder ) { mbIsFolder = bSetFolder; } ++- ++- void clearParent ( void ) ++- { ++- // xParent.clear(); ++- pParent = NULL; ++- } ++- // XNamed ++- virtual ::rtl::OUString SAL_CALL getName( ) ++- throw(::com::sun::star::uno::RuntimeException); ++- virtual void SAL_CALL setName( const ::rtl::OUString& aName ) ++- throw(::com::sun::star::uno::RuntimeException); ++- // XChild ++- virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getParent( ) ++- throw(::com::sun::star::uno::RuntimeException); ++- virtual void SAL_CALL setParent( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& Parent ) ++- throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); ++- // XUnoTunnel ++- virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) ++- throw(::com::sun::star::uno::RuntimeException) = 0; ++- // XPropertySet ++- virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) ++- throw(::com::sun::star::uno::RuntimeException); ++- virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) ++- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException) = 0; ++- virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const ::rtl::OUString& PropertyName ) ++- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException) = 0; ++- virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) ++- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); ++- virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener ) ++- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); ++- virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) ++- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); ++- virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) ++- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); ++-}; ++-#endif ++- ++-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ++diff --git a/package/source/zippackage/ZipPackageFolder.cxx b/package/source/zippackage/ZipPackageFolder.cxx ++index c412af1..534488d 100644 ++--- package/source/zippackage/ZipPackageFolder.cxx +++++ package/source/zippackage/ZipPackageFolder.cxx ++@@ -305,7 +305,7 @@ static void ImplSetStoredData( ZipEntry & rEntry, Reference < XInputStream> & rS ++ rEntry.nCrc = aCRC32.getValue(); ++ } ++ ++-bool ZipPackageFolder::saveChild( const OUString &rShortName, const ContentInfo &rInfo, OUString &rPath, std::vector < Sequence < PropertyValue > > &rManList, ZipOutputStream & rZipOut, Sequence < sal_Int8 > &rEncryptionKey, rtlRandomPool &rRandomPool) +++bool ZipPackageFolder::saveChild( const OUString &rShortName, const ContentInfo &rInfo, OUString &rPath, std::vector < Sequence < PropertyValue > > &rManList, ZipOutputStream & rZipOut, const Sequence < sal_Int8 >& rEncryptionKey, rtlRandomPool &rRandomPool) ++ { ++ bool bSuccess = true; ++ ++@@ -317,6 +317,10 @@ bool ZipPackageFolder::saveChild( const OUString &rShortName, const ContentInfo ++ const OUString sIterationCountProperty ( RTL_CONSTASCII_USTRINGPARAM ( "IterationCount" ) ); ++ const OUString sSizeProperty ( RTL_CONSTASCII_USTRINGPARAM ( "Size" ) ); ++ const OUString sDigestProperty ( RTL_CONSTASCII_USTRINGPARAM ( "Digest" ) ); +++ const ::rtl::OUString sEncryptionAlgProperty ( RTL_CONSTASCII_USTRINGPARAM ( "EncryptionAlgorithm" ) ); +++ const ::rtl::OUString sStartKeyAlgProperty ( RTL_CONSTASCII_USTRINGPARAM ( "StartKeyAlgorithm" ) ); +++ const ::rtl::OUString sDigestAlgProperty ( RTL_CONSTASCII_USTRINGPARAM ( "DigestAlgorithm" ) ); +++ const ::rtl::OUString sDerivedKeySizeProperty ( RTL_CONSTASCII_USTRINGPARAM ( "DerivedKeySize" ) ); ++ ++ Sequence < PropertyValue > aPropSet (PKG_SIZE_NOENCR_MNFST); ++ ++@@ -450,7 +454,6 @@ bool ZipPackageFolder::saveChild( const OUString &rShortName, const ContentInfo ++ } ++ else ++ { ++- OSL_FAIL( "The package component requires that every stream either be FROM a package or it must support XSeekable!" ); ++ bSuccess = false; ++ return bSuccess; ++ } ++@@ -458,7 +461,6 @@ bool ZipPackageFolder::saveChild( const OUString &rShortName, const ContentInfo ++ } ++ catch ( Exception& ) ++ { ++- OSL_FAIL( "The stream provided to the package component has problems!" ); ++ bSuccess = false; ++ return bSuccess; ++ } ++@@ -467,9 +469,9 @@ bool ZipPackageFolder::saveChild( const OUString &rShortName, const ContentInfo ++ { ++ if ( bToBeEncrypted && !bTransportOwnEncrStreamAsRaw ) ++ { ++- Sequence < sal_uInt8 > aSalt ( 16 ), aVector ( 8 ); +++ Sequence < sal_Int8 > aSalt ( 16 ), aVector ( rInfo.pStream->GetBlockSize() ); ++ rtl_random_getBytes ( rRandomPool, aSalt.getArray(), 16 ); ++- rtl_random_getBytes ( rRandomPool, aVector.getArray(), 8 ); +++ rtl_random_getBytes ( rRandomPool, aVector.getArray(), aVector.getLength() ); ++ sal_Int32 nIterationCount = 1024; ++ ++ if ( !rInfo.pStream->HasOwnKey() ) ++@@ -498,8 +500,20 @@ bool ZipPackageFolder::saveChild( const OUString &rShortName, const ContentInfo ++ ++ if ( bRawStream || bTransportOwnEncrStreamAsRaw ) ++ { +++ ::rtl::Reference< EncryptionData > xEncData = rInfo.pStream->GetEncryptionData(); +++ if ( !xEncData.is() ) +++ throw uno::RuntimeException(); +++ ++ aPropSet[PKG_MNFST_DIGEST].Name = sDigestProperty; ++ aPropSet[PKG_MNFST_DIGEST].Value <<= rInfo.pStream->getDigest(); +++ aPropSet[PKG_MNFST_ENCALG].Name = sEncryptionAlgProperty; +++ aPropSet[PKG_MNFST_ENCALG].Value <<= xEncData->m_nEncAlg; +++ aPropSet[PKG_MNFST_STARTALG].Name = sStartKeyAlgProperty; +++ aPropSet[PKG_MNFST_STARTALG].Value <<= xEncData->m_nStartKeyGenID; +++ aPropSet[PKG_MNFST_DIGESTALG].Name = sDigestAlgProperty; +++ aPropSet[PKG_MNFST_DIGESTALG].Value <<= xEncData->m_nCheckAlg; +++ aPropSet[PKG_MNFST_DERKEYSIZE].Name = sDerivedKeySizeProperty; +++ aPropSet[PKG_MNFST_DERKEYSIZE].Value <<= xEncData->m_nDerivedKeySize; ++ } ++ } ++ } ++@@ -520,7 +534,6 @@ bool ZipPackageFolder::saveChild( const OUString &rShortName, const ContentInfo ++ if ( !xStream.is() ) ++ { ++ // Make sure that we actually _got_ a new one ! ++- OSL_FAIL( "ZipPackageStream didn't have a stream associated with it, skipping!" ); ++ bSuccess = false; ++ return bSuccess; ++ } ++@@ -531,7 +544,7 @@ bool ZipPackageFolder::saveChild( const OUString &rShortName, const ContentInfo ++ if ( bRawStream ) ++ xStream->skipBytes( rInfo.pStream->GetMagicalHackPos() ); ++ ++- rZipOut.putNextEntry ( *pTempEntry, rInfo.pStream->getEncryptionData(), sal_False ); +++ rZipOut.putNextEntry ( *pTempEntry, rInfo.pStream, sal_False ); ++ // the entry is provided to the ZipOutputStream that will delete it ++ pAutoTempEntry.release(); ++ ++@@ -549,12 +562,10 @@ bool ZipPackageFolder::saveChild( const OUString &rShortName, const ContentInfo ++ } ++ catch ( ZipException& ) ++ { ++- OSL_FAIL( "Error writing ZipOutputStream" ); ++ bSuccess = false; ++ } ++ catch ( IOException& ) ++ { ++- OSL_FAIL( "Error writing ZipOutputStream" ); ++ bSuccess = false; ++ } ++ } ++@@ -576,7 +587,6 @@ bool ZipPackageFolder::saveChild( const OUString &rShortName, const ContentInfo ++ if ( !xStream.is() ) ++ { ++ // Make sure that we actually _got_ a new one ! ++- OSL_FAIL( "ZipPackageStream didn't have a stream associated with it, skipping!" ); ++ bSuccess = false; ++ return bSuccess; ++ } ++@@ -590,7 +600,7 @@ bool ZipPackageFolder::saveChild( const OUString &rShortName, const ContentInfo ++ ++ try ++ { ++- rZipOut.putNextEntry ( *pTempEntry, rInfo.pStream->getEncryptionData(), bToBeEncrypted); +++ rZipOut.putNextEntry ( *pTempEntry, rInfo.pStream, bToBeEncrypted); ++ // the entry is provided to the ZipOutputStream that will delete it ++ pAutoTempEntry.release(); ++ ++@@ -607,19 +617,30 @@ bool ZipPackageFolder::saveChild( const OUString &rShortName, const ContentInfo ++ } ++ catch ( ZipException& ) ++ { ++- OSL_FAIL( "Error writing ZipOutputStream" ); ++ bSuccess = false; ++ } ++ catch ( IOException& ) ++ { ++- OSL_FAIL( "Error writing ZipOutputStream" ); ++ bSuccess = false; ++ } ++ ++ if ( bToBeEncrypted ) ++ { +++ ::rtl::Reference< EncryptionData > xEncData = rInfo.pStream->GetEncryptionData(); +++ if ( !xEncData.is() ) +++ throw uno::RuntimeException(); +++ ++ aPropSet[PKG_MNFST_DIGEST].Name = sDigestProperty; ++ aPropSet[PKG_MNFST_DIGEST].Value <<= rInfo.pStream->getDigest(); +++ aPropSet[PKG_MNFST_ENCALG].Name = sEncryptionAlgProperty; +++ aPropSet[PKG_MNFST_ENCALG].Value <<= xEncData->m_nEncAlg; +++ aPropSet[PKG_MNFST_STARTALG].Name = sStartKeyAlgProperty; +++ aPropSet[PKG_MNFST_STARTALG].Value <<= xEncData->m_nStartKeyGenID; +++ aPropSet[PKG_MNFST_DIGESTALG].Name = sDigestAlgProperty; +++ aPropSet[PKG_MNFST_DIGESTALG].Value <<= xEncData->m_nCheckAlg; +++ aPropSet[PKG_MNFST_DERKEYSIZE].Name = sDerivedKeySizeProperty; +++ aPropSet[PKG_MNFST_DERKEYSIZE].Value <<= xEncData->m_nDerivedKeySize; +++ ++ rInfo.pStream->SetIsEncrypted ( sal_True ); ++ } ++ } ++@@ -665,7 +686,7 @@ bool ZipPackageFolder::saveChild( const OUString &rShortName, const ContentInfo ++ return bSuccess; ++ } ++ ++-void ZipPackageFolder::saveContents(OUString &rPath, std::vector < Sequence < PropertyValue > > &rManList, ZipOutputStream & rZipOut, Sequence < sal_Int8 > &rEncryptionKey, rtlRandomPool &rRandomPool) +++void ZipPackageFolder::saveContents(OUString &rPath, std::vector < Sequence < PropertyValue > > &rManList, ZipOutputStream & rZipOut, const Sequence < sal_Int8 >& rEncryptionKey, rtlRandomPool &rRandomPool ) ++ throw(RuntimeException) ++ { ++ bool bWritingFailed = false; ++@@ -681,18 +702,15 @@ void ZipPackageFolder::saveContents(OUString &rPath, std::vector < Sequence < Pr ++ ++ try ++ { ++- rtl::Reference < EncryptionData > aEmptyEncr; ++- rZipOut.putNextEntry ( *pTempEntry, aEmptyEncr, sal_False ); +++ rZipOut.putNextEntry ( *pTempEntry, NULL, sal_False ); ++ rZipOut.rawCloseEntry(); ++ } ++ catch ( ZipException& ) ++ { ++- OSL_FAIL( "Error writing ZipOutputStream" ); ++ bWritingFailed = true; ++ } ++ catch ( IOException& ) ++ { ++- OSL_FAIL( "Error writing ZipOutputStream" ); ++ bWritingFailed = true; ++ } ++ } ++diff --git a/package/source/zippackage/ZipPackageStream.cxx b/package/source/zippackage/ZipPackageStream.cxx ++index ce72beb..424053c 100644 ++--- package/source/zippackage/ZipPackageStream.cxx +++++ package/source/zippackage/ZipPackageStream.cxx ++@@ -35,6 +35,8 @@ ++ #include ++ #include ++ #include +++#include +++#include ++ ++ ++ #include ++@@ -75,13 +77,17 @@ ZipPackageStream::ZipPackageStream ( ZipPackage & rNewPackage, ++ , bToBeEncrypted ( sal_False ) ++ , bHaveOwnKey ( sal_False ) ++ , bIsEncrypted ( sal_False ) ++-, xEncryptionData ( ) +++, m_nImportedStartKeyAlgorithm( 0 ) +++, m_nImportedEncryptionAlgorithm( 0 ) +++, m_nImportedChecksumAlgorithm( 0 ) +++, m_nImportedDerivedKeySize( 0 ) ++ , m_nStreamMode( PACKAGE_STREAM_NOTSET ) ++ , m_nMagicalHackPos( 0 ) ++ , m_nMagicalHackSize( 0 ) ++ , m_bHasSeekable( sal_False ) ++ , m_bCompressedIsSetFromOutside( sal_False ) ++ , m_bFromManifest( sal_False ) +++, m_bUseWinEncoding( false ) ++ { ++ OSL_ENSURE( m_xFactory.is(), "No factory is provided to ZipPackageStream!\n" ); ++ ++@@ -138,7 +144,7 @@ void ZipPackageStream::CloseOwnStreamIfAny() ++ } ++ ++ //-------------------------------------------------------------------------- ++-uno::Reference< io::XInputStream >& ZipPackageStream::GetOwnSeekStream() +++uno::Reference< io::XInputStream > ZipPackageStream::GetOwnSeekStream() ++ { ++ if ( !m_bHasSeekable && xStream.is() ) ++ { ++@@ -164,7 +170,7 @@ uno::Reference< io::XInputStream > ZipPackageStream::GetRawEncrStreamNoHeaderCop ++ if ( m_nStreamMode != PACKAGE_STREAM_RAW || !GetOwnSeekStream().is() ) ++ throw io::IOException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++ ++- if ( !xEncryptionData.is() ) +++ if ( m_xBaseEncryptionData.is() ) ++ throw ZipIOException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Encrypted stream without encryption data!\n" ) ), ++ Reference< XInterface >() ); ++ ++@@ -174,8 +180,8 @@ uno::Reference< io::XInputStream > ZipPackageStream::GetRawEncrStreamNoHeaderCop ++ Reference< XInterface >() ); ++ ++ // skip header ++- xSeek->seek( n_ConstHeaderSize + xEncryptionData->aInitVector.getLength() + ++- xEncryptionData->aSalt.getLength() + xEncryptionData->aDigest.getLength() ); +++ xSeek->seek( n_ConstHeaderSize + getInitialisationVector().getLength() + +++ getSalt().getLength() + getDigest().getLength() ); ++ ++ // create temporary stream ++ uno::Reference < io::XOutputStream > xTempOut( ++@@ -195,6 +201,85 @@ uno::Reference< io::XInputStream > ZipPackageStream::GetRawEncrStreamNoHeaderCop ++ } ++ ++ //-------------------------------------------------------------------------- +++sal_Int32 ZipPackageStream::GetEncryptionAlgorithm() const +++{ +++ return m_nImportedEncryptionAlgorithm ? m_nImportedEncryptionAlgorithm : rZipPackage.GetEncAlgID(); +++} +++ +++//-------------------------------------------------------------------------- +++sal_Int32 ZipPackageStream::GetBlockSize() const +++{ +++ return GetEncryptionAlgorithm() == ::com::sun::star::xml::crypto::CipherID::AES_CBC_W3C_PADDING ? 16 : 8; +++} +++ +++//-------------------------------------------------------------------------- +++::rtl::Reference< EncryptionData > ZipPackageStream::GetEncryptionData( bool bUseWinEncoding ) +++{ +++ ::rtl::Reference< EncryptionData > xResult; +++ if ( m_xBaseEncryptionData.is() ) +++ xResult = new EncryptionData( +++ *m_xBaseEncryptionData, +++ GetEncryptionKey( bUseWinEncoding ), +++ GetEncryptionAlgorithm(), +++ m_nImportedChecksumAlgorithm ? m_nImportedChecksumAlgorithm : rZipPackage.GetChecksumAlgID(), +++ m_nImportedDerivedKeySize ? m_nImportedDerivedKeySize : rZipPackage.GetDefaultDerivedKeySize(), +++ GetStartKeyGenID() ); +++ +++ return xResult; +++} +++ +++//-------------------------------------------------------------------------- +++void ZipPackageStream::SetBaseEncryptionData( const ::rtl::Reference< BaseEncryptionData >& xData ) +++{ +++ m_xBaseEncryptionData = xData; +++} +++ +++//-------------------------------------------------------------------------- +++uno::Sequence< sal_Int8 > ZipPackageStream::GetEncryptionKey( bool bUseWinEncoding ) +++{ +++ uno::Sequence< sal_Int8 > aResult; +++ sal_Int32 nKeyGenID = GetStartKeyGenID(); +++ bUseWinEncoding = ( bUseWinEncoding || m_bUseWinEncoding ); +++ +++ if ( bHaveOwnKey && m_aStorageEncryptionKeys.getLength() ) +++ { +++ ::rtl::OUString aNameToFind; +++ if ( nKeyGenID == xml::crypto::DigestID::SHA256 ) +++ aNameToFind = PACKAGE_ENCRYPTIONDATA_SHA256UTF8; +++ else if ( nKeyGenID == xml::crypto::DigestID::SHA1 ) +++ { +++ aNameToFind = bUseWinEncoding ? PACKAGE_ENCRYPTIONDATA_SHA1MS1252 : PACKAGE_ENCRYPTIONDATA_SHA1UTF8; +++ } +++ else +++ throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "No expected key is provided!" ) ), uno::Reference< uno::XInterface >() ); +++ +++ for ( sal_Int32 nInd = 0; nInd < m_aStorageEncryptionKeys.getLength(); nInd++ ) +++ if ( m_aStorageEncryptionKeys[nInd].Name.equals( aNameToFind ) ) +++ m_aStorageEncryptionKeys[nInd].Value >>= aResult; +++ +++ // empty keys are not allowed here +++ // so it is not important whether there is no key, or the key is empty, it is an error +++ if ( !aResult.getLength() ) +++ throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "No expected key is provided!" ) ), uno::Reference< uno::XInterface >() ); +++ } +++ else +++ aResult = m_aEncryptionKey; +++ +++ if ( !aResult.getLength() || !bHaveOwnKey ) +++ aResult = rZipPackage.GetEncryptionKey(); +++ +++ return aResult; +++} +++ +++//-------------------------------------------------------------------------- +++sal_Int32 ZipPackageStream::GetStartKeyGenID() +++{ +++ // generally should all the streams use the same Start Key +++ // but if raw copy without password takes place, we should preserve the imported algorithm +++ return m_nImportedStartKeyAlgorithm ? m_nImportedStartKeyAlgorithm : rZipPackage.GetStartKeyGenID(); +++} +++ +++//-------------------------------------------------------------------------- ++ Reference< io::XInputStream > ZipPackageStream::TryToGetRawFromDataStream( sal_Bool bAddHeaderForEncr ) ++ { ++ if ( m_nStreamMode != PACKAGE_STREAM_DATA || !GetOwnSeekStream().is() || (bAddHeaderForEncr && !bToBeEncrypted) ) ++@@ -204,8 +289,7 @@ Reference< io::XInputStream > ZipPackageStream::TryToGetRawFromDataStream( sal_B ++ ++ if ( bToBeEncrypted ) ++ { ++- aKey = ( !xEncryptionData.is() || !bHaveOwnKey ) ? rZipPackage.getEncryptionKey() : ++- xEncryptionData->aKey; +++ aKey = GetEncryptionKey(); ++ if ( !aKey.getLength() ) ++ throw packages::NoEncryptionException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++ } ++@@ -246,7 +330,7 @@ Reference< io::XInputStream > ZipPackageStream::TryToGetRawFromDataStream( sal_B ++ xNewPSProps->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Compressed" ) ), makeAny( bToBeCompressed ) ); ++ if ( bToBeEncrypted ) ++ { ++- xNewPSProps->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "EncryptionKey" ) ), makeAny( aKey ) ); +++ xNewPSProps->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ENCRYPTION_KEY_PROPERTY ) ), makeAny( aKey ) ); ++ xNewPSProps->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Encrypted" ) ), makeAny( sal_True ) ); ++ } ++ ++@@ -317,7 +401,7 @@ sal_Bool ZipPackageStream::ParsePackageRawStream() ++ ++ sal_Bool bOk = sal_False; ++ ++- rtl::Reference < EncryptionData > xTempEncrData; +++ rtl::Reference < BaseEncryptionData > xTempEncrData; ++ sal_Int32 nMagHackSize = 0; ++ Sequence < sal_Int8 > aHeader ( 4 ); ++ ++@@ -333,17 +417,25 @@ sal_Bool ZipPackageStream::ParsePackageRawStream() ++ if ( nHeader == n_ConstHeader ) ++ { ++ // this is one of our god-awful, but extremely devious hacks, everyone cheer ++- xTempEncrData = new EncryptionData; +++ xTempEncrData = new BaseEncryptionData; ++ ++ ::rtl::OUString aMediaType; ++- if ( ZipFile::StaticFillData ( xTempEncrData, nMagHackSize, aMediaType, GetOwnSeekStream() ) ) +++ sal_Int32 nEncAlgorithm = 0; +++ sal_Int32 nChecksumAlgorithm = 0; +++ sal_Int32 nDerivedKeySize = 0; +++ sal_Int32 nStartKeyGenID = 0; +++ if ( ZipFile::StaticFillData( xTempEncrData, nEncAlgorithm, nChecksumAlgorithm, nDerivedKeySize, nStartKeyGenID, nMagHackSize, aMediaType, GetOwnSeekStream() ) ) ++ { ++ // We'll want to skip the data we've just read, so calculate how much we just read ++ // and remember it ++- m_nMagicalHackPos = n_ConstHeaderSize + xTempEncrData->aSalt.getLength() ++- + xTempEncrData->aInitVector.getLength() ++- + xTempEncrData->aDigest.getLength() +++ m_nMagicalHackPos = n_ConstHeaderSize + xTempEncrData->m_aSalt.getLength() +++ + xTempEncrData->m_aInitVector.getLength() +++ + xTempEncrData->m_aDigest.getLength() ++ + aMediaType.getLength() * sizeof( sal_Unicode ); +++ m_nImportedEncryptionAlgorithm = nEncAlgorithm; +++ m_nImportedChecksumAlgorithm = nChecksumAlgorithm; +++ m_nImportedDerivedKeySize = nDerivedKeySize; +++ m_nImportedStartKeyAlgorithm = nStartKeyGenID; ++ m_nMagicalHackSize = nMagHackSize; ++ sMediaType = aMediaType; ++ ++@@ -362,7 +454,7 @@ sal_Bool ZipPackageStream::ParsePackageRawStream() ++ return sal_False; ++ } ++ ++- xEncryptionData = xTempEncrData; +++ m_xBaseEncryptionData = xTempEncrData; ++ SetIsEncrypted ( sal_True ); ++ // it's already compressed and encrypted ++ bToBeEncrypted = bToBeCompressed = sal_False; ++@@ -385,10 +477,11 @@ void ZipPackageStream::SetPackageMember( sal_Bool bNewValue ) ++ // XActiveDataSink ++ //-------------------------------------------------------------------------- ++ void SAL_CALL ZipPackageStream::setInputStream( const Reference< io::XInputStream >& aStream ) ++- throw(RuntimeException) +++ throw( RuntimeException ) ++ { ++ // if seekable access is required the wrapping will be done on demand ++ xStream = aStream; +++ m_nImportedEncryptionAlgorithm = 0; ++ m_bHasSeekable = sal_False; ++ SetPackageMember ( sal_False ); ++ aEntry.nTime = -1; ++@@ -397,15 +490,13 @@ void SAL_CALL ZipPackageStream::setInputStream( const Reference< io::XInputStrea ++ ++ //-------------------------------------------------------------------------- ++ Reference< io::XInputStream > SAL_CALL ZipPackageStream::getRawData() ++- throw(RuntimeException) +++ throw( RuntimeException ) ++ { ++ try ++ { ++ if (IsPackageMember()) ++ { ++- if ( xEncryptionData.is() && !bHaveOwnKey ) ++- xEncryptionData->aKey = rZipPackage.getEncryptionKey(); ++- return rZipPackage.getZipFile().getRawData( aEntry, xEncryptionData, bIsEncrypted, rZipPackage.GetSharedMutexRef() ); +++ return rZipPackage.getZipFile().getRawData( aEntry, GetEncryptionData(), bIsEncrypted, rZipPackage.GetSharedMutexRef() ); ++ } ++ else if ( GetOwnSeekStream().is() ) ++ { ++@@ -434,9 +525,7 @@ Reference< io::XInputStream > SAL_CALL ZipPackageStream::getInputStream( ) ++ { ++ if (IsPackageMember()) ++ { ++- if ( xEncryptionData.is() && !bHaveOwnKey ) ++- xEncryptionData->aKey = rZipPackage.getEncryptionKey(); ++- return rZipPackage.getZipFile().getInputStream( aEntry, xEncryptionData, bIsEncrypted, rZipPackage.GetSharedMutexRef() ); +++ return rZipPackage.getZipFile().getInputStream( aEntry, GetEncryptionData(), bIsEncrypted, rZipPackage.GetSharedMutexRef() ); ++ } ++ else if ( GetOwnSeekStream().is() ) ++ { ++@@ -459,7 +548,7 @@ Reference< io::XInputStream > SAL_CALL ZipPackageStream::getInputStream( ) ++ ++ // XDataSinkEncrSupport ++ //-------------------------------------------------------------------------- ++-Reference< io::XInputStream > SAL_CALL ZipPackageStream::getDataStream() +++uno::Reference< io::XInputStream > SAL_CALL ZipPackageStream::getDataStream() ++ throw ( packages::WrongPasswordException, ++ io::IOException, ++ RuntimeException ) ++@@ -472,18 +561,28 @@ Reference< io::XInputStream > SAL_CALL ZipPackageStream::getDataStream() ++ if ( m_nStreamMode == PACKAGE_STREAM_DETECT ) ++ throw packages::zip::ZipIOException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++ ++- if ( xEncryptionData.is() && !bHaveOwnKey ) ++- xEncryptionData->aKey = rZipPackage.getEncryptionKey(); ++- ++ if (IsPackageMember()) ++ { ++- if ( xEncryptionData.is() && !bHaveOwnKey ) ++- xEncryptionData->aKey = rZipPackage.getEncryptionKey(); ++- ++- return rZipPackage.getZipFile().getDataStream( aEntry, xEncryptionData, bIsEncrypted, rZipPackage.GetSharedMutexRef() ); +++ uno::Reference< io::XInputStream > xResult; +++ try +++ { +++ xResult = rZipPackage.getZipFile().getDataStream( aEntry, GetEncryptionData(), bIsEncrypted, rZipPackage.GetSharedMutexRef() ); +++ } +++ catch( packages::WrongPasswordException& ) +++ { +++ // workaround for the encrypted documents generated with the old OOo1.x bug. +++ if ( rZipPackage.GetStartKeyGenID() == xml::crypto::DigestID::SHA1 && !m_bUseWinEncoding ) +++ { +++ xResult = rZipPackage.getZipFile().getDataStream( aEntry, GetEncryptionData( true ), bIsEncrypted, rZipPackage.GetSharedMutexRef() ); +++ m_bUseWinEncoding = true; +++ } +++ else +++ throw; +++ } +++ return xResult; ++ } ++ else if ( m_nStreamMode == PACKAGE_STREAM_RAW ) ++- return ZipFile::StaticGetDataFromRawStream( GetOwnSeekStream(), xEncryptionData ); +++ return ZipFile::StaticGetDataFromRawStream( m_xFactory, GetOwnSeekStream(), GetEncryptionData() ); ++ else if ( GetOwnSeekStream().is() ) ++ { ++ return new WrapStreamForShare( GetOwnSeekStream(), rZipPackage.GetSharedMutexRef() ); ++@@ -508,10 +607,10 @@ Reference< io::XInputStream > SAL_CALL ZipPackageStream::getRawStream() ++ ++ if (IsPackageMember()) ++ { ++- if ( !bIsEncrypted || !xEncryptionData.is() ) +++ if ( !bIsEncrypted || !GetEncryptionData().is() ) ++ throw packages::NoEncryptionException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++ ++- return rZipPackage.getZipFile().getWrappedRawStream( aEntry, xEncryptionData, sMediaType, rZipPackage.GetSharedMutexRef() ); +++ return rZipPackage.getZipFile().getWrappedRawStream( aEntry, GetEncryptionData(), sMediaType, rZipPackage.GetSharedMutexRef() ); ++ } ++ else if ( GetOwnSeekStream().is() ) ++ { ++@@ -528,7 +627,7 @@ Reference< io::XInputStream > SAL_CALL ZipPackageStream::getRawStream() ++ ++ ++ //-------------------------------------------------------------------------- ++-void SAL_CALL ZipPackageStream::setDataStream( const Reference< io::XInputStream >& aStream ) +++void SAL_CALL ZipPackageStream::setDataStream( const uno::Reference< io::XInputStream >& aStream ) ++ throw ( io::IOException, ++ RuntimeException ) ++ { ++@@ -541,7 +640,7 @@ void SAL_CALL ZipPackageStream::setRawStream( const Reference< io::XInputStream ++ throw ( packages::EncryptionNotAllowedException, ++ packages::NoRawFormatException, ++ io::IOException, ++- RuntimeException) +++ RuntimeException ) ++ { ++ // wrap the stream in case it is not seekable ++ Reference< io::XInputStream > xNewStream = ::comphelper::OSeekableInputWrapper::CheckSeekableCanWrap( aStream, m_xFactory ); ++@@ -582,7 +681,7 @@ uno::Reference< io::XInputStream > SAL_CALL ZipPackageStream::getPlainRawStream( ++ ++ if (IsPackageMember()) ++ { ++- return rZipPackage.getZipFile().getRawData( aEntry, xEncryptionData, bIsEncrypted, rZipPackage.GetSharedMutexRef() ); +++ return rZipPackage.getZipFile().getRawData( aEntry, GetEncryptionData(), bIsEncrypted, rZipPackage.GetSharedMutexRef() ); ++ } ++ else if ( GetOwnSeekStream().is() ) ++ { ++@@ -660,8 +759,8 @@ void SAL_CALL ZipPackageStream::setPropertyValue( const OUString& aPropertyName, ++ 2 ); ++ ++ bToBeEncrypted = bEnc; ++- if ( bToBeEncrypted && !xEncryptionData.is()) ++- xEncryptionData = new EncryptionData; +++ if ( bToBeEncrypted && !m_xBaseEncryptionData.is()) +++ m_xBaseEncryptionData = new BaseEncryptionData; ++ } ++ else ++ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Wrong type for Encrypted property!\n" ) ), ++@@ -669,7 +768,7 @@ void SAL_CALL ZipPackageStream::setPropertyValue( const OUString& aPropertyName, ++ 2 ); ++ ++ } ++- else if (aPropertyName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("EncryptionKey") ) ) +++ else if (aPropertyName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM( ENCRYPTION_KEY_PROPERTY ) ) ) ++ { ++ if ( rZipPackage.getFormat() != embed::StorageFormats::PACKAGE ) ++ throw beans::PropertyVetoException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++@@ -685,8 +784,8 @@ void SAL_CALL ZipPackageStream::setPropertyValue( const OUString& aPropertyName, ++ Sequence < sal_Int8 > aSequence ( nPathLength ); ++ sal_Int8 *pArray = aSequence.getArray(); ++ const sal_Unicode *pChar = sTempString.getStr(); ++- for ( sal_Int16 i = 0; i < nPathLength; i++) ++- pArray[i] = static_cast < const sal_Int8 > (pChar[i]); +++ for ( sal_Int16 i = 0; i < nPathLength; i++ ) +++ pArray[i] = static_cast < const sal_Int8 > ( pChar[i] ); ++ aNewKey = aSequence; ++ } ++ else ++@@ -697,19 +796,57 @@ void SAL_CALL ZipPackageStream::setPropertyValue( const OUString& aPropertyName, ++ ++ if ( aNewKey.getLength() ) ++ { ++- if ( !xEncryptionData.is()) ++- xEncryptionData = new EncryptionData; +++ if ( !m_xBaseEncryptionData.is() ) +++ m_xBaseEncryptionData = new BaseEncryptionData; ++ ++- xEncryptionData->aKey = aNewKey; +++ m_aEncryptionKey = aNewKey; ++ // In case of new raw stream, the stream must not be encrypted on storing ++ bHaveOwnKey = sal_True; ++ if ( m_nStreamMode != PACKAGE_STREAM_RAW ) ++ bToBeEncrypted = sal_True; ++ } ++ else +++ { ++ bHaveOwnKey = sal_False; +++ m_aEncryptionKey.realloc( 0 ); ++ } ++- else if (aPropertyName.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "Compressed" ) ) ) +++ +++ m_aStorageEncryptionKeys.realloc( 0 ); +++ } +++ else if ( aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( STORAGE_ENCRYPTION_KEYS_PROPERTY ) ) ) +++ { +++ if ( rZipPackage.getFormat() != embed::StorageFormats::PACKAGE ) +++ throw beans::PropertyVetoException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); +++ +++ uno::Sequence< beans::NamedValue > aKeys; +++ if ( !( aValue >>= aKeys ) ) +++ { +++ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Wrong type for StorageEncryptionKeys property!\n" ) ), +++ uno::Reference< XInterface >(), +++ 2 ); +++ } +++ +++ if ( aKeys.getLength() ) +++ { +++ if ( !m_xBaseEncryptionData.is() ) +++ m_xBaseEncryptionData = new BaseEncryptionData; +++ +++ m_aStorageEncryptionKeys = aKeys; +++ +++ // In case of new raw stream, the stream must not be encrypted on storing +++ bHaveOwnKey = sal_True; +++ if ( m_nStreamMode != PACKAGE_STREAM_RAW ) +++ bToBeEncrypted = sal_True; +++ } +++ else +++ { +++ bHaveOwnKey = sal_False; +++ m_aStorageEncryptionKeys.realloc( 0 ); +++ } +++ +++ m_aEncryptionKey.realloc( 0 ); +++ } +++ else if ( aPropertyName.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "Compressed" ) ) ) ++ { ++ sal_Bool bCompr = sal_False; ++ ++@@ -763,9 +900,14 @@ Any SAL_CALL ZipPackageStream::getPropertyValue( const OUString& PropertyName ) ++ aAny <<= bToBeCompressed; ++ return aAny; ++ } ++- else if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "EncryptionKey" ) ) ) +++ else if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( ENCRYPTION_KEY_PROPERTY ) ) ) +++ { +++ aAny <<= m_aEncryptionKey; +++ return aAny; +++ } +++ else if ( PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( STORAGE_ENCRYPTION_KEYS_PROPERTY ) ) ) ++ { ++- aAny <<= !xEncryptionData.is() ? Sequence < sal_Int8 > () : xEncryptionData->aKey; +++ aAny <<= m_aStorageEncryptionKeys; ++ return aAny; ++ } ++ else ++diff --git a/package/source/zippackage/ZipPackageStream.hxx b/package/source/zippackage/ZipPackageStream.hxx ++deleted file mode 100644 ++index 321e385..0000000 ++--- package/source/zippackage/ZipPackageStream.hxx +++++ /dev/null ++@@ -1,196 +0,0 @@ ++-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ ++-/************************************************************************* ++- * ++- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++- * ++- * Copyright 2000, 2010 Oracle and/or its affiliates. ++- * ++- * OpenOffice.org - a multi-platform office productivity suite ++- * ++- * This file is part of OpenOffice.org. ++- * ++- * OpenOffice.org is free software: you can redistribute it and/or modify ++- * it under the terms of the GNU Lesser General Public License version 3 ++- * only, as published by the Free Software Foundation. ++- * ++- * OpenOffice.org is distributed in the hope that it will be useful, ++- * but WITHOUT ANY WARRANTY; without even the implied warranty of ++- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++- * GNU Lesser General Public License version 3 for more details ++- * (a copy is included in the LICENSE file that accompanied this code). ++- * ++- * You should have received a copy of the GNU Lesser General Public License ++- * version 3 along with OpenOffice.org. If not, see ++- * ++- * for a copy of the LGPLv3 License. ++- * ++- ************************************************************************/ ++-#ifndef _ZIP_PACKAGE_STREAM_HXX ++-#define _ZIP_PACKAGE_STREAM_HXX ++- ++-#include ++-#include ++-#include ++-#include ++-#include ++-#include ++-#include ++-#include ++- ++-#define PACKAGE_STREAM_NOTSET 0 ++-#define PACKAGE_STREAM_PACKAGEMEMBER 1 ++-#define PACKAGE_STREAM_DETECT 2 ++-#define PACKAGE_STREAM_DATA 3 ++-#define PACKAGE_STREAM_RAW 4 ++- ++-class ZipPackage; ++-struct ZipEntry; ++-class ZipPackageStream : public cppu::ImplInheritanceHelper2 ++-< ++- ZipPackageEntry, ++- ::com::sun::star::io::XActiveDataSink, ++- ::com::sun::star::packages::XDataSinkEncrSupport ++-> ++-{ ++-protected: ++- com::sun::star::uno::Reference < com::sun::star::io::XInputStream > xStream; ++- const ::com::sun::star::uno::Reference < com::sun::star::lang::XMultiServiceFactory > m_xFactory; ++- ZipPackage &rZipPackage; ++- sal_Bool bToBeCompressed, bToBeEncrypted, bHaveOwnKey, bIsEncrypted; ++- rtl::Reference < EncryptionData > xEncryptionData; ++- ++- sal_uInt8 m_nStreamMode; ++- sal_uInt32 m_nMagicalHackPos; ++- sal_uInt32 m_nMagicalHackSize; ++- ++- sal_Bool m_bHasSeekable; ++- ++- sal_Bool m_bCompressedIsSetFromOutside; ++- ++- sal_Bool m_bFromManifest; ++- ++- ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& GetOwnSeekStream(); ++- ++-public: ++- sal_Bool HasOwnKey () const { return bHaveOwnKey;} ++- sal_Bool IsToBeCompressed () const { return bToBeCompressed;} ++- sal_Bool IsToBeEncrypted () const { return bToBeEncrypted;} ++- sal_Bool IsEncrypted () const { return bIsEncrypted;} ++- sal_Bool IsPackageMember () const { return m_nStreamMode == PACKAGE_STREAM_PACKAGEMEMBER;} ++- ++- sal_Bool IsFromManifest() const { return m_bFromManifest; } ++- void SetFromManifest( sal_Bool bValue ) { m_bFromManifest = bValue; } ++- ++- rtl::Reference < EncryptionData > & getEncryptionData () ++- { return xEncryptionData;} ++- const com::sun::star::uno::Sequence < sal_Int8 >& getKey () const ++- { return xEncryptionData->aKey;} ++- const com::sun::star::uno::Sequence < sal_uInt8 >& getInitialisationVector () const ++- { return xEncryptionData->aInitVector;} ++- const com::sun::star::uno::Sequence < sal_uInt8 >& getDigest () const ++- { return xEncryptionData->aDigest;} ++- const com::sun::star::uno::Sequence < sal_uInt8 >& getSalt () const ++- { return xEncryptionData->aSalt;} ++- sal_Int32 getIterationCount () const ++- { return xEncryptionData->nIterationCount;} ++- sal_Int32 getSize () const ++- { return aEntry.nSize;} ++- ++- sal_uInt8 GetStreamMode() const { return m_nStreamMode; } ++- sal_uInt32 GetMagicalHackPos() const { return m_nMagicalHackPos; } ++- sal_uInt32 GetMagicalHackSize() const { return m_nMagicalHackSize; } ++- ++- void SetToBeCompressed (sal_Bool bNewValue) { bToBeCompressed = bNewValue;} ++- void SetIsEncrypted (sal_Bool bNewValue) { bIsEncrypted = bNewValue;} ++- void SetToBeEncrypted (sal_Bool bNewValue) ++- { ++- bToBeEncrypted = bNewValue; ++- if ( bToBeEncrypted && !xEncryptionData.is()) ++- xEncryptionData = new EncryptionData; ++- else if ( !bToBeEncrypted && xEncryptionData.is() ) ++- xEncryptionData.clear(); ++- } ++- void SetPackageMember (sal_Bool bNewValue); ++- void setKey (const com::sun::star::uno::Sequence < sal_Int8 >& rNewKey ) ++- { xEncryptionData->aKey = rNewKey;} ++- void setInitialisationVector (const com::sun::star::uno::Sequence < sal_uInt8 >& rNewVector ) ++- { xEncryptionData->aInitVector = rNewVector;} ++- void setSalt (const com::sun::star::uno::Sequence < sal_uInt8 >& rNewSalt ) ++- { xEncryptionData->aSalt = rNewSalt;} ++- void setDigest (const com::sun::star::uno::Sequence < sal_uInt8 >& rNewDigest ) ++- { xEncryptionData->aDigest = rNewDigest;} ++- void setIterationCount (const sal_Int32 nNewCount) ++- { xEncryptionData->nIterationCount = nNewCount;} ++- void setSize (const sal_Int32 nNewSize); ++- ++- ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > GetOwnStreamNoWrap() { return xStream; } ++- ++- void CloseOwnStreamIfAny(); ++- ++- ZipPackageStream ( ZipPackage & rNewPackage, ++- const ::com::sun::star::uno::Reference < com::sun::star::lang::XMultiServiceFactory >& xFactory, ++- sal_Bool bAllowRemoveOnInsert ); ++- virtual ~ZipPackageStream( void ); ++- ++- ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > GetRawEncrStreamNoHeaderCopy(); ++- ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > TryToGetRawFromDataStream( ++- sal_Bool bAddHeaderForEncr ); ++- ++- sal_Bool ParsePackageRawStream(); ++- ++- void setZipEntryOnLoading( const ZipEntry &rInEntry); ++- ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getRawData() ++- throw(::com::sun::star::uno::RuntimeException); ++- ++- static const ::com::sun::star::uno::Sequence < sal_Int8 >& static_getImplementationId(); ++- ++- // XActiveDataSink ++- virtual void SAL_CALL setInputStream( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& aStream ) ++- throw(::com::sun::star::uno::RuntimeException); ++- virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getInputStream( ) ++- throw(::com::sun::star::uno::RuntimeException); ++- ++- // XDataSinkEncrSupport ++- virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getDataStream() ++- throw ( ::com::sun::star::packages::WrongPasswordException, ++- ::com::sun::star::io::IOException, ++- ::com::sun::star::uno::RuntimeException ); ++- virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getRawStream() ++- throw ( ::com::sun::star::packages::NoEncryptionException, ++- ::com::sun::star::io::IOException, ++- ::com::sun::star::uno::RuntimeException ); ++- virtual void SAL_CALL setDataStream( ++- const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& aStream ) ++- throw ( ::com::sun::star::io::IOException, ++- ::com::sun::star::uno::RuntimeException ); ++- virtual void SAL_CALL setRawStream( ++- const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& aStream ) ++- throw ( ::com::sun::star::packages::EncryptionNotAllowedException, ++- ::com::sun::star::packages::NoRawFormatException, ++- ::com::sun::star::io::IOException, ++- ::com::sun::star::uno::RuntimeException ); ++- virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getPlainRawStream() ++- throw ( ::com::sun::star::io::IOException, ++- ::com::sun::star::uno::RuntimeException ); ++- ++- // XUnoTunnel ++- virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) ++- throw(::com::sun::star::uno::RuntimeException); ++- ++- // XPropertySet ++- virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) ++- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); ++- virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const ::rtl::OUString& PropertyName ) ++- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); ++- ++- // XServiceInfo ++- virtual ::rtl::OUString SAL_CALL getImplementationName( ) ++- throw (::com::sun::star::uno::RuntimeException); ++- virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) ++- throw (::com::sun::star::uno::RuntimeException); ++- virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) ++- throw (::com::sun::star::uno::RuntimeException); ++-}; ++-#endif ++- ++-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ++diff --git a/package/source/zippackage/zipfileaccess.cxx b/package/source/zippackage/zipfileaccess.cxx ++index d0dc59f..60b148a 100644 ++--- package/source/zippackage/zipfileaccess.cxx +++++ package/source/zippackage/zipfileaccess.cxx ++@@ -41,6 +41,7 @@ ++ #include ++ ++ #include +++#include ++ ++ #include ++ ++@@ -252,7 +253,7 @@ uno::Any SAL_CALL OZipFileAccess::getByName( const ::rtl::OUString& aName ) ++ throw container::NoSuchElementException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); ++ ++ uno::Reference< io::XInputStream > xEntryStream( m_pZipFile->getDataStream( (*aIter).second, ++- new EncryptionData(), +++ ::rtl::Reference< EncryptionData >(), ++ sal_False, ++ m_aMutexHolder ) ); ++ ++@@ -367,7 +368,7 @@ uno::Reference< io::XInputStream > SAL_CALL OZipFileAccess::getStreamByPattern( ++ if ( StringGoodForPattern_Impl( (*aIter).second.sPath, aPattern ) ) ++ { ++ uno::Reference< io::XInputStream > xEntryStream( m_pZipFile->getDataStream( (*aIter).second, ++- new EncryptionData(), +++ ::rtl::Reference< EncryptionData >(), ++ sal_False, ++ m_aMutexHolder ) ); ++ ++diff --git a/xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx b/xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx ++index b90052a..4e0ad63 100644 ++--- xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx +++++ xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx ++@@ -134,7 +134,7 @@ public: ++ ~DigitalSignaturesDialog(); ++ ++ // Initialize the dialog and the security environment, returns sal_True on success ++- sal_Bool Init( const rtl::OUString& rTokenName ); +++ sal_Bool Init(); ++ ++ // Set the storage which should be signed or verified ++ void SetStorage( const cssu::Reference < css::embed::XStorage >& rxStore ); ++diff --git a/xmlsecurity/inc/xmlsecurity/xmlsignaturehelper.hxx b/xmlsecurity/inc/xmlsecurity/xmlsignaturehelper.hxx ++index 7401f23..eae0ce8 100644 ++--- xmlsecurity/inc/xmlsecurity/xmlsignaturehelper.hxx +++++ xmlsecurity/inc/xmlsecurity/xmlsignaturehelper.hxx ++@@ -133,10 +133,9 @@ public: ++ XMLSignatureHelper(const com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >& mrCtx ); ++ ~XMLSignatureHelper(); ++ ++- // Initialize the security context with given crypto token. ++- // Empty string means default crypto token. +++ // Initialize the security context with default crypto token. ++ // Returns true for success. ++- bool Init( const rtl::OUString& rTokenPath ); +++ bool Init(); ++ ++ // Set UriBinding to create input streams to open files. ++ // Default implementation is capable to open files from disk. ++diff --git a/xmlsecurity/source/component/documentdigitalsignatures.cxx b/xmlsecurity/source/component/documentdigitalsignatures.cxx ++index 8032883..f53acb4 100644 ++--- xmlsecurity/source/component/documentdigitalsignatures.cxx +++++ xmlsecurity/source/component/documentdigitalsignatures.cxx ++@@ -221,7 +221,7 @@ sal_Bool DocumentDigitalSignatures::ImplViewSignatures( ++ sal_Bool bChanges = sal_False; ++ DigitalSignaturesDialog aSignaturesDialog( ++ NULL, mxCtx, eMode, bReadOnly, m_sODFVersion, m_bHasDocumentSignature); ++- bool bInit = aSignaturesDialog.Init( rtl::OUString() ); +++ bool bInit = aSignaturesDialog.Init(); ++ DBG_ASSERT( bInit, "Error initializing security context!" ); ++ if ( bInit ) ++ { ++@@ -277,7 +277,7 @@ DocumentDigitalSignatures::ImplVerifySignatures( ++ ++ XMLSignatureHelper aSignatureHelper( mxCtx ); ++ ++- bool bInit = aSignatureHelper.Init( rtl::OUString() ); +++ bool bInit = aSignatureHelper.Init(); ++ ++ DBG_ASSERT( bInit, "Error initializing security context!" ); ++ ++@@ -380,7 +380,7 @@ void DocumentDigitalSignatures::manageTrustedSources( ) throw (RuntimeException ++ Reference< dcss::xml::crypto::XSecurityEnvironment > xSecEnv; ++ ++ XMLSignatureHelper aSignatureHelper( mxCtx ); ++- if ( aSignatureHelper.Init( rtl::OUString() ) ) +++ if ( aSignatureHelper.Init() ) ++ xSecEnv = aSignatureHelper.GetSecurityEnvironment(); ++ ++ MacroSecurity aDlg( NULL, mxCtx, xSecEnv ); ++@@ -392,7 +392,7 @@ void DocumentDigitalSignatures::showCertificate( ++ { ++ XMLSignatureHelper aSignatureHelper( mxCtx ); ++ ++- bool bInit = aSignatureHelper.Init( rtl::OUString() ); +++ bool bInit = aSignatureHelper.Init(); ++ ++ DBG_ASSERT( bInit, "Error initializing security context!" ); ++ ++diff --git a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx ++index 8a45f41..17ab79c 100644 ++--- xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx +++++ xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx ++@@ -259,9 +259,9 @@ DigitalSignaturesDialog::~DigitalSignaturesDialog() ++ { ++ } ++ ++-sal_Bool DigitalSignaturesDialog::Init( const rtl::OUString& rTokenName ) +++sal_Bool DigitalSignaturesDialog::Init() ++ { ++- bool bInit = maSignatureHelper.Init( rTokenName ); +++ bool bInit = maSignatureHelper.Init(); ++ ++ DBG_ASSERT( bInit, "Error initializing security context!" ); ++ ++diff --git a/xmlsecurity/source/helper/xmlsignaturehelper.cxx b/xmlsecurity/source/helper/xmlsignaturehelper.cxx ++index 7673bd2..0959e11 100644 ++--- xmlsecurity/source/helper/xmlsignaturehelper.cxx +++++ xmlsecurity/source/helper/xmlsignaturehelper.cxx ++@@ -70,11 +70,9 @@ XMLSignatureHelper::XMLSignatureHelper( const uno::Reference< uno::XComponentCon ++ ++ XMLSignatureHelper::~XMLSignatureHelper() ++ { ++- if ( mxSEInitializer.is() && mxSecurityContext.is() ) ++- mxSEInitializer->freeSecurityContext( mxSecurityContext ); ++ } ++ ++-bool XMLSignatureHelper::Init( const rtl::OUString& rTokenPath ) +++bool XMLSignatureHelper::Init() ++ { ++ DBG_ASSERT( !mxSEInitializer.is(), "XMLSignatureHelper::Init - mxSEInitializer already set!" ); ++ DBG_ASSERT( !mxSecurityContext.is(), "XMLSignatureHelper::Init - mxSecurityContext already set!" ); ++@@ -82,7 +80,7 @@ bool XMLSignatureHelper::Init( const rtl::OUString& rTokenPath ) ++ ImplCreateSEInitializer(); ++ ++ if ( mxSEInitializer.is() ) ++- mxSecurityContext = mxSEInitializer->createSecurityContext( rTokenPath ); +++ mxSecurityContext = mxSEInitializer->createSecurityContext( ::rtl::OUString() ); ++ ++ return mxSecurityContext.is(); ++ } ++diff --git a/xmlsecurity/source/xmlsec/makefile.mk b/xmlsecurity/source/xmlsec/makefile.mk ++index 44b668b..36b30f4 100644 ++--- xmlsecurity/source/xmlsec/makefile.mk +++++ xmlsecurity/source/xmlsec/makefile.mk ++@@ -49,11 +49,11 @@ CFLAGS+=-DSYSTEM_LIBXML $(LIBXML_CFLAGS) ++ .ENDIF ++ ++ .IF "$(CRYPTO_ENGINE)" == "mscrypto" ++-CDEFS += -DXMLSEC_CRYPTO_MSCRYPTO -DXMLSEC_NO_XSLT ++-.ELSE ++-CDEFS += -DXMLSEC_CRYPTO_NSS -DXMLSEC_NO_XSLT +++CDEFS += -DXMLSEC_CRYPTO_MSCRYPTO ++ .ENDIF ++ +++CDEFS += -DXMLSEC_NO_XSLT +++ ++ # --- Files -------------------------------------------------------- ++ SLOFILES = \ ++ $(SLO)$/biginteger.obj \ ++diff --git a/xmlsecurity/source/xmlsec/nss/ciphercontext.cxx b/xmlsecurity/source/xmlsec/nss/ciphercontext.cxx ++new file mode 100644 ++index 0000000..93a17e3 ++--- /dev/null +++++ xmlsecurity/source/xmlsec/nss/ciphercontext.cxx ++@@ -0,0 +1,276 @@ +++ /************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#include +++ +++#include +++#include +++#include +++ +++#include "ciphercontext.hxx" +++ +++using namespace ::com::sun::star; +++ +++uno::Reference< xml::crypto::XCipherContext > OCipherContext::Create( CK_MECHANISM_TYPE nNSSCipherID, const uno::Sequence< ::sal_Int8 >& aKey, const uno::Sequence< ::sal_Int8 >& aInitializationVector, bool bEncryption, bool bW3CPadding ) +++{ +++ ::rtl::Reference< OCipherContext > xResult = new OCipherContext; +++ +++ xResult->m_pSlot = PK11_GetBestSlot( nNSSCipherID, NULL ); +++ if ( xResult->m_pSlot ) +++ { +++ SECItem aKeyItem = { siBuffer, const_cast< unsigned char* >( reinterpret_cast< const unsigned char* >( aKey.getConstArray() ) ), aKey.getLength() }; +++ xResult->m_pSymKey = PK11_ImportSymKey( xResult->m_pSlot, nNSSCipherID, PK11_OriginDerive, bEncryption ? CKA_ENCRYPT : CKA_DECRYPT, &aKeyItem, NULL ); +++ if ( xResult->m_pSymKey ) +++ { +++ SECItem aIVItem = { siBuffer, const_cast< unsigned char* >( reinterpret_cast< const unsigned char* >( aInitializationVector.getConstArray() ) ), aInitializationVector.getLength() }; +++ xResult->m_pSecParam = PK11_ParamFromIV( nNSSCipherID, &aIVItem ); +++ if ( xResult->m_pSecParam ) +++ { +++ xResult->m_pContext = PK11_CreateContextBySymKey( nNSSCipherID, bEncryption ? CKA_ENCRYPT : CKA_DECRYPT, xResult->m_pSymKey, xResult->m_pSecParam); +++ if ( xResult->m_pContext ) +++ { +++ xResult->m_bEncryption = bEncryption; +++ xResult->m_bW3CPadding = bW3CPadding; +++ xResult->m_bPadding = bW3CPadding || ( PK11_GetPadMechanism( nNSSCipherID ) == nNSSCipherID ); +++ xResult->m_nBlockSize = PK11_GetBlockSize( nNSSCipherID, xResult->m_pSecParam ); +++ if ( xResult->m_nBlockSize <= SAL_MAX_INT8 ) +++ return xResult.get(); +++ } +++ } +++ } +++ } +++ +++ return uno::Reference< xml::crypto::XCipherContext >(); +++} +++ +++void OCipherContext::Dispose() +++{ +++ ::osl::MutexGuard aGuard( m_aMutex ); +++ +++ if ( m_pContext ) +++ { +++ PK11_DestroyContext( m_pContext, PR_TRUE ); +++ m_pContext = NULL; +++ } +++ +++ if ( m_pSecParam ) +++ { +++ SECITEM_FreeItem( m_pSecParam, PR_TRUE ); +++ m_pSecParam = NULL; +++ } +++ +++ if ( m_pSymKey ) +++ { +++ PK11_FreeSymKey( m_pSymKey ); +++ m_pSymKey = NULL; +++ } +++ +++ if ( m_pSlot ) +++ { +++ PK11_FreeSlot( m_pSlot ); +++ m_pSlot = NULL; +++ } +++ +++ m_bDisposed = true; +++} +++ +++uno::Sequence< ::sal_Int8 > SAL_CALL OCipherContext::convertWithCipherContext( const uno::Sequence< ::sal_Int8 >& aData ) +++ throw ( lang::IllegalArgumentException, lang::DisposedException, uno::RuntimeException) +++{ +++ ::osl::MutexGuard aGuard( m_aMutex ); +++ +++ if ( m_bBroken ) +++ throw uno::RuntimeException(); +++ +++ if ( m_bDisposed ) +++ throw lang::DisposedException(); +++ +++ uno::Sequence< sal_Int8 > aToConvert; +++ if ( aData.getLength() ) +++ { +++ sal_Int32 nOldLastBlockLen = m_aLastBlock.getLength(); +++ OSL_ENSURE( nOldLastBlockLen <= m_nBlockSize, "Unexpected last block size!" ); +++ +++ sal_Int32 nAvailableData = nOldLastBlockLen + aData.getLength(); +++ sal_Int32 nToConvertLen = nAvailableData; +++ if ( m_bEncryption || !m_bW3CPadding ) +++ { +++ if ( nAvailableData % m_nBlockSize == 0 ) +++ nToConvertLen = nAvailableData; +++ else if ( nAvailableData < m_nBlockSize ) +++ nToConvertLen = 0; +++ else +++ nToConvertLen = nAvailableData - nAvailableData % m_nBlockSize; +++ } +++ else +++ { +++ // decryption with W3C padding needs at least one block for finalizing +++ if ( nAvailableData < m_nBlockSize * 2 ) +++ nToConvertLen = 0; +++ else +++ nToConvertLen = nAvailableData - nAvailableData % m_nBlockSize - m_nBlockSize; +++ } +++ +++ aToConvert.realloc( nToConvertLen ); +++ if ( nToConvertLen == 0 ) +++ { +++ m_aLastBlock.realloc( nOldLastBlockLen + aData.getLength() ); +++ rtl_copyMemory( m_aLastBlock.getArray() + nOldLastBlockLen, aData.getConstArray(), aData.getLength() ); +++ // aToConvert stays empty +++ } +++ else if ( nToConvertLen < nOldLastBlockLen ) +++ { +++ rtl_copyMemory( aToConvert.getArray(), m_aLastBlock.getConstArray(), nToConvertLen ); +++ rtl_copyMemory( m_aLastBlock.getArray(), m_aLastBlock.getConstArray() + nToConvertLen, nOldLastBlockLen - nToConvertLen ); +++ m_aLastBlock.realloc( nOldLastBlockLen - nToConvertLen + aData.getLength() ); +++ rtl_copyMemory( m_aLastBlock.getArray() + nOldLastBlockLen - nToConvertLen, aData.getConstArray(), aData.getLength() ); +++ } +++ else +++ { +++ rtl_copyMemory( aToConvert.getArray(), m_aLastBlock.getConstArray(), nOldLastBlockLen ); +++ if ( nToConvertLen > nOldLastBlockLen ) +++ rtl_copyMemory( aToConvert.getArray() + nOldLastBlockLen, aData.getConstArray(), nToConvertLen - nOldLastBlockLen ); +++ m_aLastBlock.realloc( nAvailableData - nToConvertLen ); +++ rtl_copyMemory( m_aLastBlock.getArray(), aData.getConstArray() + nToConvertLen - nOldLastBlockLen, nAvailableData - nToConvertLen ); +++ } +++ } +++ +++ uno::Sequence< sal_Int8 > aResult; +++ OSL_ENSURE( aToConvert.getLength() % m_nBlockSize == 0, "Unexpected size of the data to encrypt!" ); +++ if ( aToConvert.getLength() ) +++ { +++ int nResultLen = 0; +++ aResult.realloc( aToConvert.getLength() + m_nBlockSize ); +++ if ( PK11_CipherOp( m_pContext, reinterpret_cast< unsigned char* >( aResult.getArray() ), &nResultLen, aResult.getLength(), const_cast< unsigned char* >( reinterpret_cast< const unsigned char* >( aToConvert.getConstArray() ) ), aToConvert.getLength() ) != SECSuccess ) +++ { +++ m_bBroken = true; +++ Dispose(); +++ throw uno::RuntimeException(); +++ } +++ +++ m_nConverted += aToConvert.getLength(); +++ aResult.realloc( nResultLen ); +++ } +++ +++ return aResult; +++} +++ +++uno::Sequence< ::sal_Int8 > SAL_CALL OCipherContext::finalizeCipherContextAndDispose() +++ throw (lang::DisposedException, uno::RuntimeException) +++{ +++ ::osl::MutexGuard aGuard( m_aMutex ); +++ +++ if ( m_bBroken ) +++ throw uno::RuntimeException(); +++ +++ if ( m_bDisposed ) +++ throw lang::DisposedException(); +++ +++ OSL_ENSURE( m_nBlockSize <= SAL_MAX_INT8, "Unexpected block size!" ); +++ OSL_ENSURE( m_nConverted % m_nBlockSize == 0, "Unexpected amount of bytes is already converted!" ); +++ sal_Int32 nSizeForPadding = ( m_nConverted + m_aLastBlock.getLength() ) % m_nBlockSize; +++ +++ // if it is decryption, the amount of data should be rounded to the block size even in case of padding +++ if ( ( !m_bPadding || !m_bEncryption ) && nSizeForPadding ) +++ throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "The data should contain complete blocks only." ) ), uno::Reference< uno::XInterface >() ); +++ +++ if ( m_bW3CPadding && m_bEncryption ) +++ { +++ // in this case the last block should be smaller than standtard block +++ // it will be increased with the padding +++ OSL_ENSURE( m_aLastBlock.getLength() < m_nBlockSize, "Unexpected size of cashed incomplete last block!" ); +++ +++ // W3CPadding handling for encryption +++ sal_Int32 nPaddingSize = m_nBlockSize - nSizeForPadding; +++ sal_Int32 nOldLastBlockLen = m_aLastBlock.getLength(); +++ m_aLastBlock.realloc( nOldLastBlockLen + nPaddingSize ); +++ +++ if ( nPaddingSize > 1 ) +++ { +++ TimeValue aTime; +++ osl_getSystemTime( &aTime ); +++ rtlRandomPool aRandomPool = rtl_random_createPool(); +++ rtl_random_addBytes( aRandomPool, &aTime, 8 ); +++ rtl_random_getBytes( aRandomPool, m_aLastBlock.getArray() + nOldLastBlockLen, nPaddingSize - 1 ); +++ rtl_random_destroyPool ( aRandomPool ); +++ } +++ m_aLastBlock[m_aLastBlock.getLength() - 1] = static_cast< sal_Int8 >( nPaddingSize ); +++ } +++ +++ // finally should the last block be smaller than two standard blocks +++ OSL_ENSURE( m_aLastBlock.getLength() < m_nBlockSize * 2 , "Unexpected size of cashed incomplete last block!" ); +++ +++ uno::Sequence< sal_Int8 > aResult; +++ if ( m_aLastBlock.getLength() ) +++ { +++ int nPrefResLen = 0; +++ aResult.realloc( m_aLastBlock.getLength() + m_nBlockSize ); +++ if ( PK11_CipherOp( m_pContext, reinterpret_cast< unsigned char* >( aResult.getArray() ), &nPrefResLen, aResult.getLength(), const_cast< unsigned char* >( reinterpret_cast< const unsigned char* >( m_aLastBlock.getConstArray() ) ), m_aLastBlock.getLength() ) != SECSuccess ) +++ { +++ m_bBroken = true; +++ Dispose(); +++ throw uno::RuntimeException(); +++ } +++ +++ aResult.realloc( nPrefResLen ); +++ m_aLastBlock.realloc( 0 ); +++ } +++ +++ sal_Int32 nPrefixLen = aResult.getLength(); +++ aResult.realloc( nPrefixLen + m_nBlockSize * 2 ); +++ unsigned nFinalLen = 0; +++ if ( PK11_DigestFinal( m_pContext, reinterpret_cast< unsigned char* >( aResult.getArray() + nPrefixLen ), &nFinalLen, aResult.getLength() - nPrefixLen ) != SECSuccess ) +++ { +++ m_bBroken = true; +++ Dispose(); +++ throw uno::RuntimeException(); +++ } +++ +++ aResult.realloc( nPrefixLen + nFinalLen ); +++ +++ if ( m_bW3CPadding && !m_bEncryption ) +++ { +++ // W3CPadding handling for decryption +++ // aResult should have anough data, since we let m_aLastBlock be big enough in case of decryption +++ OSL_ENSURE( aResult.getLength() >= m_nBlockSize, "Not enough data to handle the padding!" ); +++ +++ sal_Int8 nBytesToRemove = aResult[aResult.getLength() - 1]; +++ if ( nBytesToRemove <= 0 || nBytesToRemove > aResult.getLength() ) +++ { +++ m_bBroken = true; +++ Dispose(); +++ throw uno::RuntimeException(); +++ } +++ +++ aResult.realloc( aResult.getLength() - nBytesToRemove ); +++ } +++ +++ Dispose(); +++ +++ return aResult; +++} +++ ++diff --git a/xmlsecurity/source/xmlsec/nss/ciphercontext.hxx b/xmlsecurity/source/xmlsec/nss/ciphercontext.hxx ++new file mode 100644 ++index 0000000..1574a62 ++--- /dev/null +++++ xmlsecurity/source/xmlsec/nss/ciphercontext.hxx ++@@ -0,0 +1,89 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _CIPHERCONTEXT_HXX +++#define _CIPHERCONTEXT_HXX +++ +++#include +++ +++#include +++#include +++#include +++ +++class OCipherContext : public cppu::WeakImplHelper1< ::com::sun::star::xml::crypto::XCipherContext > +++{ +++private: +++ ::osl::Mutex m_aMutex; +++ +++ PK11SlotInfo* m_pSlot; +++ PK11SymKey* m_pSymKey; +++ SECItem* m_pSecParam; +++ PK11Context* m_pContext; +++ +++ sal_Int32 m_nBlockSize; +++ ::com::sun::star::uno::Sequence< sal_Int8 > m_aLastBlock; +++ +++ bool m_bEncryption; +++ bool m_bPadding; +++ bool m_bW3CPadding; +++ sal_Int64 m_nConverted; +++ +++ bool m_bDisposed; +++ bool m_bBroken; +++ +++ void Dispose(); +++ +++ OCipherContext() +++ : m_pSlot( NULL ) +++ , m_pSymKey( NULL ) +++ , m_pSecParam( NULL ) +++ , m_pContext( NULL ) +++ , m_nBlockSize( 0 ) +++ , m_bEncryption( false ) +++ , m_bPadding( false ) +++ , m_bW3CPadding( false ) +++ , m_nConverted( 0 ) +++ , m_bDisposed( false ) +++ , m_bBroken( false ) +++ {} +++ +++public: +++ +++ virtual ~OCipherContext() +++ { +++ Dispose(); +++ } +++ +++ static ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XCipherContext > Create( CK_MECHANISM_TYPE nNSSCipherID, const ::com::sun::star::uno::Sequence< ::sal_Int8 >& aKey, const ::com::sun::star::uno::Sequence< ::sal_Int8 >& aInitializationVector, bool bEncryption, bool bW3CPadding ); +++ +++ // XCipherContext +++ virtual ::com::sun::star::uno::Sequence< ::sal_Int8 > SAL_CALL convertWithCipherContext( const ::com::sun::star::uno::Sequence< ::sal_Int8 >& aData ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::DisposedException, ::com::sun::star::uno::RuntimeException); +++ virtual ::com::sun::star::uno::Sequence< ::sal_Int8 > SAL_CALL finalizeCipherContextAndDispose( ) throw (::com::sun::star::lang::DisposedException, ::com::sun::star::uno::RuntimeException); +++}; +++ +++#endif +++ ++diff --git a/xmlsecurity/source/xmlsec/nss/digestcontext.cxx b/xmlsecurity/source/xmlsec/nss/digestcontext.cxx ++new file mode 100644 ++index 0000000..4b3a0d0 ++--- /dev/null +++++ xmlsecurity/source/xmlsec/nss/digestcontext.cxx ++@@ -0,0 +1,101 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#include +++ +++#include +++#include "digestcontext.hxx" +++ +++using namespace ::com::sun::star; +++ +++ODigestContext::~ODigestContext() +++{ +++ if ( m_pContext ) +++ { +++ PK11_DestroyContext( m_pContext, PR_TRUE ); +++ m_pContext = NULL; +++ } +++} +++ +++void SAL_CALL ODigestContext::updateDigest( const uno::Sequence< ::sal_Int8 >& aData ) +++ throw (lang::DisposedException, uno::RuntimeException) +++{ +++ ::osl::MutexGuard aGuard( m_aMutex ); +++ +++ if ( m_bBroken ) +++ throw uno::RuntimeException(); +++ +++ if ( m_bDisposed ) +++ throw lang::DisposedException(); +++ +++ if ( !m_b1KData || m_nDigested < 1024 ) +++ { +++ uno::Sequence< sal_Int8 > aToDigest = aData; +++ if ( m_b1KData && m_nDigested + aData.getLength() > 1024 ) +++ aToDigest.realloc( 1024 - m_nDigested ); +++ +++ if ( PK11_DigestOp( m_pContext, reinterpret_cast< const unsigned char* >( aToDigest.getConstArray() ), aToDigest.getLength() ) != SECSuccess ) +++ { +++ PK11_DestroyContext( m_pContext, PR_TRUE ); +++ m_pContext = NULL; +++ m_bBroken = true; +++ throw uno::RuntimeException(); +++ } +++ +++ m_nDigested += aToDigest.getLength(); +++ } +++} +++ +++uno::Sequence< ::sal_Int8 > SAL_CALL ODigestContext::finalizeDigestAndDispose() +++ throw (lang::DisposedException, uno::RuntimeException) +++{ +++ ::osl::MutexGuard aGuard( m_aMutex ); +++ +++ if ( m_bBroken ) +++ throw uno::RuntimeException(); +++ +++ if ( m_bDisposed ) +++ throw lang::DisposedException(); +++ +++ uno::Sequence< sal_Int8 > aResult( m_nDigestLength ); +++ unsigned int nResultLen = 0; +++ if ( PK11_DigestFinal( m_pContext, reinterpret_cast< unsigned char* >( aResult.getArray() ), &nResultLen, aResult.getLength() ) != SECSuccess ) +++ { +++ PK11_DestroyContext( m_pContext, PR_TRUE ); +++ m_pContext = NULL; +++ m_bBroken = true; +++ throw uno::RuntimeException(); +++ } +++ +++ PK11_DestroyContext( m_pContext, PR_TRUE ); +++ m_pContext = NULL; +++ m_bDisposed = true; +++ +++ aResult.realloc( nResultLen ); +++ return aResult; +++} +++ ++diff --git a/xmlsecurity/source/xmlsec/nss/digestcontext.hxx b/xmlsecurity/source/xmlsec/nss/digestcontext.hxx ++new file mode 100644 ++index 0000000..8f9ef47 ++--- /dev/null +++++ xmlsecurity/source/xmlsec/nss/digestcontext.hxx ++@@ -0,0 +1,68 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _DIGESTCONTEXT_HXX +++#define _DIGESTCONTEXT_HXX +++ +++#include +++ +++#include +++#include +++ +++class ODigestContext : public cppu::WeakImplHelper1< ::com::sun::star::xml::crypto::XDigestContext > +++{ +++private: +++ ::osl::Mutex m_aMutex; +++ +++ PK11Context* m_pContext; +++ sal_Int32 m_nDigestLength; +++ bool m_b1KData; +++ sal_Int32 m_nDigested; +++ +++ bool m_bDisposed; +++ bool m_bBroken; +++ +++public: +++ ODigestContext( PK11Context* pContext, sal_Int32 nDigestLength, bool b1KData ) +++ : m_pContext( pContext ) +++ , m_nDigestLength( nDigestLength ) +++ , m_b1KData( b1KData ) +++ , m_nDigested( 0 ) +++ , m_bDisposed( false ) +++ , m_bBroken( false ) +++ {} +++ +++ virtual ~ODigestContext(); +++ +++ +++ // XDigestContext +++ virtual void SAL_CALL updateDigest( const ::com::sun::star::uno::Sequence< ::sal_Int8 >& aData ) throw (::com::sun::star::lang::DisposedException, ::com::sun::star::uno::RuntimeException); +++ virtual ::com::sun::star::uno::Sequence< ::sal_Int8 > SAL_CALL finalizeDigestAndDispose() throw (::com::sun::star::lang::DisposedException, ::com::sun::star::uno::RuntimeException); +++}; +++ +++#endif +++ ++diff --git a/xmlsecurity/source/xmlsec/nss/makefile.mk b/xmlsecurity/source/xmlsec/nss/makefile.mk ++index de6a059..0875de9 100644 ++--- xmlsecurity/source/xmlsec/nss/makefile.mk +++++ xmlsecurity/source/xmlsec/nss/makefile.mk ++@@ -41,12 +41,6 @@ ENABLE_EXCEPTIONS = TRUE ++ CFLAGS+=-DSYSTEM_LIBXML $(LIBXML_CFLAGS) ++ .ENDIF ++ ++-.IF "$(CRYPTO_ENGINE)" != "nss" ++-LIBTARGET=NO ++-.ENDIF ++- ++-.IF "$(CRYPTO_ENGINE)" == "nss" ++- ++ .IF "$(WITH_MOZILLA)" == "NO" || "$(ENABLE_NSS_MODULE)"!="YES" ++ .IF "$(SYSTEM_MOZILLA)" != "YES" ++ @all: ++@@ -93,7 +87,11 @@ $(MOZ_INC)$/profile \ ++ -I$(MOZ_INC)$/embed_base ++ .ENDIF ++ ++-CDEFS += -DXMLSEC_CRYPTO_NSS -DXMLSEC_NO_XSLT +++.IF "$(CRYPTO_ENGINE)" == "nss" +++CDEFS += -DXMLSEC_CRYPTO_NSS +++.ENDIF +++ +++CDEFS += -DXMLSEC_NO_XSLT ++ ++ # --- Files -------------------------------------------------------- ++ ++@@ -109,13 +107,19 @@ SOLARINC += -I$(NSS_INC) ++ .ENDIF ++ ++ SLOFILES = \ +++ $(SLO)$/nssinitializer.obj \ +++ $(SLO)$/digestcontext.obj \ +++ $(SLO)$/ciphercontext.obj \ +++ $(SLO)$/xsec_nss.obj +++ +++.IF "$(CRYPTO_ENGINE)" == "nss" +++SLOFILES += \ ++ $(SLO)$/securityenvironment_nssimpl.obj \ ++ $(SLO)$/xmlencryption_nssimpl.obj \ ++ $(SLO)$/xmlsecuritycontext_nssimpl.obj \ ++ $(SLO)$/xmlsignature_nssimpl.obj \ ++ $(SLO)$/x509certificate_nssimpl.obj \ ++ $(SLO)$/seinitializer_nssimpl.obj \ ++- $(SLO)$/xsec_nss.obj \ ++ $(SLO)$/secerror.obj ++ ++ ++diff --git a/xmlsecurity/source/xmlsec/nss/nssinitializer.cxx b/xmlsecurity/source/xmlsec/nss/nssinitializer.cxx ++new file mode 100644 ++index 0000000..ded3295 ++--- /dev/null +++++ xmlsecurity/source/xmlsec/nss/nssinitializer.cxx ++@@ -0,0 +1,521 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++// MARKER(update_precomp.py): autogen include statement, do not remove +++#include "precompiled_xmlsecurity.hxx" +++ +++/* +++ * Turn off DEBUG Assertions +++ */ +++#ifdef _DEBUG +++ #define _DEBUG_WAS_DEFINED _DEBUG +++ #undef _DEBUG +++#else +++ #undef _DEBUG_WAS_DEFINED +++#endif +++ +++/* +++ * and turn off the additional virtual methods which are part of some interfaces when compiled +++ * with debug +++ */ +++#ifdef DEBUG +++ #define DEBUG_WAS_DEFINED DEBUG +++ #undef DEBUG +++#else +++ #undef DEBUG_WAS_DEFINED +++#endif +++ +++ +++#include +++#include +++#include +++ +++#include +++#include +++#include +++#include +++#include +++#include +++#include +++#include +++#include +++ +++#include "seinitializer_nssimpl.hxx" +++#include "../diagnose.hxx" +++ +++#include "securityenvironment_nssimpl.hxx" +++#include "digestcontext.hxx" +++#include "ciphercontext.hxx" +++ +++#include +++#include +++#include +++#include +++#include +++#include +++ +++ +++namespace css = ::com::sun::star; +++namespace cssu = css::uno; +++namespace cssl = css::lang; +++namespace cssxc = css::xml::crypto; +++ +++using namespace xmlsecurity; +++using namespace com::sun::star; +++using ::rtl::OUString; +++using ::rtl::OString; +++ +++#define IMPLEMENTATION_NAME "com.sun.star.xml.security.bridge.xmlsec.NSSInitializer_NssImpl" +++ +++#define ROOT_CERTS "Root Certs for OpenOffice.org" +++ +++extern "C" void nsscrypto_finalize(); +++ +++ +++namespace +++{ +++ +++bool nsscrypto_initialize( const css::uno::Reference< css::lang::XMultiServiceFactory > &xMSF, bool & out_nss_init ); +++ +++struct InitNSSInitialize +++{ +++ css::uno::Reference< css::lang::XMultiServiceFactory > mxMSF; +++ +++ InitNSSInitialize( const css::uno::Reference< css::lang::XMultiServiceFactory > &xMSF ) +++ : mxMSF( xMSF ) +++ { +++ } +++ +++ bool * operator()() +++ { +++ static bool bInitialized = false; +++ bool bNSSInit = false; +++ bInitialized = nsscrypto_initialize( mxMSF, bNSSInit ); +++ if (bNSSInit) +++ atexit(nsscrypto_finalize ); +++ return & bInitialized; +++ } +++}; +++ +++struct GetNSSInitStaticMutex +++{ +++ ::osl::Mutex* operator()() +++ { +++ static ::osl::Mutex aNSSInitMutex; +++ return &aNSSInitMutex; +++ } +++}; +++ +++void deleteRootsModule() +++{ +++ SECMODModule *RootsModule = 0; +++ SECMODModuleList *list = SECMOD_GetDefaultModuleList(); +++ SECMODListLock *lock = SECMOD_GetDefaultModuleListLock(); +++ SECMOD_GetReadLock(lock); +++ +++ while (!RootsModule && list) +++ { +++ SECMODModule *module = list->module; +++ +++ for (int i=0; i < module->slotCount; i++) +++ { +++ PK11SlotInfo *slot = module->slots[i]; +++ if (PK11_IsPresent(slot)) +++ { +++ if (PK11_HasRootCerts(slot)) +++ { +++ xmlsec_trace("The root certifificates module \"%s" +++ "\" is already loaded: \n%s", +++ module->commonName, module->dllName); +++ +++ RootsModule = SECMOD_ReferenceModule(module); +++ break; +++ } +++ } +++ } +++ list = list->next; +++ } +++ SECMOD_ReleaseReadLock(lock); +++ +++ if (RootsModule) +++ { +++ PRInt32 modType; +++ if (SECSuccess == SECMOD_DeleteModule(RootsModule->commonName, &modType)) +++ { +++ xmlsec_trace("Deleted module \"%s\".", RootsModule->commonName); +++ } +++ else +++ { +++ xmlsec_trace("Failed to delete \"%s\" : \n%s", +++ RootsModule->commonName, RootsModule->dllName); +++ } +++ SECMOD_DestroyModule(RootsModule); +++ RootsModule = 0; +++ } +++} +++ +++::rtl::OString getMozillaCurrentProfile( const css::uno::Reference< css::lang::XMultiServiceFactory > &rxMSF ) +++{ +++ ::rtl::OString sResult; +++ // first, try to get the profile from "MOZILLA_CERTIFICATE_FOLDER" +++ char* pEnv = getenv( "MOZILLA_CERTIFICATE_FOLDER" ); +++ if ( pEnv ) +++ { +++ sResult = ::rtl::OString( pEnv ); +++ RTL_LOGFILE_PRODUCT_TRACE1( "XMLSEC: Using env MOZILLA_CERTIFICATE_FOLDER: %s", sResult.getStr() ); +++ } +++ else +++ { +++ mozilla::MozillaProductType productTypes[4] = { +++ mozilla::MozillaProductType_Thunderbird, +++ mozilla::MozillaProductType_Mozilla, +++ mozilla::MozillaProductType_Firefox, +++ mozilla::MozillaProductType_Default }; +++ int nProduct = 4; +++ +++ uno::Reference xInstance = rxMSF->createInstance( +++ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.mozilla.MozillaBootstrap")) ); +++ OSL_ENSURE( xInstance.is(), "failed to create instance" ); +++ +++ uno::Reference xMozillaBootstrap +++ = uno::Reference(xInstance,uno::UNO_QUERY); +++ OSL_ENSURE( xMozillaBootstrap.is(), "failed to create instance" ); +++ +++ if (xMozillaBootstrap.is()) +++ { +++ for (int i=0; igetDefaultProfile(productTypes[i]); +++ +++ if (profile != NULL && profile.getLength()>0) +++ { +++ ::rtl::OUString sProfilePath = xMozillaBootstrap->getProfilePath( productTypes[i], profile ); +++ sResult = ::rtl::OUStringToOString( sProfilePath, osl_getThreadTextEncoding() ); +++ RTL_LOGFILE_PRODUCT_TRACE1( "XMLSEC: Using Mozilla Profile: %s", sResult.getStr() ); +++ } +++ } +++ } +++ +++ RTL_LOGFILE_PRODUCT_TRACE( "XMLSEC: No Mozilla Profile found!" ); +++ } +++ +++ return sResult; +++} +++ +++//Older versions of Firefox (FF), for example FF2, and Thunderbird (TB) 2 write +++//the roots certificate module (libnssckbi.so), which they use, into the +++//profile. This module will then already be loaded during NSS_Init (and the +++//other init functions). This fails in two cases. First, FF3 was used to create +++//the profile, or possibly used that profile before, and second the profile was +++//used on a different platform. +++// +++//Then one needs to add the roots module oneself. This should be done with +++//SECMOD_LoadUserModule rather then SECMOD_AddNewModule. The latter would write +++//the location of the roots module to the profile, which makes FF2 and TB2 use +++//it instead of there own module. +++// +++//When using SYSTEM_MOZILLA then the libnss3.so lib is typically found in +++///usr/lib. This folder may, however, NOT contain the roots certificate +++//module. That is, just providing the library name in SECMOD_LoadUserModule or +++//SECMOD_AddNewModule will FAIL to load the mozilla unless the LD_LIBRARY_PATH +++//contains an FF or TB installation. +++//ATTENTION: DO NOT call this function directly instead use initNSS +++//return true - whole initialization was successful +++//param out_nss_init = true: at least the NSS initialization (NSS_InitReadWrite +++//was successful and therefor NSS_Shutdown should be called when terminating. +++bool nsscrypto_initialize( const css::uno::Reference< css::lang::XMultiServiceFactory > &xMSF, bool & out_nss_init ) +++{ +++ bool return_value = true; +++ +++ // this method must be called only once, no need for additional lock +++ rtl::OString sCertDir; +++ +++ (void) xMSF; +++#ifdef XMLSEC_CRYPTO_NSS +++ if ( xMSF.is() ) +++ sCertDir = getMozillaCurrentProfile( xMSF ); +++#endif +++ xmlsec_trace( "Using profile: %s", sCertDir.getStr() ); +++ +++ PR_Init( PR_USER_THREAD, PR_PRIORITY_NORMAL, 1 ) ; +++ +++ // there might be no profile +++ if ( sCertDir.getLength() > 0 ) +++ { +++ if( NSS_InitReadWrite( sCertDir.getStr() ) != SECSuccess ) +++ { +++ xmlsec_trace("Initializing NSS with profile failed."); +++ char * error = NULL; +++ +++ PR_GetErrorText(error); +++ if (error) +++ xmlsec_trace("%s",error); +++ return false ; +++ } +++ } +++ else +++ { +++ xmlsec_trace("Initializing NSS without profile."); +++ if ( NSS_NoDB_Init(NULL) != SECSuccess ) +++ { +++ xmlsec_trace("Initializing NSS without profile failed."); +++ char * error = NULL; +++ PR_GetErrorText(error); +++ if (error) +++ xmlsec_trace("%s",error); +++ return false ; +++ } +++ } +++ out_nss_init = true; +++ +++#ifdef XMLSEC_CRYPTO_NSS +++#if defined SYSTEM_MOZILLA +++ if (!SECMOD_HasRootCerts()) +++ { +++#endif +++ deleteRootsModule(); +++ +++#if defined SYSTEM_MOZILLA +++ OUString rootModule(RTL_CONSTASCII_USTRINGPARAM("libnssckbi"SAL_DLLEXTENSION)); +++#else +++ OUString rootModule(RTL_CONSTASCII_USTRINGPARAM("${OOO_BASE_DIR}/program/libnssckbi"SAL_DLLEXTENSION)); +++#endif +++ ::rtl::Bootstrap::expandMacros(rootModule); +++ +++ OUString rootModulePath; +++ if (::osl::File::E_None == ::osl::File::getSystemPathFromFileURL(rootModule, rootModulePath)) +++ { +++ ::rtl::OString ospath = ::rtl::OUStringToOString(rootModulePath, osl_getThreadTextEncoding()); +++ ::rtl::OStringBuffer pkcs11moduleSpec; +++ pkcs11moduleSpec.append("name=\""); +++ pkcs11moduleSpec.append(ROOT_CERTS); +++ pkcs11moduleSpec.append("\" library=\""); +++ pkcs11moduleSpec.append(ospath.getStr()); +++ pkcs11moduleSpec.append("\""); +++ +++ SECMODModule * RootsModule = +++ SECMOD_LoadUserModule( +++ const_cast(pkcs11moduleSpec.makeStringAndClear().getStr()), +++ 0, // no parent +++ PR_FALSE); // do not recurse +++ +++ if (RootsModule) +++ { +++ +++ bool found = RootsModule->loaded; +++ +++ SECMOD_DestroyModule(RootsModule); +++ RootsModule = 0; +++ if (found) +++ xmlsec_trace("Added new root certificate module " +++ "\""ROOT_CERTS"\" contained in \n%s", ospath.getStr()); +++ else +++ { +++ xmlsec_trace("FAILED to load the new root certificate module " +++ "\""ROOT_CERTS"\" contained in \n%s", ospath.getStr()); +++ return_value = false; +++ } +++ } +++ else +++ { +++ xmlsec_trace("FAILED to add new root certifice module: " +++ "\""ROOT_CERTS"\" contained in \n%s", ospath.getStr()); +++ return_value = false; +++ +++ } +++ } +++ else +++ { +++ xmlsec_trace("Adding new root certificate module failed."); +++ return_value = false; +++ } +++#if SYSTEM_MOZILLA +++ } +++#endif +++#endif +++ +++ return return_value; +++} +++ +++ +++// must be extern "C" because we pass the function pointer to atexit +++extern "C" void nsscrypto_finalize() +++{ +++ SECMODModule *RootsModule = SECMOD_FindModule(ROOT_CERTS); +++ +++ if (RootsModule) +++ { +++ +++ if (SECSuccess == SECMOD_UnloadUserModule(RootsModule)) +++ { +++ xmlsec_trace("Unloaded module \""ROOT_CERTS"\"."); +++ } +++ else +++ { +++ xmlsec_trace("Failed unloadeding module \""ROOT_CERTS"\"."); +++ } +++ SECMOD_DestroyModule(RootsModule); +++ } +++ else +++ { +++ xmlsec_trace("Unloading module \""ROOT_CERTS +++ "\" failed because it was not found."); +++ } +++ PK11_LogoutAll(); +++ NSS_Shutdown(); +++} +++} // namespace +++ +++ONSSInitializer::ONSSInitializer( +++ const css::uno::Reference< css::lang::XMultiServiceFactory > &rxMSF) +++ :mxMSF( rxMSF ) +++{ +++} +++ +++ONSSInitializer::~ONSSInitializer() +++{ +++} +++ +++bool ONSSInitializer::initNSS( const css::uno::Reference< css::lang::XMultiServiceFactory > &xMSF ) +++{ +++ return *rtl_Instance< bool, InitNSSInitialize, ::osl::MutexGuard, GetNSSInitStaticMutex > +++ ::create( InitNSSInitialize( xMSF ), GetNSSInitStaticMutex() ); +++} +++ +++css::uno::Reference< css::xml::crypto::XDigestContext > SAL_CALL ONSSInitializer::getDigestContext( ::sal_Int32 nDigestID, const css::uno::Sequence< css::beans::NamedValue >& aParams ) +++ throw (css::lang::IllegalArgumentException, css::uno::RuntimeException) +++{ +++ SECOidTag nNSSDigestID = SEC_OID_UNKNOWN; +++ sal_Int32 nDigestLength = 0; +++ bool b1KData = false; +++ if ( nDigestID == css::xml::crypto::DigestID::SHA256 +++ || nDigestID == css::xml::crypto::DigestID::SHA256_1K ) +++ { +++ nNSSDigestID = SEC_OID_SHA256; +++ nDigestLength = 32; +++ b1KData = ( nDigestID == css::xml::crypto::DigestID::SHA256_1K ); +++ } +++ else if ( nDigestID == css::xml::crypto::DigestID::SHA1 +++ || nDigestID == css::xml::crypto::DigestID::SHA1_1K ) +++ { +++ nNSSDigestID = SEC_OID_SHA1; +++ nDigestLength = 20; +++ b1KData = ( nDigestID == css::xml::crypto::DigestID::SHA1_1K ); +++ } +++ else +++ throw css::lang::IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unexpected digest requested." ) ), css::uno::Reference< css::uno::XInterface >(), 1 ); +++ +++ if ( aParams.getLength() ) +++ throw css::lang::IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unexpected arguments provided for digest creation." ) ), css::uno::Reference< css::uno::XInterface >(), 2 ); +++ +++ css::uno::Reference< css::xml::crypto::XDigestContext > xResult; +++ if( initNSS( mxMSF ) ) +++ { +++ PK11Context* pContext = PK11_CreateDigestContext( nNSSDigestID ); +++ if ( pContext && PK11_DigestBegin( pContext ) == SECSuccess ) +++ xResult = new ODigestContext( pContext, nDigestLength, b1KData ); +++ } +++ +++ return xResult; +++} +++ +++css::uno::Reference< css::xml::crypto::XCipherContext > SAL_CALL ONSSInitializer::getCipherContext( ::sal_Int32 nCipherID, const css::uno::Sequence< ::sal_Int8 >& aKey, const css::uno::Sequence< ::sal_Int8 >& aInitializationVector, ::sal_Bool bEncryption, const css::uno::Sequence< css::beans::NamedValue >& aParams ) +++ throw (css::lang::IllegalArgumentException, css::uno::RuntimeException) +++{ +++ CK_MECHANISM_TYPE nNSSCipherID = 0; +++ bool bW3CPadding = false; +++ if ( nCipherID == css::xml::crypto::CipherID::AES_CBC_W3C_PADDING ) +++ { +++ nNSSCipherID = CKM_AES_CBC; +++ bW3CPadding = true; +++ +++ if ( aKey.getLength() != 16 && aKey.getLength() != 24 && aKey.getLength() != 32 ) +++ throw css::lang::IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unexpected key length." ) ), css::uno::Reference< css::uno::XInterface >(), 2 ); +++ +++ if ( aParams.getLength() ) +++ throw css::lang::IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unexpected arguments provided for cipher creation." ) ), css::uno::Reference< css::uno::XInterface >(), 5 ); +++ } +++ else +++ throw css::lang::IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unexpected cipher requested." ) ), css::uno::Reference< css::uno::XInterface >(), 1 ); +++ +++ css::uno::Reference< css::xml::crypto::XCipherContext > xResult; +++ if( initNSS( mxMSF ) ) +++ { +++ if ( aInitializationVector.getLength() != PK11_GetIVLength( nNSSCipherID ) ) +++ throw css::lang::IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unexpected length of initialization vector." ) ), css::uno::Reference< css::uno::XInterface >(), 3 ); +++ +++ xResult = OCipherContext::Create( nNSSCipherID, aKey, aInitializationVector, bEncryption, bW3CPadding ); +++ } +++ +++ return xResult; +++} +++ +++rtl::OUString ONSSInitializer_getImplementationName () +++ throw (cssu::RuntimeException) +++{ +++ +++ return rtl::OUString ( RTL_CONSTASCII_USTRINGPARAM ( IMPLEMENTATION_NAME ) ); +++} +++ +++sal_Bool SAL_CALL ONSSInitializer_supportsService( const rtl::OUString& ServiceName ) +++ throw (cssu::RuntimeException) +++{ +++ return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( NSS_SERVICE_NAME )); +++} +++ +++cssu::Sequence< rtl::OUString > SAL_CALL ONSSInitializer_getSupportedServiceNames( ) +++ throw (cssu::RuntimeException) +++{ +++ cssu::Sequence < rtl::OUString > aRet(1); +++ rtl::OUString* pArray = aRet.getArray(); +++ pArray[0] = rtl::OUString ( RTL_CONSTASCII_USTRINGPARAM ( NSS_SERVICE_NAME ) ); +++ return aRet; +++} +++ +++cssu::Reference< cssu::XInterface > SAL_CALL ONSSInitializer_createInstance( const cssu::Reference< cssl::XMultiServiceFactory > & rSMgr) +++ throw( cssu::Exception ) +++{ +++ return (cppu::OWeakObject*) new ONSSInitializer( rSMgr ); +++} +++ +++/* XServiceInfo */ +++rtl::OUString SAL_CALL ONSSInitializer::getImplementationName() +++ throw (cssu::RuntimeException) +++{ +++ return ONSSInitializer_getImplementationName(); +++} +++sal_Bool SAL_CALL ONSSInitializer::supportsService( const rtl::OUString& rServiceName ) +++ throw (cssu::RuntimeException) +++{ +++ return ONSSInitializer_supportsService( rServiceName ); +++} +++cssu::Sequence< rtl::OUString > SAL_CALL ONSSInitializer::getSupportedServiceNames( ) +++ throw (cssu::RuntimeException) +++{ +++ return ONSSInitializer_getSupportedServiceNames(); +++} +++ ++diff --git a/xmlsecurity/source/xmlsec/nss/nssinitializer.hxx b/xmlsecurity/source/xmlsec/nss/nssinitializer.hxx ++new file mode 100644 ++index 0000000..6e7fed1 ++--- /dev/null +++++ xmlsecurity/source/xmlsec/nss/nssinitializer.hxx ++@@ -0,0 +1,90 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++ +++#ifndef _NSSINITIALIZER_HXX +++#define _NSSINITIALIZER_HXX +++ +++#include +++#include +++#include +++#include +++ +++#include +++ +++#define NSS_SERVICE_NAME "com.sun.star.xml.crypto.NSSInitializer" +++ +++class ONSSInitializer : public cppu::WeakImplHelper3 +++< +++ ::com::sun::star::xml::crypto::XDigestContextSupplier, +++ ::com::sun::star::xml::crypto::XCipherContextSupplier, +++ ::com::sun::star::lang::XServiceInfo +++> +++{ +++protected: +++ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMSF; +++ +++ ONSSInitializer() +++ {} +++ +++public: +++ ONSSInitializer( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > &rxMSF ); +++ virtual ~ONSSInitializer(); +++ +++ bool initNSS( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > &xMSF ); +++ +++ /* XDigestContextSupplier */ +++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XDigestContext > SAL_CALL getDigestContext( ::sal_Int32 nDigestID, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aParams ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); +++ +++ /* XCipherContextSupplier */ +++ virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XCipherContext > SAL_CALL getCipherContext( ::sal_Int32 nCipherID, const ::com::sun::star::uno::Sequence< ::sal_Int8 >& aKey, const ::com::sun::star::uno::Sequence< ::sal_Int8 >& aInitializationVector, ::sal_Bool bEncryption, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aParams ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); +++ +++ /* XServiceInfo */ +++ virtual rtl::OUString SAL_CALL getImplementationName() +++ throw (::com::sun::star::uno::RuntimeException); +++ +++ virtual sal_Bool SAL_CALL supportsService( const rtl::OUString& ServiceName ) +++ throw (::com::sun::star::uno::RuntimeException); +++ +++ virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames() +++ throw (::com::sun::star::uno::RuntimeException); +++}; +++ +++rtl::OUString ONSSInitializer_getImplementationName() +++ throw ( ::com::sun::star::uno::RuntimeException ); +++ +++sal_Bool SAL_CALL ONSSInitializer_supportsService( const rtl::OUString& ServiceName ) +++ throw ( ::com::sun::star::uno::RuntimeException ); +++ +++com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL ONSSInitializer_getSupportedServiceNames() +++ throw ( ::com::sun::star::uno::RuntimeException ); +++ +++com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > +++SAL_CALL ONSSInitializer_createInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & rSMgr ) +++ throw ( ::com::sun::star::uno::Exception ); +++ +++#endif +++ ++diff --git a/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx b/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx ++index f184600..c1573e8 100644 ++--- xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx +++++ xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx ++@@ -89,7 +89,29 @@ extern X509Certificate_NssImpl* NssPrivKeyToXCert( SECKEYPrivateKey* ) ; ++ struct UsageDescription ++ { ++ SECCertificateUsage usage; ++- char const * const description; +++ char const * description; +++ +++ UsageDescription() +++ : usage( certificateUsageCheckAllUsages ) +++ , description( NULL ) +++ {} +++ +++ UsageDescription( SECCertificateUsage i_usage, char const* i_description ) +++ : usage( i_usage ) +++ , description( i_description ) +++ {} +++ +++ UsageDescription( const UsageDescription& aDescription ) +++ : usage( aDescription.usage ) +++ , description( aDescription.description ) +++ {} +++ +++ UsageDescription& operator =( const UsageDescription& aDescription ) +++ { +++ usage = aDescription.usage; +++ description = aDescription.description; +++ return *this; +++ } ++ }; ++ ++ ++@@ -868,14 +890,12 @@ verifyCertificate( const Reference< csss::XCertificate >& aCert, ++ // certificateUsageAnyCA ++ // certificateUsageProtectedObjectSigner ++ ++- UsageDescription arUsages[] = ++- { ++- {certificateUsageSSLClient, "certificateUsageSSLClient" }, ++- {certificateUsageSSLServer, "certificateUsageSSLServer" }, ++- {certificateUsageSSLCA, "certificateUsageSSLCA" }, ++- {certificateUsageEmailSigner, "certificateUsageEmailSigner"}, //only usable for end certs ++- {certificateUsageEmailRecipient, "certificateUsageEmailRecipient"} ++- }; +++ UsageDescription arUsages[5]; +++ arUsages[0] = UsageDescription( certificateUsageSSLClient, "certificateUsageSSLClient" ); +++ arUsages[1] = UsageDescription( certificateUsageSSLServer, "certificateUsageSSLServer" ); +++ arUsages[2] = UsageDescription( certificateUsageSSLCA, "certificateUsageSSLCA" ); +++ arUsages[3] = UsageDescription( certificateUsageEmailSigner, "certificateUsageEmailSigner" ); +++ arUsages[4] = UsageDescription( certificateUsageEmailRecipient, "certificateUsageEmailRecipient" ); ++ ++ int numUsages = SAL_N_ELEMENTS(arUsages); ++ for (int i = 0; i < numUsages; i++) ++diff --git a/xmlsecurity/source/xmlsec/nss/seinitializer_nssimpl.cxx b/xmlsecurity/source/xmlsec/nss/seinitializer_nssimpl.cxx ++index b9041e2..18dadf0 100644 ++--- xmlsecurity/source/xmlsec/nss/seinitializer_nssimpl.cxx +++++ xmlsecurity/source/xmlsec/nss/seinitializer_nssimpl.cxx ++@@ -52,7 +52,6 @@ ++ ++ ++ #include ++-#include "rtl/instance.hxx" ++ #include "rtl/bootstrap.hxx" ++ #include "rtl/string.hxx" ++ #include "rtl/strbuf.hxx" ++@@ -62,327 +61,34 @@ ++ #include ++ ++ #include "seinitializer_nssimpl.hxx" ++-#include "../diagnose.hxx" ++- ++ #include "securityenvironment_nssimpl.hxx" ++-#include ++ ++-#include "nspr.h" ++-#include "cert.h" ++-#include "nss.h" ++-#include "secmod.h" ++-#include "nssckbi.h" +++#include +++#include +++#include +++#include +++#include +++#include ++ ++ ++-namespace cssu = com::sun::star::uno; ++-namespace cssl = com::sun::star::lang; ++-namespace cssxc = com::sun::star::xml::crypto; +++namespace css = ::com::sun::star; +++namespace cssu = css::uno; +++namespace cssl = css::lang; +++namespace cssxc = css::xml::crypto; ++ ++-using namespace xmlsecurity; ++ using namespace com::sun::star; ++ using ::rtl::OUString; ++ using ::rtl::OString; ++ ++-#define SERVICE_NAME "com.sun.star.xml.crypto.SEInitializer" +++#define SE_SERVICE_NAME "com.sun.star.xml.crypto.SEInitializer" ++ #define IMPLEMENTATION_NAME "com.sun.star.xml.security.bridge.xmlsec.SEInitializer_NssImpl" ++ #define SECURITY_ENVIRONMENT "com.sun.star.xml.crypto.SecurityEnvironment" ++ #define SECURITY_CONTEXT "com.sun.star.xml.crypto.XMLSecurityContext" ++ ++- ++-#define ROOT_CERTS "Root Certs for OpenOffice.org" ++- ++- ++-extern "C" void nsscrypto_finalize(); ++- ++- ++-namespace ++-{ ++- ++-bool nsscrypto_initialize( const char * sProfile, bool & out_nss_init); ++- ++-struct InitNSSInitialize ++-{ ++- //path to the database folder ++- const OString m_sProfile; ++- InitNSSInitialize(const OString & sProfile): m_sProfile(sProfile) {}; ++- bool * operator()() ++- { ++- static bool bInitialized = false; ++- bool bNSSInit = false; ++- bInitialized = nsscrypto_initialize(m_sProfile.getStr(), bNSSInit); ++- if (bNSSInit) ++- atexit(nsscrypto_finalize ); ++- return & bInitialized; ++- ++- } ++-}; ++- ++-bool * initNSS(const OString & sProfile) ++-{ ++- return rtl_Instance< bool, InitNSSInitialize, ++- ::osl::MutexGuard, ::osl::GetGlobalMutex >::create( ++- InitNSSInitialize(sProfile), ::osl::GetGlobalMutex()); ++-} ++- ++-void deleteRootsModule() ++-{ ++- SECMODModule *RootsModule = 0; ++- SECMODModuleList *list = SECMOD_GetDefaultModuleList(); ++- SECMODListLock *lock = SECMOD_GetDefaultModuleListLock(); ++- SECMOD_GetReadLock(lock); ++- ++- while (!RootsModule && list) ++- { ++- SECMODModule *module = list->module; ++- ++- for (int i=0; i < module->slotCount; i++) ++- { ++- PK11SlotInfo *slot = module->slots[i]; ++- if (PK11_IsPresent(slot)) ++- { ++- if (PK11_HasRootCerts(slot)) ++- { ++- xmlsec_trace("The root certifificates module \"%s" ++- "\" is already loaded: \n%s", ++- module->commonName, module->dllName); ++- ++- RootsModule = SECMOD_ReferenceModule(module); ++- break; ++- } ++- } ++- } ++- list = list->next; ++- } ++- SECMOD_ReleaseReadLock(lock); ++- ++- if (RootsModule) ++- { ++- PRInt32 modType; ++- if (SECSuccess == SECMOD_DeleteModule(RootsModule->commonName, &modType)) ++- { ++- xmlsec_trace("Deleted module \"%s\".", RootsModule->commonName); ++- } ++- else ++- { ++- xmlsec_trace("Failed to delete \"%s\" : \n%s", ++- RootsModule->commonName, RootsModule->dllName); ++- } ++- SECMOD_DestroyModule(RootsModule); ++- RootsModule = 0; ++- } ++-} ++- ++-//Older versions of Firefox (FF), for example FF2, and Thunderbird (TB) 2 write ++-//the roots certificate module (libnssckbi.so), which they use, into the ++-//profile. This module will then already be loaded during NSS_Init (and the ++-//other init functions). This fails in two cases. First, FF3 was used to create ++-//the profile, or possibly used that profile before, and second the profile was ++-//used on a different platform. ++-// ++-//Then one needs to add the roots module oneself. This should be done with ++-//SECMOD_LoadUserModule rather then SECMOD_AddNewModule. The latter would write ++-//the location of the roots module to the profile, which makes FF2 and TB2 use ++-//it instead of there own module. ++-// ++-//When using SYSTEM_MOZILLA then the libnss3.so lib is typically found in ++-///usr/lib. This folder may, however, NOT contain the roots certificate ++-//module. That is, just providing the library name in SECMOD_LoadUserModule or ++-//SECMOD_AddNewModule will FAIL to load the mozilla unless the LD_LIBRARY_PATH ++-//contains an FF or TB installation. ++-//ATTENTION: DO NOT call this function directly instead use initNSS ++-//return true - whole initialization was successful ++-//param out_nss_init = true: at least the NSS initialization (NSS_InitReadWrite ++-//was successful and therefor NSS_Shutdown should be called when terminating. ++-bool nsscrypto_initialize( const char* token, bool & out_nss_init ) ++-{ ++- bool return_value = true; ++- ++- xmlsec_trace("Using profile: %s", token); ++- ++- PR_Init( PR_USER_THREAD, PR_PRIORITY_NORMAL, 1 ) ; ++- ++- //token may be an empty string ++- if (token != NULL && strlen(token) > 0) ++- { ++- if( NSS_InitReadWrite( token ) != SECSuccess ) ++- { ++- xmlsec_trace("Initializing NSS with profile failed."); ++- char * error = NULL; ++- ++- PR_GetErrorText(error); ++- if (error) ++- xmlsec_trace("%s",error); ++- return false ; ++- } ++- } ++- else ++- { ++- xmlsec_trace("Initializing NSS without profile."); ++- if ( NSS_NoDB_Init(NULL) != SECSuccess ) ++- { ++- xmlsec_trace("Initializing NSS without profile failed."); ++- char * error = NULL; ++- PR_GetErrorText(error); ++- if (error) ++- xmlsec_trace("%s",error); ++- return false ; ++- } ++- } ++- out_nss_init = true; ++- ++-#if defined SYSTEM_MOZILLA ++- if (!SECMOD_HasRootCerts()) ++- { ++-#endif ++- deleteRootsModule(); ++- ++-#if defined SYSTEM_MOZILLA ++- OUString rootModule(RTL_CONSTASCII_USTRINGPARAM("libnssckbi"SAL_DLLEXTENSION)); ++-#else ++- OUString rootModule(RTL_CONSTASCII_USTRINGPARAM("${OOO_BASE_DIR}/program/libnssckbi"SAL_DLLEXTENSION)); ++-#endif ++- ::rtl::Bootstrap::expandMacros(rootModule); ++- ++- OUString rootModulePath; ++- if (::osl::File::E_None == ::osl::File::getSystemPathFromFileURL(rootModule, rootModulePath)) ++- { ++- ::rtl::OString ospath = ::rtl::OUStringToOString(rootModulePath, osl_getThreadTextEncoding()); ++- ::rtl::OStringBuffer pkcs11moduleSpec; ++- pkcs11moduleSpec.append("name=\""); ++- pkcs11moduleSpec.append(ROOT_CERTS); ++- pkcs11moduleSpec.append("\" library=\""); ++- pkcs11moduleSpec.append(ospath.getStr()); ++- pkcs11moduleSpec.append("\""); ++- ++- SECMODModule * RootsModule = ++- SECMOD_LoadUserModule( ++- const_cast(pkcs11moduleSpec.makeStringAndClear().getStr()), ++- 0, // no parent ++- PR_FALSE); // do not recurse ++- ++- if (RootsModule) ++- { ++- ++- bool found = RootsModule->loaded; ++- ++- SECMOD_DestroyModule(RootsModule); ++- RootsModule = 0; ++- if (found) ++- xmlsec_trace("Added new root certificate module " ++- "\""ROOT_CERTS"\" contained in \n%s", ospath.getStr()); ++- else ++- { ++- xmlsec_trace("FAILED to load the new root certificate module " ++- "\""ROOT_CERTS"\" contained in \n%s", ospath.getStr()); ++- return_value = false; ++- } ++- } ++- else ++- { ++- xmlsec_trace("FAILED to add new root certifice module: " ++- "\""ROOT_CERTS"\" contained in \n%s", ospath.getStr()); ++- return_value = false; ++- ++- } ++- } ++- else ++- { ++- xmlsec_trace("Adding new root certificate module failed."); ++- return_value = false; ++- } ++-#if SYSTEM_MOZILLA ++- } ++-#endif ++- ++- return return_value; ++-} ++- ++- ++-// must be extern "C" because we pass the function pointer to atexit ++-extern "C" void nsscrypto_finalize() ++-{ ++- SECMODModule *RootsModule = SECMOD_FindModule(ROOT_CERTS); ++- ++- if (RootsModule) ++- { ++- ++- if (SECSuccess == SECMOD_UnloadUserModule(RootsModule)) ++- { ++- xmlsec_trace("Unloaded module \""ROOT_CERTS"\"."); ++- } ++- else ++- { ++- xmlsec_trace("Failed unloadeding module \""ROOT_CERTS"\"."); ++- } ++- SECMOD_DestroyModule(RootsModule); ++- } ++- else ++- { ++- xmlsec_trace("Unloading module \""ROOT_CERTS ++- "\" failed because it was not found."); ++- } ++- PK11_LogoutAll(); ++- NSS_Shutdown(); ++-} ++- ++- ++-bool getMozillaCurrentProfile( ++- const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > &rxMSF, ++- rtl::OUString& profilePath) ++-{ ++- /* ++- * first, try to get the profile from "MOZILLA_CERTIFICATE_FOLDER" ++- */ ++- char * env = getenv("MOZILLA_CERTIFICATE_FOLDER"); ++- if (env) ++- { ++- profilePath = rtl::OUString::createFromAscii( env ); ++- RTL_LOGFILE_PRODUCT_TRACE1( "XMLSEC: Using env MOZILLA_CERTIFICATE_FOLDER: %s", rtl::OUStringToOString( profilePath, RTL_TEXTENCODING_ASCII_US ).getStr() ); ++- return true; ++- } ++- else ++- { ++- mozilla::MozillaProductType productTypes[4] = { ++- mozilla::MozillaProductType_Thunderbird, ++- mozilla::MozillaProductType_Mozilla, ++- mozilla::MozillaProductType_Firefox, ++- mozilla::MozillaProductType_Default }; ++- ++- uno::Reference xInstance = rxMSF->createInstance( ++- ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.mozilla.MozillaBootstrap")) ); ++- OSL_ENSURE( xInstance.is(), "failed to create instance" ); ++- ++- uno::Reference xMozillaBootstrap ++- = uno::Reference(xInstance,uno::UNO_QUERY); ++- OSL_ENSURE( xMozillaBootstrap.is(), "failed to create instance" ); ++- ++- if (xMozillaBootstrap.is()) ++- { ++- int nProduct = 4; ++- for (int i=0; igetDefaultProfile(productTypes[i]); ++- ++- if (profile != NULL && profile.getLength()>0) ++- { ++- profilePath = xMozillaBootstrap->getProfilePath(productTypes[i],profile); ++- RTL_LOGFILE_PRODUCT_TRACE1( "XMLSEC: Using Mozilla Profile: %s", rtl::OUStringToOString( profilePath, RTL_TEXTENCODING_ASCII_US ).getStr() ); ++- return true; ++- } ++- } ++- } ++- ++- RTL_LOGFILE_PRODUCT_TRACE( "XMLSEC: No Mozilla Profile found!" ); ++- return false; ++- } ++-} ++- ++-} // namespace ++- ++ SEInitializer_NssImpl::SEInitializer_NssImpl( ++- const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > &rxMSF) ++- :mxMSF( rxMSF ) +++ const css::uno::Reference< css::lang::XMultiServiceFactory > &rxMSF ) ++ { +++ mxMSF = rxMSF; ++ } ++ ++ SEInitializer_NssImpl::~SEInitializer_NssImpl() ++@@ -391,36 +97,13 @@ SEInitializer_NssImpl::~SEInitializer_NssImpl() ++ ++ /* XSEInitializer */ ++ cssu::Reference< cssxc::XXMLSecurityContext > SAL_CALL ++- SEInitializer_NssImpl::createSecurityContext( ++- const rtl::OUString& sCertDB ) +++ SEInitializer_NssImpl::createSecurityContext( const ::rtl::OUString& ) ++ throw (cssu::RuntimeException) ++ { ++ CERTCertDBHandle *pCertHandle = NULL ; ++ ++- rtl::OString sCertDir; ++- if( sCertDB.getLength() ) ++- { ++- sCertDir = rtl::OUStringToOString(sCertDB, RTL_TEXTENCODING_ASCII_US); ++- } ++- else ++- { ++- static rtl::OString* pDefaultCertDir = NULL; ++- if ( !pDefaultCertDir ) ++- { ++- pDefaultCertDir = new rtl::OString; ++- rtl::OUString ouCertDir; ++- ++- if ( getMozillaCurrentProfile(mxMSF, ouCertDir) ) ++- *pDefaultCertDir = rtl::OUStringToOString(ouCertDir, RTL_TEXTENCODING_ASCII_US); ++- } ++- sCertDir = *pDefaultCertDir; ++- ++- } ++- ++- if( ! *initNSS( sCertDir.getStr() ) ) ++- { +++ if( !initNSS( mxMSF ) ) ++ return NULL; ++- } ++ ++ pCertHandle = CERT_GetDefaultCertDB() ; ++ ++@@ -477,18 +160,18 @@ rtl::OUString SEInitializer_NssImpl_getImplementationName () ++ sal_Bool SAL_CALL SEInitializer_NssImpl_supportsService( const rtl::OUString& ServiceName ) ++ throw (cssu::RuntimeException) ++ { ++- return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SERVICE_NAME )); +++ return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SE_SERVICE_NAME )) || ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( NSS_SERVICE_NAME )); ++ } ++ ++ cssu::Sequence< rtl::OUString > SAL_CALL SEInitializer_NssImpl_getSupportedServiceNames( ) ++ throw (cssu::RuntimeException) ++ { ++- cssu::Sequence < rtl::OUString > aRet(1); +++ cssu::Sequence < rtl::OUString > aRet(2); ++ rtl::OUString* pArray = aRet.getArray(); ++- pArray[0] = rtl::OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME ) ); +++ pArray[0] = rtl::OUString ( RTL_CONSTASCII_USTRINGPARAM ( SE_SERVICE_NAME ) ); +++ pArray[1] = rtl::OUString ( RTL_CONSTASCII_USTRINGPARAM ( NSS_SERVICE_NAME ) ); ++ return aRet; ++ } ++-#undef SERVICE_NAME ++ ++ cssu::Reference< cssu::XInterface > SAL_CALL SEInitializer_NssImpl_createInstance( const cssu::Reference< cssl::XMultiServiceFactory > & rSMgr) ++ throw( cssu::Exception ) ++diff --git a/xmlsecurity/source/xmlsec/nss/seinitializer_nssimpl.hxx b/xmlsecurity/source/xmlsec/nss/seinitializer_nssimpl.hxx ++index 53e5129..2092b92 100644 ++--- xmlsecurity/source/xmlsec/nss/seinitializer_nssimpl.hxx +++++ xmlsecurity/source/xmlsec/nss/seinitializer_nssimpl.hxx ++@@ -31,37 +31,19 @@ ++ ++ #include ++ #include ++-#include ++-#include ++-#include ++-#include +++ +++#include ++ ++ #include ++ ++-class SEInitializer_NssImpl : public cppu::WeakImplHelper2 +++#include "nssinitializer.hxx" +++ +++class SEInitializer_NssImpl : public cppu::ImplInheritanceHelper1 ++ < ++- com::sun::star::xml::crypto::XSEInitializer, ++- com::sun::star::lang::XServiceInfo +++ ONSSInitializer, +++ ::com::sun::star::xml::crypto::XSEInitializer ++ > ++-/****** SEInitializer_NssImpl.hxx/CLASS SEInitializer_NssImpl *********** ++- * ++- * NAME ++- * SEInitializer_NssImpl -- Class to initialize a Security Context ++- * instance ++- * ++- * FUNCTION ++- * Use this class to initialize a XmlSec based Security Context ++- * instance. After this instance is used up, use this class to free this ++- * instance. ++- * ++- * AUTHOR ++- * Michael Mi ++- * Email: michael.mi@sun.com ++- ******************************************************************************/ ++ { ++-private: ++- com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > mxMSF; ++- ++ public: ++ SEInitializer_NssImpl(const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > &rxMSF); ++ virtual ~SEInitializer_NssImpl(); ++@@ -69,7 +51,7 @@ public: ++ /* XSEInitializer */ ++ virtual com::sun::star::uno::Reference< ++ com::sun::star::xml::crypto::XXMLSecurityContext > ++- SAL_CALL createSecurityContext( const rtl::OUString& certDB ) +++ SAL_CALL createSecurityContext( const ::rtl::OUString& ) ++ throw (com::sun::star::uno::RuntimeException); ++ ++ virtual void SAL_CALL freeSecurityContext( const com::sun::star::uno::Reference< ++diff --git a/xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.cxx b/xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.cxx ++index 71a0221..93c9839 100644 ++--- xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.cxx +++++ xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.cxx ++@@ -120,13 +120,13 @@ sal_Int16 SAL_CALL X509Certificate_NssImpl :: getVersion() throw ( ::com::sun::s ++ //Convert the time to readable local time ++ PR_ExplodeTime( notBefore, PR_LocalTimeParameters, &explTime ) ; ++ ++- dateTime.HundredthSeconds = explTime.tm_usec / 1000 ; ++- dateTime.Seconds = explTime.tm_sec ; ++- dateTime.Minutes = explTime.tm_min ; ++- dateTime.Hours = explTime.tm_hour ; ++- dateTime.Day = explTime.tm_mday ; ++- dateTime.Month = explTime.tm_month+1 ; ++- dateTime.Year = explTime.tm_year ; +++ dateTime.HundredthSeconds = static_cast< sal_Int16 >( explTime.tm_usec / 1000 ); +++ dateTime.Seconds = static_cast< sal_Int16 >( explTime.tm_sec ); +++ dateTime.Minutes = static_cast< sal_Int16 >( explTime.tm_min ); +++ dateTime.Hours = static_cast< sal_Int16 >( explTime.tm_hour ); +++ dateTime.Day = static_cast< sal_Int16 >( explTime.tm_mday ); +++ dateTime.Month = static_cast< sal_Int16 >( explTime.tm_month+1 ); +++ dateTime.Year = static_cast< sal_Int16 >( explTime.tm_year ); ++ ++ return dateTime ; ++ } else { ++@@ -149,13 +149,13 @@ sal_Int16 SAL_CALL X509Certificate_NssImpl :: getVersion() throw ( ::com::sun::s ++ //Convert the time to readable local time ++ PR_ExplodeTime( notAfter, PR_LocalTimeParameters, &explTime ) ; ++ ++- dateTime.HundredthSeconds = explTime.tm_usec / 1000 ; ++- dateTime.Seconds = explTime.tm_sec ; ++- dateTime.Minutes = explTime.tm_min ; ++- dateTime.Hours = explTime.tm_hour ; ++- dateTime.Day = explTime.tm_mday ; ++- dateTime.Month = explTime.tm_month+1 ; ++- dateTime.Year = explTime.tm_year ; +++ dateTime.HundredthSeconds = static_cast< sal_Int16 >( explTime.tm_usec / 1000 ); +++ dateTime.Seconds = static_cast< sal_Int16 >( explTime.tm_sec ); +++ dateTime.Minutes = static_cast< sal_Int16 >( explTime.tm_min ); +++ dateTime.Hours = static_cast< sal_Int16 >( explTime.tm_hour ); +++ dateTime.Day = static_cast< sal_Int16 >( explTime.tm_mday ); +++ dateTime.Month = static_cast< sal_Int16 >( explTime.tm_month+1 ); +++ dateTime.Year = static_cast< sal_Int16 >( explTime.tm_year ); ++ ++ return dateTime ; ++ } else { ++diff --git a/xmlsecurity/source/xmlsec/nss/xsec_nss.cxx b/xmlsecurity/source/xmlsec/nss/xsec_nss.cxx ++index a226d96..7b2fbd0 100644 ++--- xmlsecurity/source/xmlsec/nss/xsec_nss.cxx +++++ xmlsecurity/source/xmlsec/nss/xsec_nss.cxx ++@@ -57,21 +57,41 @@ void* SAL_CALL nss_component_getFactory( const sal_Char* pImplName , void* pServ ++ void* pRet = 0; ++ Reference< XSingleServiceFactory > xFactory ; ++ ++- if( pImplName != NULL && pServiceManager != NULL ) { ++- if( XMLSignature_NssImpl::impl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) ) { +++ if( pImplName != NULL && pServiceManager != NULL ) +++ { +++#ifdef XMLSEC_CRYPTO_NSS +++ if( SEInitializer_NssImpl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) ) +++ { +++ xFactory = Reference< XSingleServiceFactory >( createSingleFactory( +++ reinterpret_cast< XMultiServiceFactory * >( pServiceManager ), +++ OUString::createFromAscii( pImplName ), +++ SEInitializer_NssImpl_createInstance, SEInitializer_NssImpl_getSupportedServiceNames() ) ); +++ } +++ else if( XMLSignature_NssImpl::impl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) ) +++ { ++ xFactory = XMLSignature_NssImpl::impl_createFactory( reinterpret_cast< XMultiServiceFactory* >( pServiceManager ) ) ; ++- } else if( XMLSecurityContext_NssImpl::impl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) ) { +++ } +++ else if( XMLSecurityContext_NssImpl::impl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) ) +++ { ++ xFactory = XMLSecurityContext_NssImpl::impl_createFactory( reinterpret_cast< XMultiServiceFactory* >( pServiceManager ) ) ; ++- } else if( SecurityEnvironment_NssImpl::impl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) ) { +++ } +++ else if( SecurityEnvironment_NssImpl::impl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) ) +++ { ++ xFactory = SecurityEnvironment_NssImpl::impl_createFactory( reinterpret_cast< XMultiServiceFactory* >( pServiceManager ) ) ; ++- } else if( XMLEncryption_NssImpl::impl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) ) { +++ } +++ else if( XMLEncryption_NssImpl::impl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) ) +++ { ++ xFactory = XMLEncryption_NssImpl::impl_createFactory( reinterpret_cast< XMultiServiceFactory* >( pServiceManager ) ) ; ++- } else if( SEInitializer_NssImpl_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) ) { +++ } +++#else +++ if( ONSSInitializer_getImplementationName().equals( OUString::createFromAscii( pImplName ) ) ) +++ { ++ xFactory = Reference< XSingleServiceFactory >( createSingleFactory( ++ reinterpret_cast< XMultiServiceFactory * >( pServiceManager ), ++ OUString::createFromAscii( pImplName ), ++- SEInitializer_NssImpl_createInstance, SEInitializer_NssImpl_getSupportedServiceNames() ) ); +++ ONSSInitializer_createInstance, ONSSInitializer_getSupportedServiceNames() ) ); ++ } +++#endif ++ } ++ ++ if( xFactory.is() ) { ++diff --git a/xmlsecurity/source/xmlsec/xsec_xmlsec.cxx b/xmlsecurity/source/xmlsec/xsec_xmlsec.cxx ++index 1eeec66..935f0d6 100644 ++--- xmlsecurity/source/xmlsec/xsec_xmlsec.cxx +++++ xmlsecurity/source/xmlsec/xsec_xmlsec.cxx ++@@ -94,9 +94,7 @@ Reference< XInterface > SerialNumberAdapterImpl_createInstance( ++ extern "C" ++ { ++ ++-#if defined( XMLSEC_CRYPTO_NSS ) ++ extern void* nss_component_getFactory( const sal_Char*, void*, void* ); ++-#endif ++ ++ #if defined( XMLSEC_CRYPTO_MSCRYPTO ) ++ extern void* mscrypt_component_getFactory( const sal_Char*, void*, void* ); ++@@ -141,11 +139,9 @@ void* SAL_CALL component_getFactory( const sal_Char* pImplName , void* pServiceM ++ xFactory->acquire() ; ++ pRet = xFactory.get() ; ++ } else { ++-#if defined( XMLSEC_CRYPTO_NSS ) ++ pRet = nss_component_getFactory( pImplName, pServiceManager, pRegistryKey ) ; ++ if( pRet != NULL ) ++ return pRet ; ++-#endif ++ ++ #if defined( XMLSEC_CRYPTO_MSCRYPTO ) ++ pRet = mscrypt_component_getFactory( pImplName, pServiceManager, pRegistryKey ) ; ++diff --git a/xmlsecurity/util/makefile.mk b/xmlsecurity/util/makefile.mk ++index ff5a952..be64450 100644 ++--- xmlsecurity/util/makefile.mk +++++ xmlsecurity/util/makefile.mk ++@@ -81,10 +81,10 @@ SHL2LIBS= \ ++ .IF "$(CRYPTO_ENGINE)" == "mscrypto" ++ SHL2LIBS += \ ++ $(SLB)$/xs_mscrypt.lib ++-.ELSE +++.ENDIF +++ ++ SHL2LIBS += \ ++ $(SLB)$/xs_nss.lib ++-.ENDIF ++ ++ .ENDIF ++ ++@@ -118,6 +118,8 @@ SHL2STDLIBS += $(MOZ_NSS_LIBS) ++ ++ .IF "$(CRYPTO_ENGINE)" == "mscrypto" ++ SHL2STDLIBS+= $(MSCRYPTOLIBS) +++# SHL2STDLIBS+= $(XMLSECLIB) $(LIBXML2LIB) $(NSS3LIB) $(NSPR4LIB) $(PLC4LIB) +++SHL2STDLIBS+= $(NSS3LIB) $(NSPR4LIB) ++ .ELSE ++ SHL2STDLIBS+= $(NSSCRYPTOLIBS) ++ .ENDIF ++@@ -127,10 +129,10 @@ SHL2DEF = $(MISC)$/$(SHL2TARGET).def ++ DEF2NAME = $(SHL2TARGET) ++ .IF "$(CRYPTO_ENGINE)" == "mscrypto" ++ DEF2EXPORTFILE = exports_xsmscrypt.dxp ++-.ELSE ++-DEF2EXPORTFILE = exports_xsnss.dxp ++ .ENDIF ++ +++DEF2EXPORTFILE = exports_xsnss.dxp +++ ++ SRSFILELIST= \ ++ $(SRS)$/component.srs \ ++ $(SRS)$/dialogs.srs ++diff --git a/xmlsecurity/util/xsec_xmlsec.component b/xmlsecurity/util/xsec_xmlsec.component ++index de99189..df4c2a7 100644 ++--- xmlsecurity/util/xsec_xmlsec.component +++++ xmlsecurity/util/xsec_xmlsec.component ++@@ -32,6 +32,7 @@ ++ ++ ++ +++ ++ ++ ++ ++diff --git a/xmlsecurity/util/xsec_xmlsec.windows.component b/xmlsecurity/util/xsec_xmlsec.windows.component ++index fb11cc6..7b4ef87 100644 ++--- xmlsecurity/util/xsec_xmlsec.windows.component +++++ xmlsecurity/util/xsec_xmlsec.windows.component ++@@ -31,6 +31,9 @@ ++ ++ ++ +++ +++ +++ ++ ++ ++ ++-- ++1.7.5.4 ++ ++ ++From 2408d229104c3e198ce79e72bb89ce360575aa36 Mon Sep 17 00:00:00 2001 ++From: Andras Timar ++Date: Thu, 24 Nov 2011 23:10:30 +0100 ++Subject: [components 4/9] change logic of IsOfficeRunning custom action ++ fdo#36677 ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++instead of trying to rename a file or folder in ++Program Files directory - which is write protected ++anyway normally - installer checks the process list, ++if there is a process called "soffice.bin". ++ ++Signed-off-by: Fridrich Å trba ++--- ++ .../shellextensions/checkrunningoffice.cxx | 205 +++----------------- ++ .../customactions/shellextensions/makefile.mk | 3 +- ++ 2 files changed, 27 insertions(+), 181 deletions(-) ++ ++diff --git a/setup_native/source/win32/customactions/shellextensions/checkrunningoffice.cxx b/setup_native/source/win32/customactions/shellextensions/checkrunningoffice.cxx ++index 0cf8458..3432ddd 100644 ++--- setup_native/source/win32/customactions/shellextensions/checkrunningoffice.cxx +++++ setup_native/source/win32/customactions/shellextensions/checkrunningoffice.cxx ++@@ -53,6 +53,10 @@ ++ #include ++ #include ++ +++// works with Windows XP as well as with Windows 7 +++#define PSAPI_VERSION 1 +++#include +++ ++ #include ++ #include <../tools/seterror.hxx> ++ ++@@ -93,201 +97,42 @@ static std::_tstring GetMsiProperty( MSIHANDLE handle, const std::_tstring& sPro ++ return result; ++ } ++ ++-static inline bool IsSetMsiProperty(MSIHANDLE handle, const std::_tstring& sProperty) ++-{ ++- std::_tstring value = GetMsiProperty(handle, sProperty); ++- return (value.length() > 0); ++-} ++- ++-static inline void UnsetMsiProperty(MSIHANDLE handle, const std::_tstring& sProperty) +++extern "C" UINT __stdcall IsOfficeRunning( MSIHANDLE handle ) ++ { ++- MsiSetProperty(handle, sProperty.c_str(), NULL); ++-} +++ std::_tstring sOfficeInstallPath = GetMsiProperty(handle, TEXT("INSTALLLOCATION")); +++ // Property empty -> no office installed +++ if ( sOfficeInstallPath.length() == 0 ) +++ return ERROR_SUCCESS; ++ ++-static inline void SetMsiProperty(MSIHANDLE handle, const std::_tstring& sProperty) ++-{ ++- MsiSetProperty(handle, sProperty.c_str(), TEXT("1")); ++-} +++ DWORD aProcesses[1024], cbNeeded, cProcesses; /* 1024 processses ought to be enough for anybody */ ++ ++-static BOOL MoveFileEx9x( LPCSTR lpExistingFileNameA, LPCSTR lpNewFileNameA, DWORD dwFlags ) ++-{ ++- BOOL fSuccess = FALSE; // assume failure +++ if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) +++ return ERROR_INSTALL_FAILURE; ++ ++- // Windows 9x has a special mechanism to move files after reboot +++ cProcesses = cbNeeded / sizeof(DWORD); ++ ++- if ( dwFlags & MOVEFILE_DELAY_UNTIL_REBOOT ) +++ // Check if there is "soffice.bin" among the processes +++ for ( unsigned int i = 0; i < cProcesses; i++ ) ++ { ++- CHAR szExistingFileNameA[MAX_PATH]; ++- CHAR szNewFileNameA[MAX_PATH] = "NUL"; ++- ++- // Path names in WININIT.INI must be in short path name form ++- ++- if ( ++- GetShortPathNameA( lpExistingFileNameA, szExistingFileNameA, MAX_PATH ) && ++- (!lpNewFileNameA || GetShortPathNameA( lpNewFileNameA, szNewFileNameA, MAX_PATH )) ++- ) +++ if( aProcesses[i] != 0 ) ++ { ++- CHAR szBuffer[32767]; // The buffer size must not exceed 32K ++- DWORD dwBufLen = GetPrivateProfileSectionA( RENAME_SECTION, szBuffer, SAL_N_ELEMENTS(szBuffer), WININIT_FILENAME ); ++- ++- CHAR szRename[MAX_PATH]; // This is enough for at most to times 67 chracters ++- strcpy( szRename, szNewFileNameA ); ++- strcat( szRename, "=" ); ++- strcat( szRename, szExistingFileNameA ); ++- size_t lnRename = strlen(szRename); ++- ++- if ( dwBufLen + lnRename + 2 <= SAL_N_ELEMENTS(szBuffer) ) +++ TCHAR szProcessName[MAX_PATH] = TEXT(""); +++ HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i] ); +++ if (NULL != hProcess ) ++ { ++- CopyMemory( &szBuffer[dwBufLen], szRename, lnRename ); ++- szBuffer[dwBufLen + lnRename ] = 0; ++- szBuffer[dwBufLen + lnRename + 1 ] = 0; ++- ++- fSuccess = WritePrivateProfileSectionA( RENAME_SECTION, szBuffer, WININIT_FILENAME ); +++ HMODULE hMod; +++ if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) ) +++ GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(TCHAR) ); ++ } ++- else ++- SetLastError( ERROR_BUFFER_OVERFLOW ); ++- } ++- } ++- else ++- { ++- ++- fSuccess = MoveFileA( lpExistingFileNameA, lpNewFileNameA ); ++- ++- if ( !fSuccess && GetLastError() != ERROR_ACCESS_DENIED && ++- 0 != (dwFlags & (MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING)) ) ++- { ++- BOOL bFailIfExist = 0 == (dwFlags & MOVEFILE_REPLACE_EXISTING); ++- ++- fSuccess = CopyFileA( lpExistingFileNameA, lpNewFileNameA, bFailIfExist ); ++- ++- if ( fSuccess ) ++- fSuccess = DeleteFileA( lpExistingFileNameA ); ++- } ++- ++- } ++- ++- return fSuccess; ++-} ++- ++-static BOOL MoveFileExImpl( LPCSTR lpExistingFileNameA, LPCSTR lpNewFileNameA, DWORD dwFlags ) ++-{ ++- if ( 0 > ((LONG)GetVersion())) // High order bit indicates Win 9x ++- return MoveFileEx9x( lpExistingFileNameA, lpNewFileNameA, dwFlags ); ++- else ++- return MoveFileExA( lpExistingFileNameA, lpNewFileNameA, dwFlags ); ++-} ++- ++-extern "C" UINT __stdcall IsOfficeRunning( MSIHANDLE handle ) ++-{ ++- OSVERSIONINFO osverinfo; ++- osverinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); ++- GetVersionEx( &osverinfo ); ++- ++- // renaming the vcl resource doesn't work reliable with OS >= Windows Vista ++- if (osverinfo.dwMajorVersion < 6 ) ++- { ++- std::_tstring sInstDir = GetMsiProperty( handle, TEXT("INSTALLLOCATION") ); ++- // Property empty -> no office installed ++- if ( sInstDir.length() == 0 ) ++- return ERROR_SUCCESS; ++- ++- std::_tstring sResourceDir = sInstDir + TEXT("Basis\\program\\resource\\"); ++- std::_tstring sPattern = sResourceDir + TEXT("vcl*.res"); ++- ++-// std::_tstring mystr; ++-// mystr = "IsOfficeRunning start. Checking file in dir: " + sResourceDir; ++-// MessageBox( NULL, mystr.c_str(), "IsOfficeRunning", MB_OK ); ++- ++- WIN32_FIND_DATA aFindFileData; ++- HANDLE hFind = FindFirstFile( sPattern.c_str(), &aFindFileData ); ++- ++- if ( IsValidHandle(hFind) ) ++- { ++- BOOL fSuccess = false; ++- bool fRenameSucceeded; ++- ++- do +++ CloseHandle( hProcess ); +++ if ( _tcscmp( szProcessName, TEXT("soffice.bin") ) == 0 ) ++ { ++- std::_tstring sResourceFile = sResourceDir + aFindFileData.cFileName; ++- std::_tstring sIntermediate = sResourceFile + TEXT(".tmp"); ++- ++- fRenameSucceeded = MoveFileExImpl( sResourceFile.c_str(), sIntermediate.c_str(), MOVEFILE_REPLACE_EXISTING ); ++- if ( fRenameSucceeded ) ++- { ++- MoveFileExImpl( sIntermediate.c_str(), sResourceFile.c_str(), 0 ); ++- fSuccess = FindNextFile( hFind, &aFindFileData ); ++- } ++- } while ( fSuccess && fRenameSucceeded ); ++- ++- if ( !fRenameSucceeded ) ++- { ++- MsiSetProperty(handle, TEXT("OFFICERUNS"), TEXT("1")); +++ MsiSetProperty( handle, TEXT("OFFICERUNS"), TEXT("1") ); ++ SetMsiErrorCode( MSI_ERROR_OFFICE_IS_RUNNING ); ++- ++-// mystr = "Office is running"; ++-// MessageBox( NULL, mystr.c_str(), "IsOfficeRunning", MB_OK ); ++ } ++- ++- FindClose( hFind ); ++ } ++-// mystr = "IsOfficeRunning end"; ++-// MessageBox( NULL, mystr.c_str(), "IsOfficeRunning", MB_OK ); ++ } ++- else ++- { ++- std::_tstring sOfficeInstallPath = GetMsiProperty(handle, TEXT("INSTALLLOCATION")); ++- // Property empty -> no office installed ++- if ( sOfficeInstallPath.length() == 0 ) ++- return ERROR_SUCCESS; ++- ++- std::_tstring sRenameSrc = sOfficeInstallPath + TEXT("program"); ++- std::_tstring sRenameDst = sOfficeInstallPath + TEXT("program_test"); ++- ++- bool bSuccess = MoveFile( sRenameSrc.c_str(), sRenameDst.c_str() ); ++- ++- if ( bSuccess ) ++- { ++- MoveFile( sRenameDst.c_str(), sRenameSrc.c_str() ); ++- } ++- else ++- { ++- DWORD dwError = GetLastError(); ++- LPVOID lpMsgBuf; ++- // When there is no program folder, there could be no running office ++- if ( dwError == ERROR_FILE_NOT_FOUND ) ++- return ERROR_SUCCESS; ++- if ( dwError == ERROR_PATH_NOT_FOUND ) ++- return ERROR_SUCCESS; ++- ++- // The destination folder should never exist, don't know what to do here ++- if ( dwError == ERROR_ALREADY_EXISTS ) ++- return ERROR_SUCCESS; ++- ++- if ( FormatMessage( ++- FORMAT_MESSAGE_ALLOCATE_BUFFER | ++- FORMAT_MESSAGE_FROM_SYSTEM | ++- FORMAT_MESSAGE_IGNORE_INSERTS, ++- NULL, ++- GetLastError(), ++- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language ++- (LPTSTR) &lpMsgBuf, ++- 0, ++- NULL )) ++- { ++- OutputDebugStringFormat( TEXT("Error Code %d: %s"), dwError, lpMsgBuf ); ++- LocalFree( lpMsgBuf ); ++- } ++- else ++- OutputDebugStringFormat( TEXT("Error Code %d: Unknown"), dwError ); ++- ++- MsiSetProperty( handle, TEXT("OFFICERUNS"), TEXT("1") ); ++- SetMsiErrorCode( MSI_ERROR_OFFICE_IS_RUNNING ); ++- } ++- } ++- ++ return ERROR_SUCCESS; ++ } ++ ++- ++- ++ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ++diff --git a/setup_native/source/win32/customactions/shellextensions/makefile.mk b/setup_native/source/win32/customactions/shellextensions/makefile.mk ++index de8f943..579527b 100644 ++--- setup_native/source/win32/customactions/shellextensions/makefile.mk +++++ setup_native/source/win32/customactions/shellextensions/makefile.mk ++@@ -69,7 +69,8 @@ SLOFILES = \ ++ STDSHL += \ ++ $(ADVAPI32LIB)\ ++ $(MSILIB)\ ++- $(SHELL32LIB) +++ $(SHELL32LIB)\ +++ psapi.lib ++ ++ .IF "$(COM)"=="GCC" ++ STDSHL+= \ ++-- ++1.7.5.4 ++ ++ ++From 4481a2fd1a40b27c1f8e784517b79fcc3c3ca196 Mon Sep 17 00:00:00 2001 ++From: Thorsten Behrens ++Date: Wed, 14 Dec 2011 13:30:34 +0100 ++Subject: [components 5/9] Fix n#653688 ++ ++Seems our Zip package is a bit too strict in checking archive ++consistency - surely writing it out correctly is good, but rejecting ++otherwise fine odf is not. ++ ++Signed-off-by: Michael Meeks ++--- ++ package/source/zipapi/ZipFile.cxx | 8 +++++++- ++ 1 files changed, 7 insertions(+), 1 deletions(-) ++ ++diff --git a/package/source/zipapi/ZipFile.cxx b/package/source/zipapi/ZipFile.cxx ++index fb56c28..03a0108 100644 ++--- package/source/zipapi/ZipFile.cxx +++++ package/source/zipapi/ZipFile.cxx ++@@ -802,7 +802,7 @@ sal_Bool ZipFile::readLOC( ZipEntry &rEntry ) ++ ++ // the method can be reset for internal use so it is not checked ++ bBroken = rEntry.nVersion != nVersion ++- || rEntry.nFlag != nFlag +++ || rEntry.nMethod != nHow ++ || rEntry.nTime != nTime ++ || rEntry.nPathLen != nPathLen ++ || !rEntry.sPath.equals( sLOCPath ); ++@@ -812,6 +812,12 @@ sal_Bool ZipFile::readLOC( ZipEntry &rEntry ) ++ bBroken = sal_True; ++ } ++ +++ // ignore bits 1 & 2 for normal deflate algo - they're purely informative +++ if( nHow != 8 && nHow != 9 ) +++ bBroken = bBroken || rEntry.nFlag != nFlag; +++ else if( (rEntry.nFlag & ~6L) != (nFlag & ~6L) ) +++ bBroken = true; +++ ++ if ( bBroken && !bRecoveryMode ) ++ throw ZipIOException( OUString( RTL_CONSTASCII_USTRINGPARAM( "The stream seems to be broken!" ) ), ++ Reference< XInterface >() ); ++-- ++1.7.5.4 ++ ++ ++From af45ce4dc9a4b7aea9214b5d74bf60809a4da78d Mon Sep 17 00:00:00 2001 ++From: Thorsten Behrens ++Date: Mon, 19 Dec 2011 11:45:26 +0100 ++Subject: [components 8/9] Revert "Fix n#653688" ++ ++This reverts commit 4481a2fd1a40b27c1f8e784517b79fcc3c3ca196. ++ ++Broke password-protected odf document reading. ++ ++Signed-off-by: Stephan Bergmann ++Signed-off-by: Bjoern Michaelsen ++Signed-off-by: Petr Mladek ++--- ++ package/source/zipapi/ZipFile.cxx | 8 +------- ++ 1 files changed, 1 insertions(+), 7 deletions(-) ++ ++diff --git a/package/source/zipapi/ZipFile.cxx b/package/source/zipapi/ZipFile.cxx ++index 03a0108..fb56c28 100644 ++--- package/source/zipapi/ZipFile.cxx +++++ package/source/zipapi/ZipFile.cxx ++@@ -802,7 +802,7 @@ sal_Bool ZipFile::readLOC( ZipEntry &rEntry ) ++ ++ // the method can be reset for internal use so it is not checked ++ bBroken = rEntry.nVersion != nVersion ++- || rEntry.nMethod != nHow +++ || rEntry.nFlag != nFlag ++ || rEntry.nTime != nTime ++ || rEntry.nPathLen != nPathLen ++ || !rEntry.sPath.equals( sLOCPath ); ++@@ -812,12 +812,6 @@ sal_Bool ZipFile::readLOC( ZipEntry &rEntry ) ++ bBroken = sal_True; ++ } ++ ++- // ignore bits 1 & 2 for normal deflate algo - they're purely informative ++- if( nHow != 8 && nHow != 9 ) ++- bBroken = bBroken || rEntry.nFlag != nFlag; ++- else if( (rEntry.nFlag & ~6L) != (nFlag & ~6L) ) ++- bBroken = true; ++- ++ if ( bBroken && !bRecoveryMode ) ++ throw ZipIOException( OUString( RTL_CONSTASCII_USTRINGPARAM( "The stream seems to be broken!" ) ), ++ Reference< XInterface >() ); ++-- ++1.7.5.4 ++ ++reverting on repository extensions from libreoffice-3.4.4.2 to merge-base cb97183e6bd55f3fc1976af7ffe1c6e0b239967e ++diff --git a/nlpsolver/locale/NLPSolverCommon_gd.properties b/nlpsolver/locale/NLPSolverCommon_gd.properties ++deleted file mode 100644 ++index 83fa728..0000000 ++--- nlpsolver/locale/NLPSolverCommon_gd.properties +++++ /dev/null ++@@ -1,22 +0,0 @@ ++-# x-no-translate ++-#BaseNLPSolver ++-NLPSolverCommon.Properties.AssumeNonNegative=Cuir mar fhiacham caochladairean neo-\u00E0icheil ++-#BaseEvolutionarySolver ++-NLPSolverCommon.Properties.SwarmSize=Meud an sgaotha ++-NLPSolverCommon.Properties.LibrarySize=Meud na leabhar-lainn ++-NLPSolverCommon.Properties.LearningCycles=Cuairtean ionnsachaidh ++-NLPSolverCommon.Properties.GuessVariableRange=Tomhas air cr\u00ECochan nan caochladairean ++-NLPSolverCommon.Properties.VariableRangeThreshold=Stairsneach cr\u00ECochan nan caochladairean (nuair a nithear tomhas) ++-NLPSolverCommon.Properties.UseACRComparator=Cleachd coimeasaiche ACR (an \u00E0ite BCH) ++-NLPSolverCommon.Properties.UseRandomStartingPoint=Cleachd puing t\u00F2iseachaidh air thuaiream ++-NLPSolverCommon.Properties.StagnationLimit=Cr\u00ECoch na neo-ghluasadachd ++-NLPSolverCommon.Properties.Tolerance=Fulangas na neo-ghluasadachd ++-NLPSolverCommon.Properties.EnhancedSolverStatus=Seall staid mheudaichte an fhuasglair ++-#DEPS ++-NLPSolverCommon.Properties.AgentSwitchRate=Reat suidseadh \u00E0idseint (Coltachd DE) ++-NLPSolverCommon.Properties.DEFactor=DE: Factar sg\u00E8ilidh (0-1.2) ++-NLPSolverCommon.Properties.DECR=DE: Coltachd Crossover (0-1) ++-NLPSolverCommon.Properties.PSC1=PS: Cunbhalachan cognatach ++-NLPSolverCommon.Properties.PSC2=PS: Cunbhalachan s\u00F2isealta ++-NLPSolverCommon.Properties.PSWeight=PS: Co-\u00E8ifeachd cuingealachaidh ++-NLPSolverCommon.Properties.PSCL=PS: Coltachd m\u00F9thaidh (0-0.005) ++diff --git a/nlpsolver/locale/NLPSolverStatusDialog_gd.properties b/nlpsolver/locale/NLPSolverStatusDialog_gd.properties ++deleted file mode 100644 ++index 4bbe57a..0000000 ++--- nlpsolver/locale/NLPSolverStatusDialog_gd.properties +++++ /dev/null ++@@ -1,28 +0,0 @@ ++-# x-no-translate ++-#Dialog ++-NLPSolverStatusDialog.Dialog.Caption=Staid an fhuasglair ++-#Controls ++-NLPSolverStatusDialog.Controls.lblSolution=Am fuasgladh l\u00E0ithreach: ++-NLPSolverStatusDialog.Controls.lblIteration=Ath-nochdaidhean: ++-NLPSolverStatusDialog.Controls.lblStagnation=Neo-ghluasadachd: ++-NLPSolverStatusDialog.Controls.lblRuntime=\u00D9ine ruith: ++-NLPSolverStatusDialog.Controls.btnStop=Cuir stad air ++-NLPSolverStatusDialog.Controls.btnOK=Ceart ma-th\u00E0 ++-NLPSolverStatusDialog.Controls.btnContinue=Lean air adhart ++-#Messages ++-NLPSolverStatusDialog.Message.StopIteration=R\u00E0inig thu na tha ceadaichte de ath-nochdaidhean. ++-NLPSolverStatusDialog.Message.StopStagnation=Stad am pr\u00F2iseas air sg\u00E0th neo-ghluasadachd. ++-NLPSolverStatusDialog.Message.StopUser=Stad an cleachdaiche am pr\u00F2iseas. ++-NLPSolverStatusDialog.Message.CurrentIteration=Stad am pr\u00F2iseas aig ath-nochdadh %d \u00E0 %d. ++-#Time formatting ++-NLPSolverStatusDialog.Time.Nanoseconds=Nano-dhiogan ++-NLPSolverStatusDialog.Time.Microseconds=Micreo-dhiogan ++-NLPSolverStatusDialog.Time.Milliseconds=Mille-dhiogan ++-NLPSolverStatusDialog.Time.Second=Diog ++-NLPSolverStatusDialog.Time.Seconds=Diogan ++-NLPSolverStatusDialog.Time.Minute=Mionaid ++-NLPSolverStatusDialog.Time.Minutes=Mionaidean ++-NLPSolverStatusDialog.Time.Hour=Uair a th\u00ECde ++-NLPSolverStatusDialog.Time.Hours=Uairean a th\u00ECde ++-NLPSolverStatusDialog.Time.Day=Latha ++-NLPSolverStatusDialog.Time.Days=L\u00E0ithean ++commits on repository extensions merge-base cb97183e6bd55f3fc1976af7ffe1c6e0b239967e to libreoffice-3.4.5.2 ++From 39e717ad229c2584c8024da08f0d1b2f6a45dee1 Mon Sep 17 00:00:00 2001 ++From: Andras Timar ++Date: Mon, 31 Oct 2011 20:36:19 +0100 ++Subject: [extensions 1/6] Scottish Gaelic (gd) translation ++ ++--- ++ nlpsolver/locale/NLPSolverCommon_gd.properties | 22 +++++++++++++++ ++ .../locale/NLPSolverStatusDialog_gd.properties | 28 ++++++++++++++++++++ ++ 2 files changed, 50 insertions(+), 0 deletions(-) ++ create mode 100644 nlpsolver/locale/NLPSolverCommon_gd.properties ++ create mode 100644 nlpsolver/locale/NLPSolverStatusDialog_gd.properties ++ ++diff --git a/nlpsolver/locale/NLPSolverCommon_gd.properties b/nlpsolver/locale/NLPSolverCommon_gd.properties ++new file mode 100644 ++index 0000000..83fa728 ++--- /dev/null +++++ nlpsolver/locale/NLPSolverCommon_gd.properties ++@@ -0,0 +1,22 @@ +++# x-no-translate +++#BaseNLPSolver +++NLPSolverCommon.Properties.AssumeNonNegative=Cuir mar fhiacham caochladairean neo-\u00E0icheil +++#BaseEvolutionarySolver +++NLPSolverCommon.Properties.SwarmSize=Meud an sgaotha +++NLPSolverCommon.Properties.LibrarySize=Meud na leabhar-lainn +++NLPSolverCommon.Properties.LearningCycles=Cuairtean ionnsachaidh +++NLPSolverCommon.Properties.GuessVariableRange=Tomhas air cr\u00ECochan nan caochladairean +++NLPSolverCommon.Properties.VariableRangeThreshold=Stairsneach cr\u00ECochan nan caochladairean (nuair a nithear tomhas) +++NLPSolverCommon.Properties.UseACRComparator=Cleachd coimeasaiche ACR (an \u00E0ite BCH) +++NLPSolverCommon.Properties.UseRandomStartingPoint=Cleachd puing t\u00F2iseachaidh air thuaiream +++NLPSolverCommon.Properties.StagnationLimit=Cr\u00ECoch na neo-ghluasadachd +++NLPSolverCommon.Properties.Tolerance=Fulangas na neo-ghluasadachd +++NLPSolverCommon.Properties.EnhancedSolverStatus=Seall staid mheudaichte an fhuasglair +++#DEPS +++NLPSolverCommon.Properties.AgentSwitchRate=Reat suidseadh \u00E0idseint (Coltachd DE) +++NLPSolverCommon.Properties.DEFactor=DE: Factar sg\u00E8ilidh (0-1.2) +++NLPSolverCommon.Properties.DECR=DE: Coltachd Crossover (0-1) +++NLPSolverCommon.Properties.PSC1=PS: Cunbhalachan cognatach +++NLPSolverCommon.Properties.PSC2=PS: Cunbhalachan s\u00F2isealta +++NLPSolverCommon.Properties.PSWeight=PS: Co-\u00E8ifeachd cuingealachaidh +++NLPSolverCommon.Properties.PSCL=PS: Coltachd m\u00F9thaidh (0-0.005) ++diff --git a/nlpsolver/locale/NLPSolverStatusDialog_gd.properties b/nlpsolver/locale/NLPSolverStatusDialog_gd.properties ++new file mode 100644 ++index 0000000..4bbe57a ++--- /dev/null +++++ nlpsolver/locale/NLPSolverStatusDialog_gd.properties ++@@ -0,0 +1,28 @@ +++# x-no-translate +++#Dialog +++NLPSolverStatusDialog.Dialog.Caption=Staid an fhuasglair +++#Controls +++NLPSolverStatusDialog.Controls.lblSolution=Am fuasgladh l\u00E0ithreach: +++NLPSolverStatusDialog.Controls.lblIteration=Ath-nochdaidhean: +++NLPSolverStatusDialog.Controls.lblStagnation=Neo-ghluasadachd: +++NLPSolverStatusDialog.Controls.lblRuntime=\u00D9ine ruith: +++NLPSolverStatusDialog.Controls.btnStop=Cuir stad air +++NLPSolverStatusDialog.Controls.btnOK=Ceart ma-th\u00E0 +++NLPSolverStatusDialog.Controls.btnContinue=Lean air adhart +++#Messages +++NLPSolverStatusDialog.Message.StopIteration=R\u00E0inig thu na tha ceadaichte de ath-nochdaidhean. +++NLPSolverStatusDialog.Message.StopStagnation=Stad am pr\u00F2iseas air sg\u00E0th neo-ghluasadachd. +++NLPSolverStatusDialog.Message.StopUser=Stad an cleachdaiche am pr\u00F2iseas. +++NLPSolverStatusDialog.Message.CurrentIteration=Stad am pr\u00F2iseas aig ath-nochdadh %d \u00E0 %d. +++#Time formatting +++NLPSolverStatusDialog.Time.Nanoseconds=Nano-dhiogan +++NLPSolverStatusDialog.Time.Microseconds=Micreo-dhiogan +++NLPSolverStatusDialog.Time.Milliseconds=Mille-dhiogan +++NLPSolverStatusDialog.Time.Second=Diog +++NLPSolverStatusDialog.Time.Seconds=Diogan +++NLPSolverStatusDialog.Time.Minute=Mionaid +++NLPSolverStatusDialog.Time.Minutes=Mionaidean +++NLPSolverStatusDialog.Time.Hour=Uair a th\u00ECde +++NLPSolverStatusDialog.Time.Hours=Uairean a th\u00ECde +++NLPSolverStatusDialog.Time.Day=Latha +++NLPSolverStatusDialog.Time.Days=L\u00E0ithean ++-- ++1.7.5.4 ++ ++ ++From 2270e85f5cf742ec58582ccf54bd22515148e346 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= ++Date: Fri, 4 Nov 2011 16:36:44 +0000 ++Subject: [extensions 2/6] back-port this fix to build with non sun/oracle ++ derived jdk's, e.g. libgcj ++ ++--- ++ .../pentaho/output/OfficeDocumentReportTarget.java | 10 ++++++---- ++ 1 files changed, 6 insertions(+), 4 deletions(-) ++ ++diff --git a/reportbuilder/java/com/sun/star/report/pentaho/output/OfficeDocumentReportTarget.java b/reportbuilder/java/com/sun/star/report/pentaho/output/OfficeDocumentReportTarget.java ++index 852f58e..6d3321c 100644 ++--- reportbuilder/java/com/sun/star/report/pentaho/output/OfficeDocumentReportTarget.java +++++ reportbuilder/java/com/sun/star/report/pentaho/output/OfficeDocumentReportTarget.java ++@@ -41,7 +41,6 @@ import com.sun.star.report.pentaho.model.OfficeStyles; ++ import com.sun.star.report.pentaho.model.OfficeStylesCollection; ++ import com.sun.star.report.pentaho.styles.LengthCalculator; ++ import com.sun.star.report.pentaho.styles.StyleMapper; ++-import com.sun.org.apache.xerces.internal.parsers.DOMParser; ++ import java.util.logging.Level; ++ import java.util.logging.Logger; ++ import javax.xml.transform.OutputKeys; ++@@ -49,6 +48,8 @@ import javax.xml.transform.Transformer; ++ import javax.xml.transform.TransformerFactory; ++ import javax.xml.transform.dom.DOMSource; ++ import javax.xml.transform.stream.StreamResult; +++import javax.xml.parsers.DocumentBuilderFactory; +++import javax.xml.parsers.DocumentBuilder; ++ import org.w3c.dom.Document; ++ import org.w3c.dom.Node; ++ import org.w3c.dom.NodeList; ++@@ -1058,9 +1059,10 @@ public abstract class OfficeDocumentReportTarget extends AbstractReportTarget ++ try ++ { ++ inputStream = getInputRepository().createInputStream("meta.xml"); ++- DOMParser dOMParser = new DOMParser(); ++- dOMParser.parse(new InputSource(inputStream)); ++- Document document = dOMParser.getDocument(); +++ DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); +++ DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); +++ Document document = dBuilder.parse(new InputSource(inputStream)); +++ ++ NodeList nl = document.getElementsByTagName("document-meta/meta/generator"); ++ Node node = document.getFirstChild().getFirstChild().getFirstChild().getFirstChild(); ++ String creator = node.getNodeValue(); ++-- ++1.7.5.4 ++ ++ ++From c3df01143b0b988aa3eb6980c8f4df6f66bf518c Mon Sep 17 00:00:00 2001 ++From: Andras Timar ++Date: Tue, 13 Dec 2011 13:13:41 +0100 ++Subject: [extensions 3/6] URL change from OOo wiki to TDF wiki ++ ++--- ++ swext/mediawiki/help/wikiaccount.xhp | 2 +- ++ 1 files changed, 1 insertions(+), 1 deletions(-) ++ ++diff --git a/swext/mediawiki/help/wikiaccount.xhp b/swext/mediawiki/help/wikiaccount.xhp ++index 8d1d57b..b2772bc 100644 ++--- swext/mediawiki/help/wikiaccount.xhp +++++ swext/mediawiki/help/wikiaccount.xhp ++@@ -49,7 +49,7 @@ ++ Enter your password on the MediaWiki server. Leave empty for anonymous access.Save password ++ ++ Enable to store your password between sessions. The master password must be enabled, see Tools - Options - %PRODUCTNAME - Security. ++-Enter the Internet address of a Wiki server in a format like http://wiki.services.openoffice.org/wiki or copy the URL from a web browser. +++Enter the Internet address of a Wiki server in a format like http://wiki.documentfoundation.org or copy the URL from a web browser. ++ If the Wiki allows anonymous access, you can leave the account text boxes empty. Else enter your user name and password. ++ If you have enabled the master password feature on the Security tab page of the Tools - Options - %PRODUCTNAME dialog, then the software can store your password and automatically insert the data where necessary. Enable the "Save password" checkbox to store your password. ++ ++-- ++1.7.5.4 ++ ++reverting on repository extras from libreoffice-3.4.4.2 to merge-base aa182070faebb79beb17c71c695f3067bf6de085 ++commits on repository extras merge-base aa182070faebb79beb17c71c695f3067bf6de085 to libreoffice-3.4.5.2 ++reverting on repository filters from libreoffice-3.4.4.2 to merge-base a4108bd7dbd13bac424af2947ecab2d38128826a ++diff --git a/filter/source/msfilter/svdfppt.cxx b/filter/source/msfilter/svdfppt.cxx ++index 760e726..b773a08 100644 ++--- filter/source/msfilter/svdfppt.cxx +++++ filter/source/msfilter/svdfppt.cxx ++@@ -1088,10 +1088,12 @@ SdrObject* SdrEscherImport::ProcessObj( SvStream& rSt, DffObjData& rObjData, voi ++ } ++ pTObj->SetMergedItem( SvxFrameDirectionItem( bVerticalText ? FRMDIR_VERT_TOP_RIGHT : FRMDIR_HORI_LEFT_TOP, EE_PARA_WRITINGDIR ) ); ++ ++- //Autofit text only if there is no auto grow height and width ++- //See fdo#41245 ++- if (bAutoFit && !bAutoGrowHeight && !bAutoGrowWidth) +++ if (bAutoFit) ++ { +++ // disable both, defeats purpose of autofit +++ // otherwise +++ bAutoGrowHeight = sal_False; +++ bAutoGrowWidth = sal_False; ++ pTObj->SetMergedItem( SdrTextFitToSizeTypeItem(SDRTEXTFIT_AUTOFIT) ); ++ } ++ ++commits on repository filters merge-base a4108bd7dbd13bac424af2947ecab2d38128826a to libreoffice-3.4.5.2 ++From 14e76658d05343eaf8c7d9dd20402ee267cbd957 Mon Sep 17 00:00:00 2001 ++From: Arnaud Versini ++Date: Tue, 25 Oct 2011 19:49:34 +0200 ++Subject: [filters 1/7] Fix fdo#41245 : Auto fit text VIEWING too small in PPT ++ ++Signed-off-by: Thorsten Behrens ++--- ++ filter/source/msfilter/svdfppt.cxx | 8 +++----- ++ 1 files changed, 3 insertions(+), 5 deletions(-) ++ ++diff --git a/filter/source/msfilter/svdfppt.cxx b/filter/source/msfilter/svdfppt.cxx ++index b773a08..760e726 100644 ++--- filter/source/msfilter/svdfppt.cxx +++++ filter/source/msfilter/svdfppt.cxx ++@@ -1088,12 +1088,10 @@ SdrObject* SdrEscherImport::ProcessObj( SvStream& rSt, DffObjData& rObjData, voi ++ } ++ pTObj->SetMergedItem( SvxFrameDirectionItem( bVerticalText ? FRMDIR_VERT_TOP_RIGHT : FRMDIR_HORI_LEFT_TOP, EE_PARA_WRITINGDIR ) ); ++ ++- if (bAutoFit) +++ //Autofit text only if there is no auto grow height and width +++ //See fdo#41245 +++ if (bAutoFit && !bAutoGrowHeight && !bAutoGrowWidth) ++ { ++- // disable both, defeats purpose of autofit ++- // otherwise ++- bAutoGrowHeight = sal_False; ++- bAutoGrowWidth = sal_False; ++ pTObj->SetMergedItem( SdrTextFitToSizeTypeItem(SDRTEXTFIT_AUTOFIT) ); ++ } ++ ++-- ++1.7.5.4 ++ ++ ++From 5c613fa40a60cbd2c2664783a0aaebee6dfc4309 Mon Sep 17 00:00:00 2001 ++From: Muthu Subramanian ++Date: Wed, 2 Nov 2011 13:50:20 +0530 ++Subject: [filters 2/7] n#706792: Fix crash while opening certain pptx files. ++ ++Signed-off-by: Lionel Elie Mamane ++--- ++ oox/source/drawingml/chart/seriesconverter.cxx | 2 +- ++ 1 files changed, 1 insertions(+), 1 deletions(-) ++ ++diff --git a/oox/source/drawingml/chart/seriesconverter.cxx b/oox/source/drawingml/chart/seriesconverter.cxx ++index 2a2564f..454496f 100644 ++--- oox/source/drawingml/chart/seriesconverter.cxx +++++ oox/source/drawingml/chart/seriesconverter.cxx ++@@ -196,7 +196,7 @@ void DataLabelConverter::convertFromModel( const Reference< XDataSeries >& rxDat ++ PropertySet aPropSet( rxDataSeries->getDataPointByIndex( mrModel.mnIndex ) ); ++ lclConvertLabelFormatting( aPropSet, getFormatter(), mrModel, rTypeGroup, false ); ++ ++- if( !mrModel.mxLayout->mbAutoLayout ) +++ if( mrModel.mxLayout && !mrModel.mxLayout->mbAutoLayout ) ++ { ++ // bnc#694340 - nasty hack - chart2 cannot individually ++ // place data labels, let's try to find a useful ++-- ++1.7.5.4 ++ ++ ++From 850b17faca7d7aba1c5e0f7deb452825063e06ce Mon Sep 17 00:00:00 2001 ++From: Miklos Vajna ++Date: Wed, 8 Jun 2011 19:47:31 +0200 ++Subject: [filters 5/7] dmapper: fix NS_sprm::LN_CFDStrike with zero nIntValue ++ ++Signed-off-by: Petr Mladek ++Signed-off-by: Lubos Lunak ++Signed-off-by: Cedric Bosdonnat ++--- ++ writerfilter/source/dmapper/DomainMapper.cxx | 2 +- ++ 1 files changed, 1 insertions(+), 1 deletions(-) ++ ++diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx ++index f8b32c8..a182ee7 100644 ++--- writerfilter/source/dmapper/DomainMapper.cxx +++++ writerfilter/source/dmapper/DomainMapper.cxx ++@@ -1968,7 +1968,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType ++ break; ++ case NS_sprm::LN_CFDStrike : /*sprmCFDStrike double strike through*/ ++ rContext->Insert(ePropertyId, true, ++- uno::makeAny( awt::FontStrikeout::DOUBLE ) ); +++ uno::makeAny( nIntValue ? awt::FontStrikeout::DOUBLE : awt::FontStrikeout::NONE ) ); ++ break; ++ case NS_sprm::LN_CFOutline: /*sprmCFOutline*/ ++ case NS_sprm::LN_CFShadow: /*sprmCFShadow*/ ++-- ++1.7.5.4 ++ ++ ++From 0623e3db604ab3504f5f074dcfddbb47b5b995e9 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= ++Date: Wed, 21 Dec 2011 17:35:39 +0100 ++Subject: [filters 6/7] avoid looping on busted escher records ++ ++Signed-off-by: Petr Mladek ++Signed-off-by: Stephan Bergmann ++Signed-off-by: Lubos Lunak ++--- ++ filter/inc/filter/msfilter/msdffimp.hxx | 17 +++++++++++-- ++ filter/source/msfilter/msdffimp.cxx | 40 ++++++++++++++++++++++++++---- ++ 2 files changed, 48 insertions(+), 9 deletions(-) ++ ++diff --git a/filter/inc/filter/msfilter/msdffimp.hxx b/filter/inc/filter/msfilter/msdffimp.hxx ++index c1a0294..9344084 100644 ++--- filter/inc/filter/msfilter/msdffimp.hxx +++++ filter/inc/filter/msfilter/msdffimp.hxx ++@@ -77,9 +77,20 @@ public: ++ bool IsContainer() const { return nRecVer == DFF_PSFLAG_CONTAINER; } ++ sal_uLong GetRecBegFilePos() const { return nFilePos; } ++ sal_uLong GetRecEndFilePos() const { return nFilePos + DFF_COMMON_RECORD_HEADER_SIZE + nRecLen; } ++- void SeekToEndOfRecord(SvStream& rIn) const { rIn.Seek(nFilePos + DFF_COMMON_RECORD_HEADER_SIZE + nRecLen ); } ++- void SeekToContent( SvStream& rIn) const { rIn.Seek(nFilePos + DFF_COMMON_RECORD_HEADER_SIZE ); } ++- void SeekToBegOfRecord(SvStream& rIn) const { rIn.Seek( nFilePos ); } +++ bool SeekToEndOfRecord(SvStream& rIn) const +++ { +++ sal_Size nPos = nFilePos + DFF_COMMON_RECORD_HEADER_SIZE + nRecLen; +++ return nPos == rIn.Seek(nPos); +++ } +++ bool SeekToContent(SvStream& rIn) const +++ { +++ sal_Size nPos = nFilePos + DFF_COMMON_RECORD_HEADER_SIZE; +++ return nPos == rIn.Seek(nPos); +++ } +++ bool SeekToBegOfRecord(SvStream& rIn) const +++ { +++ return nFilePos == rIn.Seek(nFilePos); +++ } ++ ++ MSFILTER_DLLPUBLIC friend SvStream& operator>>(SvStream& rIn, DffRecordHeader& rRec); ++ ++diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx ++index aabba56..5764c66 100644 ++--- filter/source/msfilter/msdffimp.cxx +++++ filter/source/msfilter/msdffimp.cxx ++@@ -156,6 +156,11 @@ using namespace container ; ++ static sal_uInt32 nMSOleObjCntr = 0; ++ #define MSO_OLE_Obj "MSO_OLE_Obj" ++ +++/*************************************************************************/ +++bool lclGood(const SvStream &rStream) +++{ +++ return rStream.GetError() == 0 && !rStream.IsEof(); +++} ++ ++ /*************************************************************************/ ++ sal_Bool Impl_OlePres::Read( SvStream & rStm ) ++@@ -3545,7 +3550,7 @@ sal_Bool SvxMSDffManager::SeekToShape( SvStream& rSt, void* /* pClientData */, s ++ rSt >> aEscherF002Hd; ++ sal_uLong nEscherF002End = aEscherF002Hd.GetRecEndFilePos(); ++ DffRecordHeader aEscherObjListHd; ++- while ( rSt.Tell() < nEscherF002End ) +++ while (lclGood(rSt) && rSt.Tell() < nEscherF002End) ++ { ++ rSt >> aEscherObjListHd; ++ if ( aEscherObjListHd.nRecVer != 0xf ) ++@@ -3579,9 +3584,14 @@ bool SvxMSDffManager::SeekToRec( SvStream& rSt, sal_uInt16 nRecId, sal_uLong nMa ++ bool bRet = sal_False; ++ sal_uLong nFPosMerk = rSt.Tell(); // FilePos merken fuer ggf. spaetere Restauration ++ DffRecordHeader aHd; +++ // make sure that we move somewhere with every iteration +++ sal_Size nStPos; ++ do ++ { +++ nStPos = rSt.Tell(); ++ rSt >> aHd; +++ if (!lclGood(rSt)) +++ break; ++ if ( aHd.nRecType == nRecId ) ++ { ++ if ( nSkipCount ) ++@@ -3596,9 +3606,13 @@ bool SvxMSDffManager::SeekToRec( SvStream& rSt, sal_uInt16 nRecId, sal_uLong nMa ++ } ++ } ++ if ( !bRet ) ++- aHd.SeekToEndOfRecord( rSt ); +++ { +++ bool bSeekSuccess = aHd.SeekToEndOfRecord( rSt ); +++ if (!bSeekSuccess) +++ break; +++ } ++ } ++- while ( rSt.GetError() == 0 && rSt.Tell() < nMaxFilePos && !bRet ); +++ while ( lclGood(rSt) && rSt.Tell() < nMaxFilePos && rSt.Tell() != nStPos && !bRet ); ++ if ( !bRet ) ++ rSt.Seek( nFPosMerk ); // FilePos restaurieren ++ return bRet; ++@@ -6187,10 +6201,18 @@ void SvxMSDffManager::GetFidclData( long nOffsDggL ) ++ ++ if ( mnIdClusters-- > 2 ) ++ { ++- if ( aDggAtomHd.nRecLen == ( mnIdClusters * sizeof( FIDCL ) + 16 ) ) +++ const sal_Size nFIDCLsize = sizeof(sal_uInt32) * 2; +++ if ( aDggAtomHd.nRecLen == ( mnIdClusters * nFIDCLsize + 16 ) ) ++ { +++ sal_Size nStCtrlCurr = rStCtrl.Tell(); +++ sal_Size nStCtrlEnd = rStCtrl.Seek(STREAM_SEEK_TO_END); +++ sal_Size nMaxEntriesPossible = ( nStCtrlEnd - nStCtrlCurr ) / nFIDCLsize; +++ rStCtrl.Seek(nStCtrlCurr); +++ mnIdClusters = std::min(nMaxEntriesPossible, static_cast(mnIdClusters)); +++ ++ mpFidcls = new FIDCL[ mnIdClusters ]; ++- for ( sal_uInt32 i = 0; i < mnIdClusters; i++ ) +++ memset(mpFidcls, 0, mnIdClusters * sizeof(FIDCL)); +++ for (sal_uInt32 i = 0; i < mnIdClusters; ++i) ++ { ++ rStCtrl >> mpFidcls[ i ].dgid ++ >> mpFidcls[ i ].cspidCur; ++@@ -6989,6 +7011,8 @@ sal_Bool SvxMSDffManager::ReadCommonRecordHeader(DffRecordHeader& rRec, SvStream ++ } ++ ++ +++sal_uInt32 nMaxLegalRecordLength = SAL_MAX_UINT32 - DFF_COMMON_RECORD_HEADER_SIZE; +++ ++ /* auch static */ ++ sal_Bool SvxMSDffManager::ReadCommonRecordHeader( SvStream& rSt, ++ sal_uInt8& rVer, ++@@ -7000,7 +7024,11 @@ sal_Bool SvxMSDffManager::ReadCommonRecordHeader( SvStream& rSt, ++ rSt >> nTmp >> rFbt >> rLength; ++ rVer = sal::static_int_cast< sal_uInt8 >(nTmp & 15); ++ rInst = nTmp >> 4; ++- return rSt.GetError() == 0; +++ if (!lclGood(rSt)) +++ return false; +++ if (rLength > nMaxLegalRecordLength) +++ return false; +++ return true; ++ } ++ ++ ++-- ++1.7.5.4 ++ ++reverting on repository help from libreoffice-3.4.4.2 to merge-base 841c1969e3b7ff39b1d7123c7350753861e5332f ++commits on repository help merge-base 841c1969e3b7ff39b1d7123c7350753861e5332f to libreoffice-3.4.5.2 ++reverting on repository impress from libreoffice-3.4.4.2 to merge-base 71781e0c42ceb3c3985a36f5acb1987ea213253e ++commits on repository impress merge-base 71781e0c42ceb3c3985a36f5acb1987ea213253e to libreoffice-3.4.5.2 ++From 4a1f6199251d3f09951a3c3573d60ba822fe1332 Mon Sep 17 00:00:00 2001 ++From: Stephan Bergmann ++Date: Mon, 7 Nov 2011 21:23:24 +0100 ++Subject: [impress 1/5] Fix build of ogltrans.component ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++...now that postprocess/packcomponents wants to use it. ++ ++Signed-off-by: Caolán McNamara ++--- ++ slideshow/source/engine/OGLTrans/mac/makefile.mk | 8 ++++++++ ++ slideshow/source/engine/OGLTrans/unx/makefile.mk | 8 ++++++++ ++ slideshow/source/engine/OGLTrans/win/makefile.mk | 4 ++-- ++ 3 files changed, 18 insertions(+), 2 deletions(-) ++ ++diff --git a/slideshow/source/engine/OGLTrans/mac/makefile.mk b/slideshow/source/engine/OGLTrans/mac/makefile.mk ++index aaaedb9..8f08080 100644 ++--- slideshow/source/engine/OGLTrans/mac/makefile.mk +++++ slideshow/source/engine/OGLTrans/mac/makefile.mk ++@@ -85,3 +85,11 @@ DEF1EXPORTFILE=../exports.dxp ++ # ========================================================================== ++ ++ .INCLUDE : target.mk +++ +++ALLTAR : $(MISC)/ogltrans.component +++ +++$(MISC)/ogltrans.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \ +++ ../ogltrans.component +++ $(XSLTPROC) --nonet --stringparam uri \ +++ '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL1TARGETN:f)' -o $@ \ +++ $(SOLARENV)/bin/createcomponent.xslt ../ogltrans.component ++diff --git a/slideshow/source/engine/OGLTrans/unx/makefile.mk b/slideshow/source/engine/OGLTrans/unx/makefile.mk ++index 31066e3..2b31ac7 100644 ++--- slideshow/source/engine/OGLTrans/unx/makefile.mk +++++ slideshow/source/engine/OGLTrans/unx/makefile.mk ++@@ -71,3 +71,11 @@ DEF1EXPORTFILE=../exports.dxp ++ # ========================================================================== ++ ++ .INCLUDE : target.mk +++ +++ALLTAR : $(MISC)/ogltrans.component +++ +++$(MISC)/ogltrans.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \ +++ ../ogltrans.component +++ $(XSLTPROC) --nonet --stringparam uri \ +++ '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL1TARGETN:f)' -o $@ \ +++ $(SOLARENV)/bin/createcomponent.xslt ../ogltrans.component ++diff --git a/slideshow/source/engine/OGLTrans/win/makefile.mk b/slideshow/source/engine/OGLTrans/win/makefile.mk ++index 7da3787..7f0ac88 100644 ++--- slideshow/source/engine/OGLTrans/win/makefile.mk +++++ slideshow/source/engine/OGLTrans/win/makefile.mk ++@@ -74,7 +74,7 @@ DEF1EXPORTFILE=../exports.dxp ++ ALLTAR : $(MISC)/ogltrans.component ++ ++ $(MISC)/ogltrans.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \ ++- ogltrans.component +++ ../ogltrans.component ++ $(XSLTPROC) --nonet --stringparam uri \ ++ '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL1TARGETN:f)' -o $@ \ ++- $(SOLARENV)/bin/createcomponent.xslt ogltrans.component +++ $(SOLARENV)/bin/createcomponent.xslt ../ogltrans.component ++-- ++1.7.5.4 ++ ++ ++From 9bd7655d4bf1df440ed6af11c213bfa346b5b287 Mon Sep 17 00:00:00 2001 ++From: Thorsten Behrens ++Date: Wed, 16 Nov 2011 12:37:04 +0100 ++Subject: [impress 2/5] Fix slideshow crasher ++ ++Recursive event loop killed SlideshowImpl object under my hands - ++make it stay until we pop out of callstack again. ++ ++Signed-off-by: Michael Meeks ++--- ++ sd/source/ui/slideshow/slideshowimpl.cxx | 5 ++++- ++ 1 files changed, 4 insertions(+), 1 deletions(-) ++ ++diff --git a/sd/source/ui/slideshow/slideshowimpl.cxx b/sd/source/ui/slideshow/slideshowimpl.cxx ++index 8a400d2..9320719 100644 ++--- sd/source/ui/slideshow/slideshowimpl.cxx +++++ sd/source/ui/slideshow/slideshowimpl.cxx ++@@ -1881,6 +1881,9 @@ IMPL_LINK( SlideshowImpl, updateHdl, Timer*, EMPTYARG ) ++ ++ IMPL_LINK( SlideshowImpl, PostYieldListener, void*, EMPTYARG ) ++ { +++ // prevent me from deletion when recursing (App::Reschedule does) +++ const rtl::Reference this_(this); +++ ++ Application::EnableNoYieldMode(false); ++ Application::RemovePostYieldListener(LINK(this, SlideshowImpl, PostYieldListener)); ++ Application::Reschedule(true); // fix for fdo#32861 - process ++@@ -1896,7 +1899,7 @@ IMPL_LINK( SlideshowImpl, PostYieldListener, void*, EMPTYARG ) ++ ++ sal_Int32 SlideshowImpl::updateSlideShow (void) ++ { ++- // doing some nMagic +++ // prevent me from deletion when recursing (App::EnableYieldMode does) ++ const rtl::Reference this_(this); ++ ++ Reference< XSlideShow > xShow( mxShow ); ++-- ++1.7.5.4 ++ ++reverting on repository libs-core from libreoffice-3.4.4.2 to merge-base 3c8462c3b6809829c786eb5ed1c5eb43b55c49a7 ++diff --git a/drawinglayer/inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx ++index 84139b0..1428a10 100644 ++--- drawinglayer/inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx +++++ drawinglayer/inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx ++@@ -33,7 +33,6 @@ ++ #include ++ #include ++ #include ++-#include ++ ++ ////////////////////////////////////////////////////////////////////////////// ++ ++@@ -111,11 +110,6 @@ namespace drawinglayer ++ return basegfx::fTools::equal(1.0, mfRightWidth); ++ } ++ ++- bool isSolidLine() const ++- { ++- return (mnStyle==STYLE_SOLID); ++- } ++- ++ bool isInsideUsed() const ++ { ++ return !basegfx::fTools::equalZero(mfLeftWidth); ++diff --git a/drawinglayer/source/primitive2d/borderlineprimitive2d.cxx b/drawinglayer/source/primitive2d/borderlineprimitive2d.cxx ++index 1a3b66c..33df59c 100644 ++--- drawinglayer/source/primitive2d/borderlineprimitive2d.cxx +++++ drawinglayer/source/primitive2d/borderlineprimitive2d.cxx ++@@ -29,7 +29,6 @@ ++ // MARKER(update_precomp.py): autogen include statement, do not remove ++ #include "precompiled_drawinglayer.hxx" ++ ++-#include ++ #include ++ #include ++ #include ++@@ -80,7 +79,7 @@ namespace drawinglayer ++ return basegfx::B2DPolyPolygon( clipPolygon ); ++ } ++ ++- Primitive2DSequence BorderLinePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const +++ Primitive2DSequence BorderLinePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const ++ { ++ Primitive2DSequence xRetval; ++ ++@@ -215,7 +214,6 @@ namespace drawinglayer ++ ++ // Get which is the line to show ++ bool bIsHairline = leftIsHairline(); ++- bool bIsSolidline = isSolidLine(); ++ double nWidth = getCorrectedLeftWidth(); ++ basegfx::BColor aColor = getRGBColorLeft(); ++ if ( basegfx::fTools::equal( 0.0, mfLeftWidth ) ) ++@@ -225,7 +223,7 @@ namespace drawinglayer ++ aColor = getRGBColorRight(); ++ } ++ ++- if(bIsHairline && bIsSolidline) +++ if(bIsHairline) ++ { ++ // create hairline primitive ++ aPolygon.append( getStart() ); ++@@ -239,13 +237,12 @@ namespace drawinglayer ++ { ++ // create filled polygon primitive ++ const basegfx::B2DVector aLineWidthOffset(((nWidth + 1) * 0.5) * aPerpendicular); ++- basegfx::B2DVector aScale( rViewInformation.getInverseObjectToViewTransformation() * aVector ); ++ ++ aPolygon.append( aTmpStart ); ++ aPolygon.append( aTmpEnd ); ++ ++ basegfx::B2DPolyPolygon aDashed = svtools::ApplyLineDashing( ++- aPolygon, getStyle(), MAP_PIXEL, aScale.getLength() ); +++ aPolygon, getStyle(), MAP_100TH_MM ); ++ for (sal_uInt32 i = 0; i < aDashed.count(); i++ ) ++ { ++ basegfx::B2DPolygon aDash = aDashed.getB2DPolygon( i ); ++diff --git a/drawinglayer/source/processor2d/vclprocessor2d.cxx b/drawinglayer/source/processor2d/vclprocessor2d.cxx ++index 4806cde..19648d4 100644 ++--- drawinglayer/source/processor2d/vclprocessor2d.cxx +++++ drawinglayer/source/processor2d/vclprocessor2d.cxx ++@@ -766,13 +766,9 @@ namespace drawinglayer ++ } ++ else ++ { ++- // remember that we enter a PolygonStrokePrimitive2D decomposition, ++- // used for AA thick line drawing ++- mnPolygonStrokePrimitive2D++; ++- ++ mpOutputDevice->DrawPolyPolygon(aLocalPolyPolygon); ++ ++- if(mnPolygonStrokePrimitive2D +++ if(mnPolygonStrokePrimitive2D ++ && getOptionsDrawinglayer().IsAntiAliasing() ++ && (mpOutputDevice->GetAntialiasing() & ANTIALIASING_ENABLE_B2DDRAW)) ++ { ++@@ -787,9 +783,6 @@ namespace drawinglayer ++ mpOutputDevice->DrawPolyLine(aLocalPolyPolygon.getB2DPolygon(a), 0.0); ++ } ++ } ++- ++- // leave PolygonStrokePrimitive2D ++- mnPolygonStrokePrimitive2D--; ++ } ++ } ++ ++commits on repository libs-core merge-base 3c8462c3b6809829c786eb5ed1c5eb43b55c49a7 to libreoffice-3.4.5.2 ++From 57b1dbeb8c2e4d4413c4a60e910bb94500cb80b4 Mon Sep 17 00:00:00 2001 ++From: Tomofumi Yagi ++Date: Wed, 26 Oct 2011 11:36:47 -0400 ++Subject: [libs-core 01/14] fdo#37129: Fix the drawing of dotted and dashed ++ borders in Calc. ++ ++Signed-off-by: Kohei Yoshida ++--- ++ .../primitive2d/borderlineprimitive2d.hxx | 6 ++++++ ++ .../source/primitive2d/borderlineprimitive2d.cxx | 9 ++++++--- ++ drawinglayer/source/processor2d/vclprocessor2d.cxx | 9 ++++++++- ++ 3 files changed, 20 insertions(+), 4 deletions(-) ++ ++diff --git a/drawinglayer/inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx ++index 1428a10..84139b0 100644 ++--- drawinglayer/inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx +++++ drawinglayer/inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx ++@@ -33,6 +33,7 @@ ++ #include ++ #include ++ #include +++#include ++ ++ ////////////////////////////////////////////////////////////////////////////// ++ ++@@ -110,6 +111,11 @@ namespace drawinglayer ++ return basegfx::fTools::equal(1.0, mfRightWidth); ++ } ++ +++ bool isSolidLine() const +++ { +++ return (mnStyle==STYLE_SOLID); +++ } +++ ++ bool isInsideUsed() const ++ { ++ return !basegfx::fTools::equalZero(mfLeftWidth); ++diff --git a/drawinglayer/source/primitive2d/borderlineprimitive2d.cxx b/drawinglayer/source/primitive2d/borderlineprimitive2d.cxx ++index 33df59c..1a3b66c 100644 ++--- drawinglayer/source/primitive2d/borderlineprimitive2d.cxx +++++ drawinglayer/source/primitive2d/borderlineprimitive2d.cxx ++@@ -29,6 +29,7 @@ ++ // MARKER(update_precomp.py): autogen include statement, do not remove ++ #include "precompiled_drawinglayer.hxx" ++ +++#include ++ #include ++ #include ++ #include ++@@ -79,7 +80,7 @@ namespace drawinglayer ++ return basegfx::B2DPolyPolygon( clipPolygon ); ++ } ++ ++- Primitive2DSequence BorderLinePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const +++ Primitive2DSequence BorderLinePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const ++ { ++ Primitive2DSequence xRetval; ++ ++@@ -214,6 +215,7 @@ namespace drawinglayer ++ ++ // Get which is the line to show ++ bool bIsHairline = leftIsHairline(); +++ bool bIsSolidline = isSolidLine(); ++ double nWidth = getCorrectedLeftWidth(); ++ basegfx::BColor aColor = getRGBColorLeft(); ++ if ( basegfx::fTools::equal( 0.0, mfLeftWidth ) ) ++@@ -223,7 +225,7 @@ namespace drawinglayer ++ aColor = getRGBColorRight(); ++ } ++ ++- if(bIsHairline) +++ if(bIsHairline && bIsSolidline) ++ { ++ // create hairline primitive ++ aPolygon.append( getStart() ); ++@@ -237,12 +239,13 @@ namespace drawinglayer ++ { ++ // create filled polygon primitive ++ const basegfx::B2DVector aLineWidthOffset(((nWidth + 1) * 0.5) * aPerpendicular); +++ basegfx::B2DVector aScale( rViewInformation.getInverseObjectToViewTransformation() * aVector ); ++ ++ aPolygon.append( aTmpStart ); ++ aPolygon.append( aTmpEnd ); ++ ++ basegfx::B2DPolyPolygon aDashed = svtools::ApplyLineDashing( ++- aPolygon, getStyle(), MAP_100TH_MM ); +++ aPolygon, getStyle(), MAP_PIXEL, aScale.getLength() ); ++ for (sal_uInt32 i = 0; i < aDashed.count(); i++ ) ++ { ++ basegfx::B2DPolygon aDash = aDashed.getB2DPolygon( i ); ++diff --git a/drawinglayer/source/processor2d/vclprocessor2d.cxx b/drawinglayer/source/processor2d/vclprocessor2d.cxx ++index 19648d4..4806cde 100644 ++--- drawinglayer/source/processor2d/vclprocessor2d.cxx +++++ drawinglayer/source/processor2d/vclprocessor2d.cxx ++@@ -766,9 +766,13 @@ namespace drawinglayer ++ } ++ else ++ { +++ // remember that we enter a PolygonStrokePrimitive2D decomposition, +++ // used for AA thick line drawing +++ mnPolygonStrokePrimitive2D++; +++ ++ mpOutputDevice->DrawPolyPolygon(aLocalPolyPolygon); ++ ++- if(mnPolygonStrokePrimitive2D +++ if(mnPolygonStrokePrimitive2D ++ && getOptionsDrawinglayer().IsAntiAliasing() ++ && (mpOutputDevice->GetAntialiasing() & ANTIALIASING_ENABLE_B2DDRAW)) ++ { ++@@ -783,6 +787,9 @@ namespace drawinglayer ++ mpOutputDevice->DrawPolyLine(aLocalPolyPolygon.getB2DPolygon(a), 0.0); ++ } ++ } +++ +++ // leave PolygonStrokePrimitive2D +++ mnPolygonStrokePrimitive2D--; ++ } ++ } ++ ++-- ++1.7.5.4 ++ ++ ++From 17351e5d7f110d3040905bfec81313806b0ecd43 Mon Sep 17 00:00:00 2001 ++From: Michael Meeks ++Date: Tue, 1 Nov 2011 12:21:49 +0000 ++Subject: [libs-core 02/14] add real alpha to markers ++ ++Signed-off-by: Thorsten Behrens ++--- ++ svx/source/svdraw/svdhdl.cxx | 12 ++---------- ++ 1 files changed, 2 insertions(+), 10 deletions(-) ++ ++diff --git a/svx/source/svdraw/svdhdl.cxx b/svx/source/svdraw/svdhdl.cxx ++index 385e939..7683dea 100644 ++--- svx/source/svdraw/svdhdl.cxx +++++ svx/source/svdraw/svdhdl.cxx ++@@ -101,18 +101,10 @@ public: ++ #define INDIVIDUAL_COUNT (4) ++ ++ SdrHdlBitmapSet::SdrHdlBitmapSet(sal_uInt16 nResId) ++-: maMarkersBitmap(), +++ : maMarkersBitmap(ResId(nResId, *ImpGetResMgr())), ++ // 14 kinds (BitmapMarkerKind) use index [0..5], 4 extra ++- maRealMarkers((KIND_COUNT * INDEX_COUNT) + INDIVIDUAL_COUNT) +++ maRealMarkers((KIND_COUNT * INDEX_COUNT) + INDIVIDUAL_COUNT) ++ { ++- // #101928# change color used for transparent parts to 0x00ff00ff (ImageList standard) ++- const Color aColTransparent(0x00ff00ff); ++- const Bitmap aBitmap(ResId(nResId, *ImpGetResMgr())); ++- const Bitmap aMask(aBitmap.CreateMask(aColTransparent)); ++- ++- // create a real BitmapEx with an AlphaMask ++- maMarkersBitmap = BitmapEx(aBitmap, aMask); ++- // maMarkersBitmap = BitmapEx(aBitmap, aColTransparent); ++ } ++ ++ SdrHdlBitmapSet::~SdrHdlBitmapSet() ++-- ++1.7.5.4 ++ ++ ++From 443e1b1566d678c79658f2a48aa4b088ed914fa3 Mon Sep 17 00:00:00 2001 ++From: Stephan Bergmann ++Date: Wed, 9 Nov 2011 08:37:56 +0100 ++Subject: [libs-core 03/14] Backport reading AES-encrypted ODF 1.2 documents ++ (as genereated by LibO 3.5). ++ ++This backports the reading half of CWS mav60 plus "Produce ++correct sha256 uri, consume correct uri and original spec typo." It spans the ++repos components, libs-core, libs-gui, and ure. ++--- ++ sfx2/source/appl/appopen.cxx | 5 +++-- ++ 1 files changed, 3 insertions(+), 2 deletions(-) ++ ++diff --git a/sfx2/source/appl/appopen.cxx b/sfx2/source/appl/appopen.cxx ++index 6ec4645..84f0cef 100644 ++--- sfx2/source/appl/appopen.cxx +++++ sfx2/source/appl/appopen.cxx ++@@ -288,8 +288,9 @@ private: ++ } ++ catch( const uno::Exception& ) ++ { ++- // unknown error, do not try to ask again ++- eResult = ::comphelper::DocPasswordVerifierResult_ABORT; +++ // unknown error, report it as wrong password +++ // TODO/LATER: we need an additional way to report unknown problems in this case +++ eResult = ::comphelper::DocPasswordVerifierResult_WRONG_PASSWORD; ++ } ++ return eResult; ++ } ++-- ++1.7.5.4 ++ ++ ++From 738622d199a64327048d6a40953499b9dca5c008 Mon Sep 17 00:00:00 2001 ++From: Michael Meeks ++Date: Mon, 25 Jul 2011 18:08:29 +0100 ++Subject: [libs-core 04/14] fdo#39520 - turn DocBasicItems into an rtl::Static ++ to improve shutdown on mac ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++Signed-off-by: Caolán McNamara ++--- ++ basic/source/classes/sb.cxx | 20 ++++++++++---------- ++ 1 files changed, 10 insertions(+), 10 deletions(-) ++ ++diff --git a/basic/source/classes/sb.cxx b/basic/source/classes/sb.cxx ++index f9cbab6..9ef8de3 100644 ++--- basic/source/classes/sb.cxx +++++ basic/source/classes/sb.cxx ++@@ -164,33 +164,33 @@ namespace { ++ ++ typedef ::rtl::Reference< DocBasicItem > DocBasicItemRef; ++ typedef boost::unordered_map< const StarBASIC *, DocBasicItemRef > DocBasicItemMap; ++- // ::rtl::OUStringHash, ::std::equal_to< ::rtl::OUString > > ModuleInitDependencyMap; ++ ++-static DocBasicItemMap GaDocBasicItems; +++class GaDocBasicItems : public rtl::Static {}; ++ ++ const DocBasicItem* lclFindDocBasicItem( const StarBASIC* pDocBasic ) ++ { ++- DocBasicItemMap::iterator it = GaDocBasicItems.find( pDocBasic ); ++- return (it != GaDocBasicItems.end()) ? it->second.get() : 0; +++ DocBasicItemMap::iterator it = GaDocBasicItems::get().find( pDocBasic ); +++ DocBasicItemMap::iterator end = GaDocBasicItems::get().end(); +++ return (it != end) ? it->second.get() : 0; ++ } ++ ++ void lclInsertDocBasicItem( StarBASIC& rDocBasic ) ++ { ++- DocBasicItemRef& rxDocBasicItem = GaDocBasicItems[ &rDocBasic ]; +++ DocBasicItemRef& rxDocBasicItem = GaDocBasicItems::get()[ &rDocBasic ]; ++ rxDocBasicItem.set( new DocBasicItem( rDocBasic ) ); ++ rxDocBasicItem->startListening(); ++ } ++ ++ void lclRemoveDocBasicItem( StarBASIC& rDocBasic ) ++ { ++- DocBasicItemMap::iterator it = GaDocBasicItems.find( &rDocBasic ); ++- if( it != GaDocBasicItems.end() ) +++ DocBasicItemMap::iterator it = GaDocBasicItems::get().find( &rDocBasic ); +++ if( it != GaDocBasicItems::get().end() ) ++ { ++ it->second->stopListening(); ++- GaDocBasicItems.erase( it ); +++ GaDocBasicItems::get().erase( it ); ++ } ++- DocBasicItemMap::iterator it_end = GaDocBasicItems.end(); ++- for( it = GaDocBasicItems.begin(); it != it_end; ++it ) +++ DocBasicItemMap::iterator it_end = GaDocBasicItems::get().end(); +++ for( it = GaDocBasicItems::get().begin(); it != it_end; ++it ) ++ it->second->clearDependingVarsOnDelete( rDocBasic ); ++ } ++ ++-- ++1.7.5.4 ++ ++ ++From da6cd222d3c72b102cead739686fd5ca71a84861 Mon Sep 17 00:00:00 2001 ++From: Lionel Elie Mamane ++Date: Tue, 22 Nov 2011 14:25:10 +0100 ++Subject: [libs-core 05/14] fdo#36555: pImplementationName is not a ++ compile-time constant ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++Signed-off-by: Caolán McNamara ++--- ++ connectivity/source/drivers/ado/Aservices.cxx | 2 +- ++ 1 files changed, 1 insertions(+), 1 deletions(-) ++ ++diff --git a/connectivity/source/drivers/ado/Aservices.cxx b/connectivity/source/drivers/ado/Aservices.cxx ++index 68600ba..69bd7c6 100644 ++--- connectivity/source/drivers/ado/Aservices.cxx +++++ connectivity/source/drivers/ado/Aservices.cxx ++@@ -59,7 +59,7 @@ struct ProviderRequest ++ sal_Char const* pImplementationName ++ ) ++ : xServiceManager(reinterpret_cast(pServiceManager)) ++- , sImplementationName(OUString(RTL_CONSTASCII_USTRINGPARAM(pImplementationName))) +++ , sImplementationName(OUString::createFromAscii(pImplementationName)) ++ { ++ } ++ ++-- ++1.7.5.4 ++ ++ ++From 35a93227b8306c76407e3183f6bb9e95fa7fb14d Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Fridrich=20=C5=A0trba?= ++Date: Mon, 5 Dec 2011 11:13:44 +0100 ++Subject: [libs-core 06/14] The ODG should have office:drawing after ++ office:body, not office:graphics ++ ++signed-off: Thorsten Behrens ++--- ++ xmloff/source/core/xmlexp.cxx | 2 ++ ++ 1 files changed, 2 insertions(+), 0 deletions(-) ++ ++diff --git a/xmloff/source/core/xmlexp.cxx b/xmloff/source/core/xmlexp.cxx ++index 064fb96..0c829b1 100644 ++--- xmloff/source/core/xmlexp.cxx +++++ xmloff/source/core/xmlexp.cxx ++@@ -1244,6 +1244,8 @@ void SvXMLExport::ImplExportContent() ++ GetXMLToken( XML_TRUE ) ); ++ eClass = XML_TEXT; ++ } +++ if ( XML_GRAPHICS == eClass ) +++ eClass = XML_DRAWING; ++ // ++ SetBodyAttributes(); ++ SvXMLElementExport aElem( *this, meClass != XML_TOKEN_INVALID, ++-- ++1.7.5.4 ++ ++ ++From 2263eb7178f7645a600a68ed04847346771355cf Mon Sep 17 00:00:00 2001 ++From: David Tardon ++Date: Thu, 22 Dec 2011 13:30:41 +0100 ++Subject: [libs-core 09/14] we need to include the localized file ++ ++This reverts commit 9d88c67c4cfa8e894d23ebe7924a9d630327ccda. ++ ++Signed-off-by: Petr Mladek ++Signed-off-by: Andras Timar ++Signed-off-by: Jan Holesovsky ++--- ++ svx/source/fmcomp/gridctrl.src | 2 +- ++ svx/source/form/fmexpl.src | 2 +- ++ svx/source/form/formshell.src | 2 +- ++ 3 files changed, 3 insertions(+), 3 deletions(-) ++ ++diff --git a/svx/source/fmcomp/gridctrl.src b/svx/source/fmcomp/gridctrl.src ++index b29af06..611df77 100644 ++--- svx/source/fmcomp/gridctrl.src +++++ svx/source/fmcomp/gridctrl.src ++@@ -27,7 +27,7 @@ ++ ++ #include "svx/fmresids.hrc" ++ #include ++-#include "globlmn_tmpl.hrc" +++#include "globlmn.hrc" ++ #include "fmhelp.hrc" ++ #include ++ ++diff --git a/svx/source/form/fmexpl.src b/svx/source/form/fmexpl.src ++index c6509d8..f4d56d3 100644 ++--- svx/source/form/fmexpl.src +++++ svx/source/form/fmexpl.src ++@@ -28,7 +28,7 @@ ++ #include ++ #include "svx/fmresids.hrc" ++ #include "fmexpl.hrc" ++-#include "globlmn_tmpl.hrc" +++#include "globlmn.hrc" ++ #include ++ #include "fmhelp.hrc" ++ ++diff --git a/svx/source/form/formshell.src b/svx/source/form/formshell.src ++index 369de22..5b9312a 100644 ++--- svx/source/form/formshell.src +++++ svx/source/form/formshell.src ++@@ -29,7 +29,7 @@ ++ #include ++ #include ++ #include ++-#include "globlmn_tmpl.hrc" +++#include "globlmn.hrc" ++ #include "helpid.hrc" ++ #include "fmhelp.hrc" ++ ++-- ++1.7.5.4 ++ ++ ++From 0bf04da04fcb100bbfd4470e8708a1555ac1461d Mon Sep 17 00:00:00 2001 ++From: Michael Stahl ++Date: Thu, 22 Dec 2011 23:10:14 +0100 ++Subject: [libs-core 10/14] fdo#44073: ODF export: fix layout grid invalid ODF ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++The following 3 attributes have been added in ODF 1.2, so don't write ++them into ODF 1.1 files: ++ ++style:layout-grid-base-width 20.297 ++style:layout-grid-snap-to 20.305 ++style:layout-grid-standard-mode 20.306 ++ ++Additionally, style:layout-grid-snap-to was written wrongly as ++style:layout-grid-snap-to-characters, which does not exist in any ODF ++spec. ++For backward compatibility with previous OOo/LO versions, write the ++wrong attribute in addition to the correct one in ODF extended mode, ++even though validators complain about it (consider removing that ++some years from now). ++ ++Signed-off-by: Cedric Bosdonnat ++Signed-off-by: Petr Mladek ++Signed-off-by: LuboÅ¡ Luňák ++--- ++ xmloff/inc/xmloff/PageMasterStyleMap.hxx | 1 + ++ xmloff/source/style/PageMasterExportPropMapper.cxx | 7 ++++++ ++ xmloff/source/style/PageMasterStyleMap.cxx | 21 +++++++++++++------ ++ 3 files changed, 22 insertions(+), 7 deletions(-) ++ ++diff --git a/xmloff/inc/xmloff/PageMasterStyleMap.hxx b/xmloff/inc/xmloff/PageMasterStyleMap.hxx ++index d81bd80..91c59e9 100644 ++--- xmloff/inc/xmloff/PageMasterStyleMap.hxx +++++ xmloff/inc/xmloff/PageMasterStyleMap.hxx ++@@ -97,6 +97,7 @@ ++ #define CTF_PM_STANDARD_MODE (XML_PM_CTF_START + 0x0055) ++ #define CTP_PM_GRID_BASE_WIDTH (XML_PM_CTF_START + 0x0056) ++ #define CTP_PM_GRID_SNAP_TO_CHARS (XML_PM_CTF_START + 0x0057) +++#define CTP_PM_GRID_SNAP_TO (XML_PM_CTF_START + 0x0058) ++ // header ++ #define CTF_PM_HEADERBORDERALL (CTF_PM_HEADERFLAG|CTF_PM_BORDERALL) ++ #define CTF_PM_HEADERBORDERTOP (CTF_PM_HEADERFLAG|CTF_PM_BORDERTOP) ++diff --git a/xmloff/source/style/PageMasterExportPropMapper.cxx b/xmloff/source/style/PageMasterExportPropMapper.cxx ++index c59d61c..9289712 100644 ++--- xmloff/source/style/PageMasterExportPropMapper.cxx +++++ xmloff/source/style/PageMasterExportPropMapper.cxx ++@@ -325,7 +325,9 @@ void XMLPageMasterExportPropMapper::ContextFilter( ++ XMLPropertyState* pPMScaleToY = NULL; ++ XMLPropertyState* pPMStandardMode = NULL; ++ XMLPropertyState* pPMGridBaseWidth = NULL; +++ // same as pPMGridSnapTo but for backward compatibility only ++ XMLPropertyState* pPMGridSnapToChars = NULL; +++ XMLPropertyState* pPMGridSnapTo = NULL; ++ ++ XMLPropertyState* pPrint = NULL; ++ ++@@ -381,6 +383,7 @@ void XMLPageMasterExportPropMapper::ContextFilter( ++ case CTF_PM_STANDARD_MODE: pPMStandardMode = pProp; break; ++ case CTP_PM_GRID_BASE_WIDTH: pPMGridBaseWidth = pProp; break; ++ case CTP_PM_GRID_SNAP_TO_CHARS: pPMGridSnapToChars = pProp; break; +++ case CTP_PM_GRID_SNAP_TO: pPMGridSnapTo = pProp; break; ++ } ++ if (nPrintId == CTF_PM_PRINTMASK) ++ { ++@@ -396,6 +399,10 @@ void XMLPageMasterExportPropMapper::ContextFilter( ++ lcl_RemoveState(pPMGridBaseWidth); ++ if( pPMGridSnapToChars ) ++ lcl_RemoveState(pPMGridSnapToChars); +++ if (pPMGridSnapTo) +++ { +++ lcl_RemoveState(pPMGridSnapTo); +++ } ++ } ++ ++ if( pPMGridBaseWidth && pPMStandardMode ) ++diff --git a/xmloff/source/style/PageMasterStyleMap.cxx b/xmloff/source/style/PageMasterStyleMap.cxx ++index 7dafe3a..31df9c8 100644 ++--- xmloff/source/style/PageMasterStyleMap.cxx +++++ xmloff/source/style/PageMasterStyleMap.cxx ++@@ -35,11 +35,15 @@ ++ ++ using namespace ::xmloff::token; ++ ++-#define _MAP(name,prefix,token,type,context) { name, sizeof(name)-1, prefix, token, type, context, SvtSaveOptions::ODFVER_010 } +++#define MAP(name,prefix,token,type,context,version) { name, sizeof(name)-1, prefix, token, type, context, version } ++ #define PLMAP(name,prefix,token,type,context) \ ++- _MAP(name,prefix,token,type|XML_TYPE_PROP_PAGE_LAYOUT,context) +++ MAP(name,prefix,token,type|XML_TYPE_PROP_PAGE_LAYOUT,context, SvtSaveOptions::ODFVER_010) +++#define PLMAP_12(name,prefix,token,type,context) \ +++ MAP(name,prefix,token,type|XML_TYPE_PROP_PAGE_LAYOUT,context, SvtSaveOptions::ODFVER_012) +++#define PLMAP_EX(name,prefix,token,type,context) \ +++ MAP(name,prefix,token,type|XML_TYPE_PROP_PAGE_LAYOUT,context, SvtSaveOptions::ODFVER_LATEST) ++ #define HFMAP(name,prefix,token,type,context) \ ++- _MAP(name,prefix,token,type|XML_TYPE_PROP_HEADER_FOOTER,context) +++ MAP(name,prefix,token,type|XML_TYPE_PROP_HEADER_FOOTER,context, SvtSaveOptions::ODFVER_010) ++ ++ //______________________________________________________________________________ ++ ++@@ -109,11 +113,14 @@ const XMLPropertyMapEntry aXMLPageMasterStyleMap[] = ++ PLMAP( "GridDisplay", XML_NAMESPACE_STYLE, XML_LAYOUT_GRID_DISPLAY, XML_TYPE_BOOL, 0 ), ++ ++ //text grid enhancement for better CJK support ++- PLMAP( "GridBaseWidth", XML_NAMESPACE_STYLE, XML_LAYOUT_GRID_BASE_WIDTH, XML_TYPE_MEASURE, CTP_PM_GRID_BASE_WIDTH ), ++- PLMAP( "GridSnapToChars", XML_NAMESPACE_STYLE, XML_LAYOUT_GRID_SNAP_TO, XML_TYPE_BOOL, CTP_PM_GRID_SNAP_TO_CHARS ), ++- PLMAP( "GridSnapToChars", XML_NAMESPACE_STYLE, XML_LAYOUT_GRID_SNAP_TO_CHARS, XML_TYPE_BOOL, CTP_PM_GRID_SNAP_TO_CHARS ), +++ PLMAP_12( "GridBaseWidth", XML_NAMESPACE_STYLE, XML_LAYOUT_GRID_BASE_WIDTH, XML_TYPE_MEASURE, CTP_PM_GRID_BASE_WIDTH ), +++ PLMAP_12( "GridSnapToChars", XML_NAMESPACE_STYLE, XML_LAYOUT_GRID_SNAP_TO, XML_TYPE_BOOL, CTP_PM_GRID_SNAP_TO ), +++ // fdo#44073: layout-grid-snap-to-characters does not exist in ODF: +++ // write this in extended mode purely for backward compatibility so old +++ // OOo/LO versions that don't understand layout-grid-snap-to read it +++ PLMAP_EX( "GridSnapToChars", XML_NAMESPACE_STYLE, XML_LAYOUT_GRID_SNAP_TO_CHARS, XML_TYPE_BOOL, CTP_PM_GRID_SNAP_TO_CHARS ), ++ //export as a default attribute ++- PLMAP( "StandardPageMode", XML_NAMESPACE_STYLE, XML_LAYOUT_GRID_STANDARD_MODE, XML_TYPE_BOOL|MID_FLAG_DEFAULT_ITEM_EXPORT, CTF_PM_STANDARD_MODE ), +++ PLMAP_12( "StandardPageMode", XML_NAMESPACE_STYLE, XML_LAYOUT_GRID_STANDARD_MODE, XML_TYPE_BOOL|MID_FLAG_DEFAULT_ITEM_EXPORT, CTF_PM_STANDARD_MODE ), ++ ++ PLMAP( "UserDefinedAttributes", XML_NAMESPACE_TEXT, XML_XMLNS, XML_TYPE_ATTRIBUTE_CONTAINER | MID_FLAG_SPECIAL_ITEM, 0 ), ++ ++-- ++1.7.5.4 ++ ++ ++From 63ecdc34d14e7c543dd2a435e54d084f8c2325d8 Mon Sep 17 00:00:00 2001 ++From: Michael Stahl ++Date: Thu, 22 Dec 2011 23:51:33 +0100 ++Subject: [libs-core 11/14] fdo#44082: fix hyphenation attributes: ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++These have type positiveInteger, so don't write 0 values: ++ ++20.191 fo:hyphenation-push-char-count ++20.192 fo:hyphenation-remain-char-count ++ ++Signed-off-by: Cedric Bosdonnat ++Signed-off-by: Petr Mladek ++Signed-off-by: LuboÅ¡ Luňák ++--- ++ xmloff/source/text/txtprmap.cxx | 4 ++-- ++ 1 files changed, 2 insertions(+), 2 deletions(-) ++ ++diff --git a/xmloff/source/text/txtprmap.cxx b/xmloff/source/text/txtprmap.cxx ++index 8cf954a..df7a9f4 100644 ++--- xmloff/source/text/txtprmap.cxx +++++ xmloff/source/text/txtprmap.cxx ++@@ -256,8 +256,8 @@ XMLPropertyMapEntry aXMLParaPropMap[] = ++ MP_ED( "ParaTabStops", STYLE, TAB_STOPS, MID_FLAG_ELEMENT_ITEM|XML_TYPE_TEXT_TABSTOP, CTF_TABSTOP ), // this is not realy a string! ++ // RES_PARATR_HYPHENZONE ++ MT_E( "ParaIsHyphenation", FO, HYPHENATE, XML_TYPE_BOOL, 0 ), ++- MT_E( "ParaHyphenationMaxLeadingChars", FO, HYPHENATION_REMAIN_CHAR_COUNT, XML_TYPE_NUMBER16, 0 ), ++- MT_E( "ParaHyphenationMaxTrailingChars",FO, HYPHENATION_PUSH_CHAR_COUNT, XML_TYPE_NUMBER16, 0 ), +++ MT_E( "ParaHyphenationMaxLeadingChars", FO, HYPHENATION_REMAIN_CHAR_COUNT, XML_TYPE_NUMBER16_NO_ZERO, 0 ), +++ MT_E( "ParaHyphenationMaxTrailingChars",FO, HYPHENATION_PUSH_CHAR_COUNT, XML_TYPE_NUMBER16_NO_ZERO, 0 ), ++ MP_E( "ParaHyphenationMaxHyphens", FO, HYPHENATION_LADDER_COUNT, XML_TYPE_NUMBER16_NONE, 0 ), ++ // RES_PARATR_DROP ++ MP_E( "DropCapWholeWord", STYLE, LENGTH, MID_FLAG_SPECIAL_ITEM|XML_TYPE_BOOL, CTF_DROPCAPWHOLEWORD ), ++-- ++1.7.5.4 ++ ++ ++From 47fad446a73a27e3335b98745cf77ec9e8065f5f Mon Sep 17 00:00:00 2001 ++From: Christian Lippka ORACLE ++Date: Tue, 6 Dec 2011 03:28:41 +0100 ++Subject: [libs-core 12/14] impress210: #i117319# disconnect and reconnect to ++ table style on change model in SdrTableObjImpl ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++impress210: #i117319# disconnect and reconnect to table style on change model in SdrTableObjImpl ++ ++Signed-off-by: Petr Mladek ++Signed-off-by: Lubos Lunak ++Signed-off-by: Radek Doulík ++--- ++ svx/source/table/svdotable.cxx | 2 ++ ++ 1 files changed, 2 insertions(+), 0 deletions(-) ++ ++diff --git a/svx/source/table/svdotable.cxx b/svx/source/table/svdotable.cxx ++index b2c39fc..ef4b1a6 100644 ++--- svx/source/table/svdotable.cxx +++++ svx/source/table/svdotable.cxx ++@@ -332,6 +332,7 @@ void SdrTableObjImpl::operator=( const SdrTableObjImpl& rSource ) ++ void SdrTableObjImpl::SetModel(SdrModel* /*pOldModel*/, SdrModel* pNewModel) ++ { ++ // try to find new table style +++ disconnectTableStyle(); ++ ++ Reference< XIndexAccess > xNewTableStyle; ++ if( mxTableStyle.is() ) try ++@@ -362,6 +363,7 @@ void SdrTableObjImpl::SetModel(SdrModel* /*pOldModel*/, SdrModel* pNewModel) ++ ++ mxTableStyle = xNewTableStyle; ++ +++ connectTableStyle(); ++ update(); ++ } ++ ++-- ++1.7.5.4 ++ ++ ++From 04a3004564c8e0a39cfedfda270d43bfdb2f2d14 Mon Sep 17 00:00:00 2001 ++From: Rene Engelhard ++Date: Sun, 25 Dec 2011 13:51:46 +0100 ++Subject: [libs-core 13/14] support libebook-1.2.so.12 (evolution 3.2) ++ ++Signed-off-by: Petr Mladek ++--- ++ connectivity/source/drivers/evoab2/EApi.cxx | 1 + ++ 1 files changed, 1 insertions(+), 0 deletions(-) ++ ++diff --git a/connectivity/source/drivers/evoab2/EApi.cxx b/connectivity/source/drivers/evoab2/EApi.cxx ++index 1767ec1..95cdb55 100644 ++--- connectivity/source/drivers/evoab2/EApi.cxx +++++ connectivity/source/drivers/evoab2/EApi.cxx ++@@ -35,6 +35,7 @@ ++ #define DECLARE_FN_POINTERS 1 ++ #include "EApi.h" ++ static const char *eBookLibNames[] = { +++ "libebook-1.2.so.12", // bumped again ++ "libebook-1.2.so.10", // bumped again ++ "libebook-1.2.so.9", // evolution-2.8 ++ "libebook-1.2.so.5", // evolution-2.4 and 2.6+ ++-- ++1.7.5.4 ++ ++reverting on repository libs-extern from libreoffice-3.4.4.2 to merge-base af9bc68e62191f4a6ccefaef8393ae80593f3cb1 ++commits on repository libs-extern merge-base af9bc68e62191f4a6ccefaef8393ae80593f3cb1 to libreoffice-3.4.5.2 ++reverting on repository libs-extern-sys from libreoffice-3.4.4.2 to merge-base dae2dc810a96200aeabd7d09468367b3e326c008 ++diff --git a/moz/seamonkey-source-1.1.14.patch b/moz/seamonkey-source-1.1.14.patch ++index eb602e6..566a044 100644 ++--- moz/seamonkey-source-1.1.14.patch +++++ moz/seamonkey-source-1.1.14.patch ++@@ -6336,144 +6336,3 @@ ++ ++ clean clobber:: ++ rm -rf $(DIST)/$(APP_NAME).app ++---- misc/mozilla/directory/c-sdk/ldap/libraries/libiutil/Makefile.in 2006-02-03 15:44:41.000000000 +0100 ++-+++ misc/build/mozilla/directory/c-sdk/ldap/libraries/libiutil/Makefile.in 2011-09-07 10:45:16.000000000 +0200 ++-@@ -89,12 +89,9 @@ ++- -e "s|%VERSION%|$${v}|" \ ++- < Version.c > $@) ++- ++--export:: $(OBJDEST) $(LIBDIR) $(OBJS) $(LIBIUTIL) ++-+export:: $(OBJDEST) $(OBJS) $(LIBIUTIL) ++- ++--$(LIBDIR): ++-- $(MKDIR) $(LIBDIR) ++-- ++--$(LIBIUTIL): $(OBJS) $(LIBDIR) ++-+$(LIBIUTIL): $(OBJS) ++- @echo ======= making $(LIBIUTIL) ++- ifdef SO_FILES_TO_REMOVE ++- -$(RM) $(SO_FILES_TO_REMOVE) ++---- misc/mozilla/directory/c-sdk/ldap/libraries/liblber/Makefile.in 2006-02-03 15:44:41.000000000 +0100 ++-+++ misc/build/mozilla/directory/c-sdk/ldap/libraries/liblber/Makefile.in 2011-09-07 10:45:02.000000000 +0200 ++-@@ -79,12 +79,9 @@ ++- -e "s|%VERSION%|$${v}|" \ ++- < Version.c > $@) ++- ++--export:: $(OBJDEST) $(LIBDIR) $(OBJS) $(LIBLBER) ++-+export:: $(OBJDEST) $(OBJS) $(LIBLBER) ++- ++--$(LIBDIR): ++-- $(MKDIR) $(LIBDIR) ++-- ++--$(LIBLBER): $(OBJS) $(LIBDIR) ++-+$(LIBLBER): $(OBJS) ++- @echo ======= making $(LIBLBER) ++- ifdef SO_FILES_TO_REMOVE ++- -$(RM) $(SO_FILES_TO_REMOVE) ++---- misc/mozilla/directory/c-sdk/ldap/libraries/libldap/Makefile.in 2011-09-07 10:53:57.000000000 +0200 ++-+++ misc/build/mozilla/directory/c-sdk/ldap/libraries/libldap/Makefile.in 2011-09-07 10:44:45.000000000 +0200 ++-@@ -279,13 +279,13 @@ ++- < Version.c > $@) ++- ++- # Set the default sources for the export target ++--EXPDEPS = $(OBJDIR_NAME) $(LIBDIR) $(OBJS) $(LIBLDAP) $(DLLLDAP) ++-+EXPDEPS = $(OBJDIR_NAME) $(OBJS) $(LIBLDAP) $(DLLLDAP) ++- # Remove the LIB source if on win32 and using MSVC ++- # This avoids problems with -jX builds where 'link' will make both the ++- # .dll and .lib files in one pass ++- ifeq ($(OS_ARCH), WINNT) ++- ifeq ($(LD),link) ++--EXPDEPS = $(OBJDIR_NAME) $(LIBDIR) $(OBJS) $(DLLLDAP) ++-+EXPDEPS = $(OBJDIR_NAME) $(OBJS) $(DLLLDAP) ++- endif ++- endif ++- ++-@@ -294,10 +294,7 @@ ++- ltest:: $(LIBLDAP) test.o ++- $(LINK_EXE) test.o ++- ++--$(LIBDIR): ++-- $(MKDIR) $(LIBDIR) ++-- ++--$(LIBLDAP): $(OBJS) $(LIBDIR) $(LDAP_EXPORT_DEFS) ++-+$(LIBLDAP): $(OBJS) $(LDAP_EXPORT_DEFS) ++- @echo ======= making $(LIBLDAP) ++- ifdef SO_FILES_TO_REMOVE ++- -$(RM) $(SO_FILES_TO_REMOVE) ++-@@ -314,7 +311,7 @@ ++- endif ++- endif ++- ++--$(DLLLDAP): $(OBJS) $(LIBDIR) $(LDAP_EXPORT_DEFS) ++-+$(DLLLDAP): $(OBJS) $(LDAP_EXPORT_DEFS) ++- @echo ======= making $(DLLLDAP) ++- ifdef SO_FILES_TO_REMOVE ++- -$(RM) $(SO_FILES_TO_REMOVE) ++---- misc/mozilla/directory/c-sdk/ldap/libraries/libldif/Makefile.in 2006-02-03 15:44:49.000000000 +0100 ++-+++ misc/build/mozilla/directory/c-sdk/ldap/libraries/libldif/Makefile.in 2011-09-07 10:44:15.000000000 +0200 ++-@@ -77,12 +77,9 @@ ++- -e "s|%VERSION%|$${v}|" \ ++- < Version.c > $@) ++- ++--export:: $(OBJDEST) $(LIBDIR) $(OBJS) $(LIBLDIF) ++-+export:: $(OBJDEST) $(OBJS) $(LIBLDIF) ++- ++--$(LIBDIR): ++-- $(MKDIR) $(LIBDIR) ++-- ++--$(LIBLDIF): $(OBJS) $(LIBDIR) ++-+$(LIBLDIF): $(OBJS) ++- @echo ======= making $(LIBLDIF) ++- ifdef SO_FILES_TO_REMOVE ++- -$(RM) $(SO_FILES_TO_REMOVE) ++---- misc/mozilla/directory/c-sdk/ldap/libraries/libprldap/Makefile.in 2011-09-07 10:53:57.000000000 +0200 ++-+++ misc/build/mozilla/directory/c-sdk/ldap/libraries/libprldap/Makefile.in 2011-09-07 10:43:59.000000000 +0200 ++-@@ -201,12 +201,9 @@ ++- -e "s|%VERSION%|$${v}|" \ ++- < Version.c > $@) ++- ++--export:: $(OBJDEST) $(LIBDIR) $(OBJS) $(DLLPRLDAP) ++-+export:: $(OBJDEST) $(OBJS) $(DLLPRLDAP) ++- ++--$(LIBDIR): ++-- $(MKDIR) $(LIBDIR) ++-- ++--$(LIBPRLDAP): $(OBJS) $(LIBDIR) $(PRLDAP_EXPORT_DEFS) ++-+$(LIBPRLDAP): $(OBJS) $(PRLDAP_EXPORT_DEFS) ++- @echo ======= making $(LIBPRLDAP) ++- ifdef SO_FILES_TO_REMOVE ++- -$(RM) $(SO_FILES_TO_REMOVE) ++-@@ -219,7 +216,7 @@ ++- $(LINK_LIB) $(EXTRA_LIBS) ++- endif ++- ++--$(DLLPRLDAP): $(OBJS) $(LIBDIR) $(PRLDAP_EXPORT_DEFS) ++-+$(DLLPRLDAP): $(OBJS) $(PRLDAP_EXPORT_DEFS) ++- @echo ======= making $(DLLPRLDAP) ++- ifdef SO_FILES_TO_REMOVE ++- -$(RM) $(SO_FILES_TO_REMOVE) ++---- misc/mozilla/directory/c-sdk/ldap/libraries/libssldap/Makefile.in 2011-09-07 10:53:57.000000000 +0200 ++-+++ misc/build/mozilla/directory/c-sdk/ldap/libraries/libssldap/Makefile.in 2011-09-07 10:42:48.000000000 +0200 ++-@@ -214,19 +214,16 @@ ++- -e "s|%VERSION%|$${v}|" \ ++- < Version.c > $@) ++- ++--export:: $(OBJDEST) $(LIBDIR) $(OBJS) $(DLLSSLDAP) ++-+export:: $(OBJDEST) $(OBJS) $(DLLSSLDAP) ++- ++--$(LIBDIR): ++-- $(MKDIR) $(LIBDIR) ++-- ++--$(LIBSSLDAP): $(OBJS) $(LIBDIR) $(SSLDAP_EXPORT_DEFS) ++-+$(LIBSSLDAP): $(OBJS) $(SSLDAP_EXPORT_DEFS) ++- @echo ======= making $(LIBSSLDAP) ++- ifdef SO_FILES_TO_REMOVE ++- -$(RM) $(SO_FILES_TO_REMOVE) ++- endif ++- $(LINK_LIB) $(EXTRA_LIBS) ++- ++--$(DLLSSLDAP): $(OBJS) $(LIBDIR) $(SSLDAP_EXPORT_DEFS) ++-+$(DLLSSLDAP): $(OBJS) $(SSLDAP_EXPORT_DEFS) ++- @echo ======= making $(DLLSSLDAP) ++- ifdef SO_FILES_TO_REMOVE ++- -$(RM) $(SO_FILES_TO_REMOVE) ++commits on repository libs-extern-sys merge-base dae2dc810a96200aeabd7d09468367b3e326c008 to libreoffice-3.4.5.2 ++From 210621473b521e1f5f2e9091be9ecb52baaaa32b Mon Sep 17 00:00:00 2001 ++From: Lionel Elie Mamane ++Date: Fri, 28 Oct 2011 13:04:21 +0200 ++Subject: [libs-extern-sys 1/7] moz ldap libraries: don't need LIBDIR to exist ++ ++Signed-off-by: Thorsten Behrens ++--- ++ moz/seamonkey-source-1.1.14.patch | 141 +++++++++++++++++++++++++++++++++++++ ++ 1 files changed, 141 insertions(+), 0 deletions(-) ++ ++diff --git a/moz/seamonkey-source-1.1.14.patch b/moz/seamonkey-source-1.1.14.patch ++index 566a044..eb602e6 100644 ++--- moz/seamonkey-source-1.1.14.patch +++++ moz/seamonkey-source-1.1.14.patch ++@@ -6336,3 +6336,144 @@ ++ ++ clean clobber:: ++ rm -rf $(DIST)/$(APP_NAME).app +++--- misc/mozilla/directory/c-sdk/ldap/libraries/libiutil/Makefile.in 2006-02-03 15:44:41.000000000 +0100 ++++++ misc/build/mozilla/directory/c-sdk/ldap/libraries/libiutil/Makefile.in 2011-09-07 10:45:16.000000000 +0200 +++@@ -89,12 +89,9 @@ +++ -e "s|%VERSION%|$${v}|" \ +++ < Version.c > $@) +++ +++-export:: $(OBJDEST) $(LIBDIR) $(OBJS) $(LIBIUTIL) ++++export:: $(OBJDEST) $(OBJS) $(LIBIUTIL) +++ +++-$(LIBDIR): +++- $(MKDIR) $(LIBDIR) +++- +++-$(LIBIUTIL): $(OBJS) $(LIBDIR) ++++$(LIBIUTIL): $(OBJS) +++ @echo ======= making $(LIBIUTIL) +++ ifdef SO_FILES_TO_REMOVE +++ -$(RM) $(SO_FILES_TO_REMOVE) +++--- misc/mozilla/directory/c-sdk/ldap/libraries/liblber/Makefile.in 2006-02-03 15:44:41.000000000 +0100 ++++++ misc/build/mozilla/directory/c-sdk/ldap/libraries/liblber/Makefile.in 2011-09-07 10:45:02.000000000 +0200 +++@@ -79,12 +79,9 @@ +++ -e "s|%VERSION%|$${v}|" \ +++ < Version.c > $@) +++ +++-export:: $(OBJDEST) $(LIBDIR) $(OBJS) $(LIBLBER) ++++export:: $(OBJDEST) $(OBJS) $(LIBLBER) +++ +++-$(LIBDIR): +++- $(MKDIR) $(LIBDIR) +++- +++-$(LIBLBER): $(OBJS) $(LIBDIR) ++++$(LIBLBER): $(OBJS) +++ @echo ======= making $(LIBLBER) +++ ifdef SO_FILES_TO_REMOVE +++ -$(RM) $(SO_FILES_TO_REMOVE) +++--- misc/mozilla/directory/c-sdk/ldap/libraries/libldap/Makefile.in 2011-09-07 10:53:57.000000000 +0200 ++++++ misc/build/mozilla/directory/c-sdk/ldap/libraries/libldap/Makefile.in 2011-09-07 10:44:45.000000000 +0200 +++@@ -279,13 +279,13 @@ +++ < Version.c > $@) +++ +++ # Set the default sources for the export target +++-EXPDEPS = $(OBJDIR_NAME) $(LIBDIR) $(OBJS) $(LIBLDAP) $(DLLLDAP) ++++EXPDEPS = $(OBJDIR_NAME) $(OBJS) $(LIBLDAP) $(DLLLDAP) +++ # Remove the LIB source if on win32 and using MSVC +++ # This avoids problems with -jX builds where 'link' will make both the +++ # .dll and .lib files in one pass +++ ifeq ($(OS_ARCH), WINNT) +++ ifeq ($(LD),link) +++-EXPDEPS = $(OBJDIR_NAME) $(LIBDIR) $(OBJS) $(DLLLDAP) ++++EXPDEPS = $(OBJDIR_NAME) $(OBJS) $(DLLLDAP) +++ endif +++ endif +++ +++@@ -294,10 +294,7 @@ +++ ltest:: $(LIBLDAP) test.o +++ $(LINK_EXE) test.o +++ +++-$(LIBDIR): +++- $(MKDIR) $(LIBDIR) +++- +++-$(LIBLDAP): $(OBJS) $(LIBDIR) $(LDAP_EXPORT_DEFS) ++++$(LIBLDAP): $(OBJS) $(LDAP_EXPORT_DEFS) +++ @echo ======= making $(LIBLDAP) +++ ifdef SO_FILES_TO_REMOVE +++ -$(RM) $(SO_FILES_TO_REMOVE) +++@@ -314,7 +311,7 @@ +++ endif +++ endif +++ +++-$(DLLLDAP): $(OBJS) $(LIBDIR) $(LDAP_EXPORT_DEFS) ++++$(DLLLDAP): $(OBJS) $(LDAP_EXPORT_DEFS) +++ @echo ======= making $(DLLLDAP) +++ ifdef SO_FILES_TO_REMOVE +++ -$(RM) $(SO_FILES_TO_REMOVE) +++--- misc/mozilla/directory/c-sdk/ldap/libraries/libldif/Makefile.in 2006-02-03 15:44:49.000000000 +0100 ++++++ misc/build/mozilla/directory/c-sdk/ldap/libraries/libldif/Makefile.in 2011-09-07 10:44:15.000000000 +0200 +++@@ -77,12 +77,9 @@ +++ -e "s|%VERSION%|$${v}|" \ +++ < Version.c > $@) +++ +++-export:: $(OBJDEST) $(LIBDIR) $(OBJS) $(LIBLDIF) ++++export:: $(OBJDEST) $(OBJS) $(LIBLDIF) +++ +++-$(LIBDIR): +++- $(MKDIR) $(LIBDIR) +++- +++-$(LIBLDIF): $(OBJS) $(LIBDIR) ++++$(LIBLDIF): $(OBJS) +++ @echo ======= making $(LIBLDIF) +++ ifdef SO_FILES_TO_REMOVE +++ -$(RM) $(SO_FILES_TO_REMOVE) +++--- misc/mozilla/directory/c-sdk/ldap/libraries/libprldap/Makefile.in 2011-09-07 10:53:57.000000000 +0200 ++++++ misc/build/mozilla/directory/c-sdk/ldap/libraries/libprldap/Makefile.in 2011-09-07 10:43:59.000000000 +0200 +++@@ -201,12 +201,9 @@ +++ -e "s|%VERSION%|$${v}|" \ +++ < Version.c > $@) +++ +++-export:: $(OBJDEST) $(LIBDIR) $(OBJS) $(DLLPRLDAP) ++++export:: $(OBJDEST) $(OBJS) $(DLLPRLDAP) +++ +++-$(LIBDIR): +++- $(MKDIR) $(LIBDIR) +++- +++-$(LIBPRLDAP): $(OBJS) $(LIBDIR) $(PRLDAP_EXPORT_DEFS) ++++$(LIBPRLDAP): $(OBJS) $(PRLDAP_EXPORT_DEFS) +++ @echo ======= making $(LIBPRLDAP) +++ ifdef SO_FILES_TO_REMOVE +++ -$(RM) $(SO_FILES_TO_REMOVE) +++@@ -219,7 +216,7 @@ +++ $(LINK_LIB) $(EXTRA_LIBS) +++ endif +++ +++-$(DLLPRLDAP): $(OBJS) $(LIBDIR) $(PRLDAP_EXPORT_DEFS) ++++$(DLLPRLDAP): $(OBJS) $(PRLDAP_EXPORT_DEFS) +++ @echo ======= making $(DLLPRLDAP) +++ ifdef SO_FILES_TO_REMOVE +++ -$(RM) $(SO_FILES_TO_REMOVE) +++--- misc/mozilla/directory/c-sdk/ldap/libraries/libssldap/Makefile.in 2011-09-07 10:53:57.000000000 +0200 ++++++ misc/build/mozilla/directory/c-sdk/ldap/libraries/libssldap/Makefile.in 2011-09-07 10:42:48.000000000 +0200 +++@@ -214,19 +214,16 @@ +++ -e "s|%VERSION%|$${v}|" \ +++ < Version.c > $@) +++ +++-export:: $(OBJDEST) $(LIBDIR) $(OBJS) $(DLLSSLDAP) ++++export:: $(OBJDEST) $(OBJS) $(DLLSSLDAP) +++ +++-$(LIBDIR): +++- $(MKDIR) $(LIBDIR) +++- +++-$(LIBSSLDAP): $(OBJS) $(LIBDIR) $(SSLDAP_EXPORT_DEFS) ++++$(LIBSSLDAP): $(OBJS) $(SSLDAP_EXPORT_DEFS) +++ @echo ======= making $(LIBSSLDAP) +++ ifdef SO_FILES_TO_REMOVE +++ -$(RM) $(SO_FILES_TO_REMOVE) +++ endif +++ $(LINK_LIB) $(EXTRA_LIBS) +++ +++-$(DLLSSLDAP): $(OBJS) $(LIBDIR) $(SSLDAP_EXPORT_DEFS) ++++$(DLLSSLDAP): $(OBJS) $(SSLDAP_EXPORT_DEFS) +++ @echo ======= making $(DLLSSLDAP) +++ ifdef SO_FILES_TO_REMOVE +++ -$(RM) $(SO_FILES_TO_REMOVE) ++-- ++1.7.5.4 ++ ++ ++From e3977c251fa60d51f3df7dcf6c13dd9a96c00a78 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?G=C3=B6ran=20Andersson?= ++Date: Thu, 17 Nov 2011 20:32:50 +0100 ++Subject: [libs-extern-sys 2/7] updated Swedish dictionary to version 1.48 ++ ++This is an important update since it contains a lot of corrections and ++words containing digits are now treated correctly. ++ ++Signed-off-by: Andras Timar ++--- ++ dictionaries/sv_SE/description.xml | 2 +- ++ dictionaries/sv_SE/sv_SE.aff | 7 +- ++ dictionaries/sv_SE/sv_SE.dic | 7099 +++++++++++++++++++++++++----------- ++ 3 files changed, 4897 insertions(+), 2211 deletions(-) ++ ++diff --git a/dictionaries/sv_SE/description.xml b/dictionaries/sv_SE/description.xml ++index 51c6619..1f56dbf 100755 ++--- dictionaries/sv_SE/description.xml +++++ dictionaries/sv_SE/description.xml ++@@ -11,7 +11,7 @@ ++ ++ --> ++ ++- +++ ++ ++ ++ ++diff --git a/dictionaries/sv_SE/sv_SE.aff b/dictionaries/sv_SE/sv_SE.aff ++index 1ba2e2b..4641601 100644 ++--- dictionaries/sv_SE/sv_SE.aff +++++ dictionaries/sv_SE/sv_SE.aff ++@@ -1,7 +1,7 @@ ++ SET ISO8859-1 ++ TRY aerndtislogmkpbhfjuväcöåyqxzvwéâàáè ++ ++-WORDCHARS - +++WORDCHARS -0123456789 ++ ++ BREAK 1 ++ BREAK - ++@@ -17,7 +17,7 @@ COMPOUNDMIN 1 ++ #COMPOUNDMIN 3 ++ ++ # Only two, three or four word compounds: ++-COMPOUNDWORDMAX 4 +++#COMPOUNDWORDMAX 4 ++ ++ # Disallow triple letters, like "fall"+"lucka": ++ CHECKCOMPOUNDTRIPLE ++@@ -672,3 +672,6 @@ SFX s 0 0/WX . ++ ++ SFX r N 1 ++ SFX r 0 -/WX . +++ +++SFX b N 1 +++SFX b 0 - . ++diff --git a/dictionaries/sv_SE/sv_SE.dic b/dictionaries/sv_SE/sv_SE.dic ++index e765827..44c0fd1 100644 ++--- dictionaries/sv_SE/sv_SE.dic +++++ dictionaries/sv_SE/sv_SE.dic ++@@ -1,10 +1,1093 @@ ++-75128 +++77811 ++ -/YX ++--- ++---- ++-0 ++-a/Dr +++--/b +++0/bX +++00/bX +++000/bX +++1/bX +++10/bX +++100/bX +++1000/bX +++10000/bX +++100000/bX +++1000000/bX +++10000000/bX +++101/bX +++102/bX +++103/bX +++104/bX +++105/bX +++106/bX +++107/bX +++108/bX +++1080p +++109/bX +++11/bX +++110/bX +++1100/bX +++111/bX +++112/bX +++113/bX +++114/bX +++115/bX +++116/bX +++117/bX +++118/bX +++119/bX +++12/bX +++120/bX +++1200/bX +++121/bX +++122/bX +++123/bX +++124/bX +++125/bX +++126/bX +++127/bX +++128/bX +++129/bX +++13/bX +++130/bX +++1300/bX +++131/bX +++132/bX +++133/bX +++134/bX +++135/bX +++136/bX +++137/bX +++138/bX +++139/bX +++14/bX +++140/bX +++1400/bX +++141/bX +++142/bX +++143/bX +++144/bX +++145/bX +++146/bX +++147/bX +++148/bX +++149/bX +++15/bX +++150/bX +++1500/bX +++151/bX +++152/bX +++153/bX +++154/bX +++155/bX +++156/bX +++157/bX +++158/bX +++159/bX +++16/bX +++160/bX +++1600/bX +++161/bX +++162/bX +++163/bX +++164/bX +++165/bX +++166/bX +++167/bX +++168/bX +++169/bX +++17/bX +++170/bX +++1700/bX +++171/bX +++1710/bX +++172/bX +++1720/bX +++173/bX +++1730/bX +++174/bX +++1740/bX +++175/bX +++1750/bX +++176/bX +++1760/bX +++177/bX +++1770/bX +++178/bX +++1780/bX +++179/bX +++1790/bX +++18/bX +++180/bX +++1800/bX +++181/bX +++1810/bX +++182/bX +++1820/bX +++183/bX +++1830/bX +++184/bX +++1840/bX +++185/bX +++1850/bX +++186/bX +++1860/bX +++187/bX +++1870/bX +++188/bX +++1880/bX +++189/bX +++1890/bX +++19/bX +++190/bX +++1900/bX +++191/bX +++1910/bX +++192/bX +++1920/bX +++193/bX +++1930/bX +++194/bX +++1940/bX +++195/bX +++1950/bX +++196/bX +++1960/bX +++197/bX +++1970/bX +++198/bX +++1980/bX +++199/bX +++1990/bX +++2/bX +++20/bX +++200/bX +++2000/bX +++20000/bX +++2000000/bX +++201/bX +++2010/bX +++202/bX +++2020/bX +++203/bX +++2030/bX +++204/bX +++205/bX +++206/bX +++207/bX +++208/bX +++209/bX +++21/bX +++210/bX +++211/bX +++212/bX +++213/bX +++214/bX +++215/bX +++216/bX +++217/bX +++218/bX +++219/bX +++22/bX +++220/bX +++221/bX +++222/bX +++223/bX +++224/bX +++225/bX +++226/bX +++227/bX +++228/bX +++229/bX +++23/bX +++230/bX +++231/bX +++232/bX +++233/bX +++234/bX +++235/bX +++236/bX +++237/bX +++238/bX +++239/bX +++24/bX +++240/bX +++241/bX +++242/bX +++243/bX +++244/bX +++245/bX +++246/bX +++247/bX +++248/bX +++249/bX +++25/bX +++250/bX +++251/bX +++252/bX +++253/bX +++254/bX +++255/bX +++256/bX +++257/bX +++258/bX +++259/bX +++26/bX +++260/bX +++261/bX +++262/bX +++263/bX +++264/bX +++265/bX +++266/bX +++267/bX +++268/bX +++269/bX +++27/bX +++270/bX +++271/bX +++272/bX +++273/bX +++274/bX +++275/bX +++276/bX +++277/bX +++278/bX +++279/bX +++28/bX +++280/bX +++281/bX +++282/bX +++283/bX +++284/bX +++285/bX +++286/bX +++287/bX +++288/bX +++289/bX +++29/bX +++290/bX +++291/bX +++292/bX +++293/bX +++294/bX +++295/bX +++296/bX +++297/bX +++298/bX +++299/bX +++2d/r +++3/bX +++30/bX +++300/bX +++3000/bX +++30000/bX +++3000000/bX +++301/bX +++302/bX +++303/bX +++304/bX +++305/bX +++306/bX +++307/bX +++308/bX +++309/bX +++31/bX +++310/bX +++311/bX +++312/bX +++313/bX +++314/bX +++315/bX +++316/bX +++317/bX +++318/bX +++319/bX +++32/bX +++320/bX +++321/bX +++322/bX +++323/bX +++324/bX +++325/bX +++326/bX +++327/bX +++328/bX +++329/bX +++33/bX +++330/bX +++331/bX +++332/bX +++333/bX +++334/bX +++335/bX +++336/bX +++337/bX +++338/bX +++339/bX +++34/bX +++340/bX +++341/bX +++342/bX +++343/bX +++344/bX +++345/bX +++346/bX +++347/bX +++348/bX +++349/bX +++35/bX +++350/bX +++351/bX +++352/bX +++353/bX +++354/bX +++355/bX +++356/bX +++357/bX +++358/bX +++359/bX +++36/bX +++360/bX +++361/bX +++362/bX +++363/bX +++364/bX +++365/bX +++366/bX +++367/bX +++368/bX +++369/bX +++37/bX +++370/bX +++371/bX +++372/bX +++373/bX +++374/bX +++375/bX +++376/bX +++377/bX +++378/bX +++379/bX +++38/bX +++380/bX +++381/bX +++382/bX +++383/bX +++384/bX +++385/bX +++386/bX +++387/bX +++388/bX +++389/bX +++39/bX +++390/bX +++391/bX +++392/bX +++393/bX +++394/bX +++395/bX +++396/bX +++397/bX +++398/bX +++399/bX +++3d/r +++3DS/r +++3dtv/r +++3G/r +++3SAT/r +++4/bX +++40/bX +++400/bX +++4000/bX +++40000/bX +++4000000/bX +++401/bX +++402/bX +++403/bX +++404/bX +++405/bX +++406/bX +++407/bX +++408/bX +++409/bX +++41/bX +++410/bX +++411/bX +++412/bX +++413/bX +++414/bX +++415/bX +++416/bX +++417/bX +++418/bX +++419/bX +++42/bX +++420/bX +++421/bX +++422/bX +++423/bX +++424/bX +++425/bX +++426/bX +++427/bX +++428/bX +++429/bX +++43/bX +++430/bX +++431/bX +++432/bX +++433/bX +++434/bX +++435/bX +++436/bX +++437/bX +++438/bX +++439/bX +++44/bX +++440/bX +++441/bX +++442/bX +++443/bX +++444/bX +++445/bX +++446/bX +++447/bX +++448/bX +++449/bX +++45/bX +++450/bX +++451/bX +++452/bX +++453/bX +++454/bX +++455/bX +++456/bX +++457/bX +++458/bX +++459/bX +++46/bX +++460/bX +++461/bX +++462/bX +++463/bX +++464/bX +++465/bX +++466/bX +++467/bX +++468/bX +++469/bX +++47/bX +++470/bX +++471/bX +++472/bX +++473/bX +++474/bX +++475/bX +++476/bX +++477/bX +++478/bX +++479/bX +++48/bX +++480/bX +++480p +++481/bX +++482/bX +++483/bX +++484/bX +++485/bX +++486/bX +++487/bX +++488/bX +++489/bX +++49/bX +++490/bX +++491/bX +++492/bX +++493/bX +++494/bX +++495/bX +++496/bX +++497/bX +++498/bX +++499/bX +++4g/r +++4S +++5/bX +++50/bX +++500/bX +++5000/bX +++50000/bX +++5000000/bX +++501/bX +++502/bX +++503/bX +++504/bX +++505/bX +++506/bX +++507/bX +++508/bX +++509/bX +++51/bX +++510/bX +++511/bX +++512/bX +++513/bX +++514/bX +++515/bX +++516/bX +++517/bX +++518/bX +++519/bX +++52/bX +++520/bX +++521/bX +++522/bX +++523/bX +++524/bX +++525/bX +++526/bX +++527/bX +++528/bX +++529/bX +++53/bX +++530/bX +++531/bX +++532/bX +++533/bX +++534/bX +++535/bX +++536/bX +++537/bX +++538/bX +++539/bX +++54/bX +++540/bX +++541/bX +++542/bX +++543/bX +++544/bX +++545/bX +++546/bX +++547/bX +++548/bX +++549/bX +++55/bX +++550/bX +++551/bX +++552/bX +++553/bX +++554/bX +++555/bX +++556/bX +++557/bX +++558/bX +++559/bX +++56/bX +++560/bX +++561/bX +++562/bX +++563/bX +++564/bX +++565/bX +++566/bX +++567/bX +++568/bX +++569/bX +++57/bX +++570/bX +++571/bX +++572/bX +++573/bX +++574/bX +++575/bX +++576/bX +++577/bX +++578/bX +++579/bX +++58/bX +++580/bX +++581/bX +++582/bX +++583/bX +++584/bX +++585/bX +++586/bX +++587/bX +++588/bX +++589/bX +++59/bX +++590/bX +++591/bX +++592/bX +++593/bX +++594/bX +++595/bX +++596/bX +++597/bX +++598/bX +++599/bX +++6/bX +++60/bX +++600/bX +++6000/bX +++60000/bX +++6000000/bX +++601/bX +++602/bX +++603/bX +++604/bX +++605/bX +++606/bX +++607/bX +++608/bX +++609/bX +++61/bX +++610/bX +++611/bX +++612/bX +++613/bX +++614/bX +++615/bX +++616/bX +++617/bX +++618/bX +++619/bX +++62/bX +++620/bX +++621/bX +++622/bX +++623/bX +++624/bX +++625/bX +++626/bX +++627/bX +++628/bX +++629/bX +++63/bX +++630/bX +++631/bX +++632/bX +++633/bX +++634/bX +++635/bX +++636/bX +++637/bX +++638/bX +++639/bX +++64/bX +++640/bX +++641/bX +++642/bX +++643/bX +++644/bX +++645/bX +++646/bX +++647/bX +++648/bX +++649/bX +++65/bX +++650/bX +++651/bX +++652/bX +++653/bX +++654/bX +++655/bX +++656/bX +++657/bX +++658/bX +++659/bX +++66/bX +++660/bX +++661/bX +++662/bX +++663/bX +++664/bX +++665/bX +++666/bX +++667/bX +++668/bX +++669/bX +++67/bX +++670/bX +++671/bX +++672/bX +++673/bX +++674/bX +++675/bX +++676/bX +++677/bX +++678/bX +++679/bX +++68/bX +++680/bX +++681/bX +++682/bX +++683/bX +++684/bX +++685/bX +++686/bX +++687/bX +++688/bX +++689/bX +++69/bX +++690/bX +++691/bX +++692/bX +++693/bX +++694/bX +++695/bX +++696/bX +++697/bX +++698/bX +++699/bX +++7/bX +++70/bX +++700/bX +++7000/bX +++70000/bX +++7000000/bX +++701/bX +++702/bX +++703/bX +++704/bX +++705/bX +++706/bX +++707/bX +++708/bX +++709/bX +++71/bX +++710/bX +++711/bX +++712/bX +++713/bX +++714/bX +++715/bX +++716/bX +++717/bX +++718/bX +++719/bX +++72/bX +++720/bX +++720p +++721/bX +++722/bX +++723/bX +++724/bX +++725/bX +++726/bX +++727/bX +++728/bX +++729/bX +++73/bX +++730/bX +++731/bX +++732/bX +++733/bX +++734/bX +++735/bX +++736/bX +++737/bX +++738/bX +++739/bX +++74/bX +++740/bX +++741/bX +++742/bX +++743/bX +++744/bX +++745/bX +++746/bX +++747/bX +++748/bX +++749/bX +++75/bX +++750/bX +++751/bX +++752/bX +++753/bX +++754/bX +++755/bX +++756/bX +++757/bX +++758/bX +++759/bX +++76/bX +++760/bX +++761/bX +++762/bX +++763/bX +++764/bX +++765/bX +++766/bX +++767/bX +++768/bX +++769/bX +++77/bX +++770/bX +++771/bX +++772/bX +++773/bX +++774/bX +++775/bX +++776/bX +++777/bX +++778/bX +++779/bX +++78/bX +++780/bX +++781/bX +++782/bX +++783/bX +++784/bX +++785/bX +++786/bX +++787/bX +++788/bX +++789/bX +++79/bX +++790/bX +++791/bX +++792/bX +++793/bX +++794/bX +++795/bX +++796/bX +++797/bX +++798/bX +++799/bX +++8/bX +++80/bX +++800/bX +++8000/bX +++80000/bX +++8000000/bX +++801/bX +++802/bX +++803/bX +++804/bX +++805/bX +++806/bX +++807/bX +++808/bX +++809/bX +++81/bX +++810/bX +++811/bX +++812/bX +++813/bX +++814/bX +++815/bX +++816/bX +++817/bX +++818/bX +++819/bX +++82/bX +++820/bX +++821/bX +++822/bX +++823/bX +++824/bX +++825/bX +++826/bX +++827/bX +++828/bX +++829/bX +++83/bX +++830/bX +++831/bX +++832/bX +++833/bX +++834/bX +++835/bX +++836/bX +++837/bX +++838/bX +++839/bX +++84/bX +++840/bX +++841/bX +++842/bX +++843/bX +++844/bX +++845/bX +++846/bX +++847/bX +++848/bX +++849/bX +++85/bX +++850/bX +++851/bX +++852/bX +++853/bX +++854/bX +++855/bX +++856/bX +++857/bX +++858/bX +++859/bX +++86/bX +++860/bX +++861/bX +++862/bX +++863/bX +++864/bX +++865/bX +++866/bX +++867/bX +++868/bX +++869/bX +++87/bX +++870/bX +++871/bX +++872/bX +++873/bX +++874/bX +++875/bX +++876/bX +++877/bX +++878/bX +++879/bX +++88/bX +++880/bX +++881/bX +++882/bX +++883/bX +++884/bX +++885/bX +++886/bX +++887/bX +++888/bX +++889/bX +++89/bX +++890/bX +++891/bX +++892/bX +++893/bX +++894/bX +++895/bX +++896/bX +++897/bX +++898/bX +++899/bX +++9/bX +++90/bX +++900/bX +++9000/bX +++90000/bX +++9000000/bX +++901/bX +++902/bX +++903/bX +++904/bX +++905/bX +++906/bX +++907/bX +++908/bX +++909/bX +++91/bX +++910/bX +++911/bX +++912/bX +++913/bX +++914/bX +++915/bX +++916/bX +++917/bX +++918/bX +++919/bX +++92/bX +++920/bX +++921/bX +++922/bX +++923/bX +++924/bX +++925/bX +++926/bX +++927/bX +++928/bX +++929/bX +++93/bX +++930/bX +++931/bX +++932/bX +++933/bX +++934/bX +++935/bX +++936/bX +++937/bX +++938/bX +++939/bX +++94/bX +++940/bX +++941/bX +++942/bX +++943/bX +++944/bX +++945/bX +++946/bX +++947/bX +++948/bX +++949/bX +++95/bX +++950/bX +++951/bX +++952/bX +++953/bX +++954/bX +++955/bX +++956/bX +++957/bX +++958/bX +++959/bX +++96/bX +++960/bX +++961/bX +++962/bX +++963/bX +++964/bX +++965/bX +++966/bX +++967/bX +++968/bX +++969/bX +++97/bX +++970/bX +++971/bX +++972/bX +++973/bX +++974/bX +++975/bX +++976/bX +++977/bX +++978/bX +++979/bX +++98/bX +++980/bX +++981/bX +++982/bX +++983/bX +++984/bX +++985/bX +++986/bX +++987/bX +++988/bX +++989/bX +++99/bX +++990/bX +++991/bX +++992/bX +++993/bX +++994/bX +++995/bX +++996/bX +++997/bX +++998/bX +++999/bX +++a/r ++ à +++A1 +++A3/r +++A4/r +++A6/r ++ AAA/r ++ Aalto/A ++ AB ++@@ -15,8 +1098,6 @@ abalienering/ADGYv ++ abandon/ADY ++ abandonnera/NMAPY ++ abandonnering/ADGYv ++-abasi/EAHY ++-abasso/Y ++ ABB/r ++ Abba/AX ++ abbé/AEHY ++@@ -36,22 +1117,19 @@ ABC/r ++ Abchazien/AX ++ abchazier/EAJY ++ abchazisk/OY ++-abderit/ATHDY ++-abderitiske/Y +++abderitisk/OQY ++ abdikation/AHDYv ++ abdikera/NMAPDY ++ abdikering/ADGY ++ abdomen/AY ++ abdomina/AY ++ abdominal/OY ++-abducera/MY ++ abduktion/AHDYv ++ Abdullah/A ++ Abeba ++ Abel/A ++ Abélard/A ++ abelprovare/EAJY ++-abelsk/OY ++ aber/Y ++ Aberdeen/A ++ aberration/AHDYv ++@@ -60,18 +1138,16 @@ abessinier/EAJY ++ abessinsk/OQY ++ abessinska/EAGY ++ ABF/r ++-abietat/Y ++ abietinsyra/EAGY ++ Abigail/A ++ abilitet/ADY ++-abiogen/OY ++-abiotisk/OY +++abiotisk/O ++ Abisko/A ++ abiturient/AHDYX ++ ablation/AHDv ++ ablativ/AHDX ++ Abloy/A ++-abloylås/BDY +++abloylås/BD ++ ablution/AHDYv ++ ABM/r ++ abnorm/QOPYX ++@@ -91,7 +1167,7 @@ abortera/NMAPDY ++ abortering/ADYv ++ abortiv/OY ++ abortivmedel/FCAY ++-abortkö/EAHY +++abortkö/AH ++ abortlags/XZ ++ aborttal/ABDY ++ abortör/AHDY ++@@ -105,7 +1181,6 @@ abrakadabra/CAY ++ Abramson/A ++ Abramsson/A ++ abrasion/AHDYv ++-abrasiv/OY ++ abrovink/AHDY ++ abrovinsch/AHDY ++ abrupt/OPQY ++@@ -194,12 +1269,11 @@ access/HDYXU ++ accessarm/ADGY ++ accession/AHDY ++ accessionskatalog/AHDY ++-accessit/Y +++accessit ++ accessoar/AHDYX ++ accessorisk/OY ++ accesspärr/ADGYv ++-accidens/HDYX ++-accidensfärg/AHDY +++accidens/HDX ++ accidentell/OY ++ accis/HDYXU ++ accompli ++@@ -281,7 +1355,7 @@ ackvisit ++ acne/EAY ++ acnebehandling/ADGY ++ acornrör/ABDY ++-acta +++Acta ++ action/YXU ++ Acura/A ++ acyklisk/OY ++@@ -302,7 +1376,7 @@ adaptering/ADGYv ++ adapteringsdel/ADGY ++ adaption/AHDYvf ++ adaptiv/OY ++-adb-/XZ +++adb/r ++ ADB/r ++ addend/ADY ++ addenda/HY ++@@ -317,7 +1391,7 @@ additionell/OY ++ additionstal/ABDY ++ additiv/AOBDY ++ additivitet/ADY ++-adducera/MY +++adducera/M ++ adekvat/OPQY ++ adel/EAYv ++ Adele/A ++@@ -349,8 +1423,6 @@ adertonhundratal/ABY ++ adertonårig/OY ++ adertonåring/ADGYv ++ adhd ++-adhera/MY ++-adherens/Y ++ adherera/MY ++ adhesion/ADYvf ++ adhesiv/OY ++@@ -398,13 +1470,13 @@ adoptivf ++ adoptivförälder/EAIY ++ adoptivson/ADY ++ adoptivsöner/AJY ++-adorabel/MY +++adorabel/M ++ adoratör/AHDY ++-adorera/MY ++ Adorno/A ++ adrenalin/ABYX ++ adrenalinavsöndring/ADGY ++ adrenalinhalt/AHDY +++adrenalinöverskott/ABDY ++ adress/HDYXU ++ adressat/AHDY ++ adressera/NMAPDY ++@@ -440,14 +1512,11 @@ advokat/AHDYXU ++ advokatorisk/OY ++ advokatsed/AHDY ++ advokatyr/AHDY ++-aeolisk/OY ++ Aero/A ++ aerob/OTY ++ aerodrom/AHDY ++ aerodynamik/ADY ++ aerodynamisk/OY ++-aerofil/OY ++-aerofob/OY ++ aerogram/FCAY ++ aerologi/EAY ++ aerologisk/OY ++@@ -471,6 +1540,7 @@ affektfri/OY ++ affektion/AHDYv ++ affektiv/OY ++ affektladdad/NQY +++afferent/O ++ afficiera/NMAPDY ++ affidavit/AY ++ affin/OY ++@@ -508,7 +1578,6 @@ aficionado/EAY ++ aforism/AHDYX ++ aforistiker/EAJY ++ aforistisk/OY ++-afotisk/OY ++ AFP/r ++ Afrika/AX ++ afrikaans/Y ++@@ -521,7 +1590,7 @@ afrikanisering/ADGYv ++ afrikanist/AHDYX ++ afrikansk/OQY ++ afrikanska/EAGY ++-afro/EAY +++afro/EAX ++ afroamerikan/AHDY ++ afroamerikansk/OQY ++ afroasiatisk/OY ++@@ -545,11 +1614,7 @@ aftonsval/OY ++ aftonsång/AHDY ++ aftontidning/ADGYv ++ aftonvard/AHDY ++-aftös/O ++-afytisk/OY ++-ag/AED ++ aga/NEMAPG ++-agalös/O ++ agape/EAY ++ Agata/A ++ Agaton/A ++@@ -559,6 +1624,7 @@ age-/XZ ++ agenda/EAGY ++ agens/HD ++ agent/AHDYX +++agentfilm/AHDY ++ agentur/AHDYX ++ agenturbyrå/EAHY ++ agenturfirma/EAGY ++@@ -567,7 +1633,7 @@ agerande/FECAY ++ Agfa/A ++ agg/AB ++ Agger/A ++-aggfri/OY +++aggfri/O ++ agglomerat/ABDY ++ agglomeration/AHDYv ++ agglomerationsmetod/AHDY ++@@ -590,24 +1656,23 @@ agitator/ATEHY ++ agitatoriske/Y ++ agitera/NMAPDY ++ agitering/ADY ++-agitör/AHDY ++-agn/BDG +++agn/ABDG ++ agna/NAPD ++ agnatisk/OY ++ agnborst/ABDY ++ Agne/A ++ Agneta/A ++-agnig/OY ++ agnosticism/ADY ++ agnostiker/EAJY ++ agnostisk/OY ++-agoni/EADY ++-agonisk/OY +++agoni/EAY ++ agonist ++ agorafobi/EAY ++ agraff/AHDY ++-agrar/AOTHDYX +++agrar/AOHDYX +++agrara/AY ++ agrarförbund/ABDY +++agrarisk/O ++ agreabel/MY ++ agremang/ABHDY ++ agrikultur/ADY ++@@ -630,7 +1695,7 @@ Ahmed/A ++ A-horisont/ADGY ++ A-huggnings/XZ ++ AI ++-aids/r +++aids/Xr ++ aidsdrabbad/NQY ++ aidsepidemi/EAHY ++ aidsfall/ABDY ++@@ -648,17 +1713,18 @@ Aina/A ++ aioli/EAY ++ air/AD ++ Air ++-airbag/ADY +++airbag/ADGY ++ Airbus ++ AIS/r ++ aja/J ++ ajabaja +++ajour/Y ++ ajourföra/KLAJODY ++ ajourförer/Y ++ ajourföring/ADGY ++ ajournera/NMAPDY ++ ajournering/ADGYv ++-ajustera/MY +++ajustera/M ++ akacia/EAGY ++ akademi/EAHDYXU ++ akademiker/EAJYX ++@@ -673,7 +1739,6 @@ A-kassa/EAG ++ akatalektisk/OY ++ akilleshäl/ADGY ++ akillessena/EAGY ++-akiral/OY ++ aklej/XZ ++ akleja/EAGY ++ akne/EAY ++@@ -689,8 +1754,7 @@ akromegali/EAY ++ akronym/AHDY ++ akropol/AHDY ++ Akropolis/X ++-akrosom/AHDY ++-akryl/AHDYX +++akryl/ADYX ++ akrylamid/ADY ++ akrylat/AHDYX ++ akrylatfiber/EAY ++@@ -722,7 +1786,7 @@ aktinium/ABX ++ aktinodielektrisk/OY ++ aktion/AHDYvf ++ aktionsart/AHDY ++-aktionär/AHDY +++aktionär/AHD ++ aktiv/OPQY ++ aktivator/AEHY ++ aktivera/NMAPDY ++@@ -734,7 +1798,7 @@ aktivitet/AHDYvf ++ aktivkort/ABDY ++ aktivslam/CAY ++ aktivslamanläggning/ADGY ++-aktivtid/AHDY +++aktivtid/AHD ++ aktning/ADYv ++ aktningslös/OY ++ aktningsvärd/OY ++@@ -776,14 +1840,14 @@ akvarell/AHDYX ++ akvarellist/AHDYX ++ akvarie/XZU ++ akvariehåv/ADGY +++akvarist/AHDY +++akvaristik/ADY ++ akvarium/AJY ++ akvatint/AHDY ++ akvatisk/OY ++ akvavit/AHDYX ++ akvavitbutelj/AHDY ++ akvedukt/AHDY ++-akvifug/OY ++-akvifär/OY ++ akvileja/EAGY ++ al/ABEQDG ++ Al ++@@ -845,13 +1909,14 @@ alexandrinsk/OQY ++ alexi/EAY ++ alf/AHD ++ Alf/A ++-alfa/ECAY +++alfa/r ++ alfabet/ATBDYv ++ alfabetisera/NMAPDY ++ alfabetisering/ADYv ++ alfalfa/EAY ++ alfanumerisk/OY ++ alfapartikel/EAIY +++Alfapet ++ alfastråle/EAGY ++ alfastrålning/ADY ++ alfasönderfall/ABY ++@@ -892,10 +1957,10 @@ aliment ++ Alingsås/X ++ alingsåsare/EAJY ++ alingsåsbo/EAIY ++-alitera/MY ++ al-Jazeera ++ al-Jazira ++-alkali/ABHY +++alkaisk/O +++alkali/CAHY ++ alkalibeständig/OY ++ alkalifil/OY ++ alkalifri/OY ++@@ -930,7 +1995,6 @@ alkov/AHDYX ++ alkyaromatisk/OY ++ alkydfärg/AHDY ++ alkydlack/ADY ++-alkylera/MY ++ alkärr/ABDY ++ all/AQ ++ alla/A ++@@ -963,7 +2027,6 @@ allena/Y ++ allenahärskande/Y ++ allenarådande/Y ++ allenast ++-allenhet/ADYv ++ allergen/AOBHDY ++ allergi/EAHYXU ++ allergiframkallande/Y ++@@ -1022,7 +2085,7 @@ allnordisk/O ++ allo/Y ++ allodial/OY ++ allofon/AHDY ++-allogami/EADY +++allogami/EAD ++ allograf/AHDY ++ allokera/NMAPY ++ allokering/ADGYv ++@@ -1054,7 +2117,7 @@ allsvensk/OQY ++ allsvenska/EY ++ allsvåldig/OQY ++ allsång/AHDYv ++-allt/BY +++allt/B ++ alltbehärskande/Y ++ alltbetvingande/Y ++ alltefter ++@@ -1069,6 +2132,7 @@ alltid ++ alltifrån ++ alltigenom ++ alltihopa/J +++all-time-high ++ allting/ABY ++ alltjämt ++ alltmedan ++@@ -1126,7 +2190,6 @@ alnsdjup/OY ++ alnshög/OY ++ alnslång/OY ++ aloe/EAY ++-aloxid/AHDY ++ aloxidtegel/FCAY ++ alp/AHD ++ alpacka/EAGX ++@@ -1138,7 +2201,6 @@ alpclematis/DGY ++ alpdal/ADGY ++ alpflora/EAGY ++ alpglöd/ADY ++-alpgård/ADGY ++ alphydda/EAGY ++ alpin/OQ ++ alpinism/ADY ++@@ -1173,7 +2235,6 @@ alstra/NMAPBY ++ alstrare/EAJY ++ alstring/ADGYvf ++ alt/ADG ++-altaisk/OY ++ altan/AHDYX ++ altar/XZ ++ altarbild/AHDY ++@@ -1284,6 +2345,7 @@ ambrosia/EAYX ++ ambrosisk/OY ++ Ambrosius ++ ambulans/HDYXU +++ambulanssiren/AHDY ++ ambulatorisk/OY ++ ambulera/NMAPDY ++ Amelia/AR ++@@ -1310,8 +2372,6 @@ amfibolit/AHDY ++ amfiteater/EAIY ++ amfiteatralisk/OY ++ amfora/EAGY ++-amfoter/OY ++-amfotär/OY ++ amhariska/EAY ++ AMI ++ amidbindning/ADGYv ++@@ -1354,12 +2414,12 @@ amortera/NMAPDY ++ amorterbar/OY ++ amortering/ADGYvf ++ amorös/OQY ++-ampel/MY +++ampel/EMLAIY ++ ampellilja/EAGY ++ ampelväxt/AHDY ++-amper/KQMDYy +++amper/KM +++ampere/EAYX ++ amperemeter/EAIY ++-amperes/Y ++ amplifiera/NMAPDY ++ amplifiering/ADGY ++ amplifikation/AHDY ++@@ -1381,7 +2441,7 @@ amtm ++ AMU/r ++ amulett/AHDYX ++ Amundsen/A ++-amusant/OQY +++amusant/OY ++ Amy/A ++ amylas/HDY ++ amyotrofisk/OY ++@@ -1402,7 +2462,7 @@ anakoret/AHDY ++ anakreontisk/OY ++ anakronism/AHDYX ++ anakronistisk/OY ++-anal/OQ! +++anal/O! ++ analfabet/ATHDYv ++ analfabetism/ADY ++ analfena/EAGY ++@@ -1463,7 +2523,7 @@ anbud/ABDYvf ++ ANC/r ++ anciennitet/ADY ++ ancillär/OY ++-and/AJDRGy +++and/AJQDRGy ++ anda/EAY ++ andakt/AHDYvf ++ Andalusien/AX ++@@ -1509,7 +2569,7 @@ Andorra/AX ++ andorran/AHDY ++ andorransk/OQY ++ andorranska/EAGY ++-andra- +++andra/bR ++ andrabas/DGY ++ andrabil/ADGY ++ andraderivata/EAGY ++@@ -1562,7 +2622,6 @@ andreman/AF ++ andremålvakt/AHD ++ andremän/AF ++ andrepilot/AHD ++-andres ++ andrestyrman/AF ++ andrestyrmän/AF ++ andretränare/EAJ ++@@ -1576,7 +2635,6 @@ Android/AX ++ Androidapp/ADGY ++ android-tv ++ andrum/ECAY ++-andryg/OY ++ andsträck/ABDY ++ ANDT/r ++ andtruten/KMY ++@@ -1670,7 +2728,7 @@ angorakanin/AHDY ++ angorakatt/AHDY ++ angoraull/ADY ++ angrepp/ABDYvf ++-angripa/KLAJY +++angripa/KLAJDY ++ angripar/XZ ++ angripare/EAJY ++ angripbar/OY ++@@ -1681,6 +2739,7 @@ ang ++ angöra/AJDRY ++ angöring/ADGYv ++ angöringsboj/ADGY +++angöringsfyr/ADGY ++ angörs/Y ++ anhalt/AHDY ++ anhang/ABDY ++@@ -1691,8 +2750,7 @@ anhydrid/AHDY ++ anhydrisk/OY ++ anhålla/FKELAJBRY ++ anhållande/EY ++-anhållen/MY ++-anhållne +++anhållen/KMY ++ anhållning/ADGYv ++ anhängar/XZ ++ anhängare/EAJY ++@@ -1718,8 +2776,7 @@ animositet/ADY ++ aning/ADGYv ++ aningslös/OQY ++ aningslöshet/ADY ++-anis/D ++-anis- +++anis/Db ++ anisbröd/ABDY ++ anisett/AHDYX ++ anisettbutelj/AHDY ++@@ -1746,7 +2803,6 @@ Ankeborg/Av ++ ankel/EAIYX ++ ankhane/EAGY ++ ankhanne/EAGY ++-ankhona/EAGY ++ anklaga/NMAPDY ++ anklagare/EAJYz ++ anklagelse/EAIYXU ++@@ -1777,7 +2833,6 @@ anliggningsyta/EAGY ++ anlita/NMAPBY ++ anlopp/ABDYvf ++ anlupen/MY ++-anlupit/Y ++ anlägga/AJBRY ++ anläggar/XZU ++ anläggare/EAJY ++@@ -1856,7 +2911,6 @@ annullering/ADGY ++ anod/AHD ++ anodisera/NMAPDY ++ anodisering/ADGY ++-anodisk/OY ++ anodmodulerad/NQY ++ anomal/OY ++ anomali/EAHY ++@@ -2115,6 +3169,7 @@ antisionistisk/OY ++ antisladdsystem/ABY ++ antisocial/OY ++ antisovjetisk/OY +++antispam/XZ ++ antistatbehandlad/NQY ++ antistatisk/OY ++ antistatmedel/FCAY ++@@ -2182,7 +3237,7 @@ anv ++ användning/ADGYv ++ användningsområde/FECAY ++ aorist/AHD ++-aorta/EAGY +++aorta/EAY ++ AP/r ++ apa/EMAG ++ apache/EAIYX ++@@ -2211,11 +3266,10 @@ apenninsk/OY ++ aperiodisk/OY ++ aperitif/AHDY ++ apertur/AHDY ++-apex/B ++ AP-fonds/XZ ++-aphane/EAGY ++-aphanne/EAGY ++-aphona/EAGY +++aphane/EAG +++aphanne/EAG +++aphona/EAG ++ aphus/BDY ++ apikal/OY ++ apkonst/AHDY ++@@ -2268,12 +3322,13 @@ apparatjik/ADY ++ apparatteknisk/OY ++ apparatur/AHDY ++ apparition/AHDY ++-appell/AHDY +++appell/AHD ++ appellant/AHDY ++ appellation/AHDYv ++ appellationsdomstol/ADGY ++ appellativ/AOBHDY ++ appellera/NMADY +++appellmöte/FECAYv ++ appendicit/AHDY ++ appendix/BDY ++ apperception/AHDY ++@@ -2288,7 +3343,6 @@ applikatur/AHDY ++ applåd/AHDYX ++ applådera/NMAPDY ++ applådknipande/Y ++-apport ++ apportegendom/ADGY ++ apportera/NMAPDY ++ apportering/ADGY ++@@ -2331,7 +3385,8 @@ aptitl ++ aptitretande/Y ++ aptitretar/XZ ++ aptitretare/EAJY ++-apunge/EAGY +++apunge/EAG +++:ar/AJYWZ ++ arab/AHDX ++ Arabemiraten/A ++ arabesk/AHDYX ++@@ -2377,6 +3432,7 @@ arbetsgivar/XZU ++ arbetskraftsmigrant/AHDY ++ arbetslags/XZ ++ arbetslivs/XZ +++arbetslok/ABDY ++ arbetslös/RY ++ arbetslöshet/HYvf ++ arbetslöshetstal/ABDY ++@@ -2386,6 +3442,7 @@ arbetsmarknadspolitisk/OY ++ arbetsmarknadsstöd/ABDY ++ arbetsmarknadsutbildning/ADGY ++ arbetsmiljölag/ADGY +++arbetsmyra/EAGY ++ arbetsort/AHDY ++ arbetsro/EY ++ arbetsrätts/XZ ++@@ -2454,7 +3511,7 @@ arkaisera/MPDY ++ arkaisk/OQY ++ arkaism/AHDY ++ arkaistisk/OY ++-arké/AEHY +++arké/AEH ++ arkebakterie/EAIY ++ arkebusera/NMAPDY ++ arkebusering/ADGYv ++@@ -2481,7 +3538,7 @@ arkivering/ADYv ++ arkivort/AHDY ++ arkivråd/ABDY ++ arkklistrad/NQY ++-arkmatad/NQY +++arkmatad/NQ ++ arksignatur/AHDY ++ Arktis/X ++ arktisk/OY ++@@ -2589,8 +3646,7 @@ arsenikfri/OY ++ arsenikhaltig/OY ++ arsenikkis/HDY ++ arsle/FECAY ++-art/AHD ++-art- +++art/AHDb ++ arta/M ++ Artberg/A ++ artbestämma/KLAJORY ++@@ -2678,6 +3734,7 @@ arvsfond/AHDY ++ arvskifte/FECAY ++ arvslott/AHDY ++ arvsmassa/EAGY +++arvsrätt/ADY ++ arvsskatt/AHDY ++ arvsvinst/AHDY ++ arvsynd/AHDY ++@@ -2690,7 +3747,7 @@ as/BDG ++ asadyrkar/XZ ++ asadyrkare/EAJY ++ asagud/ADGY ++-asalära/EAY +++asaläran/AY ++ asatro/EAY ++ asbagge/EAGY ++ asberusad/NQY ++@@ -2715,6 +3772,7 @@ asfaltsv ++ asfalttjära/EAGY ++ asfull/OY ++ asgam/ADGY +++asgarv/ABDY ++ asiat/ATHDY ++ asiatiske/Y ++ Asien/AX ++@@ -2735,7 +3793,6 @@ askf ++ askgrå/OY ++ askhaltig/OY ++ askhög/ADGY ++-askig/OY ++ askkopp/ADGY ++ askmoln/ABDv ++ askorbinsyra/EAGY ++@@ -2744,9 +3801,8 @@ askunge/EAGY ++ askungesaga/EAGY ++ asocial/OPQY ++ asocialitet/ADY ++-asp/ADGX +++asp/ADG ++ aspartam/ABY ++-aspcellulosa/EAY ++ aspekt/AHDY ++ asperger/X ++ Asperger/A ++@@ -2758,7 +3814,9 @@ aspirering/ADYv ++ aspirin/ABY ++ Asplund/A ++ asplöv/ABDY ++-aspved/ADY +++aspsopp/ADGY +++Aspudden/A +++aspved/AD ++ aspvirke/FECAY ++ Assange/A ++ assemblera/NMAJPYz ++@@ -2839,6 +3897,8 @@ Astudillo/A ++ asyl/AHDYX ++ asylansökan/AY ++ asylrätt/ADY +++asylskäl/ABDY +++asylsökande/AY ++ asymmetri/EAHY ++ asymmetrisk/OY ++ asymptomatisk/OY ++@@ -2865,7 +3925,6 @@ atenare/EAJY ++ atenienn/AHDY ++ ateniensisk/OY ++ atensk/OY ++-ateriol/AHDY ++ ateroskleros/Y ++ ATG/r ++ Atlant/XZ ++@@ -2880,11 +3939,10 @@ atletiske/Y ++ atletklubb/ADGY ++ at-läkare/EAJY ++ AT-läkare/EAJY ++-atmiatri/Y ++ atmosfär/ATHDYX ++ atoll/AHDY ++ atollö/EAGY ++-atom/TAHDYX +++atom/AHDYX ++ atombomb/ADY ++ atombomba/NMAPHYv ++ atomdriven/MY ++@@ -2903,10 +3961,7 @@ atomvikt/AHDY ++ atomär/OY ++ atonal/OY ++ atoni/EAY ++-atopi/EAY ++-atoxisk/OY ++ ATP/r ++-ATP-tour/D ++ atrium/AJY ++ atrofi/EAHY ++ atrofiera/NMAPY ++@@ -2957,6 +4012,7 @@ audiologisk/OY ++ audiometer/EAIY ++ audionom/AHDY ++ audiovisuell/OY +++audition/AHDY ++ auditiv/OQY ++ auditorie/XZ ++ auditorium/AJY ++@@ -2987,7 +4043,7 @@ Aulestad/A ++ Aung ++ aura/EAGY ++ Aurora/A ++-Auschwitz/AX +++Auschwitz/X ++ auskultant/AHDY ++ auskultation/AHDY ++ auskultera/NMAPDY ++@@ -3014,14 +4070,12 @@ autistisk/OQY ++ autodafé/AEHY ++ autodidakt/ATHDY ++ autofokus/DY ++-autogami/EADY ++ autogiro/FECAYX ++ autograf/ATHDYX ++ autokatalytisk/OY ++ autoklav/AHDY ++ autokrat/ATHDY ++ autokrati/EAY ++-autokrom/OY ++ autokton/OY ++ automat/ATHDYX ++ automatbana/EAGY ++@@ -3047,11 +4101,9 @@ autopilot/AHDY ++ autoritär/OY ++ autostart/AHDY ++ autostrada/EAGY ++-autotrof/OY ++ autotypisk/OY ++-auxin/ABY ++-av/A ++-av- +++auxin/ABH +++av/Ab ++ avaktivera/NMAPY ++ avaktualisera/NMAPDY ++ avancemang/ABDYv ++@@ -3132,7 +4184,7 @@ avdagatagit/AY ++ avdagatagne ++ avdagatar/Y ++ avdagatog/AY ++-avdamma/NMAPY +++avdammad/NQY ++ avdamning/ADGY ++ avdankad/NQY ++ avdela/NMAPDY ++@@ -3160,8 +4212,6 @@ avd ++ avdöma/KLODY ++ avec/AHDY ++ avel/EAYvf ++-avelsam/Y ++-avelsamt/Y ++ avelsko/EAIY ++ avelslax/DGY ++ avelssto/FABY ++@@ -3170,7 +4220,6 @@ avenbok/ADGv ++ aveny/EAHY ++ aversion/AHDYv ++ Avesta/AX ++-avestisk/OY ++ avfall/ABDY ++ avfalla/KDYvf ++ avfallen/KMY ++@@ -3183,7 +4232,7 @@ avfettning/ADYv ++ avfettningsmedel/FCAY ++ avfiltrera/MY ++ avfira/NMADY ++-avfjärma/NMAPY +++avfjärma/NMAP ++ avflagad/NQY ++ avflagnad/NQY ++ avflytta/NMAPDY ++@@ -3238,7 +4287,7 @@ avgjuten/MY ++ avgjutning/ADGY ++ avglamouriserad/NQY ++ avglans/HDY ++-avgnagd/OY +++avgnagd/O ++ avgrund/AHDYv ++ avgrundsande/EAGY ++ avgrundsdjup/OPY ++@@ -3248,7 +4297,7 @@ avgr ++ avgränsbar/OY ++ avgränsning/ADGYv ++ avgrävd/OY ++-avgud/ATDY +++avgud/ADY ++ avguda/NAPBIYX ++ avgudabeläte/FECAY ++ avgudabild/AHDY ++@@ -3270,12 +4319,8 @@ avhopp/ABDYv ++ avhoppad/NQY ++ avhoppar/XZ ++ avhoppare/EAJY ++-avhugga/AY ++ avhuggen/MY ++-avhugger/Y ++-avhuggit/AY ++ avhuggning/ADGY ++-avhuggs/Y ++ avhumanisera/MY ++ avhumanisering/ADY ++ avhysa/KQLAJDRY ++@@ -3299,7 +4344,6 @@ avh ++ avhärda/NMAPDY ++ avhärdning/ADGY ++ avhästning/ADY ++-avhögg/AY ++ avi/EAH ++ aviarium/AJY ++ aviatik/ADY ++@@ -3336,8 +4380,8 @@ avklappning/ADGY ++ avklara/NMAPDY ++ avklarnad/NQY ++ avklinga/MPDY ++-avklippa/KQLAJY ++ avklippning/ADGY +++avklippt/OY ++ avkläda/KLAJDY ++ avklädd/OY ++ avklädning/ADGYv ++@@ -3439,7 +4483,7 @@ avl ++ avläsning/ADGYvf ++ avlöna/NMAPDY ++ avlöning/ADGYvf ++-avlöpa/KQLAJDY +++avlöpa/KJD ++ avlöpning/ADGY ++ avlösa/KQLAJDRY ++ avlösar/XZ ++@@ -3479,7 +4523,6 @@ avnotera/NMAPY ++ avnotering/ADGY ++ avnämar/XZ ++ avnämare/EAJY ++-avnöta/KQLAJDY ++ avnötningsapparat/AHDY ++ avocadosallad/AHDY ++ avog/OPQ ++@@ -3502,7 +4545,8 @@ avpollettera/NMAPDY ++ avporträttera/NMAPDY ++ avpressa/NMAPDY ++ avprickad/NQY ++-avprickning/ADGY +++avprickning/ADGYv +++avprickningslista/EAGY ++ avprogrammera/MY ++ avprogrammering/ADGY ++ avprovning/ADGY ++@@ -3527,7 +4571,6 @@ avrinna/JDY ++ avrinner/Y ++ avrinning/ADGYv ++ avrinningsområde/FECAY ++-avrita/NMAPDY ++ avritning/ADGY ++ avriven/MY ++ avrivning/ADGY ++@@ -3552,14 +4595,14 @@ avr ++ avrätta/NMAPDY ++ avrättning/ADGYv ++ avrättningsmetod/AHDY ++-avsa/NAY ++-avsade/Y +++avsa/A +++avsade/A ++ avsadling/ADYv ++-avsagd/OY ++-avsagt/AY +++avsagd/O +++avsagt/A ++ avsaknad/ADY ++ avsalta/NMAPDY ++-avsaltning/ADGY +++avsaltning/ADGYv ++ avsats/HDY ++ avsatt/AOQY ++ avsattes/Y ++@@ -3690,9 +4733,8 @@ avspisning/ADGYv ++ avspjälka/NMAPY ++ avspolning/ADGY ++ avsprång/ABDY ++-avspänd/OPY +++avspänd/OPQY ++ avspändhet/ADY ++-avspänna/KLAJY ++ avspänning/ADGYv ++ avspänningspolitik/ADY ++ avspärra/NMAPY ++@@ -3751,10 +4793,10 @@ avsyna/NMAPDY ++ avsynare/EAJY ++ avsyning/ADGYv ++ avsågad/NQY ++-avsäga/AJDRY +++avsäga/AJDR ++ avsägelse/EAIYX ++-avsäger/Y ++-avsägs/Y +++avsäger +++avsägs ++ avsända/KLAJBY ++ avsändar/XZ ++ avsändaradress/HDY ++@@ -3848,7 +4890,6 @@ avvant/AY ++ avvara/NMAPDY ++ avvattna/NMAPDY ++ avvattning/ADGY ++-avvaxa/NMAPY ++ avveckla/NMAPDY ++ avveckling/ADGYvf ++ avvek/Y ++@@ -3895,7 +4936,6 @@ avyttra/NMAPDY ++ avyttring/ADGYv ++ avyttringsbar/OY ++ avåkning/ADGYv ++-avångas/N ++ avåt/AY ++ aväta/AJDRY ++ aväten/MY ++@@ -3911,13 +4951,10 @@ axelavlastning/ADGY ++ axelavstånd/ABDY ++ axelbalk/ADGY ++ axelband/ABDYv ++-axelbas/HDY ++ axelbeklädnad/ADY ++ axelbelastning/ADGY ++ axelbock/ADGY ++ axelborrning/ADGY ++-axelbox/DGYX ++-axelboxstyrning/ADGY ++ axelbred/OPQY ++ axelbricka/EAGY ++ axelbrott/ABDY ++@@ -3943,19 +4980,17 @@ axelf ++ axelgång/AGY ++ axelhals/DGY ++ axelhalva/EAGY ++-axelhus/BDY ++ axelhållare/EAJY ++ axelhållarstag/ABDY ++ axelhästkraft/AHDY ++-axelkam/FAIY ++-axelkil/ADGY +++axelkil/ADG ++ axelklaff/ADGY ++ axelkona/EAGY ++ axelkoppling/ADGY ++ axelkors/BDY ++ axelkropp/ADGY ++ axelkåpa/EAGY ++-axellager/FCAJYX +++axellager/FCAYX ++ axellagerhus/BDY ++ axellagerhållare/EAJY ++ axellagermotor/AEHY ++@@ -3982,7 +5017,6 @@ axelring/ADGYv ++ axelrotation/AHDY ++ axelryckning/ADGY ++ axelräknare/EAJY ++-axelrör/ABDY ++ axelsektion/AHDY ++ axelskada/EAGY ++ axelskaft/ABDY ++@@ -4027,6 +5061,7 @@ axial/OX ++ axialfläkt/ADGY ++ axialitet/AHDY ++ axialkast/ABDY +++axialkullager/J ++ axialplans/XZ ++ axiell/OY ++ axill/AHDY ++@@ -4056,13 +5091,10 @@ Azerbajdzjan/AX ++ azerbajdzjansk/OQY ++ azerbajdzjanska/EAGY ++ azeriske/Y ++-azid/AHDYX ++-azidjon/AHDY ++ azimut/ADX ++ azofärgämne/FECAY ++ azoisk/O ++ Azorerna/A ++-azotera/MY ++ aztek/ATHDY ++ aztekiske/Y ++ azur/AEX ++@@ -4128,15 +5160,17 @@ backlinje/EAIY ++ backljus/BDY ++ backnejlika/EAGY ++ backning/ADYv +++backpacker/EAJY ++ backpar/ABDY ++ backranunkel/EAIY ++ backsippa/EAGY ++ backspegel/EAIY +++backstage ++ backstuga/EAGY ++ backstugusittare/EAJY ++ backsvala/EAGY ++ backsöta/EAGY ++-backup/AHDY +++backup/AHDYX ++ Backus ++ backvial/AHDY ++ bacon/ABDYX ++@@ -4156,7 +5190,6 @@ badbrygga/EAGY ++ badbyxa/EAGY ++ badda/NMAPDY ++ baddare/EAJY ++-baddjup/ABY ++ baddning/ADGY ++ baddräkt/AHDY ++ badensisk/OQY ++@@ -4170,6 +5203,7 @@ badhytt/AHDYv ++ badkappa/EAGY ++ badkar/ABDYv ++ badlakan/ABDY +++badliv/ABY ++ badminton/ADYX ++ badmintonboll/ADGY ++ badmintonracket/ADGY ++@@ -4177,22 +5211,27 @@ badm ++ badning/ADY ++ badort/AHDY ++ badplats/HDY +++badring/ADGY ++ badrock/ADGY ++ badrum/FCAYvf ++ badrumsvåg/GY ++ badsalt/ABHY +++badsjö/EAGY ++ badsko/EAIY +++badskum/CAY ++ badstrand/AJDY ++ badställe/FECAY +++badvakt/AHDY ++ badvatten/FCAY +++badvett/ABY ++ badvik/ADGY +++badwill ++ bag/ADG ++ bagage/CAYXU ++ bagagerumsmatta/EAGY ++ bagar/XZ ++ bagarbarn/ABDY ++ bagare/EAJY ++-bagass/DY ++ bagatell/AHDYX ++ bagatellartad/NQY ++ bagatellisera/NMAPDY ++@@ -4219,7 +5258,6 @@ Bahrain/AX ++ bahrainare/EAJY ++ bahrainsk/OQY ++ bahrainska/EAGY ++-bainit/ADY ++ baisse/EAIYX ++ baja ++ bajadär/AHDY ++@@ -4234,7 +5272,7 @@ bajsa/NMADY ++ bajsig/OY ++ bajskorv/ADGY ++ bajsnödig/OY ++-bak/ADGYX +++bak/ABDGYX ++ baka/NAPD ++ bakaxel/EAIYX ++ bakaxelväxel/EAIY ++@@ -4250,14 +5288,13 @@ bakdanta/NMAPDY ++ bakdantare/EAJYz ++ bakdel/ADGY ++ bakduk/ADGYv +++bakdäck/ABDY ++ bakdörr/ADGY ++-bakeda/EAGY ++ bakelit/ADYX ++ bakelse/EAIYX ++ bakelsefat/ABDY ++ bakerst ++ bakersta/Y ++-baket/A ++ bakficka/EAGY ++ bakform/ADGYv ++ bakfot/AJDY ++@@ -4285,6 +5322,7 @@ baklava/EAGY ++ bakljus/BDYX ++ baklucka/EAGY ++ baklykta/EAGY +++baklår/ABDY ++ baklås/Y ++ baklägg/ADGY ++ baklänges/YX ++@@ -4305,6 +5343,7 @@ bakpotatis/DGY ++ bakpulver/CAY ++ bakpå ++ bakre/Y +++bakrus/BDY ++ bakrusig/OY ++ bakruta/EAGY ++ baksida/EAGY ++@@ -4313,10 +5352,12 @@ bakslag/ABDY ++ bakslug/OPQY ++ baksmälla/EAGY ++ bakström/FAIY +++bakstöt/ADGY ++ baksug/ABY ++ baksäte/FECAYv ++ baksätespassagerare/EAJY ++-baktala/NMAPY +++baktakt/ADY +++baktala/NMAPDY ++ baktanke/EAGY ++ baktericid/AHDY ++ bakterie/EAIYXU ++@@ -4331,7 +5372,9 @@ baktill ++ baktung/OQY ++ bakugn/ADGY ++ bakut +++bakvagn/ADGY ++ bakverk/ABDY +++bakvikt/ADY ++ bakväg/ADGY ++ bakvänd/OY ++ bakåt/X ++@@ -4347,6 +5390,8 @@ bak ++ bakåtsträvar/XZ ++ bakåtsträvare/EAJY ++ bakåttippande/Y +++bakända/EAY +++bakände/EAGY ++ bala/NAJPHDz ++ balalajka/EAGYX ++ balans/HDYXU ++@@ -4453,7 +5498,7 @@ banditd ++ bandithåla/EAGY ++ bandjärn/ABDY ++ bandlastare/EAJY ++-bandlös/OY +++bandlös/O ++ bandmaskin/AHDY ++ bandmatad/NQY ++ bandning/ADYv ++@@ -4467,6 +5512,7 @@ bandslipmaskin/AHDY ++ bandspelar/XZ ++ bandspelare/EAJY ++ bandsåg/ADGY +++bandvagn/ADGY ++ bandvävnad/AHDY ++ bandvävstol/ADGY ++ bandy/EAYX ++@@ -4477,19 +5523,24 @@ banem ++ baner/ABDY ++ banerförare/EAJY ++ banesår/ABDY ++-bang +++bang/ADG ++ banga/MY ++ Bangkok/A ++ Bangladesh/AX ++ bangladeshare/EAJY ++ bangladeshisk/OQY +++bangolf/ADY ++ bangård/ADGYv ++ bangårdsområde/FECAY ++ bangårdsplattform/ADGY +++banhall/ADGY ++ banhoppning/ADY ++ banjo/EAIY ++ bank/ADYX ++ banka/NAPBHIY +++bankbok/ADY +++bankbox/DGY +++bankböcker/AJY ++ Bankeryd/Av ++ Bankerydsbo/EAIY ++ bankett/AHDYX ++@@ -4503,7 +5554,11 @@ bankkod/AHDY ++ bankkonto/FECAYX ++ bankkontor/ABDY ++ bankkort/ABDYv +++bankkris/HDY +++bankkund/AHDY ++ banklån/ABDY +++bankman/AFY +++bankmän/AFY ++ bankmässig/OY ++ bankomat/AHDYX ++ bankomatkod/AHDY ++@@ -4541,7 +5596,7 @@ bantuspr ++ banvall/ADGY ++ baptism/ADY ++ baptist/ATHDYX ++-bar/AOPHQDX +++bar/AOPHDX ++ barack/AHDY ++ Barack/A ++ bararmad/NQY ++@@ -4577,21 +5632,22 @@ barfotadans/HDY ++ barfotalasse/EAGY ++ barfotamunk/ADGY ++ barhuvad/NQY +++barhäng/ABY ++ barium/ABYX ++ bariumatom/AHDY ++ bark/ADYX ++ barka/NMAPY ++-barkarol/AHDY +++barkarol/AHD ++ barkaroll/AHDY ++ barkass/HDY ++ barkborre/EAGY ++ barkbrand/ADY ++ barkbränd/OHY ++ barkbåt/ADGY ++-barkfri/OY ++ barkig/OY ++ barkning/ADGYv ++ barkympa/NMAPDY +++barkök/ABDY ++ barlast/AHDYX ++ barlasttank/ADGY ++ barm/ADG ++@@ -4629,10 +5685,12 @@ barna ++ barnbarn/ABDY ++ barnbarnsbarn/ABDY ++ barnbok/ADYv +++barnby/EAGY ++ barnböcker/AJY ++ barnbördshus/BDY +++barndag/ADGY ++ barndaghem/FCAY ++-barndans/HDY +++barndans/HD ++ barndom/ADYv ++ barndomshem/FCAY ++ barndomsvän/AFY ++@@ -4645,6 +5703,7 @@ barnflicka/EAGY ++ barnfödd/OY ++ barnförbjuden/MY ++ barnhem/FCAYv +++barnkalas/BDY ++ barnkammar/XZ ++ barnkammare/EAY ++ barnkammarrim/FCAY ++@@ -4694,10 +5753,11 @@ barnunge/EAG ++ barnuppfostran/A ++ barnvagn/ADGY ++ barnvakt/AHDYv +++barnvisa/EAGY ++ barnvårdar/UZ ++ barnvårdare/EAJY ++ barnvänlig/O ++-barnår/ABDY +++barnår/ABD ++ barock/AODYX ++ barockdans/HDY ++ barograf/AHDY ++@@ -4757,7 +5817,7 @@ Basel/AX ++ basenhet/AHDY ++ basera/NMAPY ++ basfiol/AHDY ++-basig/OPY +++basgång/ADGY ++ basilika/EAGYX ++ basilikaform/AHDY ++ basilikaformad/NQY ++@@ -4777,10 +5837,14 @@ baskiske/Y ++ basklav/AHDY ++ baslinje/EAIYX ++ baslinjespel/ABDY +++basläger/FCAY +++basmat/ADY ++ basmatiris/BDY +++basplan/ABY ++ basröst/AHDY ++ basse/EAGY ++ bassning/ADY +++basspel/ABY ++ basstation/AHDY ++ bassäng/AHDYX ++ bast/ABY ++@@ -4796,12 +5860,16 @@ bastmatta/EAGY ++ baston/AHDY ++ bastonad/AHDY ++ bastu/AEIYX +++bastuba/EAGY ++ basturökt/OY ++ basun/AHDYX ++ basunera/NMADY ++ basunist/AHDY +++basvara/EAGY ++ basvin/ABHY +++basyta/EAGY ++ basår/ABDY +++basämne/FECAY ++ batalj/AHDY ++ bataljmålning/ADGY ++ bataljon/AHDYv ++@@ -4811,11 +5879,11 @@ batong/AHDYX ++ batongbeväpnad/NQY ++ batongslag/ABDY ++ batteri/ABHYXU +++batterieliminator/AEHY ++ batteripol/AHDY ++ batterist/AHDY ++ batteritestar/XZ ++ batterivattenflaska/EAGY ++-batyal/OY ++ batymetrisk/OY ++ baud/Y ++ Bauer/A ++@@ -4833,6 +5901,7 @@ BBC ++ bbq/r ++ B-dur/rX ++ be/A +++beach/ADY ++ beachvolleyboll/ADY ++ beagle/EAGY ++ beakta/NMAPBY ++@@ -4842,6 +5911,7 @@ bearbeta/NMAPY ++ bearbetare/EAJY ++ bearbetbar/OY ++ bearbetning/ADGYvf +++bearnaise/EAY ++ bearnaisesås/HDY ++ Beata/A ++ Beatles/X ++@@ -4867,6 +5937,7 @@ beckm ++ beckmörker/CAY ++ becksvart/OY ++ becquerel/AY +++bed/A ++ bedagad/NQY ++ bedarra/MPDY ++ bedda/J ++@@ -4991,6 +6062,11 @@ begreppsreda/EAY ++ begripa/KLAJDRY ++ begripen/MY ++ begriplig/OPQY +++begripliggjorda/Y +++begripliggjorde/AOY +++begripliggjort/AY +++begripliggöra/AJDRY +++begripliggörs/Y ++ begriplighet/AHDYv ++ begrov/AY ++ begrunda/NEMAPDY ++@@ -5210,6 +6286,9 @@ benande ++ benar ++ benas/N ++ benaska/EAY +++benbit/ADGY +++benbrott/ABDY +++benchmarking/ADY ++ Bendtner/A ++ Benedictsson/A ++ benediktin/AHDY ++@@ -5227,7 +6306,6 @@ Bengtsdotter/A ++ Bengtsfors/X ++ Bengtson/A ++ Bengtsson/A ++-bengul/OY ++ benhinna/EAGY ++ benhinne/XZ ++ benhård/OY ++@@ -5248,6 +6326,7 @@ Benny/A ++ benpipa/EAGY ++ benrangel/FCAY ++ benröta/EAY +++bensax/DGY ++ bensen/Y ++ bensin/ADYXU ++ bensindriven/MY ++@@ -5271,13 +6350,12 @@ bensoetr ++ benstomme/EAGY ++ bensår/ABDY ++ bentag/ABDY ++-bentisk/OY ++ Bentley/A ++ bentonit/ADY ++ bentyl/ADY ++ benvit/OY ++ benvävnad/AHDYv ++-Benz/A +++Benz ++ Benzelius ++ benåda/NMAPDY ++ benådning/ADGYv ++@@ -5297,6 +6375,7 @@ bepr ++ bepudra/NMAPDY ++ ber/K ++ beramad/NQY +++berber/EAJ ++ berberis/DY ++ berbisk/OY ++ bereda/KLAJBRY ++@@ -5332,11 +6411,13 @@ Bergman/XZ ++ bergmassiv/ABDY ++ Bergqvist/A ++ bergras/BDY +++bergrum/FCAY ++ bergsbestigning/ADGY ++ bergsbo/EAIY ++ bergsby/EAGY ++ bergsbygd/AHDY ++ Bergsell/A +++bergsget/AJDY ++ bergsgrund/AD% ++ bergshäll/ADG% ++ bergskam/FAIY ++@@ -5364,9 +6445,11 @@ bergs ++ bergtagen/MY ++ berguv/ADGY ++ bergvägg/ADGY +++bergvärme/EAY ++ beridare/EAJY ++ beriden/KMY ++ berika/NMAPDY +++berikning/ADY ++ beriktiga/FNMAPBY ++ beriktigande/EY ++ Berit/A ++@@ -5696,7 +6779,6 @@ betitta/NMAPDY ++ betjäna/NMAPDY ++ betjäning/ADGYvf ++ betjänt/AOHDY ++-betlad/NQY ++ Betlehem/Av ++ betmedel/FCAY ++ betning/ADGY ++@@ -5710,6 +6792,7 @@ betongmur/ADGY ++ betongpelare/EAJY ++ betongsilo/EAIY ++ betongsten/ADGY +++betongtak/ABDY ++ betongvaruindustri/EAHY ++ betoning/ADGYv ++ betr. ++@@ -5728,7 +6811,6 @@ betr ++ beträngd/OQY ++ bets/DY ++ betsa/NMAPHDY ++-betsare/EAJYz ++ betsel/FCAY ++ betsla/NMAPDY ++ betsling/ADGYv ++@@ -5794,7 +6876,7 @@ beveklig/OY ++ bevilja/NMAPBY ++ beviljande/FEY ++ bevillning/ADGY ++-bevinga/NMAPDY +++bevingad/NQY ++ bevis/BDYX ++ bevisa/NMAPDY ++ bevisbar/OY ++@@ -5802,6 +6884,7 @@ bevisb ++ bevisfråga/EAY ++ bevisföring/ADGYv ++ beviskraftig/OY +++beviskrav/ABDY ++ bevislig/OY ++ bevisligen ++ bevismaterial/ABY ++@@ -5824,11 +6907,9 @@ bh/r ++ Bhutan/AX ++ bhutanes/THDY ++ bhutanesiske/Y ++-bi/FEABD ++-bi- ++-biarea/EAGY +++bi/FEABbD +++biarea/EAG ++ biavsikt/AHDY ++-biaxial/OY ++ biaxiell/OY ++ bibba/EAGY ++ bibehålla/KLAJDRY ++@@ -5893,11 +6974,12 @@ bifokal/OY ++ bifokalglas/BDY ++ bifunktionell/OY ++ bifurkation/AHDYv ++-biga/M +++bifångst/AHDY ++ bigami/EADYX ++ bigamist/AHDYX ++ bigarrå/EAHYX ++ bigata/EAGY +++bigning/ADGY ++ bigott/OPQY ++ bigotteri/ABHY ++ bigård/ADGY ++@@ -5925,15 +7007,12 @@ biktstol/ADGY ++ bikupa/EAGY ++ bikupe/XZ ++ bil/ADGYX ++-bila/EAGY +++bila/CAD ++ bilabial/OY ++-bilad/N ++ bilade/AY ++ bilaffär/AHDY ++ bilaga/EAOGY ++ bilagt/AY ++-bilande ++-bilas/N ++ bilateral/OY ++ bilatlas/DGY ++ bilavgas/HDY ++@@ -5943,12 +7022,13 @@ bilbarnstol/ADGY ++ bilbatteri/ABHY ++ bilbesiktning/ADGY ++ bilbomb/AHDY +++bilbrand/AJDY ++ bilburen/KMY ++ bilbälte/FECAY ++ bild/AHDYX ++ bilda/NMAPBY ++ bildanalys/HDY ++-bildare/EAJYz +++bildare/EAJYWZ ++ bildarkiv/ABDY ++ bildbar/OY ++ bildel/ADGYv ++@@ -5966,10 +7046,13 @@ bildl ++ bildmässig/OY ++ bildning/ADGYvf ++ bildrik/OY ++-bildsal/ADGY +++bildrulle/EAGY +++bildruta/EAGY +++bildrör/ABDY ++ bildskärm/ADGY ++ bildskön/OPQY ++ bildsnidare/EAJY +++bildspel/ABDY ++ bildspråk/ABY ++ bildsten/ADGY ++ bildstormare/EAJY ++@@ -5980,23 +7063,33 @@ bildvis ++ bildvisning/ADGYv ++ bildvändande/Y ++ bildvävnad/AHDY +++bildyta/EAGY ++ Bild-Zeitung/A +++bildåre/EAGY ++ bildäck/ABDYv ++ bildödad/NQY +++bildörr/ADGY ++ bilfabrik/AHDY +++bilfirma/EAGY +++bilflak/ABDY ++ bilformig/OY ++-bilfri/OY +++bilfri/QOY +++bilfärd/AHDY ++ bilfärja/EAGY ++ bilfärje/XZ +++bilförare/EAJY ++ bilförsäljar/XZ ++ bilförsäljare/EAJY ++ Bilger/A ++ bilhandlar/XZ ++ bilhandlare/EAJY +++bilhjul/ABDY +++bilhorn/ABDY ++ bilindustri/EAHX ++ bilirubin/ABY ++ bilism/ADY ++ bilist/AHDYX +++biljakt/AHDY ++ biljard/AHDYX ++ biljardboll/ADGY ++ biljardbord/ABDY ++@@ -6014,8 +7107,11 @@ bilkl ++ bilklädselvävnad/AHDY ++ bilkårist/AHDY ++ bilkö/EAHY +++bilköp/ABDY ++ bilkörning/ADYv ++ Bill/A +++billack/ABHDY +++billarm/ABDY ++ billeasing/ADY ++ Billerud/A ++ billig/OPQY ++@@ -6025,7 +7121,6 @@ billighetsvodka/EAY ++ billion/AHDY ++ Billström/A ++ Billy/A ++-bilmack/ADGY ++ bilmodell/AHDY ++ bilmonterad/NQY ++ bilmontör/AHDY ++@@ -6035,39 +7130,52 @@ bilmotorindustri/EAHY ++ bilmuseum/AJY ++ bilmärke/FECAY ++ bilnyckel/EAIY +++bilolycka/EAGY +++bilpark/AHDY +++bilpool/AHDY ++ bilprovning/ADGYv ++ bilprovningsverksamhet/AHDY +++bilratt/ADGY +++bilresa/EAGY +++bilring/ADGY ++ bilruta/EAGY ++ bilsjuk/OQY ++ bilskatt/AHDY ++ bilsport/AHDYX +++bilstol/ADGY ++ bilstöld/AHDY +++bilsäte/FECAY ++ biltak/ABDY ++ biltest/ABHDY ++ biltillbehör/ABDY +++biltjuv/ADGY ++ biltog/OY +++biltrafik/ADY ++ biltull/ADGY ++ biltur/AHDY ++ biltvätt/ADGYv +++biltyp/AHDY ++ biltät/OPY +++bilvrak/ABDY ++ bilvård/ADYv ++ bilvårdsprodukt/AHDY ++ bilväg/ADGY +++bilägare/EAJY ++ bilägga/AJRY ++ bilägger/Y ++ biläggs/Y ++ bimbo/EAIY ++ bimetall/ATHDY ++-bimodal/OY ++ bimåne/EAGY ++ binamn/ABDY ++ binaural/OY ++-binda/EAJDGY +++binda/EAJDRGY ++ bindare/EAJY ++ bindbjälke/EAGY ++ binde/XZ ++ bindel/EAIY ++ bindemedel/FCAY +++bindeord/ABDY ++ binder/Y ++ binderi/ABHY ++ bindestreck/ABDY ++@@ -6099,6 +7207,7 @@ bin ++ binärkod/AHDY ++ binärkodad/NQY ++ bio/EAX +++biobank/AHDY ++ biobesök/ABDY ++ biobiljett/AHDY ++ biobränsle/FECAY ++@@ -6111,9 +7220,11 @@ biodlare/EAJY ++ biodling/ADGYv ++ bioduk/ADGY ++ biodynamisk/OY +++bioenergi/EAY ++ biofilm/AHDY ++ biofysisk/OY ++ biogas/HDYX +++biogasbuss/DGY ++ biogasmack/ADGY ++ biogen/OY ++ biogenetisk/OY ++@@ -6130,11 +7241,14 @@ biolog/ATHDYX ++ biologi/EAYX ++ biologiske/Y ++ biologism/ADY +++biomassa/EAGY ++ biomedicinsk/OY ++ biometri/EAY ++ biometrisk/OY ++ biomständighet/AHDY +++biomörker/CAY ++ biopsi/EAHYX +++biosalong/AHDY ++ biosfär/ADYX ++ biostatisk/OY ++ bioteknik/AHDY ++@@ -6164,7 +7278,6 @@ bisats/HDYX ++ bisatta/LJY ++ bisatte/Y ++ bisektris/HDYX ++-biserial/OY ++ bisexualitet/ADY ++ bisexuell/OQY ++ bisfenol/Y ++@@ -6203,18 +7316,19 @@ bis ++ bisätter/Y ++ bisättning/ADGY ++ bit/ADGYX ++-bita/KA +++bita/KAR ++ bitande/CAY ++--bitars/XZ +++-bitars/XZU +++bitch/ADGY ++ bitchig/OPY ++ biten/M ++ bitestikel/EAIY ++ bitits ++ bitne/Y +++bitrate/EA ++ biträda/KLAJDY ++ biträdd/OY ++ biträde/FECAYv ++-bitsbox/DGY ++ bitsk/OPQY ++ bitsocker/CAY ++ bitström/FAIYv ++@@ -6224,6 +7338,7 @@ bitterligen ++ bitterljuv/OY ++ bittermandel/EAIYX ++ bittersalt/OY +++bittersta ++ bittersöta/EAJY ++ bittersött/Y ++ bitti ++@@ -6233,6 +7348,7 @@ bitumenfattig/OY ++ bitumenhaltig/OY ++ bitumenimpregnerad/NQY ++ bituminös/OY +++bitvarg/ADGY ++ bitvis ++ biutrymme/FECAY ++ bivack/AHDY ++@@ -6262,12 +7378,13 @@ bj ++ bjäfs/BY ++ bjälk/XZ ++ bjälke/EAGY +++bjälklag/ABDY ++ bjäller/XZ ++ bjällra/EAGY ++ Bjärred/Av ++ bjärt/OPQY ++ bjärtmålad/NQY ++-bjärtröd/OY +++bjärtröd/O ++ bjässe/EAGY ++ Björck/A ++ björk/ADGYX ++@@ -6347,7 +7464,7 @@ blanc-vin/BH ++ bland/X ++ blanda/NMAPDY ++ blandare/EAJYzg ++-blandbar/OY +++blandbar/O ++ blandbasig/OY ++ blandekonomi/EAHY ++ blandekonomisk/OY ++@@ -6356,7 +7473,6 @@ blandning/ADGYvf ++ blandras/HDY ++ blandskog/ADGY ++ blandvin/ABHY ++-blandväv/ADGY ++ blank/OPQYX ++ blanka/NMAPDY ++ blankbonad/NQY ++@@ -6404,12 +7520,12 @@ bleckslagare/EAJY ++ bleckslageri/ABHY ++ blek/PQRYX ++ bleka/KQLDY ++-blekbar/OY ++ blekblond/OY ++ blekblå/OY ++ blekeri/ABHY ++ blekfet/OQY ++ blekfis/DGY +++blekgrå/OY ++ blekgrön/OY ++ blekgul/OY ++ blekhet/ADYv ++@@ -6475,6 +7591,7 @@ blixt/ADGYX ++ blixtaggregat/ABDY ++ blixtbelysning/ADY ++ blixtfull/OY +++blixtfyr/ADGY ++ blixthalka/EAY ++ blixtinkalla/NMAPY ++ blixtkub/AHDY ++@@ -6520,14 +7637,13 @@ blodhosta/EAGY ++ blodhund/ADGY ++ blodig/OPQY ++ blodigel/EAIY ++-blodkaka/EAGY ++ blodkropp/ADGY ++ blodkräkning/ADGY ++ blodkärl/ABDYv ++-blodlus/DY +++blodlus/D ++ blodlönn/ADGY ++ blodlös/OY ++-blodlöss/DY +++blodlöss/D ++ blodnäva/EAGY ++ blodomlopp/ABDY ++ blodplasma/EAY ++@@ -6573,6 +7689,7 @@ blod ++ blogg/ADYX ++ blogga/NAPDIY ++ bloggare/EAY +++blogginlägg/ABDY ++ bloggning/ADY ++ bloggnyhet/AHDY ++ bloggosfär/ADY ++@@ -6609,7 +7726,7 @@ blomsterkrasse/EAY ++ blomsterprydd/OY ++ blomsterströ/NKMAY ++ blomsteräng/ADGY ++-blomstra/MDY +++blomstra/NMAPDY ++ blomstring/ADYv ++ blomvas/HDY ++ blomvass/DGY ++@@ -6621,7 +7738,6 @@ Bloomberg/A ++ bloss/BDY ++ blossa/MDY ++ blot/ABDY ++-blota/NMAPY ++ blotta/NEMAPBGYz ++ blottare/EAJYz ++ blottla/Y ++@@ -6645,7 +7761,7 @@ bluffare/EAY ++ bluffmakar/XZ ++ bluffmakare/EAJY ++ blund/ADY ++-blunda/MY +++blunda/MDY ++ blunddocka/EAGY ++ blunder/EAIY ++ blu-ray/X ++@@ -6657,8 +7773,7 @@ bly/ABX ++ blyackumulator/AEHY ++ blyaktig/OY ++ blyarmerad/NQY ++-blyartad/NQY ++-blyatom/AHDY +++blyartad/NQ ++ blybatteri/ABHY ++ blyblomma/EAGY ++ blyerts/DGYX ++@@ -6671,7 +7786,7 @@ blyf ++ blyförgiftning/ADGY ++ blyg/OPQ ++ blyga/LA ++-blygd/AHDY +++blygd/ADY ++ blygdben/ABDY ++ blygdläpp/ADGY ++ blyghet/ADYv ++@@ -6680,10 +7795,10 @@ blygsam/KMLY ++ blygsamhet/ADYv ++ blygsamt/Y ++ blygsel/EAYX +++blyhalt/AHDY ++ blyhaltig/OY ++ blyinfattad/NQY ++ blymantlad/NQY ++-blyslig/OY ++ blytung/OY ++ blå/QOP ++ blåaktig/OY ++@@ -6733,7 +7848,7 @@ bl ++ blåsar/XZU ++ blåsare/EAJY ++ blåsbälg/ADGY ++-blåsfri/OY +++blåsfri/O ++ blåshals/DGY ++ blåshål/ABDY ++ blåsig/OPY ++@@ -6760,6 +7875,7 @@ bl ++ blåviolett/OY ++ blåvit/OQY ++ blåögd/OPQY +++blåögdhet/ADY ++ bläck/ABYX ++ bläcka/EAGY ++ bläckfisk/ADGY ++@@ -6769,7 +7885,6 @@ bl ++ bläckstråleskrivare/EAJY ++ blädder/XZ ++ bläddra/NEMABGY ++-bläddrig/OY ++ bläddring/ADY ++ blända/NMAPDY ++ bländare/EAJYz ++@@ -6801,8 +7916,8 @@ bl ++ blödning/ADGYvf ++ blöj/XZ ++ blöja/EAGY ++-blöt/PQ ++-blöta/KEQLAJDRYz +++blöt/PQRYX +++blöta/KEQLDY ++ blötdjur/ABDY ++ blöthet/ADY ++ blötlade/AY ++@@ -6812,10 +7927,11 @@ bl ++ blötlägger/Y ++ blötläggning/ADY ++ blötläggs/Y +++blötsnö/EAY ++ BMW ++ bnp/r ++ BNP ++-bo/FEMBDI +++bo/FEMBI ++ Bo/A ++ boa/ELAG ++ boaorm/ADGY ++@@ -6829,7 +7945,6 @@ bobb/ADG ++ bobubbla/EAGY ++ bock/ADYX ++ bocka/NMADIY ++-bockbar/OY ++ bockformig/OY ++ bockfot/AJDY ++ bockhornsklöver/EAY ++@@ -6840,7 +7955,7 @@ bod/ADG ++ Boda/A ++ bodelning/ADGYv ++ Boden/AX ++-bodenbo/EAIY +++bodenbo/EAI ++ Bodil/A ++ Bodström/A ++ bodybuildare/EAJY ++@@ -6860,6 +7975,7 @@ bog/ADG ++ bogankare/ECAJY ++ Bogart/A ++ bogblad/ABDY +++bogey/EAY ++ bogfläsk/ABY ++ boghöjd/AHDY ++ bogpropeller/EAIY ++@@ -6896,6 +8012,7 @@ bokande/CAY ++ bokanmälan/AY ++ bokare/EAJY ++ bokauktion/AHDY +++bokband/ABDY ++ bokbindar/XZ ++ bokbindare/EAJY ++ bokbindarnål/ADGY ++@@ -6903,8 +8020,9 @@ bokbinderi/ABHYX ++ bokbord/ABDY ++ bokbuss/DGYX ++ bokbål/ABDY ++-bokcafé/ABHCY +++bokcafé/ABHY ++ bokcirkel/EAIY +++bokflod/AHDY ++ bokform/Y ++ bokföra/KLAJODRY ++ bokförare/EAJY ++@@ -6917,14 +8035,16 @@ bokf ++ bokhandel/EAY ++ bokhandlare/EAJY ++ bokhylla/EAGY ++-bokkafé/ABHCYX +++bokkafé/ABHYX ++ bokklubb/ADGY ++ boklig/OY ++ boklåda/EAGY +++boklån/ABDY ++ boklärd/OQY ++ bokläsar/XZ ++ bokläsare/EAJY ++ bokmal/ADGY +++bokmoms/DY ++ bokmål/ABY ++ bokmärka/KQLAJDRYv ++ bokmärke/FECYv ++@@ -6933,16 +8053,18 @@ bokm ++ bokmärkspärm/ADGY ++ bokmässa/EAGY ++ bokning/ADGYvf ++-boknyhet/AHDY ++ bokollon/ABDY ++-bokprat/ABY +++bokprat/AB +++bokpris/BHDY ++ bokpärm/ADGY ++ bokrea/EAY ++ bokrecension/AHDY ++ bokrygg/ADGY ++ boksamling/ADGY +++bokserie/EAIY ++ boksida/EAGY ++ bokskog/ADGYv +++bokskåp/ABDY ++ bokslut/ABDYvf ++ bokslutsår/ABDY ++ bokstav/ADYvf ++@@ -6954,10 +8076,13 @@ bokstavstro/EAY ++ bokstavsträl/ADGY ++ bokstäver/AJY ++ bokstöd/ABDY +++boktips/BDY ++ boktitel/EAIY ++ boktryckar/XZ ++ boktryckare/EAJY ++ boktryckeri/ABHY +++bokträd/ABDY +++bokverk/ABDY ++ bolag/ABDYvf ++ bolagisera/NMAPDY ++ bolagisering/ADGYv ++@@ -6973,6 +8098,7 @@ boll/ADGYX ++ bolla/NMABY ++ Bollebygd/A ++ bollformig/OY +++bollhav/ABDY ++ bollkalle/EAGY ++ Bollnäs/X ++ bollplank/ABDY ++@@ -7013,6 +8139,7 @@ bombflyg/ABY ++ bombhot/ABDY ++ bombhota/NMAPY ++ bombhärjad/NQY +++bombmål/ABDY ++ bombning/ADGYvf ++ bombräd/AHDY ++ bombsäker/MY ++@@ -7020,6 +8147,7 @@ bomma/NMAPDY ++ bomolja/EAY ++ bomsadel/EAIY ++ bomsegel/FCAY +++bomskott/ABDY ++ bomull/ADYvf ++ bomullsartad/NQY ++ bomullsduk/ADGY ++@@ -7072,13 +8200,14 @@ bonus/DGYX ++ bonusberättigad/NQY ++ bonvax/BY ++ bookmaker/EAJY ++-boolisk/OY ++ boom/AHDY ++ boota/NMAY ++ boots/DY ++ boplats/HDYX +++boplikt/ADY ++ bopris/BHY ++-boratom/AHDY +++bopålar/AJ +++boratom/AHD ++ borax/DY ++ boraxhaltig/OY ++ bord/ABDY ++@@ -7097,6 +8226,7 @@ bordl ++ bordläggning/ADGYv ++ bordläggs/Y ++ bordlöpare/EAJY +++bordning/ADGY ++ bordsben/ABDY ++ bordsbön/AHDY ++ bordsduk/ADGY ++@@ -7109,6 +8239,7 @@ bordsvin/ABHY ++ bordsända/EAY ++ bordtennis/DYX ++ bordtennisbord/ABDY +++bordun/AHDY ++ boreal/OY ++ boren/KM ++ borg/ADYX ++@@ -7163,6 +8294,7 @@ bort/O ++ bortackordera/MY ++ bortadoptera/NMAPDY ++ bortaförlust/AHDY +++bortais/DGY ++ bortalag/ABDY ++ bortamatch/AHDY ++ bortamöte/FECAY ++@@ -7253,6 +8385,7 @@ bortskottad/NQY ++ bortskrapad/NQY ++ bortskruvad/NQY ++ bortskrämd/OQY +++bortskuren/MY ++ bortskämd/OQY ++ bortskämdhet/ADYv ++ bortskänka/KQLAJRY ++@@ -7302,13 +8435,13 @@ bortvr ++ bortvältad/NQY ++ bortvältrad/NQY ++ bortvänd/OY +++bortvändhet/ADY ++ bortåt ++-bortödd/OY ++ bortödslad/NQY ++ bortöver ++ Borås/X ++ boråsare/EAJY ++-boråsbo/EAIY +++boråsbo/EAI ++ boränta/EAGY ++ boränte/XZ ++ borätt/AHDY ++@@ -7324,13 +8457,11 @@ bosnienserbiske/Y ++ bosnier/EAJY ++ bosnisk/OQY ++ bosniska/EAGY ++-boson/AHDY ++ bospara/MBY ++ boss/DGY ++ bossanova/EAY ++ Bosse/A ++ bosselera/MY ++-bossera/MY ++ bossig/OY ++ bossvälde/FECAY ++ bostad/ADYvf ++@@ -7367,7 +8498,7 @@ botg ++ botgöring/ADGYv ++ Botkyrka/AX ++ Botniabanan/A ++-botong/ADY +++botox/X ++ Botswana/AX ++ botswanier/EAJY ++ botswansk/OQY ++@@ -7416,14 +8547,16 @@ bovstreck/ABDY ++ box/DGYX ++ boxa/NAPD ++ boxare/EAYzg +++boxboll/ADGY ++ boxer/EAIY ++ Boxholm/A ++ boxning/ADGYvf +++boxplay/AY ++ boxvin/ABHY ++ boyta/EAGY ++ BP/r ++ BPA/r ++-bra/R +++bra/CR ++ bracka/EAGY ++ brackaktig/OY ++ brackig/OPQY ++@@ -7435,7 +8568,7 @@ bragte/Y ++ Brahms/X ++ brailleskrift/ADY ++ brainstorming/ADYX ++-brak/ABDY +++brak/ABY ++ braka/MDY ++ brakfest/AHDY ++ brakförlust/AHDY ++@@ -7466,6 +8599,7 @@ brandig/OY ++ Brandin/A ++ brandkronad/NQY ++ brandkår/AHDYv +++brandlarm/ABDY ++ brandman/AFY ++ brandmur/ADGY ++ brandmän/AFY ++@@ -7479,6 +8613,7 @@ brandspruta/EGY ++ brandtal/ABDY ++ brandteknisk/OY ++ brandvarnare/EAJY +++brandvägg/ADGY ++ brandy/EAY ++ brann/Y ++ bransch/AHDYXU ++@@ -7499,14 +8634,14 @@ brasklapp/ADGY ++ brass/BQDRY ++ brassa/NMDIY ++ brast/Y ++-brat/Y ++-brats/DY +++brasved/ADY +++brats/D ++ Bratt/A ++ bratwurst/ADGY ++ bravad/AHDY ++ bravera/MY ++ Brawn/A ++-bravo/YX +++bravo ++ bravorop/ABDY ++ bravur/ADY ++ bravurmässig/OY ++@@ -7551,6 +8686,7 @@ Bremen/AX ++ brer ++ bretagnisk/OY ++ brev/ABDYX +++brevbomb/AHDY ++ brevbärare/EAJY ++ brevhög/ADGY ++ breviarium/AJY ++@@ -7616,6 +8752,7 @@ bristf ++ bristning/ADGYv ++ bristningsgräns/DY ++ bristsjukdom/ADGY +++bristvara/EAGY ++ Brita/QA ++ britannisk/OQY ++ Britney/A ++@@ -7623,6 +8760,7 @@ brits/DGY ++ britt/ATHDY ++ Britt/A ++ Brittas +++brittiska/EAGY ++ brittiske/Y ++ brittpop/ADY ++ brittsommar/ADIY ++@@ -7746,7 +8884,6 @@ brudkl ++ brudkrona/EAGY ++ brudköp/ABY ++ brudpar/ABDY ++-brudtåg/ABY ++ brudtärna/EAGY ++ bruk/ABDYv ++ bruka/NMAP ++@@ -7769,6 +8906,8 @@ bruksf ++ brukshund/ADGY ++ brukshundsklubb/ADGY ++ brukskonst/ADY +++brukslagen/MY +++brukslå/NMLAY ++ bruksort/AHDY ++ bruksvin/ABHY ++ bruksvärde/FECAY ++@@ -7777,7 +8916,7 @@ bruksv ++ bruksvärdessystem/ABDY ++ brulépudding/ADGY ++ brum/C ++-brumfri/OY +++brumfri/O ++ brumma/MDY ++ brun/OPEYX ++ brunaktig/OY ++@@ -7792,7 +8931,8 @@ brunera/NMAPDY ++ brunett/AHDY ++ brungul/OY ++ brunhyad/NQY ++-brunkol/ABYv +++brunkol/ABDYv +++brunkål/ADY ++ brunlockig/OY ++ brunmålad/NQY ++ brunn/DGYv ++@@ -7810,16 +8950,16 @@ brunstig/OPQY ++ brunstrupig/OY ++ brunsås/HDY ++ brunögd/OQY ++-brus/BDYX +++brus/BYX ++ brusa/MBY ++-brusfri/OY ++ brushane/EAGY ++-brusig/OY +++brusig/O ++ brustablett/AHDY ++ brusten/KMY ++ brustit/Y ++ brutal/OPQY ++ brutalisera/NMAPDY +++brutalisering/ADY ++ brutalism/ADY ++ brutalitet/AHDY ++ bruten/KMY ++@@ -7905,6 +9045,7 @@ br ++ bräcklighet/ADYv ++ bräd/XZ ++ bräda/NEMAPDRGY +++brädbit/ADGY ++ brädd/ADY ++ brädda/NMAIY ++ bräddfull/OY ++@@ -7946,7 +9087,9 @@ br ++ brätte/FECAY ++ bröd/ABHDYX ++ brödbak/ABDY +++brödbit/ADGY ++ brödfat/ABDY +++brödig/OPY ++ brödkorg/ADGY ++ brödlös/OY ++ brödrafolk/ABDY ++@@ -7985,7 +9128,7 @@ budbil/ADGY ++ budbyrå/EAHY ++ budbärar/XZ ++ budbärare/EAJY ++-Buddha/EAGX +++Buddha/AX ++ buddhism/ADY ++ buddhist/ATHDYX ++ buddism/ADY ++@@ -8009,9 +9152,9 @@ budosport/AHDY ++ budplikt/ADYv ++ budpliktsbud/ABDY ++ budpremie/EAIY ++-budröst/AHDY ++-budrösta/NMADY ++-budröstning/ADYv +++budröst/AD +++budrösta/NMAHD +++budröstning/ADv ++ budskap/ABDYvf ++ budstrid/AHDY ++ buffaopera/EAGY ++@@ -8043,7 +9186,6 @@ bugande/CAY ++ bugg/ADY ++ bugga/NAPIY ++ buggfix/DGY ++-bugglåt/ADGY ++ buggning/ADYv ++ bugning/ADGY ++ Buick/A ++@@ -8061,15 +9203,22 @@ bukspottk ++ bukspottskörtel/EAIYX ++ bukt/ADY ++ bukta/MPHDY +++buktala/NMADY +++buktalare/EAJY ++ buktig/OY +++bukvägg/ADGY ++ bula/EAGY ++ bulgar/ATHDY ++ Bulgarien/AX ++ bulgariska/EAGY ++ bulgariske/Y +++bulgur/ADY +++bulgursallad/AHDY ++ bulimi/EAY ++ buljong/AHDYXU ++-bulkig/OY +++bulk/AD +++bulkfartyg/ABDY +++bulkvara/EAGY ++ bull/XZ ++ Bull/A ++ bulla/EMAGY ++@@ -8090,6 +9239,7 @@ bulletin/AHDY ++ bullig/OY ++ bullra/MDY ++ bullrig/OPQY +++bullshit ++ bulsig/OY ++ bult/ADY ++ bulta/MBIY ++@@ -8137,6 +9287,7 @@ burkh ++ burkig/OY ++ Burkina ++ burkinisk/OY +++burkmat/ADY ++ burköl/ABDY ++ burköppnare/EAJY ++ burlesk/OPQY ++@@ -8174,6 +9325,7 @@ busfr ++ bush/ADY ++ Bush/AX ++ busig/OPQY +++business/DY ++ buskablyg/OQY ++ buskage/ECAY ++ buske/EAGY ++@@ -8185,12 +9337,15 @@ busk ++ busliv/ABY ++ buss/DGYX ++ bussa/NAPY +++bussbolag/ABDY ++ busschaufför/AHDY ++ bussfil/AHDY ++ bussig/OPQY +++busskort/ABDY ++ busskur/AHDY ++ busslinje/EAIY ++ bussning/ADGYvf +++bussresa/EAGY ++ busstation/AHDYv ++ bussterminal/AHDY ++ busstreck/ABDY ++@@ -8212,6 +9367,7 @@ butler/EAY ++ butter/KMLY ++ butterkaka/EAGY ++ Button/A +++buxbom/ADGY ++ BVC/r ++ by/ECAG ++ byalag/ABDY ++@@ -8227,10 +9383,11 @@ bygdespel/ABDY ++ bygel/EAIYX ++ bygelsåg/ADGY ++ bygga/KLAJOBYz ++-byggar/XZ ++-byggarbetare/EAJY +++byggar/XZU +++byggarbetare/EAY ++ byggare/EAJY ++ byggbar/OY +++byggbolag/ABDY ++ byggbransch/ADY ++ bygge/FECAY ++ byggentreprenör/AHDY ++@@ -8253,23 +9410,30 @@ byggnadsdel/ADGY ++ byggnadsråd/ABDY ++ byggnadssten/ADGY ++ byggnadsår/ABDY +++byggnation/AHDY +++byggplan/AHDY ++ byggsats/HDY +++byggstart/AHDY ++ byggsten/ADGY +++byggstopp/ABDY +++byggtid/AHDY ++ byggvaruhus/BDY ++ byggår/ABDY ++ byggändamål/ABDY ++-bygrind/ADGY ++ byig/O ++ byinnevånare/EAJY ++ byinvånar/XZ ++ byinvånare/EAJY ++-byk/ABDG +++byk/BDR +++byka/KQLI ++ byledare/EAJY +++byline/EAY ++ byling/ADGY ++ bylsig/OPQY ++ bylta/NMAPDY ++ bylte/FECAY ++-bymöte/FECAY +++bymoln/ABDY +++bymöte/FECA ++ byracka/EAGY ++ byrå/EAHGYXU ++ byråkrat/ATHDY ++@@ -8291,11 +9455,11 @@ bysth ++ bystmått/ABDY ++ bystämma/EAGY ++ byta/A ++-bytar/XZ ++-bytare/EAJY +++bytardag/ADGY +++bytare/EAJYWZ ++ bytbar/OY ++ byte/FECAYv ++-bytekod/AHDY +++bytekod/AHD ++ byter ++ bytesbalans/HDY ++ bytesbalansunderskott/ABDY ++@@ -8308,6 +9472,8 @@ bytte/A ++ byväg/ADGY ++ byx/XZ ++ byxa/EAGY +++byxben/ABDY +++byxficka/EAGY ++ byxknapp/ADGY ++ byxlinning/ADGYv ++ byxlös/OY ++@@ -8334,8 +9500,8 @@ b ++ bål/ABDG ++ båld/OQ ++ bålgeting/ADGYX ++-bålgetingsbo/FEABDY ++-bålskål/ADGY +++bålgetingsbo/FEABY +++bålskål/ADG ++ Bålsta/AX ++ Bålstabo/EAIY ++ bålverk/ABDY ++@@ -8349,22 +9515,32 @@ b ++ Båstad/Av ++ båt/ADGYX ++ båta/M +++båtben/ABDY ++ båtburen/MY ++-båtbyggar/XZ ++ båtbyggare/EAJY ++ båtbyggeri/ABHY +++båtdäck/ABDY +++båtfolk/ABY ++ båtformig/OY +++båtfärd/AHDY +++båthamn/ADGY +++båthus/BDY +++båtliv/ABY ++ båtmigrant/AHDY ++ båtmotor/AEHY ++ båtmotorfabrik/AHDY ++ båtmotorindustri/EAHY ++ båtnad/ADY +++båtolycka/EAGY +++båtresa/EAGY ++ båtshake/EAGY ++ båtsman/AFY ++ båtsmän/AFY ++ båttillbehör/ABDY ++ båttur/AHDY +++båttyp/AHDY ++ båtvarv/ABDY +++båtvett/ABY ++ båtägare/EAJY ++ bä ++ bäbis/DGY ++@@ -8378,6 +9554,7 @@ b ++ bädda/NAPDY ++ bäddbar/OY ++ bäddning/ADGY +++-bädds/XZU ++ bäddsoffa/EAGY ++ bägar/XZ ++ bägare/EAJY ++@@ -8398,6 +9575,8 @@ b ++ bänk/ADGYX ++ bänka/NAPY ++ bänkborrmaskin/AHDY +++bänknötare/EAJY +++bänkrad/AHDY ++ bänkslipmaskin/AHDY ++ bär/BDYX ++ bära/AR ++@@ -8417,7 +9596,9 @@ b ++ bärighet/ADYv ++ bäring/ADGY ++ bärkasse/EAGY +++bärkraft/ADY ++ bärkraftig/OY +++bärlina/EAGY ++ bärmos/BY ++ bärning/ADGYvf ++ bärnsten/ADYv ++@@ -8429,11 +9610,15 @@ b ++ bärrem/FAIY ++ bärs/DY ++ bärsa/EAGY +++bärsele/EAGY +++bärstol/ADGY ++ bärsärk/ADGY ++ bärsärkagång/ADY ++ bärsärkaraseri/ABY ++ bärtoner/AJY ++-bärvin/ABHY +++bärvin/ABH +++bärvåg/ADY +++bärvågor/AJY ++ bäst/OQR ++ bästföredatum/ABDY ++ bästis/DGY ++@@ -8463,7 +9648,6 @@ b ++ böjmuskel/EAJY ++ böjning/ADGYvf ++ böjprov/ABDY ++-böjstyv/OY ++ böjträ/ABY ++ böjträstol/ADGY ++ bök/AB ++@@ -8482,6 +9666,8 @@ b ++ bönande ++ bönar ++ bönat/A +++bönbok/ADY +++bönböcker/AJY ++ bönder/AJY ++ bönegemenskap/AHDY ++ bönegudstjänst/AHDY ++@@ -8504,7 +9690,7 @@ b ++ bönland/ABDY ++ bönsal/ADGY ++ böra/J ++-börd/AHDY +++börd/ADY ++ börda/EAGY ++ bördefördelning/ADY ++ bördig/OPY ++@@ -8517,8 +9703,11 @@ b ++ börsaffär/AHDY ++ börsbolag/ABDY ++ börschef/AHDY +++börsdag/ADGY ++ börsetisk/OY +++börsfall/ABDY ++ börshaj/ADGY +++börshus/BDY ++ börsintroducera/MY ++ börsklipp/ABDY ++ börskurs/HDYX ++@@ -8534,7 +9723,9 @@ b ++ börsuppgång/ADGY ++ börsutveckling/ADY ++ börsverksamhet/ADY ++-börsår/ABDY +++börsvärde/FECAY +++börsyra/EAY +++börsår/ABD ++ böss/XZ ++ bössa/EAGY ++ böta/M ++@@ -8549,21 +9740,21 @@ b ++ c/r ++ ca ++ cabriolet/AHDY ++-cacha/NAPDIY ++-cache/EAY +++cache/EAGY ++ cacheminne/FECAY ++ CAD/r ++ caddie/EAIY ++ Cadillac/A ++ Caesar/A ++-café/ABHCYXU +++café/ABHYXU ++ cafeteria/EAGY ++ Caibarién/A ++ Cajsa/A ++ californium/ABY ++ callcenter/FCAYX +++callgirl/AY ++ Calmfors/X ++-calypso/EAY +++calypso/EAX ++ Camagüey/A ++ Cambridge/AX ++ camembert/AHDY ++@@ -8577,6 +9768,10 @@ campa/MDY ++ campare/EAJYz ++ camping/ADGYX ++ campingplats/HDY +++campus/YX +++Canal +++Canal7/r +++canasta/EAY ++ cancan/Y ++ cancer/EAIYXU ++ cancerogen/OY ++@@ -8585,7 +9780,7 @@ Cannes ++ canossavandring/ADGYv ++ cantilena/EAGY ++ canto ++-canvas/XZ +++canvas/DYX ++ canvasduk/ADGY ++ canvasvävning/ADGY ++ CAP/r ++@@ -8594,6 +9789,7 @@ Capio/A ++ capita/Y ++ capoeira/EAY ++ Capone +++cappella ++ cappuccino/FEAYX ++ carambole/EAY ++ carambolera/MY ++@@ -8613,10 +9809,13 @@ Carolina ++ Carolus ++ carport/ADGY ++ carte-/XZ +++cash/Y ++ cashewnöt/AJDY +++casting/ADYX ++ Catalinaaffären/A ++ catering/ADYX ++ Catharina/A +++catwalk/ADY ++ cayennepeppar/AEY ++ Caymanöarna/A ++ CCS/r ++@@ -8650,6 +9849,7 @@ cellist/AHDYX ++ cellmembran/ABHDY ++ cello/EAIY ++ cellofan/ABDY +++-cells/XZU ++ cellull/ADYv ++ cellullsväv/ADGY ++ celluloid/ADY ++@@ -8660,7 +9860,7 @@ cellulosalack/AHDY ++ cellulosalackera/MY ++ cellulosanitrat/ABHY ++ cellulär/OY ++-cellvävnad/AHDY +++cellvävnad/AHDYv ++ cellvävnadslära/EAGY ++ Celsius ++ celsiusgrad/AHDY ++@@ -8687,7 +9887,7 @@ censor/AEHY ++ censur/ADYX ++ censurera/NMAPDY ++ cent/ADY ++-center/FECAIYX +++center/FECAYX ++ centerism/ADY ++ centeristisk/OY ++ centerlesslipad/NQY ++@@ -8696,13 +9896,13 @@ centerparti/ABHY ++ centerpartist/ATHDYX ++ centerpartistiske/Y ++ centiliter/EAJYX ++--centiliters/XZ +++-centiliters/XZU ++ centiljon/AHDY ++ centimeter/EAJYX ++ centimeterbred/OY ++--centimeters/XZ +++-centimeters/XZU ++ centnertung/OY ++-central/AOPHDYsf +++central/AOPHQDYsf ++ Centralamerika/AX ++ centralamerikansk/OQY ++ centralasiatisk/OY ++@@ -8725,6 +9925,7 @@ centralstation/AHDYv ++ centralstyrd/OY ++ centralvärme/EAYX ++ centralvärmerör/ABDY +++centrar/JY ++ centrera/NMAPDY ++ centrering/ADGYv ++ centreringsdon/ABDY ++@@ -8746,9 +9947,6 @@ ceremoni/EAHYX ++ ceremoniel/ABDY ++ ceremoniell/OY ++ ceremoniös/OY ++-cerisa/Y ++-cerisare/Y ++-cerisast/QY ++ cerise/Y ++ cerium/ABY ++ cernera/MY ++@@ -8780,6 +9978,7 @@ championat/ABDY ++ Champs-Élysées ++ changera/MY ++ Chanko/A +++Channel ++ chans/DY ++ chansa/NMAHDY ++ chansartad/NQY ++@@ -8833,6 +10032,7 @@ checkr ++ checkutställare/EAJY ++ cheddar/AEYX ++ cheddarost/ADGY +++cheesecake/EAY ++ chef/AHDYsvf ++ chefredaktör/AHDY ++ chefskap/ABY ++@@ -8871,8 +10071,11 @@ chim ++ China/A ++ chinchilla/EAGY ++ chinjong/AHDY +++chinos/DY ++ chintzad/NQY ++-chip/BDY +++chip/Y +++chippen/AY +++chippet/AY ++ chips/BDYX ++ chock/ADYX ++ chocka/NMAPHY ++@@ -8904,7 +10107,10 @@ choklads ++ chokladton/AHDY ++ chokladtårta/EAGY ++ Chopin/A +++chorizo/EAY +++chorizokorv/ADGY ++ chosefri/QOY +++choser/AJY ++ chosig/OY ++ Chris ++ Christel/A ++@@ -8919,7 +10125,7 @@ Christoph/A ++ Chrome/A ++ Chrystler/A ++ chutney/EAY ++-CIA +++CIA/r ++ ciceron/AHDY ++ cider/EAYX ++ Cienfuegos ++@@ -8956,7 +10162,6 @@ cirkatid/AHDY ++ cirkel/EAIYXU ++ cirkelformig/OY ++ cirkelrund/OY ++-cirkelsåg/ADGY ++ cirkla/NMADY ++ cirkulation/ADYvf ++ cirkulera/NMAPDY ++@@ -8988,7 +10193,8 @@ citrus/DGY ++ citrusfrukt/AHDY ++ citrusträd/ABDY ++ cittra/EAGY ++-city/YX +++city/ECAX +++cityna/A ++ citynära ++ civil/OQYX ++ civilbefolkning/ADGY ++@@ -9014,7 +10220,9 @@ cleara/NMAPDY ++ clearing/ADY ++ clematis/DGY ++ clementin/AHDY +++clinch/ADY ++ Clinton/A +++clou/AEY ++ clown/AHDYX ++ clowndans/HDY ++ cm ++@@ -9026,6 +10234,7 @@ coach/AHDYXU ++ coacha/NMAPDY ++ coachning/ADGYv ++ coachningsinsats/HDY +++coca ++ Coca-Cola/A ++ cockerspaniel/EAY ++ cockpit/ADGYX ++@@ -9037,7 +10246,7 @@ cocktailparty/ECAY ++ cocktailpartyna/AY ++ cocktailtomat/AHDY ++ Cohen/A ++-cola/EAGY +++cola ++ collage/ECAYX ++ college/YX ++ collie/EAIY ++@@ -9059,16 +10268,17 @@ consomm ++ container/EAIYX ++ containerfartyg/ABDY ++ containerisera/MY +++cookie/EAY ++ cool/OPQ ++ Coop/r ++ coping/YX ++ copingförmåga/EAY ++ copyright/AHDYX ++ copywriter/EAY ++-cordväv/ADGY ++ Cornelis ++ cortison/ABYX ++ cortisonspruta/EAGY +++Corvette ++ cosinus/Y ++ Costa ++ costarican/AHDY ++@@ -9087,13 +10297,16 @@ cowboy/ADYX ++ cowboyfilm/AHDY ++ cowboyhatt/ADGY ++ cover/EAY ++-cp-/XZ +++cox/DG +++cp/r ++ CP/r ++ cpu/r ++ crawl/ADY ++ crawla/MY +++crazy/Y +++cred/Y ++ credo/FECAY ++-crèpe/EAY +++crème ++ crêpe/EYX ++ crêpes/DY ++ crêpevävnad/AHDY ++@@ -9104,8 +10317,10 @@ crm/r ++ Crofts ++ Crohn/A ++ croissant/AHDY +++cross/DGYX ++ crosschecking/ADGY ++ cross-over/X +++crossover ++ croupier/EAHDY ++ CSN/r ++ CSR/r ++@@ -9116,8 +10331,11 @@ Cuba/A ++ Cullberg/A ++ cumulusmoln/ABDY ++ cup/AHDYX +++cupmatch/AHDY +++cupspel/ABDY ++ curare/CA ++ curareförgiftad/NQY +++curator/AEY ++ curium/ABY ++ curla/NMAPDY ++ curling/ADYX ++@@ -9139,6 +10357,7 @@ cybernetik/ADYX ++ cybernetisk/OY ++ cykel/EAIYXU ++ cykelbane/XZ +++cykelbud/ABDY ++ cykelled/AHDY ++ cykeltur/AHDY ++ cykla/NMAHDY ++@@ -9147,6 +10366,7 @@ cyklamen/AY ++ cyklandes ++ cykling/ADY ++ cyklisk/OY +++cyklism/ADY ++ cyklist/AHDYX ++ cykloalifatisk/OY ++ cykloid/ATHDY ++@@ -9160,6 +10380,7 @@ cyklotym/OY ++ cylinder/EAIYX ++ cylinderformig/OY ++ cylinderhatt/ADGY +++-cylindrig/OY ++ cylindrig/OYWZ ++ cylindrisk/OY ++ cymbal/AHDYX ++@@ -9180,7 +10401,6 @@ cystoskopi/EAHY ++ cytologi/EAY ++ cytologisk/OY ++ cytoplasma/EAY ++-cytosin/AY ++ cytostatikum/EABY ++ d/NQr ++ DAB/r ++@@ -9199,7 +10419,7 @@ DAF ++ dag/ADYX ++ daga/IY ++ dagakarl/ADGY ++--dagars/XZ +++-dagars/XZU ++ dagas/N ++ dagavdelning/ADGYv ++ dagavgift/AHDY ++@@ -9214,6 +10434,9 @@ dagboksform/AHD ++ dagboksförfattare/EAJ ++ dagboksspecifikation/AHD ++ dagbombplan/ABDY +++dagbrunn/ADY +++dagbrunnar/AY +++dagbrunnarna/Y ++ dagbräckning/ADY ++ dagböcker/AJY ++ dagdrivar/XZ ++@@ -9234,8 +10457,7 @@ daggfrisk/OY ++ daggfuktig/OY ++ daggig/OY ++ daggkåpa/EAGY ++-daggkåpe/XZ ++-daggkåps/XZ +++daggkåpe/XZu ++ daggmask/ADGYX ++ daggstänkt/OY ++ daggvåt/OQY ++@@ -9272,7 +10494,9 @@ dagort/AHDY ++ dagpappa/EAGY ++ dagpenning/ADGYv ++ dagresa/EAGY +++dagrum/FCAY ++ dagsaktuell/OQY +++dagsarvode/FECAY ++ dagsbehov/ABDY ++ dagsböter/AJY ++ dagsens ++@@ -9284,7 +10508,6 @@ dagsh ++ dagskassa/EAGY ++ dagsled/AHDY ++ dagsljus/BYX ++-dagslån/ABDY ++ dagslång/OY ++ dagsläge/CAY ++ dagslända/EAGY ++@@ -9311,6 +10534,7 @@ dagsverkare/EAJY ++ dagsverke/FECAY ++ dagtid/Y ++ dagtinga/MY +++dagtåg/ABDY ++ dagvill/OY ++ dagvård/ADGYv ++ dagvårdare/EAY ++@@ -9326,7 +10550,7 @@ Daisy/r ++ daktyl/ATHDY ++ daktyloskopisk/OY ++ dal/AHDGYX ++-dala/NAPD +++dala/MD ++ Dalagatan/A ++ dalahäst/ADGY ++ dalbana/EAGY ++@@ -9342,6 +10566,7 @@ dallring/ADGYv ++ dalmas/DGY ++ dalmatiner/EAJYX ++ dalmatisk/OY +++dalmål/ABY ++ dalmålning/ADGY ++ Dalsland/A ++ dalsländsk/OQY ++@@ -9363,7 +10588,11 @@ damcykel/EAIY ++ damfotboll/ADY ++ damfrisering/ADGYv ++ damfrisör/AHDYX +++damgolf/ADY +++damhatt/ADGY ++ damig/OY +++damklass/HDY +++damkör/AHDY ++ damlag/ABDY ++ damlandslag/ABDY ++ damm/ABGYX ++@@ -9374,6 +10603,7 @@ dammfri/OY ++ dammfylld/OY ++ dammhärdig/OY ++ dammig/OPQY +++dammode/FECAY ++ dammoln/ABDY ++ dammråtta/EAGY ++ dammskyddad/NQY ++@@ -9392,14 +10622,16 @@ dammtrasa/EAGY ++ dammtuss/DGY ++ dammvippa/EAGY ++ damoklessvärd/ABDY ++-damp/Y +++damp +++damrum/FCAY +++damsida/EAGY ++ damsko/EAIY ++ damsprint/ADGY ++ damstrumpa/EAGY ++ damunderkläder/AJY ++-dan/HD +++dan/O ++ Dan/A ++-dana/NKMAP +++dana/NMAP ++ Danderyd/Av ++ Danderydsbo/EAIY ++ dandy/EAHY ++@@ -9408,10 +10640,12 @@ Danielsson/A ++ dank/ADGY ++ Danmark/Av ++ dannebrog/ADY ++-dans/HDX ++-dansa/NMABY +++dans/DX +++dansa/NMAPH +++dansande/CAY ++ dansant/OPQY ++-dansare/EAJYz +++dansar/XZ +++dansare/EAJY ++ dansbana/EAGY ++ dansband/ABDYv ++ dansbandsmusik/ADY ++@@ -9421,6 +10655,11 @@ dansk/AOQDY ++ danska/EAIGY ++ danskfödd/OY ++ dansktalande/Y +++danslek/ADGY +++dansmusik/ADY +++danspar/ABDY +++dansscen/AHDY +++danssteg/ABDY ++ dansvimmel/CAY ++ dansör/AHDY ++ dansös/HDY ++@@ -9460,6 +10699,7 @@ databearbetning/ADGY ++ databeroende/FECAY ++ databuss/DY ++ datafil/AHDY +++datalag/ADGY ++ datalager/XZ ++ datalog/ATHDY ++ datalogi/EAYX ++@@ -9524,10 +10764,12 @@ debitera/NMAPDY ++ debiterbar/OY ++ debitering/ADGYv ++ debiteringsavi/EAHY +++debriefing/ADGY ++ debut/AHDYX ++ debutant/AHDYX ++ debutera/MDY ++ debutfilm/AHDY +++debutroman/AHDY ++ dec. ++ decelerera/MY ++ december/AYX ++@@ -9544,15 +10786,17 @@ dechiffrerbar/OY ++ decibel/AY ++ deciderad/NQY ++ deciliter/EAJY ++--deciliters/XZ +++-deciliters/XZU ++ deciljon/AHDY ++ decimal/AOHDYX ++ decimalkodad/NQY ++ decimaltal/ABDY ++ decimera/NMAPDY ++-decimeter/EAJY +++decimeter/EAJX ++ decimeterbred/OY ++-decisiv/OY +++decimeterdjup/OY +++-decimeters/XZU +++decimetertjock/OY ++ deckar/XZ ++ deckare/EAJY ++ deckarförfattare/EAJY ++@@ -9566,6 +10810,7 @@ deduplicering/ADY ++ defaitism/ADY ++ defaitist/ATHDYX ++ defaitistiske/Y +++default/Y ++ defekt/AOHDY ++ defensiv/AOPQDY ++ defibrera/MY ++@@ -9602,6 +10847,7 @@ degenerera/NMAPDY ++ degenerering/ADGY ++ Degerfors/X ++ degig/OPQY +++degkrok/ADGY ++ degradera/NMAPDY ++ degradering/ADGYv ++ degressiv/OY ++@@ -9687,18 +10933,15 @@ delfindans/HDY ++ delfisk/OY ++ delge/NMAY ++ delgiva/AJDRY +++delgiven/MY ++ delgiver/Y ++-delgivet/Y ++ delgivit/AY ++-delgivna/Y ++-delgivne ++ delgivning/ADGY ++ delgivs/Y ++ deliciös/OY ++ delikat/OPY ++ delikatess/HDYX ++ delikatessjäv/ABDY ++-delikt/OY ++ delinkvent/AHDY ++ delirant/AHDY ++ delirium/AJY ++@@ -9707,13 +10950,15 @@ delkurs/HDY ++ Dell/AX ++ delleverans/HDYX ++ dellikvid/AHDY +++delmål/ABDY ++ delmängd/AHDY ++ delning/ADGYvf ++ delningstal/ABDY ++ delo/Y ++ delokaliserad/NQY ++ delrapport/AHDY ++-delrätt/AHDY +++-dels/XZU +++delseger/EAIY ++ delstat/AHDYv ++ delstatlig/OY ++ delta/ECAY ++@@ -9765,6 +11010,7 @@ demineraliserad/NQY ++ demission/AHDY ++ demissionera/MPDY ++ demiurg/AHDY +++demo/EAIY ++ demobilisera/NMAPDY ++ demobilisering/ADYv ++ demobiliseringsprocess/HDY ++@@ -9781,10 +11027,10 @@ demokratisera/NMAPDY ++ demokratisering/ADYv ++ demokratiske/Y ++ demolera/NMAPDY ++-demon/ATHDYX +++demon/THDYX ++ demonisera/NMAPY ++ demonisering/ADY ++-demoniske/Y +++demonisk/QY ++ demonstrant/AHDY ++ demonstration/AHDYvf ++ demonstrativ/OY ++@@ -9815,8 +11061,8 @@ Denilson/A ++ denim/Y ++ denitrera/MY ++ denitrifiera/MY ++-denna/A ++-denne/A +++denna/AR +++denne ++ Dennis ++ denotation/AHDY ++ denotativ/OY ++@@ -10028,6 +11274,7 @@ diagnos/HDYX ++ diagnostik/AHDYX ++ diagnostiker/EY ++ diagnostisera/NMAPDY +++diagnostisering/ADGY ++ diagnostisk/OY ++ diagonal/AOHDYX ++ diagonalbyggd/OY ++@@ -10053,7 +11300,7 @@ dialektiker/EY ++ dialektiske/Y ++ dialektolog/ATHDY ++ dialektologi/EAY ++-dialog/AHDYX +++dialog/ATHDYX ++ dialys/HDYX ++ dialysbar/OY ++ dialysera/NMAPDY ++@@ -10065,6 +11312,7 @@ diamanth ++ diamantprydd/OY ++ diameter/EAIYX ++ diametral/OY +++diapaus/HD ++ diapositiv/ABDY ++ diaprojektor/AEHY ++ diarie/XZ ++@@ -10086,7 +11334,7 @@ didaktik/AHDY ++ didaktiker/EY ++ didaktisk/OQY ++ dielektrisk/OY ++-diesel/EAYX +++diesel/EAIYX ++ dieselbil/ADGY ++ dieseldriven/MY ++ dieselelektrisk/OY ++@@ -10126,7 +11374,6 @@ digelpress/DGY ++ diger/KMLY ++ digerdöd/ADY ++ digerera/NMAPDY ++-digestiv/OY ++ digga/NMAPDY ++ digital/OQYX ++ digitalis/DY ++@@ -10149,7 +11396,6 @@ dikesk ++ dikesren/ADGY ++ dikningsbar/OY ++ dikningsduglig/OY ++-dikotom/OY ++ dikotomi/EAHY ++ dikroisk/OY ++ dikromatisk/OY ++@@ -10164,10 +11410,13 @@ diktat/BDY ++ diktator/ATEHYv ++ diktatoriske/Y ++ diktatur/AHDYX +++diktbok/ADY +++diktböcker/AJY ++ diktera/NMAPDY ++ dikteringsmaskin/AHDY ++ diktion/ADY ++ diktning/ADGYv +++diktrad/AHDY ++ diktsamling/ADGY ++ dikväveoxid/AHDY ++ dikvävepentaoxid/AHDY ++@@ -10186,18 +11435,19 @@ dilettantiske/Y ++ dilettantism/ADY ++ dilettantmässig/OY ++ diligens/HDY ++-dill/ARYX +++dill/ABQDRYX ++ dilla/NMY ++-dille/FECY ++ dilleri/ABHY ++ dillfrö/EABY ++ dillfröna/AY ++ dillsmör/ABY ++ dillsås/HDY ++ diluvial/OY ++-dim/XZ ++ dimbakljus/BDY +++dimbank/ADGY +++dimbild/AHDY ++ dimblå/OY +++dimbåge/EAGY ++ dimension/AHDYvf ++ dimensionell/OY ++ dimensionera/NMAPDY ++@@ -10206,17 +11456,22 @@ dimerisera/MY ++ dimgrå/OY ++ dimhöljd/OY ++ diminuendo/FECAY ++-diminutiv/OQY +++diminutiv/OQX ++ dimittera/MY +++dimkammare/EAY +++dimkamrar/AJY ++ dimljus/BDY ++ dimljussats/HDY ++ dimma/EAGY ++-dimmer/EAY +++dimmer/EAX ++ dimmig/OPQY +++dimmighet/ADY +++dimmoln/ABDY ++ dimorf/OY ++-dimpa/JY ++-dimper/Y +++dimpa +++dimper ++ dimridå/EAHY +++dimslöja/EAGY ++ dina ++ dinar/AHDY ++ diné/AEHY ++@@ -10239,6 +11494,7 @@ dioskur/AHDY ++ dioxid/AHDYU ++ dioxin/ABHYX ++ dioxininnehåll/ABDY +++dip/A ++ diplom/ABDYX ++ diplomat/ATHDYX ++ diplomatarisk/OY ++@@ -10248,14 +11504,13 @@ diplomatik/ADY ++ diplomatiske/Y ++ diplomatpass/BDY ++ diplomera/NMAPY ++-dipodi/Y ++ dipol/AHDY ++-dipp/ABY +++dipp/ADG ++ dippa/MY ++ dipsoman/AHDY ++ diptyk/AHDY ++ Dirac/AX ++-direkt/OPYX +++direkt/OPX ++ direkteldad/NQY ++ direkten/Y ++ direktflyg/ABY ++@@ -10305,7 +11560,7 @@ disjunkt/OY ++ disjunktion/AHDY ++ disjunktiv/OY ++ disk/ADGYX ++-diska/NAPY +++diska/NAPDY ++ diskant/AHDYX ++ diskare/EAYz ++ diskbalja/EAGY ++@@ -10371,7 +11626,7 @@ dispergera/NMAPDY ++ dispers/OY ++ dispersion/ADY ++ dispersiv/OY ++-display/AHDY +++display/AHDYX ++ disponent/AHDYX ++ disponera/NMAPDY ++ disponibel/MY ++@@ -10399,7 +11654,6 @@ dissociera/NMAPDY ++ dissonans/HDY ++ dissonant/OY ++ dissonera/MDY ++-distal/OY ++ distans/HDYXU ++ distansera/NMAPDY ++ distansering/ADGY ++@@ -10427,7 +11681,7 @@ dith ++ dithörande/Y ++ ditin ++ ditintills ++-ditlagd/OY +++ditlagd/O ++ dito ++ ditresa/EAGY ++ ditsatt/OY ++@@ -10480,7 +11734,7 @@ djupfrysa/KQJY ++ djupfrysning/ADY ++ djupfrysningsfack/ABDY ++ djupgående/Y ++-djuphavs/XZ +++djuphav/ABDYv ++ djuphet/ADY ++ djuping/ADGY ++ djupled/Y ++@@ -10503,14 +11757,18 @@ djurart/AHDY ++ djurdel/ADGY ++ djuret/TY ++ djurfarm/ADY +++djurfoder/FCAY ++ djurförsök/ABDY ++ djurförsöksetisk/OY ++ Djurgårds/XZ +++djurhud/ADGY ++ djuriske/Y +++djurliv/ABY +++djurpark/AHDY ++ djurplankton/ABY ++ djurplågare/EAJY ++ djurplågeri/ABY ++-djurras/HDY +++djurras/HD ++ djurrätt/ADYv ++ djurrättsaktivist/AHDY ++ Djursholm/Av ++@@ -10521,6 +11779,7 @@ djurv ++ djurvänlig/OY ++ djurvänner/AJY ++ djurvävnad/AHDY +++djurägare/EAJY ++ djäklig/OPY ++ djäkne/EAGY ++ djärv/OPQY ++@@ -10549,15 +11808,19 @@ DN/r ++ dna-/XZ ++ -DNA/YWZ ++ DNA +++dobb/ADGY ++ dobbel/CAY ++ dobbleri/ABY ++ docent/AHDYX ++ docentur/AHDY ++ docera/MDY ++ dock/X ++-docka/NEMAPGY +++docka/EAPGY ++ dockaktig/OY +++dockar +++dockas/N ++ dockavgift/AHDY +++dockhus/BDY ++ dockningsstation/AHDY ++ dockskåp/ABDYv ++ docksöt/OQY ++@@ -10578,6 +11841,7 @@ dogmatiker/EY ++ dogmatisk/OQY ++ dogmatism/ADY ++ dogmfri/OY +++doja/EAG ++ dojo/EAY ++ dok/ABD ++ doktor/AEHYv ++@@ -10611,11 +11875,11 @@ dolk/ADGYX ++ dollar/AJEYX ++ dollargrin/ABDY ++ dollarkurs/DY ++--dollars/XZ +++-dollars/XZU ++ dollarsedel/EAIY ++ dollartecken/FCAY ++-dolm/QADRY ++-dolma/EIGY +++dolma/EAIGY +++dolme/EAY ++ dolomit/AHDY ++ dolomithaltig/OY ++ dolsk/OPQY ++@@ -10667,16 +11931,17 @@ domsaga/EAGY ++ domsal/ADGY ++ domsbasun/AHDY ++ domsförkunnelse/EAIYX +++domskäl/ABDY ++ domslut/ABDY ++ domsrätt/ADY ++ domstol/ADGYvf ++ domän/AHDYX ++-domändel/ADGY +++domändel/ADG ++ domännamn/ABDYv ++ domännamnsregistrering/ADGY ++ domänverk/ABY ++ don/ABD ++-dona/NMAPD +++dona/NMAD ++ Donald/A ++ donation/AHDYv ++ donator/AEHYX ++@@ -10700,6 +11965,7 @@ dopnamn/ABDY ++ dopning/ADYvf ++ dopp/ABDY ++ doppa/NMAPY +++dopparedagen ++ doppfärgad/NQY ++ dopping/ADGY ++ dopplackera/MY ++@@ -10719,22 +11985,25 @@ dosa/EAGY ++ dosbarometer/EAIY ++ dosera/NMAPDY ++ dosering/ADGYvf +++dosett/AHDY ++ dosimeter/EAIY ++ dosmätare/EAJY ++ dossera/MY ++ dossier/EAHDY ++-dossiera/MY ++ dotera/MY ++ dotter/EAYX +++dotterbolag/ABDY ++ dotterdotter/EAY ++ dotterdöttrar/AJY ++ dotterlig/OY ++ dotterson/ADY ++ dottersöner/AJY ++ Douglas ++-dov/O +++dov/OP ++ dovhjort/ADGYv ++ downperiod/AHDY +++DR1/r +++DR2/r ++ dra/AJ ++ drabant/AHDY ++ drabantstat/AHDY ++@@ -10746,7 +12015,7 @@ draga/ADR ++ dragandes ++ dragar/XZU ++ dragare/EAJY ++-dragbar/OY +++dragbil/ADGY ++ dragdjur/ABDY ++ dragé/AEHY ++ drager ++@@ -10757,6 +12026,7 @@ dragga/NAPDY ++ draghjälp/ADY ++ dragig/OPY ++ dragit/A +++dragkamp/AHDY ++ dragkedja/EAGY ++ dragkraft/AHDY ++ dragkrok/ADGY ++@@ -10772,6 +12042,7 @@ dragpl ++ dragprov/ABDYX ++ dragprovkurva/EAGY ++ dragrem/FAIY +++dragsko/EAIY ++ dragspel/ABDYv ++ dragspelslåt/ADGY ++ dragspelsmusik/ADY ++@@ -10816,6 +12087,7 @@ dravel/CAY ++ dregel/CAY ++ dregla/NMADY ++ dreja/NMAPDY +++drejare/EAJY ++ drejskiva/EAGY ++ dress/HDGY ++ dressera/NMAPDY ++@@ -10852,12 +12124,12 @@ drilla/NAPDY ++ drillborr/ABDY ++ drilling/ADGY ++ drillsnäppa/EAGY ++-drink/ADGY +++drink/ADGYX ++ drinkare/EAYz ++ drista/MDY ++ dristig/OPQY ++ dristighet/ADYv ++-driv/BDRYX +++driv/BQDRGYX ++ driva/KELDGY ++ drivar/UZ ++ drivbänk/ADGY ++@@ -10875,18 +12147,20 @@ drivmedel/FCAY ++ drivning/ADGYvf ++ drivrem/FAIY ++ drivrutin/AHDY +++drivsnö/EAY ++ drivsystem/ABDY ++ drivved/ADY ++ drog/ADYX ++ droga/NMAPHDY ++ drogberoende/Y ++-drogfri/OY +++drogfri/QOY ++ drogkultur/AHDY ++ drogmissbruk/ABY ++ drogmissbrukare/EAJY ++ drogpolitik/ADY ++ drogproblem/ABDY ++ drograttfylla/EAGY +++drogtest/ABHDY ++ dromedar/AHDYX ++ dront/AHDY ++ dropp/ABX ++@@ -10924,7 +12198,6 @@ drummel/EAIY ++ drummelaktig/OY ++ drunkna/MPDY ++ drunkning/ADGYv ++-drupen/MY ++ drusisk/OY ++ druv/XZ ++ druva/EAGY ++@@ -10953,8 +12226,8 @@ dryg/PQ ++ dryga/NMAY ++ dryghet/ADY ++ drygt ++-drypa/KLJDY ++-drypt/AY +++drypa/KJDY +++drypt/Y ++ dråp/ABDY ++ dråpar/XZ ++ dråpare/EAJY ++@@ -10966,7 +12239,7 @@ dr ++ dråpåtalad/NQY ++ dråsa/MY ++ drägel/CAY ++-drägg/ABDY +++drägg/ADY ++ drägla/MDY ++ dräglig/OPY ++ dräkt/AHDYsf ++@@ -10991,14 +12264,22 @@ dr ++ dröjsmål/ABDYv ++ dröm/FNYX ++ drömbild/AHDY +++drömbok/ADY +++drömböcker/AJY ++ drömfri/OY +++drömhus/BDY +++drömjobb/ABDY ++ drömkåk/ADGY ++ drömlik/OY +++drömläge/FECAY ++ drömlös/OY ++ drömma/KLOBIY ++ drömmare/EAYz ++ drömmeri/ABHY +++drömmål/ABDY ++ drömsk/OQY +++drömspel/ABDY +++drömstart/AHDY ++ drömsyn/AHDY ++ dröna/MY ++ drönare/EAJYz ++@@ -11007,15 +12288,13 @@ dr ++ drösa/MY ++ drösvis ++ DS +++DSB/r ++ DSL/r ++ DSSO ++ dua/NMAJ ++-dual/AHDY ++-duala +++dual/O ++ dualism/ADY ++ dualist/ATHDY ++-dualrum/FAY ++-dualt ++ Dubai/A ++ dubb/ADY ++ dubba/NAPIY ++@@ -11036,6 +12315,7 @@ dubbeleggad/NQY ++ dubbelexponentiell/OY ++ dubbelexponera/MY ++ dubbelfasig/OY +++dubbelfel/ABDY ++ dubbelfilig/OY ++ dubbelflatstift/ABDY ++ dubbelflänsad/NQY ++@@ -11046,6 +12326,7 @@ dubbelhaka/EAGY ++ dubbelhet/ADYv ++ dubbelhuvad/NQY ++ dubbelhäftande/Y +++dubbelknut/ADGY ++ dubbelknäppt/OY ++ dubbelkonisk/OY ++ dubbelkonkav/OY ++@@ -11054,6 +12335,7 @@ dubbelk ++ dubbelledad/NQY ++ dubbellimmad/NQY ++ dubbellindad/NQY +++dubbelliv/ABDY ++ dubbelmantlad/NQY ++ dubbelmatad/NQY ++ dubbelmoral/AHDY ++@@ -11076,6 +12358,7 @@ dubbelsymmetrisk/OY ++ dubbeltid/AHDY ++ dubbeltrådig/OY ++ dubbeltydig/OQY +++dubbeltydighet/AHDY ++ dubbeluniversalvalsverk/ABDY ++ dubbelval/ABDYv ++ dubbelvek/AY ++@@ -11098,7 +12381,7 @@ dubblering/ADGYv ++ dubblett/AHDYX ++ dubblettavi/EAHY ++ dubbling/ADGY ++-dubblös/OY +++dubier/AJ ++ dubiös/OPQY ++ Dublin/AX ++ ducka/MDY ++@@ -11122,14 +12405,14 @@ duka/NADI ++ dukad/Q ++ dukagång/ADGY ++ dukat/AHDY ++-dukklädd/OY +++dukklädd/O ++ dukning/ADGY ++ duktig/OPQY ++ duktighet/ADY ++-duktil/OY ++-dum/KLOYX ++-duma/EAY +++dum/KLYX +++duman/A ++ dumbom/FAIY +++dumburk/ADGY ++ dumdristig/OPQY ++ dumdristighet/ADYv ++ dumdryg/OQY ++@@ -11143,10 +12426,11 @@ dummerj ++ dumming/ADGY ++ dump/XZ ++ dumpa/NMAPY ++-dumpit/Y +++dumpit ++ dumpning/ADGYv ++ dumpventil/AHDY ++ dumsnut/ADGY +++dumt/Y ++ dun/BD ++ dunboll/ADGY ++ dunder/FCAYX ++@@ -11159,7 +12443,7 @@ dundra/NMADY ++ dunge/EAGY ++ dunig/OY ++ dunjacka/EAGY ++-dunk/ADGY +++dunk/ABDGY ++ dunka/NAPDY ++ dunkel/KMCLAY ++ dunkelblå/OY ++@@ -11169,14 +12453,14 @@ duns/DY ++ dunsa/MDIY ++ dunst/AHDY ++ dunsta/NMADY ++-dunstfri/OY +++dunstfri/O ++ dunstfylld/OY ++ dununge/EAGY ++ dunört/AHDY ++ duo/EAIY ++ dupera/NMAPDY ++ dupering/ADGY ++-duplex/Y +++duplex ++ duplicera/NMAPDY ++ duplicering/ADGY ++ duplikat/ABDY ++@@ -11193,13 +12477,13 @@ dusch/ADYX ++ duscha/NAPDIY ++ duschkabin/AHDY ++ duschrum/FCAY ++-duskig/OY ++ dussin/ABDYX ++ dussintal/ABDY ++ dussinvara/EAGY ++ dussinvis ++ dust/AHDY ++ dusör/AHDY +++dutta/NMADY ++ duva/EAGY ++ duvblå/OY ++ duven/MY ++@@ -11210,7 +12494,7 @@ duvkulla/EAGY ++ duvning/ADGY ++ duvslag/ABDY ++ duvunge/EAGY ++-dvala/EAGY +++dvala/EAY ++ dvaldes ++ dvalliknande/Y ++ dvalts ++@@ -11228,20 +12512,21 @@ dv ++ dvärgbandmask/ADY ++ dvärgbjörk/ADGY ++ dvärgfalk/ADGY +++dvärgget/AJDY ++ dvärgmås/DGY ++ dvärgplanet/AHDY ++ dvärgras/HDY ++ dvärgtax/DGY ++ dy/EA ++-dyaktig/OY ++ dyblöt/OQY ++ dyckert/ADGY ++-dyft/ABY +++dyft/Y ++ dygd/AHDY ++ dygdemönster/FCAY ++ dygdesam/MY ++ dygdesamt/Y ++ dygdig/OPQY +++dygdighet/ADY ++ dygn/ABDYv ++ dygnsgamla/Y ++ dygnsgammal/MY ++@@ -11249,18 +12534,21 @@ dygnsl ++ dygnsrytm/AHDY ++ dygnsvariation/AHDY ++ dygnsvis ++-dyhaltig/OY +++dyhaltig/O ++ dyig/O ++-dyka/KLAJ +++dyk/OBD +++dyka/LAD ++ dykar/XZ ++ dykardräkt/AHDY ++ dykare/EAJY +++dyker ++ dykinstruktör/AHDY ++ dykning/ADGYvf ++ dykolycka/EAGY ++ dyl ++ Dylan ++ dylik/OY +++dymling/ADGYv ++ dyn/HD ++ dyna/EAGY ++ dynamik/ADY ++@@ -11328,7 +12616,7 @@ d ++ dårhushjon/ABDY ++ dårhusmässig/OY ++ dårskap/AHDYv ++-dåsa/MPD +++dåsa/MD ++ dåsig/OPQY ++ dåsighet/ADY ++ dåtid/ADY ++@@ -11336,7 +12624,6 @@ d ++ dåvarande/Y ++ däck/ABDYX ++ däcka/NMAPYv ++-däckfot/AJDY ++ däckindustri/EAHY ++ däggdjur/ABDYv ++ däggdjursfauna/EAGY ++@@ -11345,7 +12632,6 @@ d ++ dämpa/NMAPDY ++ dämpare/EAJYzg ++ dämpning/ADGYvf ++-dän ++ däng/B ++ dänga/KLAJODRY ++ där ++@@ -11367,16 +12653,13 @@ d ++ däribland ++ därifrån ++ därigenom ++-därin ++ därinnanför ++ därinne ++ därjämte ++ därmed ++-därnere ++ därnäst ++ därom ++ däromkring ++-därovan ++ därpå ++ därstädes ++ därtill ++@@ -11399,6 +12682,7 @@ d ++ dästhet/ADYv ++ däven/MLY ++ dävert/ADGY +++dävna/MY ++ dö/M ++ Döblin/A ++ död/AQDR ++@@ -11422,22 +12706,26 @@ d ++ dödsbo/FEABYX ++ dödsbringande/Y ++ dödsbud/ABDY +++dödsdag/ADGY ++ dödsdans/HDY ++ dödsdom/ADGY ++ dödsdömd/OQY ++ dödsdömdas ++ dödsfall/ABDYv +++dödshjälp/ADY ++ dödshot/ABDY ++ dödshotad/NQY ++ dödskalle/EAGYX ++ dödskallemärka/KQLAJDY ++ dödskul ++-dödsmärka/KQLAJDY +++dödsmärka/KQLAJD ++ dödsoffer/FCAY ++ dödsorsak/AHDY ++ dödspolar/XZ ++ dödspolare/EAJY +++dödsruna/EAGY ++ dödssiffra/EAGY +++dödssjuk/OQY ++ dödsskjuten/NKMY ++ dödsstraff/ABDY ++ dödssynd/AHDY ++@@ -11456,7 +12744,8 @@ d ++ döljer/Y ++ döljs/Y ++ döm/R ++-döma/KLOD +++döma/KLO +++dömande/CAY ++ dömd/R ++ döna/M ++ döpa/KQLAJR ++@@ -11470,6 +12759,7 @@ d ++ dörrkarm/ADGY ++ dörrklocka/EAGY ++ dörrknackare/EAJY +++dörrlås/BDY ++ dörrpost/AHDY ++ dörrspringa/EAGY ++ dörrströmbrytar/XZ ++@@ -11496,6 +12786,14 @@ d ++ dövörat/Y ++ e/Er ++ é/r +++E18/r +++E20/r +++E22/r +++E24/r +++E4/r +++E45/r +++E6/r +++E65/r ++ eagle/Y ++ ean-/XZ ++ EAN/r ++@@ -11507,9 +12805,8 @@ eau-de-toilette/E ++ eau-de-vie/Er ++ eau-de-viebutelj/AHD ++ ebb/AD ++-ebba/NMAPD +++ebba/MD ++ Ebba/A ++-ebbström/FAIY ++ ebbtid/AHDYv ++ ebbtidskanal/AHDY ++ ebenholts/BDYX ++@@ -11519,7 +12816,6 @@ ebenist/AHDYX ++ EBO/r ++ e-bok/ADYXv ++ e-bokfil/AHDY ++-ebola/Y ++ ebolavirus/BY ++ ebonit/ADYX ++ ebonitplatta/EAGY ++@@ -11542,7 +12838,7 @@ ecklestiastikminister/EAIY ++ ecklestiastikskog/ADGY ++ ecklestiastisk/OY ++ Eco/A ++-écru/YX +++écru ++ écrusilke/FECAY ++ ecstasy/EAYX ++ ecstasytablett/AHDY ++@@ -11555,8 +12851,7 @@ ecuadoriansk/OQY ++ ecuadorianska/EAGY ++ e.d. ++ ed/AHD ++-edafisk/OY ++-edamer/EAYX +++edafisk/O ++ edamerost/ADGY ++ Edberg/A ++ edda/EA ++@@ -11620,7 +12915,8 @@ effektm ++ effektsökeri/ABHY ++ effektuera/NMAPY ++ effeminerad/NQY ++-effusiv/OY +++efferent/OY +++effusiv/O ++ EFTA/r ++ efter/YX ++ efterapa/NMAPDY ++@@ -11632,10 +12928,12 @@ efterbesiktningsavgift/AHDY ++ efterbeska/EAY ++ efterbilda/NMAPY ++ efterbliven/KMY +++efterblivenhet/ADY ++ efterbrännkammare/EAJY ++ efterdatera/MDY ++ efterdebitera/MDY ++ efterdestillera/MY +++efterfest/AHDY ++ efterformad/NQY ++ efterforska/NMAPY ++ efterforskning/ADGY ++@@ -11773,6 +13071,7 @@ egenh ++ egenkomponerad/NQY ++ egenkontroll/AHDY ++ egenkär/OQY +++egenmakt/ADY ++ egenmäktig/OY ++ egennamns/XZ ++ egennytta/EAY ++@@ -11784,7 +13083,6 @@ egensinnig/OPQY ++ egensinnighet/ADYv ++ egenskap/AHDYvf ++ egenstabil/OY ++-egentid/AHDY ++ egentillverkad/NQY ++ egentlig/OQY ++ egentligen ++@@ -11798,7 +13096,7 @@ egid/ADY ++ egnahem/FCAYv ++ egnahemshus/BDY ++ egnahemsrörelse/EAIY ++-ego/CA +++ego/FECA ++ egocentricitet/ADY ++ egocentriker/EAJY ++ egocentrisk/OQY ++@@ -11842,6 +13140,7 @@ ekd ++ eker/EAIY ++ Ekerö/AX ++ ekfat/ABDY +++EKG ++ Ekholm/A ++ ekipage/ECAYX ++ ekipera/NMAPDY ++@@ -11865,7 +13164,8 @@ eko/FECAYX ++ ekobrott/ABDY ++ ekobrottsling/ADGY ++ Ekobrottsmyndigheten/A ++-ekofri/OY +++ekoby/EAGY +++ekofri/O ++ ekollon/ABDY ++ ekolod/ABDY ++ ekoloda/NMADY ++@@ -11892,7 +13192,7 @@ ekonomisktr ++ ekonomism/ADY ++ ekorr/XZ ++ ekorrapa/EAGY ++-ekorrbo/FECABDY +++ekorrbo/FEAB ++ ekorre/EAGY ++ ekorrpigg/OQY ++ ekosofisk/OY ++@@ -11903,8 +13203,8 @@ ekotoxikolog/AHDY ++ ekotoxikologi/AHDY ++ ekovin/ABHY ++ ekoxe/EAGY +++ekparkett/AHDY ++ e.Kr. ++-ekra/NAPD ++ eksem/ABDY ++ Eksjö/AX ++ ekskog/ADGY ++@@ -11936,8 +13236,7 @@ ekvivalensrelation/AHDY ++ ekvivalent/AOHDY ++ ekvivalentvikt/AHDY ++ e.l. ++-el/AD ++-el- +++el/ADb ++ elabonnemang/ABDY ++ elabonnent/AHDY ++ elaborera/NMAPDY ++@@ -11960,6 +13259,7 @@ elavfall/ABY ++ elavgift/AHDY ++ elavläsning/ADGYv ++ elavtal/ABDY +++elbas/DGY ++ elbehov/ABDY ++ elbelysning/ADGY ++ elberoende/CAY ++@@ -11981,18 +13281,23 @@ eldbokstav/ADY ++ eldbokstäver/AJY ++ elddon/ABDY ++ elddop/ABDY +++eldfara/EAY ++ eldfarlig/OY ++ eldfast/OY +++eldflamma/EAGY ++ eldfängd/OQY ++ eldgivning/ADGY ++ eldgul/OY +++eldhav/ABDY ++ eldhärd/ADGY ++ eldhärdig/OY ++-eldhärjad/NQY +++eldhärja/NMAPDY ++ eldig/OPQY ++ eldighet/ADY +++eldistribution/AHDY ++ eldkastar/XZ ++ eldkastare/EAJY +++eldklot/ABDY ++ eldning/ADYv ++ eldningsolja/EAGY ++ eldorado/FECAY ++@@ -12002,6 +13307,8 @@ eldragning/ADGYv ++ eldrift/ADX ++ eldriven/MY ++ eldröd/OY +++eldrör/ABDY +++eldsflamma/EAGY ++ eldsjäl/ADGY ++ eldskadad/NQY ++ Eldslandet/A ++@@ -12012,10 +13319,11 @@ eldsl ++ eldsmärke/FECAY ++ eldstad/ADYv ++ eldstadsöppning/ADGY +++eldstrid/AHDY ++ eldstäder/AJY ++ eldsvåda/EAGY ++ eldupphör/ABDX ++-eleatisk/OY +++eleatisk/O ++ elefant/AHDYX ++ elegans/DY ++ elegant/AOPHQDY ++@@ -12094,6 +13402,8 @@ elevation/AHDYv ++ elevationsvinkel/EAIY ++ elevavgift/AHDY ++ elevcentrerad/NQY +++elevhem/FCAY +++elevkår/AHDY ++ elevråd/ABDYv ++ elevstyrd/OY ++ elevvård/ADY ++@@ -12105,7 +13415,7 @@ elfenbensf ++ elfenbensgul/OY ++ Elfenbenskusten/A ++ elfenbensvit/OY ++-elfiol/AHDY +++elfiol/AHD ++ elfirma/EAGY ++ elfordon/ABDY ++ Elfsborg/Av ++@@ -12114,6 +13424,7 @@ elfteplats/HDY ++ elförbrukning/ADY ++ elföretag/ABDY ++ elförsörjning/ADYv +++elgenerator/AEHY ++ Elgestam/A ++ elgitarr/AHDYX ++ elgitarrtillverkare/EAJY ++@@ -12144,14 +13455,15 @@ elitidrottsm ++ elitism/ADY ++ elitist/ATHDY ++ elitistiske/Y +++elitlag/ABDY +++elitnivå/EAHY ++ elitsatsning/ADGY ++ elitserie/EAY ++ elitserieklubb/ADGY ++ elitserielag/ABDY ++ elixir/ABDY ++-eljes ++ eljest ++-eljätte/EAGY +++eljätte/EAG ++ elkabel/EAIY ++ elkonsult/AHDY ++ elkonsument/AHDY ++@@ -12178,6 +13490,7 @@ elliptisk/OY ++ elljus/BY ++ elljusslinga/EAGY ++ elljusspår/ABDY +++elljusstake/EAGY ++ ellok/ABDY ++ ellära/EY ++ Elm/A ++@@ -12191,7 +13504,7 @@ elmotorindustri/EAHY ++ elmätar/XZ ++ elmätare/EAJY ++ elmätning/ADY ++-elnota/EAGY +++elnota/EAG ++ elnät/ABDYv ++ Elof/A ++ eloge/EAIY ++@@ -12199,6 +13512,7 @@ elokvent/OQY ++ elområde/FECAY ++ elorgel/EAIY ++ eloxera/NMAPDY +++eloxering/ADGY ++ elpistol/AHDY ++ elplatta/EAGY ++ elpris/BHX ++@@ -12207,9 +13521,10 @@ elproducent/AHDY ++ elproducerande/Y ++ elprodukt/AHDY ++ elproduktion/ADYv ++-elpryl/ADGY +++elpryl/ADG ++ elradiator/AEHY ++ elransonering/ADGY +++elritsa/EAGY ++ elrullstol/ADGY ++ elrådgivare/EAJY ++ elrådgivning/ADGv ++@@ -12253,7 +13568,7 @@ eluppv ++ elutrustning/ADGY ++ eluttag/ABDY ++ eluvial/OY ++-elva +++elva/EAGY ++ elvagradig/OY ++ elvahundra ++ elvahundratal/ABY ++@@ -12360,8 +13675,8 @@ emulsion/AHDY ++ emulsionsartad/NQY ++ emulsionsfärg/AHDY ++ EMV/r ++-en/QDR ++-en- +++:en/AYWZ +++en/QbDR ++ ena/NPI ++ enahanda/Y ++ enaktare/EAJY ++@@ -12373,8 +13688,6 @@ enarmad/NQY ++ enarådande/Y ++ enastående/Y ++ enatomig/OY ++-enaxial/OY ++-enaxig/OY ++ enaxlad/NQY ++ enaxlig/OY ++ enbarns/XZ ++@@ -12400,11 +13713,11 @@ ende ++ endemisk/OY ++ endera ++ endimensionell/OY ++-endive/EAIY +++endiv/AHQDY ++ endocentrisk/OY ++ endocyklisk/OY ++-endogam/OY ++-endogami/EADY +++endogam/O +++endogami/EAD ++ endogen/TOY ++ endokrin/OY ++ endokrinolog/ATHDY ++@@ -12412,7 +13725,7 @@ endokrinologi/EAY ++ endorfin/ABHY ++ endoskop/ABDY ++ endoskopi/EAY ++-endosom/AHDY +++endosom/AHD ++ endossat/AHDY ++ endossement/ABDY ++ endossent/AHDY ++@@ -12421,6 +13734,12 @@ endoterm/TOY ++ endotrof/OTY ++ endräkt/ADY ++ endräktig/OY +++enduro/EAYX +++endurobana/EAGY +++enduroförare/EAJY +++endurospår/ABDY +++endurotävling/ADGY +++enduroåkare/EAJY ++ endäckad/NQY ++ Enea/A ++ eneggad/NQY ++@@ -12481,6 +13800,7 @@ enharmonisk/OY ++ enhet/AHDYvf ++ enhetlig/OPY ++ enhetlighet/ADYv +++enhjuling/ADGY ++ enhjärtbladig/OY ++ enhällig/OY ++ enhällighet/ADY ++@@ -12491,6 +13811,7 @@ enigmatisk/OQY ++ Eniro/AX ++ enkammarsystem/ABDY ++ enkanalig/OY +++enkanals/XZ ++ enkannerligen ++ enkel/KMLYX ++ enkelbasisk/OY ++@@ -12512,9 +13833,9 @@ enkelrum/FCAY ++ enkelsidig/OY ++ enkelskivad/NQY ++ enkelslipad/NQY +++enkelspår/ABDYv ++ enkelspårig/OQY ++ enkelspårighet/ADYv ++-enkelspårs/XZ ++ enkeltvinnad/NQY ++ enkelvingad/NQY ++ enkilos/XZ ++@@ -12539,7 +13860,6 @@ enlighets/XZ ++ enligt/Y ++ enlinsig/OY ++ enliters/XZ ++-enlådig/OY ++ enmans/XZ ++ enmansbetjänad/NQY ++ enmastad/NQY ++@@ -12554,6 +13874,7 @@ enpartisystem/ABY ++ enperiodisk/OY ++ enpersons/XZ ++ enpipig/OY +++enplans/XZ ++ enplanshus/BDY ++ enpolig/OY ++ enprocentig/OY ++@@ -12601,8 +13922,7 @@ enskifte/CAY ++ enskild/AOQRY ++ enskildhet/AHDYv ++ enskivig/OY ++-enskog/ADGY ++-enskärig/OY +++enskärig/O ++ enslig/OPY ++ enslighet/ADYv ++ ensling/ADGY ++@@ -12614,6 +13934,7 @@ ensp ++ ensriktad/NQY ++ enstaka/Y ++ enstavig/OPQY +++enstegs/XZ ++ enstegstätad/NQY ++ enstjärnig/OY ++ enstrofig/OY ++@@ -12622,10 +13943,9 @@ enst ++ enständig/OY ++ enstörig/OPQY ++ enstöring/ADGY ++-ensyrig/OY ++ ental/Y ++ entalpi/EAY ++-entandad/NQY +++entandad/NQ ++ entertainer/EAJY ++ entimmes/XZ ++ entita/EAGY ++@@ -12634,7 +13954,7 @@ entlediga/NMAPDY ++ entomolog/ATHDY ++ entomologi/EAY ++ entonig/OY ++-entoppig/OY +++entoppig/O ++ entré/AEHYX ++ entréavgift/AHDY ++ entrecote/EAY ++@@ -12649,7 +13969,7 @@ entrepren ++ entresolera/MY ++ entresollera/MY ++ entropi/EADY ++-entrådig/OY +++entrådig/O ++ enträgen/KMLY ++ entusiasm/ADY ++ entusiasmera/NMAPDY ++@@ -12659,11 +13979,13 @@ entusiastiske/Y ++ entydig/OPQY ++ entydighet/ADY ++ envar ++-envelopp/AHDY +++envelopp/AHD ++ enveten/KMLY +++envetenhet/ADY ++ envig/ABY ++ Enviken/A ++-envingad/NQY +++envingad/NQ +++environg/AHDY ++ envis/OPQY ++ envisas/N ++ envishet/ADYv ++@@ -12673,7 +13995,7 @@ env ++ envåningshus/BDY ++ envägskommunikation/AHDY ++ envälde/FECAY ++-enväldig/OQY +++enväldig/OQ ++ envärd/OY ++ envärdig/OY ++ enzym/ABHDYX ++@@ -12689,7 +14011,6 @@ eolsharpa/EAGY ++ eon/AHD ++ eotropisk/OY ++ EPA/r ++-epatera/MY ++ epatraktor/AEHY ++ epicentrum/AY ++ epicyklisk/OY ++@@ -12743,7 +14064,6 @@ epokskifte/FECAY ++ epos/BDY ++ e-post/ADX ++ epost/XZ ++-epsilon/AY ++ er/AO ++ era/EAG ++ erbarmlig/OPQY ++@@ -12810,7 +14130,8 @@ erl ++ erlägger/Y ++ erläggs/Y ++ Ernst/A ++-ernå/NKMLA +++ernå/NKMA +++ernående/CAY ++ erodera/NMAPDY ++ erogen/OPY ++ erosion/AHDYv ++@@ -12819,7 +14140,8 @@ erotiker/EY ++ erotisk/OPQY ++ erotoman/AOHDY ++ erotomani/EAY ++-errata/EAG +++errata/EA +++erratana/A ++ erratisk/O ++ ersatta/LJY ++ ersatte/Y ++@@ -12925,7 +14247,6 @@ etanolmack/ADGY ++ etapp/AHDYX ++ etappmål/ABDY ++ etappvis ++-etatism/ADY ++ etc ++ etcetera ++ eten/ABY ++@@ -12954,17 +14275,17 @@ etnocentrisk/OY ++ etnocentrism/ADY ++ etnograf/ATHDY ++ etnografi/EADY +++etnokrati/EAHY +++etnokratisk/OY ++ etnolog/ATHDY ++ etnologi/EAY ++ etologisk/OY ++ etos/BY ++ etruskisk/OY ++ etsa/NMAPD ++-etsbar/OY ++ etsmedel/FCAY ++ etsning/ADGYv ++-ett ++-ett- +++ett/b ++ etta/EAGY ++ ettbarnspolitik/ADY ++ ettdera ++@@ -13092,13 +14413,12 @@ ett ++ ettårsfall/ABDY ++ ettårsålder/EAY ++ ettöring/ADGY ++-etui/FECABHY +++etui/FEABHY ++ etyd/AHDY ++ etylakrylat ++ etylalkohol/ADY ++ etylen/ABY ++ etylenoxid/AHDY ++-etylera/MY ++ etymolog/ATHDY ++ etymologi/EAHY ++ etymologisera/NMAPDY ++@@ -13109,7 +14429,7 @@ eufonisk/OY ++ eufori/EAY ++ euforisk/OY ++ eugenisk/OY ++-euhedral/OY +++euhedral/O ++ eukalyptus/XZ ++ Euklides ++ euklidisk/OY ++@@ -13122,10 +14442,11 @@ Eurasien/A ++ eurasier/EAJY ++ eurasisk/OQY ++ eurasiska/EAGY ++--euro/XZ +++-euro/XZU ++ euro/FEAX ++ europa/XZ ++ Europa/AX +++europamästare/EAJY ++ Europaråd/ABv ++ europé/AEHY ++ europeisera/NMAPDY ++@@ -13165,6 +14486,7 @@ evaporera/MY ++ Evelina/A ++ evenemang/ABDYv ++ Ewenfeldt/A +++event/ABDY ++ eventualitet/AHDY ++ eventuell/OQY ++ Evert/A ++@@ -13183,7 +14505,7 @@ evolution/AHDYv ++ evolutionism/ADY ++ evolutionist/ATHDY ++ evolutionär/OY ++-evolutiv/OY +++evolutiv/O ++ Evy/A ++ evärdelig/OY ++ evärdlig/OY ++@@ -13245,7 +14567,7 @@ exfru/AEGY ++ exhibitionism/ADY ++ exhibitionist/ATHDYX ++ exhustru/AEIY ++-exil/AHDYX +++exil/ADYX ++ exilerad/NQY ++ exilkines/HDY ++ exilregering/ADGY ++@@ -13261,7 +14583,7 @@ exkl. ++ exklamation/AHDY ++ exklav/AHDY ++ exkludera/NMAPDY ++-exkluderings/XZ +++exkludering/ADGYv ++ exklusiv/OPY ++ exklusive ++ exklusivitet/AHDY ++@@ -13277,15 +14599,14 @@ exkurs/HDY ++ exkursion/AHDY ++ exlibris/BDY ++ exmake/EAGY +++exman/AFY +++exmän/AFY ++ exocentrisk/OY ++ exocyklisk/OY ++-exogam/OY ++-exogami/EADY ++ exogen/OY ++ exorcisera/MY ++ exorcism/ADY ++ exorcist/AHDY ++-exoreisk/OY ++ exoterisk/OY ++ exoterm/TOY ++ exotisk/OQY ++@@ -13300,7 +14621,7 @@ expartner/EAJY ++ expatriera/NMAPDY ++ expediera/NMAPY ++ expediering/ADY ++-expedit/AHDY +++expedit/AHDYX ++ expedition/AHDYvf ++ expeditionell/OY ++ expeditör/AHDY ++@@ -13358,18 +14679,20 @@ expressfart/Y ++ expressionism/ADY ++ expressionist/ATHDYX ++ expressiv/OPQY +++expressivitet/ADY ++ expresslok/ABDY ++ expresståg/ABDY ++ expropriation/AHDYv ++ expropriera/NMAPDY +++expropriering/ADGY ++ exspiratorisk/OY ++ exstirpera/MY ++-extas/HDY +++extas/DY ++ extatisk/OQY ++ extemporera/NMAPDY ++ extension/AHDY ++ extensiv/OPY ++-exteriör/AHDYX +++exteriör/AOHDYX ++ extern/OQYX ++ exterritorialrätt/ADY ++ extra/YX ++@@ -13382,6 +14705,7 @@ extraherbar/OY ++ extrahering/ADGY ++ extrahård/OY ++ extrainkallad/NQY +++extrajobb/ABDY ++ extrajudiciell/OY ++ extraknäck/ABDY ++ extraknäcka/KY ++@@ -13410,6 +14734,7 @@ extremv ++ extrovert/OQY ++ exvärldsmästare/EAJY ++ f/Rr +++F1/r ++ fabel/EAJYX ++ fabelaktig/OY ++ fabeldjur/ABDY ++@@ -13438,6 +14763,8 @@ facil/OY ++ facilitet/AHDY ++ facit/AY ++ fack/ABDYX +++fackbok/ADY +++fackböcker/AJY ++ fackel/XZ ++ fackeldans/HDY ++ fackeltåg/ABDY ++@@ -13485,6 +14812,7 @@ fagerlockig/OY ++ Fagersjö/AX ++ Fagersta/AX ++ faggorna/Y +++fagocyt/AHDY ++ fagott/AHDYX ++ fagottist/AHDY ++ fagottstämma/EAGY ++@@ -13497,6 +14825,7 @@ fajans/HDY ++ fajt/AHDY ++ fajtas/N ++ fakir/AHDYX +++fakirkonst/AHDY ++ faksimil/ABDYX ++ faksimilera/MY ++ faksimilutgåva/EAGY ++@@ -13505,6 +14834,7 @@ faktablad/ABDY ++ faktafel/ABDY ++ faktafylld/OY ++ faktakunskap/AHDY +++faktaruta/EAGY ++ faktaspäckad/NQY ++ fakticitet/ADY ++ faktisera/MY ++@@ -13530,8 +14860,8 @@ falang/AHDY ++ falangism/ADY ++ falangist/AHDYX ++ Falck/A ++--faldig/OQ ++--faldiga/NMAPD +++-faldig/OQY +++-faldiga/NMAPDY ++ falk/ADG ++ falkblick/ADGY ++ Falkenberg/AX ++@@ -13548,6 +14878,7 @@ fallandesjuka/EAY ++ fallbesegra/NMAPY ++ fallbeskrivning/ADGYv ++ fallbila/EAGY +++falldörr/ADG ++ fallen/KMY ++ fallenhet/ADY ++ fallera/MPDY ++@@ -13588,6 +14919,7 @@ falsifikation/AHDY ++ falsk/OPQYX ++ falskeligen ++ falskhet/AHDYv +++falsklarm/ABDY ++ falskmynteri/ABY ++ falskmärka/KQLAJDY ++ falskskyltad/NQY ++@@ -13595,7 +14927,6 @@ falskspelare/EAJY ++ falsmaskin/AHDY ++ falsning/ADGY ++ Falsterbo/AX ++-faltning/ADGYv ++ Falu/EX ++ falubo/EAIY ++ faluensisk/OY ++@@ -13643,8 +14974,8 @@ fanatiker/EAJY ++ fanatisera/NMAPDY ++ fanatisk/OQY ++ fanatism/ADY ++-fanband/ABDY ++ fanbärare/EAJY +++fanders ++ faner/ABDY ++ fanera/NMAPDY ++ fanerfabrik/AHDY ++@@ -13676,6 +15007,7 @@ fantast/ATHDY ++ fantasteri/ABHY ++ fantastiske/Y ++ fantasy/X +++fantasyfilm/AHDY ++ fantisera/NMAPDY ++ fantom/ABHDY ++ fantombild/AHDY ++@@ -13684,7 +15016,7 @@ fantomsm ++ FAO/r ++ far/R ++ fara/EABGY ++-farad/TY +++farad/Y ++ farao/EAY ++ faraon/THY ++ faraonsk/OQY ++@@ -13707,13 +15039,13 @@ fargalt/ADGY ++ farhåga/EAGY ++ farin/ABDY ++ farinsocker/CAY ++-farinös/OY ++ farisé/AEHYX ++ fariseisk/OQY ++ farit/A ++ farkost/AHDY ++ farled/AHDYv ++ farledsavgift/AHDY +++farledsfyr/ADGY ++ farlig/OPQY ++ farlighet/AHDYv ++ farm/AHDGY ++@@ -13731,7 +15063,7 @@ farmarlag/ABDY ++ farmarliga/EAGY ++ farmoder/EAY ++ farmoderlig/OY ++-farmor/AEY +++farmor/AY ++ farmödrar/AJY ++ farofull/OY ++ farofylld/OY ++@@ -13813,8 +15145,6 @@ fastanst ++ fastbunden/KMY ++ fastemånad/AHDY ++ faster/EAIY ++-fastfas/HDYX ++-fastfasområde/FECAY ++ fastfrusen/MY ++ fastgjorda/RY ++ fastgjorde/OY ++@@ -13942,15 +15272,13 @@ fav ++ fax/BDGYX ++ faxa/NAPD ++ faxmeddelande/FECAY ++-faxning/ADGY ++ faxnummer/FCAY ++ FBI/r ++ f.d. ++ F-dur/ABX ++ fe/EH ++-fé/AEH ++ feb. ++-feber/EAIYX +++feber/EAYX ++ feberaktig/OY ++ feberanfall/ABDY ++ feberdröm/FAIY ++@@ -13987,13 +15315,14 @@ feghj ++ fegis/DGY ++ feja/NMAPD ++ fejd/AHDY ++-fejk/ADY +++fejk ++ fejka/NMAPDY +++fejken/XZ ++ fejning/ADGY ++ fejs/BDY ++ fekal/OY ++ fekalier/AJY ++-fel/BDYX +++fel/ABDYX ++ fela/EADGY ++ felade/A ++ feladressera/NMAPDY ++@@ -14003,7 +15332,6 @@ felanalys/HDY ++ felanmälan/AY ++ felanmälningar/AJY ++ felanpassning/ADGY ++-felanrop/ABDY ++ felanvänd/OY ++ felar ++ felat/A ++@@ -14026,7 +15354,6 @@ feldirigera/NMAPDY ++ feldosera/NMAPDY ++ feldosering/ADGY ++ feldossera/MY ++-feleko/FECAY ++ felekvation/AHDY ++ felfinnare/EAJY ++ felfinneri/ABY ++@@ -14039,26 +15366,21 @@ felf ++ felfördelningsfunktion/AHDY ++ felförlopp/ABDY ++ felgrepp/ABDY ++-felgräns/HDY ++ felhantering/ADY ++ Felicia/A ++-feliknande/Y ++ felinformerad/NQY ++ felinriktad/NQY ++ felinställd/OY ++ felinvestering/ADGY ++-feljakt/AHDY +++feljakt/AHD ++ felkalkyl/AHDY ++ felkalkylerad/NQY ++ felkonstruerad/NQY ++ felkontroll/AHDY ++ felkoppling/ADGY ++ felkorrigering/ADGY ++-felkurva/EAGY ++-felkvot/AHDY +++felkurva/EAG ++ felkälla/EAGY ++-felläge/FECAYv ++-fellägesindikering/ADGY ++ felläsning/ADGY ++ felmanöver/EAY ++ felmanövrer/AJY ++@@ -14074,17 +15396,19 @@ felparkera/NMAPDY ++ felparkerare/EAJY ++ felparkering/ADGY ++ felparkeringsavgift/AHDY +++felpass/BDY ++ felplacera/NMAPDY ++ felplanerad/NQY ++ felprogrammerad/NQY ++ felriktad/NQY ++ felräknad/NQY ++ felräkning/ADGY ++-fels/TY ++ felsatsning/ADGY ++ felsignal/AHDY +++felsisk/O ++ felskriven/MY ++ felskrivning/ADGY +++felslut/ABDY ++ felstavad/NQY ++ felstavning/ADGY ++ felsteg/ABDY ++@@ -14092,7 +15416,8 @@ felst ++ felstämplad/NQY ++ felsymptom/ABDY ++ felsymtom/ABDY ++-felsågad/NQY +++felsyn/ADY +++felsågad/NQ ++ felsägning/ADGYv ++ felsöka/KQLAJDRY ++ felsökning/ADGY ++@@ -14103,10 +15428,10 @@ feltolkning/ADGY ++ feltryck/ABDY ++ feltänkt/OY ++ felunderrättad/NQY +++felval/ABDY ++ felvariabel/EAJY ++ felvänd/OY ++-fem ++-fem- +++fem/b ++ femaktare/EAJY ++ fematomig/OY ++ fembarns/XZ ++@@ -14115,6 +15440,7 @@ femcentiliters/XZ ++ femcylindrig/OY ++ femdagars/XZ ++ femdubbel/MY +++femdubbling/ADGY ++ femdygnsperiod/AHDY ++ femdygnsprognos/HDY ++ femetta/EAGY ++@@ -14127,9 +15453,11 @@ femgradig/OY ++ femhundra ++ femhundralapp/ADGY ++ femhundratal/ABY +++femhundring/ADGY ++ femhörnig/OY ++ femhörning/ADGYv ++ feminin/OPQY +++femininitet/ADY ++ femininum/AJY ++ feminiserad/NQY ++ feminisering/ADYv ++@@ -14157,7 +15485,7 @@ femmilslopp/ABDY ++ femminuters/XZ ++ femmotorig/OY ++ femmåls/XZ ++-femmånaders/XZ +++femmånaders/X ++ femparti/XZ ++ femparts/XZ ++ fempoängare/EAJY ++@@ -14177,6 +15505,7 @@ femskeppig/OY ++ femsnåret/Y ++ femspaltig/OY ++ femspindlig/OY +++femstegs/XZ ++ femstjärnig/OY ++ femsträngad/NQY ++ femställig/OY ++@@ -14270,7 +15599,6 @@ fenomenologisk/OY ++ fenotyp/AHDY ++ fenoxisyra/EAGY ++ fenval/ADGY ++-fenylera/MY ++ feodal/OY ++ feodalism/ADY ++ Ferdinand/A ++@@ -14281,7 +15609,7 @@ ferment/ABDY ++ fermentartad/NQY ++ fermentation/ADY ++ fermentera/NMAPDY ++-fermion/AHDY +++fermion/AHD ++ fermitet/ADY ++ fermium/ABY ++ Fernando/A ++@@ -14314,12 +15642,15 @@ festivitet/AHDY ++ festklädd/OY ++ festlig/OPQY ++ festlighet/AHDYv +++festlokal/AHDY +++festmat/ADY ++ festong/AHDY ++ festprisse/EAGY ++ festsal/ADGY ++ festsmyckad/NQY ++ feststämning/ADY ++ festtal/ABDY +++festtåg/ABDY ++ fet/PQ ++ feta ++ fetal/OY ++@@ -14336,10 +15667,12 @@ fetmaoperation/AHDY ++ fetna/MDY ++ fetsill/ADGY ++ fetstil/ADGY +++fetstilt/OY ++ fett/ABHYX ++ fettbeständig/OY ++ fettfattig/OY ++ fettfri/OY +++fetthalt/AHDY ++ fetthaltig/OPY ++ fetthärdig/OY ++ fettig/OY ++@@ -14390,8 +15723,7 @@ ficklampsbatteri/ABHY ++ ficklampslampa/EAGY ++ ficklexika/AY ++ ficklexikon/ABDY ++-ficklod/ABDY ++-ficklupp/ADGY +++ficklod/ABD ++ fickparkera/NMAPDY ++ fickpeng/ADGY ++ fickräknare/EAJY ++@@ -14416,20 +15748,20 @@ fiffel/CAY ++ fiffig/OPQY ++ fiffla/NMABY ++ fifflare/EAJYz ++-fifflig/OY ++ fifty ++ fifty-fifty ++ fig. ++ fight/AHDY ++ fightas/N ++ fighter/EY ++-figur/AHDYX +++figur/AHDYsf ++ figural/OY ++ figurant/AHDY ++ figuration/AHDY ++ figurativ/OY ++ figurera/MDY ++ figurlig/OY +++figursy/NMA ++ figursydd/OY ++ figurväveri/CABHY ++ fijian/AHDY ++@@ -14475,7 +15807,7 @@ filharmoniker/EAJY ++ filharmonisk/OQY ++ filial/AHDYX ++ filibuster/EAIY ++--filig/O +++-filig/OY ++ filigran/AHDY ++ filinnehåll/ABDY ++ Filip/A ++@@ -14539,11 +15871,14 @@ filmning/ADGYv ++ filmografi/EAY ++ filmotek/ABDY ++ filmpremiär/AHDY +++filmpris/BHDY ++ filmproducent/AHDY ++ filmproduktion/AHDY ++ filmprojektor/AEHY +++filmrecension/AHDY ++ filmregissör/AHDY ++ filmremsa/EAGY +++filmsal/ADGY ++ filmsekvens/HDY ++ filmskapare/EAJY ++ filmskådespelare/EAJY ++@@ -14551,10 +15886,12 @@ filmstj ++ filmstjärneleende/FECAY ++ filmstjärnemässig/OY ++ filmstudio/EAIY +++filmteam/ABDY ++ filmtitel/EAIY ++ filmvetare/EAJY ++ filmvisare/EAJY ++ filmvisning/ADGY +++filmälskare/EAJY ++ filnamn/ABDYv ++ filodeg/ADY ++ filolog/ATHDY ++@@ -14584,9 +15921,8 @@ filtrerbar/OY ++ filtrering/ADGYv ++ filtrerpapper/FCAJBDY ++ filttoffla/EAGY ++-filtväv/ADGY ++ filtyp/AHDY ++-filur/ATHDY +++filur/AHDY ++ filurig/OY ++ filändelse/EAIY ++ filöverföring/ADGYv ++@@ -14614,7 +15950,6 @@ finbearbetning/ADGY ++ finbladig/OY ++ findroppig/OY ++ finemang ++-finera/MDY ++ finess/HDYX ++ finessrik/OY ++ finfibrig/OY ++@@ -14657,7 +15992,7 @@ finhet/AHDYv ++ finhetsgrad/AHDY ++ finhyllt/OY ++ finhyvla/NMAPY ++-finhårig/OY +++finhårig/O ++ fininställa/KLAJODY ++ fininställning/ADGYv ++ finish/ADGY ++@@ -14687,7 +16022,7 @@ finkultur/ADY ++ finkulturell/OY ++ finkänslig/OPQY ++ finkänslighet/ADY ++-finkök/ABDY +++finkök/ABD ++ Finland/AY ++ finlandisera/NMAPDY ++ finlandism/AHDY ++@@ -14712,6 +16047,7 @@ finmekanisk/OQY ++ finmiddag/ADGY ++ finmotorik/ADY ++ finmotorisk/OY +++finmätning/ADGY ++ finn/AOQDRGY ++ finnande/AY ++ finner/Y ++@@ -14761,10 +16097,10 @@ fintandad/NQY ++ fintlig/OY ++ fintrådig/OY ++ fintvätt/ADGY ++-finullig/OY +++finullig/O ++ finurlig/OPQY ++ finurlighet/AHDY ++-finådrig/OY +++finådrig/O ++ fiol/AHDYX ++ fiolbyggare/EAJY ++ fioritur/AHDY ++@@ -14779,8 +16115,8 @@ firmament/ABY ++ firmarättslig/OY ++ firmatecknare/EAJY ++ firre/EAGY ++-fis/ODR ++-fisa/QLDI +++fis/D +++fisa/DI ++ fischy/EAHY ++ fiser ++ fisförnäm/QOY ++@@ -14799,6 +16135,7 @@ fiskavel/EAY ++ fiskben/ABDYv ++ fiskbensmönster/FCAY ++ fiskbensmönstrad/NQY +++fiskbil/ADGY ++ fiskbit/ADGY ++ fiskbuljong/AHDY ++ fiskbulle/EAGY ++@@ -14846,6 +16183,7 @@ fiskpudding/ADGY ++ fiskrens/BY ++ fiskrik/OY ++ fiskrom/FAY +++fiskstim/FCAY ++ fisksump/ADGY ++ fisksås/HDY ++ fiss/BDY ++@@ -14857,9 +16195,7 @@ fissur/AHDY ++ fistel/EAIY ++ fistulös/OY ++ fitta/EAG! ++-fittlukt/AHD! ++-fittsaft/AHD! ++-fittslem/CA! +++fittsaft/AHDY ++ fix/ODG ++ fixa/NAPD ++ fixar/XZ ++@@ -14973,7 +16309,6 @@ fj ++ fjärilshåv/ADGY ++ fjärilsim/CAY ++ fjärilslik/OY ++-fjärm/OY ++ fjärma/NMAPDY ++ fjärr/XZ ++ fjärran/Y ++@@ -15057,13 +16392,13 @@ flakmoped/AHDY ++ flakmoppe/EAGY ++ flakong/AHDY ++ flakvagn/ADGY ++-flambar/OY +++flambar/O ++ flambera/NMAPDY ++ flamenco/EAYX ++ flamencodans/HDY ++ flamfast/OY ++ flamgarn/ABY ++-flamgul/OY +++flamgul/O ++ flamhärdad/NQY ++ flamhärdig/OY ++ flamingo/EAIY ++@@ -15111,7 +16446,7 @@ flask/XZ ++ flaska/EAGY ++ flaskbarn/ABDY ++ flaskformig/OY ++-flaskgas/HDY +++flaskgas/HD ++ flaskhals/DGYX ++ flasknosdelfin/AHDY ++ flaskpost/ADY ++@@ -15129,7 +16464,7 @@ flatskratta/NMADY ++ flatstift/ABDYv ++ flatterande/Y ++ flatulens/HDY ++-flax/BY +++flax/BDY ++ flaxa/NMADY ++ flaxig/OPQY ++ flaxighet/ADY ++@@ -15150,7 +16485,7 @@ fleranv ++ flerarmad/NQY ++ fleras ++ fleratomig/OY ++-fleraxig/OY +++fleraxig/O ++ flerbarns/XZ ++ flerbarnsfamilj/AHDY ++ flerbasisk/OY ++@@ -15225,7 +16560,7 @@ flervalsprov/ABDY ++ flervalstest/ABHDY ++ flervalsuppgift/AHDY ++ flerväggig/OY ++-flervärd/OY +++flervärd/O ++ flervärdig/OY ++ flerårig/OQY ++ flerårs/XZ ++@@ -15248,6 +16583,7 @@ flickaktig/OPQY ++ flickaktighet/ADY ++ flickebarn/ABDY ++ flickig/OY +++flicklag/ABDY ++ flickmodell/AHDY ++ flickvän/AFY ++ flickvänner/AJY ++@@ -15305,6 +16641,7 @@ flockning/ADYv ++ flockull/ADY ++ flod/AHDYX ++ flodarm/ADGY +++flodbrädd/ADGY ++ flodbåt/ADGYv ++ flodbåtstur/AHDY ++ flodgud/ADGY ++@@ -15323,7 +16660,7 @@ floraomr ++ florbehängd/OY ++ florentinare/EAJY ++ florentinsk/OQY ++-florera/MDY +++florera/NMADY ++ Flores ++ florett/AHDYX ++ Florian/A ++@@ -15433,6 +16770,7 @@ fly/NEAB ++ flydd/Q ++ flydda ++ flyende/CAY +++flyer/EAY ++ flyfotad/NQY ++ flyg/ABDRYX ++ flyga/BY ++@@ -15441,8 +16779,9 @@ flygare/EAJY ++ flygaress/BDY ++ flygaräss/BDY ++ flygbar/OY +++flygbas/HDY ++ flygbild/AHDY ++-flygblad/ABDY +++flygblad/ABDYv ++ flygbolag/ABDY ++ flygbransch/AHDY ++ flygburen/MY ++@@ -15458,13 +16797,16 @@ flygf ++ flygindustri/EAHY ++ flygintresserad/NQY ++ flygkapten/AHDY +++flygkrasch/AHDY ++ flygkropp/ADGY ++ flygkunnig/OY +++flygkår/AHDY ++ flygledare/EAJY ++ flygledning/ADGY ++ flyglotta/EAGY ++ flygmaskin/AHDY ++ flygmekanisk/OY +++flygmyra/EAGY ++ flygning/ADGYvf ++ flygofficer/EAHDY ++ flygofficerare/JY ++@@ -15477,16 +16819,20 @@ flygr ++ flygrädda/Y ++ flygsinnad/NQY ++ flygstopp/ABDY +++flygstrid/AHDY ++ flygstridskrafter/AJY ++ flygteknisk/OY ++ flygterminal/AHDY +++flygtid/AHDY ++ flygtur/AHDY ++ flygvapen/FCAY +++flygväg/ADGY ++ flygvärdinna/EAGY ++ flyhänt/OPQY ++ flyhänthet/ADY ++ flykt/AHDYX ++ flykta/NMAPDY +++flyktbil/ADGY ++ flyktig/OPQY ++ flyktighet/AHDY ++ flykting/ADGYXU ++@@ -15575,7 +16921,7 @@ fl ++ fläns/DY ++ flänsa/NAPDIY ++ flänsbricka/EAGY ++-flänslös/OY +++flänslös/O ++ flänsning/ADY ++ flänsrör/ABDY ++ flärd/ADY ++@@ -15586,8 +16932,10 @@ fl ++ flärdlös/OY ++ fläsk/ABYX ++ fläska/NMADY +++fläskfilé/AEHY ++ fläskig/OPQY ++ fläskighet/ADY +++fläskkött/ABY ++ fläsklägg/ADGY ++ fläskpannkaka/EAGY ++ fläskänger/EAIY ++@@ -15600,7 +16948,7 @@ fl ++ flöde/FECYvf ++ flödig/OPY ++ flödvatten/CAY ++-flög/AQY +++flög/AY ++ flöjel/EAIY ++ flöjla/NAPDY ++ flöjling/ADY ++@@ -15631,14 +16979,12 @@ fnasig/OQY ++ fnasighet/ADY ++ fnask/ABD! ++ fnaska/NMADY ++-fnaskig/OY ++-fnasslig/OY ++ fnatt/Y ++ fniss/BDY ++ fnissa/NMADY ++ fnissig/OPQY ++ fnissning/ADGY ++-fnitter/FCAY +++fnitter/CAY ++ fnittra/NMADY ++ fnittrig/OPQY ++ fnittring/ADGY ++@@ -15678,13 +17024,12 @@ fogde/EAGYX ++ fogfri/OY ++ foglig/OPQY ++ foglighet/ADY ++-foglina/EAGY ++ foglossning/ADGY ++ fogmassa/EAGY ++ fogning/ADGYv ++ fogsam/MY ++ fogsamt/Y ++-fogslev/ADGY +++fogslev/ADG ++ fogstruken/MY ++ fogstrukit/AY ++ fogstryka/AJDRY ++@@ -15701,6 +17046,7 @@ fokalplan/ABY ++ fokus/BDY ++ fokusera/NMAPBY ++ fokusering/ADGYv +++fokusförskjutning/ADGY ++ fokusgrupp/AHDY ++ fokusområde/FECAY ++ folder/EAIY ++@@ -15717,6 +17063,7 @@ folioformat/ABDY ++ foliohylla/EAGY ++ foliovolym/AHDY ++ folk/ABDYX +++folkbil/ADGY ++ folkbildare/EAJY ++ folkbildning/ADY ++ folkbildningsarbete/CAY ++@@ -15732,7 +17079,9 @@ Folketinget/AY ++ folketings/XZ ++ folketingsval/ABDY ++ folketymologisk/OY +++folkfest/AHDY ++ folkgrupp/AHDY +++folkhav/ABDY ++ folkhem/FCAYv ++ folkhemsislam/AY ++ folkhop/ADGY ++@@ -15755,9 +17104,11 @@ folkloristik/ADY ++ folklustspel/ABDY ++ folklåt/ADGY ++ folkmassa/EAGY +++folkminne/FECAY ++ folkmord/ABDYv ++ folkmun/Y ++ folkmusik/ADY +++folkmål/ABDY ++ folkmängd/AHDY ++ folknöje/FECAY ++ folkomrösta/MY ++@@ -15780,6 +17131,7 @@ folkr ++ folksaga/EAGY ++ folksamling/ADGY ++ folksed/AHDY +++folksjäl/ADGY ++ folkslag/ABDYv ++ folkstyrd/OY ++ folktom/MY ++@@ -15806,6 +17158,7 @@ fond/AHDYX ++ fondaffär/AHDY ++ fondaktie/EAIY ++ fondavdelning/ADGY +++fondbolag/ABDY ++ fondbörs/HDY ++ fondemission/AHDY ++ fondera/NMAPDY ++@@ -15817,6 +17170,7 @@ fondst ++ fondtapet/AHDY ++ fondue/EAIY ++ fonduegryta/EAGY +++fondval/ABDY ++ fonem/ABDY ++ fonematik/ADY ++ fonematisk/OY ++@@ -15851,7 +17205,7 @@ fordonssystem/ABDY ++ fordonstapetserare/EAJY ++ fordonstapetserarn/AY ++ fordonsteknisk/OY ++-fordra/NEMAPDY +++fordra/NEMADY ++ fordring/ADGYv ++ fordringsfull/OY ++ forechecka/NMAPDY ++@@ -15896,7 +17250,7 @@ formenlig/OY ++ formera/NMAPDY ++ formerare/EAJYz ++ formering/ADGYv ++-formfri/OY +++formfel/ABDY ++ formfulländad/NQY ++ formge/NMAY ++ formgiva/AJDRY ++@@ -15913,7 +17267,6 @@ formgjutningsmaskin/AHDY ++ formidabel/KMLY ++ formig/OYWZ ++ formkonst/ADY ++-formlera/EAGY ++ formlig/OY ++ formligen ++ formlära/EAGY ++@@ -15929,6 +17282,7 @@ formsak/AHDY ++ formskön/OY ++ formsmidning/ADY ++ formsprutning/ADGY +++formspråk/ABDY ++ formstridig/OY ++ formsvag/OY ++ formsvarvning/ADGY ++@@ -15995,13 +17349,12 @@ forsythiabuske/EAGY ++ forsärla/EAGY ++ forta/MLJYz ++ fortare ++-fortast/Q +++fortast ++ fortbestå/MY ++ fortbestånd/ABY ++ fortbilda/MY ++ fortbildning/ADGY ++ forte/FECY ++-fortel/EAIY ++ fortepedal/AHDY ++ fortfara/JY ++ fortfaren/MY ++@@ -16048,7 +17401,7 @@ forvagn/ADGY ++ forward/ADGY ++ fosfat/AHDYX ++ fosfatera/MY ++-fosfor/AEHDYX +++fosfor/AEYX ++ fosforescens/DY ++ fosforescera/MDY ++ fosforfri/OY ++@@ -16105,20 +17458,27 @@ fota/NMAPD ++ fotabjälle/CAY ++ fotangel/EAIY ++ fotarbete/FECAY +++-fotare/EAJY ++ fotavtryck/ABDY ++ fotbad/ABDY ++ fotbeklädnad/AHDY ++ fotboja/EAGY ++ fotboll/ADGYvf ++ Fotbollförbundet/A +++fotfel/ABDY +++fotfolk/ABDY ++ fotfäste/FECAY ++ fotgängar/XZ ++ fotgängare/EAJY ++ fotisättning/ADGY +++fotknöl/ADGY ++ fotled/AHDYv ++ fotmanövrerad/NQY ++ fotnot/AJHDY ++ foto/FECAYX +++fotoalbum/ABDY +++fotobok/ADY +++fotoböcker/AJY ++ fotoelektrisk/OY ++ fotoelektrolytisk/OY ++ fotoelektromagnetisk/OY ++@@ -16159,21 +17519,26 @@ fototropism/ADY ++ fototypi/EAHY ++ fotpatrullering/ADGY ++ fotriktig/OY ++--fots/XZ +++-fots/XZU ++ fotsack/ADGY ++ fotsbred/OY ++ fotsbredd/AHDY ++ fotsdjup/AOBDY ++ fotsid/OY +++fotskada/EAGY ++ fotslång/OY ++ fotspår/ABDY ++ fotsteg/ABDY ++ fotstjock/OY ++ fotstöd/ABDY +++fotsula/EAGY ++ fotsvamp/ADGYv ++ fotsvampsmedicin/AHDY +++fotvalv/ABDY ++ fotvård/ADY ++ fotvårdsspecialist/AHD +++fotända/EAIRY +++fotände/EY ++ FoU/r ++ Foucault/AX ++ foul/AHDY ++@@ -16195,7 +17560,9 @@ fragmentarisk/OY ++ fragmentartad/NQY ++ fragmentera/NMAPDY ++ fragmentering/ADGYv ++-fraiche/EAY +++fragmentisera/NMAPD +++fragmentisering/ADG +++fraiche/EA ++ frakt/ADYX ++ frakta/NMAPHDY ++ fraktal/AOHDY ++@@ -16214,6 +17581,7 @@ fram/YX ++ framavlad/NQY ++ framaxel/EAIY ++ frambar/AY +++framben/ABDY ++ frambesvärjd/OY ++ frambesvärjning/ADGY ++ frambringande/CAY ++@@ -16242,10 +17610,12 @@ framfusighet/ADY ++ framföda/KLAJRY ++ framfödd/OY ++ framföra/KLAJOBRYz +++framförallt ++ framförande/FEY ++ framförare/EAJY ++ framgent ++ framglida/KJDY +++framgräva/KLAJODRY ++ framgå/MLY ++ framgång/ADGYv ++ framgången/MY ++@@ -16298,13 +17668,13 @@ framp ++ framropad/NQY ++ framrusande ++ framräknande/CAY ++-framsa/AY ++ framsade/AY ++ framsagd/OY ++ framsagt/AY ++ framsida/EAGY ++ framskjuten/MY ++ framskriden/MY +++framstam/FAIY ++ framsteg/ABDY ++ framstegstro/EAY ++ framsträckt/O ++@@ -16398,7 +17768,6 @@ fransfl ++ fransig/OY ++ fransk/OQY ++ franska/ECAGY ++-franskalärare/EAJY ++ franskbröd/ABDY ++ franskklassicism/ADY ++ franskklassisk/OY ++@@ -16432,12 +17801,11 @@ frasv ++ fraternisera/NMADY ++ fraternisering/ADY ++ fre. ++-freak/ABDGY +++freak/ADGY ++ freaka/MY ++ fred/AHDY ++ freda/NMAPDYv ++ fredag/ADGYv ++-fredagkväll/ADGY ++ fredagsbön/AHDY ++ fredagskväll/ADGY ++ fredagsmorgon/ADIY ++@@ -16473,6 +17841,7 @@ fredsf ++ fredsinitiativ/ABDY ++ fredskrav/ABDY ++ fredskårist/AHDY +++fredsplan/AHDY ++ fredspris/BHDY ++ fredsråd/ABDY ++ fredstid/ADY ++@@ -16524,9 +17893,11 @@ friarstr ++ frias/N ++ fribiljett/AHDY ++ friboren/KMY +++fribrev/ABDY ++ frid/AD ++ Frida/A ++-fridans/HDY +++fridag/ADGY +++fridans/HD ++ Fridehäll/A ++ fridfull/OPQY ++ fridfullhet/ADY ++@@ -16568,7 +17939,7 @@ frigymnasium/AJY ++ Frigymnasium/A ++ frigående/Y ++ frigång/ADYv ++-frigöra/AJRY +++frigöra/AJDRY ++ frigörelse/EAYX ++ frigöring/ADGYv ++ frigöringstid/AHDY ++@@ -16587,6 +17958,7 @@ frihet/AHDYvf ++ frihetlig/OQY ++ frihetsrus/BDY ++ frihetstro/EAY +++frihjul/ABDY ++ frihjulsnav/ABDY ++ friholt/ABDY ++ frihult/ADGY ++@@ -16598,6 +17970,7 @@ frikalla/NMAPDY ++ frikallelse/XZ ++ frikassé/AEHYX ++ frikassésås/HDY +++frikast/ABDY ++ frikativa/EAJGY ++ frikativt/Y ++ frikoppla/NMAPY ++@@ -16635,7 +18008,7 @@ fril ++ friläggs/Y ++ frimickel/EAIY ++ frimicklare/EAY ++-frimodig/OY +++frimodig/OPQY ++ frimodighet/ADYv ++ frimurar/XZ ++ frimurare/EAJY ++@@ -16644,12 +18017,13 @@ frim ++ frimärkssamlare/EAJY ++ fripassagerare/EAJY ++ frireligiös/OY ++-friresa/EAGY +++friresa/EAG ++ fris/HD ++ frisade/Y ++ frisagt/Y ++-frisbee/EAY +++frisbee/EAYX ++ frisbeear/AJY +++frisbeesport/ADY ++ friser/XZ ++ frisera/NMAPDY ++ frisering/ADGYv ++@@ -16667,14 +18041,19 @@ friskluft/ADYv ++ friskluftsintag/ABDY ++ friskna/NMADY ++ friskola/EAGY +++friskriva/KLAJDRY +++friskriven/MY ++ frisksportare/EAJY ++-frisktal/ABDY +++frisktal/ABD ++ friskus/DGY ++ friskvård/ADY ++ friskvårdsbidrag/ABDY +++frislag/ABDY ++ frisläppa/KQLAJBY ++ frisläppande/FEY ++ frispark/ADGYv +++frispel/ABDY +++frispela/NMAPY ++ frispråkig/OPQY ++ frispråkighet/ADYv ++ frisrelief/AHDY ++@@ -16738,6 +18117,8 @@ frivol/OPQY ++ frivolitet/AHDYv ++ frivolt/AHDY ++ frivård/ADY +++friyta/EAGY +++frizon/AHDY ++ friår/ABDY ++ frodas/N ++ frodig/OPQY ++@@ -16754,7 +18135,6 @@ fromsinthet/ADY ++ fromt ++ frond/AHDY ++ frondera/NMADY ++-fronderi/CABHY ++ frondering/ADGYv ++ frondör/AHDY ++ front/ADYX ++@@ -16763,6 +18143,7 @@ frontal/OYX ++ frontalkrock/ADGY ++ frontallob/AHDY ++ frontespis/HDY +++frontfigur/AHDY ++ frontlastare/EAJY ++ frontlinje/EAIY ++ frontmatad/NQY ++@@ -16797,7 +18178,6 @@ frostk ++ frostlackerad/NQY ++ frostländig/OY ++ frostlänt/OY ++-frostna/MY ++ frostnatt/ADY ++ frostnupen/MY ++ frostnätter/AJY ++@@ -16855,17 +18235,16 @@ fruktvin/ABHY ++ fruntimmer/FCAYv ++ fruntimmersgöra/CAY ++ fruntimmerskarl/ADGY ++-frusa/MY ++ frusen/KMLY ++ frusenhet/ADY ++ frusit/Y ++-frusta/NMAPDY +++frusta/NMADY ++ frustning/ADGY ++ frustration/AHDYv ++ frustrera/NMAPDY ++ frustrering/ADGY ++ frutitel/EAIY ++-frygier/EAJY +++frygier/AJY ++ frygisk/OQY ++ fryna/KY ++ fryntlig/OPQY ++@@ -16873,12 +18252,14 @@ fryntlighet/ADYv ++ frys/DRYX ++ frysa/KQLDIY ++ frysbar/OY +++frysbil/ADGY ++ frysbox/DGY ++ frysdisk/ADGY ++ fryseri/ABHY ++-fryshus/BY +++fryshus/BDY ++ frysning/ADGYf ++ fryspunkt/AHDY +++frysrum/FCAY ++ frysskada/EAGY ++ frysskåp/ABDY ++ frystorka/NMAPDY ++@@ -16886,12 +18267,11 @@ fr ++ fråge/XZU ++ frågvis/OPQY ++ frågvishet/ADYv ++-från ++-från- +++från/b ++ fråndöm/RY ++ fråndöma/KLODY ++-frånfalla/KJDY ++-frånfallen/MY +++frånfalla/KJD +++frånfallen/M ++ frånfälle/FECAY ++ frångå/NMLAY ++ frångången/MY ++@@ -16902,7 +18282,6 @@ fr ++ frånlevande/Y ++ frånlurad/NQY ++ frånräkna/NMAPDY ++-frånsa/AY ++ frånsade/AY ++ frånsagd/OY ++ frånsagt/AY ++@@ -16967,18 +18346,19 @@ fr ++ frände/EAIY ++ frändskap/AHDYv ++ fränka/EAGY ++-fräs/DRY ++-fräsa/KQLBIY +++fräs/DG +++fräsa/KQLAJBRY ++ fräsch/OPQY ++ fräscha/NMAY ++ fräschör/ADY ++ fräsig/OPQY ++ fräsmaskin/AHDY ++ fräsning/ADGY +++fräsvals/DGY ++ fräta/KQLAJDY ++ frätskada/EAGY ++ frö/EB ++-fröa/NMAPHD +++fröa/MHD ++ fröbärande/Y ++ fröfäste/FECAY ++ fröhus/BDY ++@@ -17010,6 +18390,7 @@ ftalsyra/EAGY ++ ftp/r ++ fubblig/OY ++ fuchsia/EAGY +++fudge/EAY ++ fuffens/Y ++ fuga/EAGY ++ fugerad/NQY ++@@ -17095,6 +18476,7 @@ fullst ++ fullsövd/OQY ++ fulltalig/OY ++ fullteckna/NMAPY +++fulltid/ADY ++ fulltonig/OY ++ fullträff/ADGY ++ fulltränad/NQY ++@@ -17113,10 +18495,11 @@ fumla/NMADY ++ fumlig/OPQY ++ fumlighet/ADY ++ Funck/A ++-fundament/ABDY +++fundament/AOBDY ++ fundamental/OPY ++ fundamentalism/ADY ++ fundamentalist/ATHDYX +++fundamentas/Y ++ fundera/NMABY ++ funderare/EAJYz ++ fundering/ADGYv ++@@ -17148,7 +18531,7 @@ funt/ADG ++ funtad/NQY ++ fur/AD ++ fura/EAGY ++-furagera/MY +++furagera/M ++ furie/EAIY ++ furieliknande/Y ++ furioso/FECAY ++@@ -17174,12 +18557,12 @@ fusionsprocess/HDY ++ fusk/ABYX ++ fuska/NMABY ++ fuskare/EAJYz ++-fuskvin/ABHY ++ futhark/AHDY ++ futil/OY ++ futilitet/AHDY ++-futt/ADGY +++futta/NMAJDY ++ futtig/OPQY +++futts/Y ++ futural/OY ++ futurism/ADY ++ futurist/ATHDYX ++@@ -17220,9 +18603,9 @@ fyndig/OPQY ++ fyndighet/AHDYv ++ fyndort/AHDY ++ fyndplats/HDY ++-fyndvin/ABHY ++-fyr/ADYX ++-fyra/EAIGY +++fyndvin/ABH +++fyr/ADG +++fyra/EAGY ++ fyrabarns/XZ ++ fyradagars/XZ ++ fyrade/A ++@@ -17231,7 +18614,8 @@ fyrahundra ++ fyrakilos/XZ ++ fyraliters/XZ ++ fyramåls/XZ ++-fyramånaders/XZ +++fyramånaders/X +++fyraplans/XZ ++ fyrapoängs/XZ ++ fyraprocentig/OY ++ fyraprocentsspärr/ADY ++@@ -17258,18 +18642,22 @@ fyrbackslinje/EAIY ++ fyrbarns/XZ ++ fyrbent/OQY ++ fyrbladig/OY +++fyrboll/ADGY ++ fyrbåk/ADGY ++ fyrcylindrig/OY ++ fyrdagars/XZ ++ fyrdela/NMAPDY +++fyrdelning/ADGY ++ fyrdimensionell/OY ++ fyrdubbel/KMY ++ fyrdubbla/NMAPDY ++-fyreggad/NQY +++fyrdubbling/ADGY +++fyrdörrars +++fyreggad/NQ ++ fyrfaldig/OQY ++ fyrfaldiga/NMAPY ++ fyrfalt ++-fyrfasig/OY +++fyrfasig/O ++ fyrfat/ABDY ++ fyrfilig/OY ++ fyrflikig/OY ++@@ -17287,17 +18675,27 @@ fyrh ++ fyrhörning/ADGY ++ fyrkant/AHDY ++ fyrkantad/NQY ++-fyrkantig/OY +++fyrkantig/OPQY +++fyrkantighet/AHDY +++fyrkaraktär/AHDY +++fyrklang/AHDY ++ fyrklöver/EAJY ++ fyrkärnig/OY ++ fyrling/ADGY +++fyrlista/EAGY ++ fyrlängad/NQY ++ fyrmastad/NQY ++ fyrmotorig/OY ++ fyrmänning/ADGY +++fyrmästar/XZ +++fyrmästare/EAJY +++fyrnations/XZ ++ fyrop/ABDY +++fyrparti/XZ ++ fyrpartiregering/ADGY ++-fyrpipig/OY +++fyrpass/BDY +++fyrpipig/O +++fyrplats/HDY ++ fyrpolig/OY ++ fyrradig/OY ++ fyrrummig/OY ++@@ -17306,14 +18704,24 @@ fyrsiding/ADGY ++ fyrsiffrig/OY ++ fyrsitsig/OY ++ fyrskaftsväv/ADGY +++fyrsken/ABY +++fyrskepp/ABDY +++fyrskift ++ fyrskäftad/NQY ++ fyrspaltig/OY +++fyrspann/ABDY +++fyrspår ++ fyrspårig/OY +++Fyrstad/A ++ fyrstavig/OY +++fyrstegs/XZ +++fyrstjärnig/OY ++ fyrstrålig/OY +++fyrsträngad/NQY ++ fyrställig/OY ++ fyrstämmig/OY ++-fyrsågad/NQY +++fyrsågad/NQ +++fyrtakt/AHDY ++ fyrtaktare/EAJY ++ fyrtaktig/OY ++ fyrtaktsmotor/AEHY ++@@ -17328,6 +18736,7 @@ fyrtiofemte ++ fyrtiofjärde ++ fyrtiofyra ++ fyrtioförsta +++fyrtionde ++ fyrtiondel/ADGY ++ fyrtionio ++ fyrtionionde ++@@ -17336,7 +18745,7 @@ fyrtiosex ++ fyrtiosju ++ fyrtiosjunde ++ fyrtiosjätte ++-fyrtiotal/ABYv +++fyrtiotal/ABDYv ++ fyrtiotalism/ADY ++ fyrtiotalist/ATHDYX ++ fyrtiotalsstil/ADY ++@@ -17353,12 +18762,17 @@ fyrtio ++ fyrtioårsåldern/AY ++ fyrtioåtta ++ fyrtioåttonde +++fyrtorn/ABDY +++fyrvaktar/XZ +++fyrvaktare/EAJY ++ fyrverkeri/ABHYX ++ fyrverkeripjäs/HDY ++ fyrvingad/NQY ++ fyrväldig/OY ++ fyrväppling/ADGY ++ fyrvärd/OY +++fyrväsen/AY +++fyrväsende/FECAY ++ fyrväxlad/NQY ++ fysik/AHDYX ++ fysikalisk/OY ++@@ -17375,7 +18789,8 @@ fysiokratism/ADY ++ fysiolog/ATHDY ++ fysiologi/EADY ++ fysionomi/EAHY ++-fysioterapeutisk/OY +++fysioterapeut/ATHDY +++fysioterapi/EAY ++ fysisk/OQY ++ fytotron/AHDY ++ få/NEA ++@@ -17419,12 +18834,13 @@ f ++ fåmansägd/OY ++ fåmäld/OY ++ fån/B ++-fåna/NMAD +++fåna/MD ++ fåne/EAGY ++ fåneri/ABHY ++ fång/ABQDRY ++ fånga/NPDIY ++-fångare/EAYzg +++fångar/XZU +++fångare/EAYWZ ++ fångarm/ADGY ++ fångdräkt/AHDY ++ fången/KMY ++@@ -17441,6 +18857,7 @@ f ++ fångstnät/ABDY ++ fångtransport/AHDY ++ fånguppror/ABDY +++fångutväxling/ADGY ++ fångvaktar/XZ ++ fångvaktare/EAJY ++ fångvård/ADY ++@@ -17470,14 +18887,13 @@ f ++ fårlort/ADGY ++ fårlår/ABDY ++ fårost/ADGY ++-fårsax/DGY ++ fårskalle/EAGY ++ fårskallig/OY ++ fårskinn/ABDYv ++ fårskinnspäls/DGY ++ fårskock/ADGY ++ fårskötsel/EAY ++-fårsmör/ABY +++fårsmör/AB ++ fårstek/ADGY ++ fårtarm/ADGY ++ fårticka/EAGY ++@@ -17487,9 +18903,9 @@ F ++ fåtal/ABY ++ fåtalig/OPY ++ fåtalighet/ADY ++-fåtrådig/OY +++fåtrådig/O ++ fått ++-fåtölj/AHDY +++fåtölj/AHDYX ++ fåvitsk/OQY ++ fåvitskhet/ADY ++ fä/FEAB ++@@ -17531,9 +18947,7 @@ f ++ fälgnyckel/EAIY ++ fälla/KELAJOBIGY ++ fällbar/OY ++-fälldon/ABDY ++ fälle/FECAY ++-fälling/ADGY ++ fällkniv/ADGY ++ fällning/ADGYvf ++ fällriktning/ADGY ++@@ -17541,7 +18955,6 @@ f ++ fält/ABDYX ++ fältbiolog/AHDY ++ fältduglig/OY ++-fältfri/OY ++ fältgrå/OY ++ fältherre/EAGY ++ fältjägare/EAJY ++@@ -17564,6 +18977,8 @@ f ++ fängslande/FEY ++ fängslig/OY ++ fänkål/ADY +++fänkålsfrö/EABY +++fänkålsfröna/AY ++ fänrik/ADGY ++ färd/AHQDYX ++ färdas/N ++@@ -17584,6 +18999,7 @@ f ++ färdigklädd/OY ++ färdigkokt/OY ++ färdiglagad/NQY +++färdigmat/ADY ++ färdigmonterad/NQY ++ färdigmålad/NQY ++ färdigpackad/NQY ++@@ -17603,11 +19019,14 @@ f ++ färdled/AHDY ++ färdledare/EAJY ++ färdmedel/FCAY +++färdplan/AHDY ++ färdriktning/ADGY +++färdsätt/ABDY ++ färdtjänst/ADY ++ färdväg/ADGY ++ färg/AHDYX ++ färga/NMAPBY +++färgbad/ABDY ++ färgbeständig/OY ++ färgbild/AHDY ++ färgblind/OY ++@@ -17623,12 +19042,13 @@ f ++ färgkänslig/OY ++ färglade/AY ++ färglagd/OY +++färglager/FCAY ++ färglagt/AY ++ färglägga/AJDRY ++ färglägger/Y ++ färgläggs/Y ++ färglös/OY ++-färgmärka/KQLAJDY +++färgmärka/KQLAJD ++ färgning/ADGYvf ++ färgnyans/HDY ++ färgplansch/AHDY ++@@ -17639,8 +19059,10 @@ f ++ färgsättning/ADY ++ färgton/AHDY ++ färgtub/AHDY +++färgval/ABDY ++ färgämne/FECAY ++ färing/ADGY +++färist/AHDGY ++ färja/EAGY ++ färje/XZ ++ färjeled/AHDY ++@@ -17659,6 +19081,7 @@ f ++ färskost/ADGY ++ färskplockad/NQY ++ färskpotatis/DGY +++färskvara/EAGY ++ färskvaru/XZ ++ Färö/XZ ++ Färöarna/A ++@@ -17670,7 +19093,6 @@ f ++ fäste/FECAY ++ fäster ++ fästfolk/ABY ++-fästig/OY ++ fästing/ADGYX ++ fästingbett/ABDY ++ fästingburen/MY ++@@ -17745,8 +19167,8 @@ f ++ fönsterkitt/ABY ++ fönsterluft/HY ++ fönstertvättare/EAY ++-för- ++-föra/KLAJOI +++för/bG +++föra/KLAO ++ förakt/ABY ++ förakta/NMAPDY ++ föraktare/EAJYz ++@@ -18050,7 +19472,7 @@ f ++ föreläsning/ADGYvf ++ förelöpare/EAJY ++ föremål/ABDYv ++-förena/NMPDY +++förena/NQMPDY ++ Förenade ++ förenhetliga/NMAPDY ++ förening/ADGYvf ++@@ -18145,7 +19567,7 @@ f ++ författa/NMAPBY ++ författare/EAJYzg ++ författarinna/EAGY ++-författarskap/ABYv +++författarskap/ABDYv ++ författning/ADGYvf ++ författningsenlig/OY ++ författningsråd/ABDY ++@@ -18212,8 +19634,9 @@ f ++ förgapa/MPDY ++ förgasa/NMAPDY ++ förgasare/EAJYz +++förgasning/ADY ++ förgasningsbar/OY ++-förgat/AY +++förgats ++ förgicks ++ förgifta/NMAPDY ++ förgiftning/ADGYvf ++@@ -18255,14 +19678,13 @@ f ++ förgängelse/EAYX ++ förgänglig/OY ++ förgänglighet/ADYv ++-förgäta/AJDRY ++-förgäten/MY +++förgäta/AJDR +++förgäten/KM ++ förgätenhet/ADYv ++-förgäter/Y ++-förgätit/AY +++förgäter +++förgätit/A ++ förgätmigej/AHDY ++-förgätne ++-förgäts/Y +++förgäts ++ förgäves ++ förgöra/AJBRY ++ förgörs/Y ++@@ -18456,12 +19878,17 @@ f ++ förliden/MY ++ förlig/OPY ++ förlika/MDY +++förlikas ++ förlikbar/OY +++förlikes ++ förlikna/NMAPDY ++ förlikning/ADGYv ++ förlikningsavgift/AHDY ++ förlikningsbud/ABDY ++ förlikningssumma/EAGY +++förliks +++förliktes +++förlikts ++ förlisa/KQJDY ++ förlisning/ADGYv ++ förlita/NEMABY ++@@ -18748,6 +20175,7 @@ f ++ försegling/ADGYvf ++ försena/NMPDY ++ försening/ADGYvf +++försent ++ försiggå/MLY ++ försiggången/MY ++ försigkommen/MY ++@@ -18884,11 +20312,12 @@ f ++ förspörjer/Y ++ förspörjs/Y ++ förspörs/Y ++-först/OQR ++-första- +++först/QR +++första/b ++ förstad/ADY ++ förstadagsbrev/ABDY ++ förstadium/AJY +++förstadsgata/EAGY ++ förstafemma/EAGY ++ förstag/ABDY ++ förstagrads/XZ ++@@ -19190,6 +20619,7 @@ f ++ förtröttas/N ++ förtulla/NMAPDY ++ förtullare/EAJY +++förtullning/ADGY ++ förtumlad/NQY ++ förtunna/NMAPDY ++ förtunning/ADGY ++@@ -19333,7 +20763,7 @@ f ++ förväntansfull/OQY ++ förväntning/ADGYv ++ förväntningsriktig/OY ++-förvärk/ADGY +++förvärkar/AJY ++ förvärkt/OQY ++ förvärldsliga/NMAPDY ++ förvärm/RY ++@@ -19387,7 +20817,6 @@ f ++ föräldraskap/ABYv ++ förälska/NMAPDY ++ förälskelse/EAIYX ++-förända/EAIY ++ föränderlig/OPQY ++ föränderlighet/ADYv ++ förändra/NMAPDY ++@@ -19413,7 +20842,10 @@ f ++ fösa/KQLAJDR ++ fösning/ADGY ++ fött/A ++-g/Rr +++g/BRr +++G20/r +++G7/r +++G8/r ++ gabardin/ABDYX ++ gabardinbyxor/AJY ++ gabardinkostym/AHDY ++@@ -19533,6 +20965,7 @@ gallsten/ADGYv ++ gallstensanfall/ABDY ++ Gallup ++ gallupundersökning/ADGYv +++gallväg/ADGY ++ galning/ADGYv ++ galon/AHD ++ galonbyxa/EAGY ++@@ -19577,7 +21010,6 @@ gamla/AY ++ gamle/AY ++ Gamleby/AX ++ gamling/ADGY ++-gamma/CAY ++ gammafunktion/AHDYv ++ gammaglobulin/ABHY ++ gammal/MYX ++@@ -19617,7 +21049,6 @@ gammelvals/HDY ++ gamäng/AHDY ++ gamängaktig/OY ++ ganasch/AHDY ++-gangad/NQY ++ gangrenös/OY ++ gangränös/OY ++ gangster/EAIYX ++@@ -19688,11 +21119,11 @@ gasbest ++ gasbinda/EAGY ++ gasbrand/AJDY ++ gasbrännare/EAJY +++gasbuss/DGY ++ gasbågssvets/DGY ++ gascognare/EAJY ++ gaseldad/NQY ++ gasell/AHDY ++-gasera/MY ++ gasfattig/OY ++ gasform/AHDY ++ gasformig/OY ++@@ -19700,24 +21131,28 @@ gasfylld/OY ++ gasgenerator/AEHY ++ gashaltig/OY ++ gashärdig/OY ++-gasig/OPQ ++ gasisolerad/NQY ++ gaska/MY ++ gaskammar/XZ ++ gaskammare/EAY ++ gaskamrar/AJY ++-gaskyld/OY ++-gasmack/ADGY +++gaslarm/ABDY +++gasljus/BY +++gaslukt/ADY +++gaslåga/EAGY +++gasläcka/EAGY +++gasmack/ADG ++ gasmask/AHDY ++ gasmetallbågsvetsning/ADGY +++gasmoln/ABDY ++ gasol/ADYX ++ gasolkök/ABDY ++ gasoltub/AHDY ++ gasometer/EAIY ++ gaspedal/AHDY ++-gaspor/AHDY ++ gasporositet/AHDY ++-gass/BDY +++gasrör/ABDY +++gass/BY ++ gassa/MDY ++ gassig/OPY ++ gasspis/DGY ++@@ -19750,6 +21185,7 @@ gat/XZ ++ gata/EAHGY ++ gate/EAY ++ gatflicka/EAGY +++gathus/BDY ++ gathörn/ABDY ++ gatlopp/ABDY ++ gatlykta/EAGY ++@@ -19769,14 +21205,18 @@ gatubild/AHDY ++ gatudans/HDY ++ gatufrid/ADY ++ gatuförsäljare/EAJY +++gatuhus/BDY ++ gatukontor/ABDY ++ gatukorsning/ADGY ++ gatukostnadsersättning/ADGY ++ gatukök/ABDYv +++gatuliv/ABDY ++ gatunummer/FCAY +++gatunät/ABDY ++ gatuplan/ABDY +++gaturum/FCAY ++ gatuvimmel/CAY ++-gatuvy/EAHY +++gatuvy/EAH ++ gaucho/EAIY ++ gauffrera/MY ++ gaullism/ADY ++@@ -19841,7 +21281,6 @@ gemensamma/AJY ++ gemensamme/Y ++ gemensamt/Y ++ gemenskap/AHDYv ++-geminal/OY ++ gemination/AHDY ++ geminera/NMAPDY ++ geminering/ADY ++@@ -19852,6 +21291,7 @@ gemytlighet/ADY ++ gemål/AHDY ++ gen/PD ++ gena/KQMHD +++genades ++ genans/DY ++ genant/OY ++ genbank/AHDY ++@@ -19895,7 +21335,7 @@ generatris/HDY ++ generell/OPY ++ generera/NMAPDY ++ generering/ADGYv ++-generika/Y +++generika/X ++ generisk/OY ++ generositet/ADY ++ generös/OPQY ++@@ -19919,7 +21359,7 @@ geng ++ gengångare/EAJY ++ gengåva/EAGY ++ gengälda/NMAJPDY ++-geni/EQABHDY +++geni/QABHDY ++ genial/OTPQY ++ genialisk/QY ++ genialitet/AHDY ++@@ -20083,6 +21523,7 @@ genrebest ++ genrebeteckning/ADGY ++ genremässig/OY ++ genrep/ABDY +++genrepa/NMADY ++ gensaga/EAGY ++ gensekvens/HDY ++ genskjuta/KLAJDRY ++@@ -20158,6 +21599,8 @@ georgisk/OQY ++ georgiska/EAGY ++ geostationär/OY ++ geosynklinal/AHDY +++geotagga/NMAPDY +++geotaggning/ADGY ++ geoteknik/ADY ++ geoteknisk/OY ++ geotermi/EAY ++@@ -20209,7 +21652,7 @@ gestikulering/ADGY ++ gestuell/OY ++ gesäll/AHDYX ++ gesällprov/ABDY ++-get/AJDY +++get/JD ++ getabock/ADGY ++ getapel/EAIY ++ getfot/ADY ++@@ -20235,12 +21678,15 @@ gev ++ gevärskalibrig/OY ++ ggr ++ Ghana/AX +++ghanan/AHDY +++ghanansk/OQY ++ ghanesisk/OY ++ ghasel/AHDY ++ GHB/r ++ ghetto/FECAYX ++ ghettokultur/AHDY ++ Ghraib/r +++GHz/r ++ GI/r ++ Giardini/AX ++ gibbon/AHDY ++@@ -20259,16 +21705,19 @@ giftgas/HDY ++ gifthärd/ADGY ++ giftig/OPQY ++ giftighet/AHDYv +++giftorm/ADGY ++ giftorätt/ADYv ++--gigabit/XZ +++giftpil/ADGY +++-gigabit/XZU ++ gigabit/Y ++--gigabyte/XZ +++-gigabyte/XZU ++ gigabyte/Y ++--gigahertz/XZ ++-gigahertz +++-gigahertz/XZU +++gigahertz/Y ++ gigant/ATHDY ++ gigantiske/Y ++-gigawatt/AY +++gigawatt/ADY +++-gigawatts/XZU ++ gigolo/EAIY ++ gikt/AD ++ giktbruten/KMY ++@@ -20287,7 +21736,7 @@ giltigf ++ giltighet/ADYv ++ giltighetstid/AHDY ++ gimmick/ADGY ++-gin/AB +++gin/ABD ++ ginge ++ ginseng/ADYX ++ ginsengtablett/AHDY ++@@ -20350,7 +21799,7 @@ givande/Y ++ givar/XZ ++ givare/EAJY ++ givarsignal/AHDY ++-given/MY +++given/KMY ++ givens ++ giver ++ givetvis ++@@ -20361,15 +21810,16 @@ givning/ADGYf ++ gjord/OY ++ gjorde/A ++ gjorts ++-gjuta/KLAJDRz +++gjut/ABDYX +++gjuta/KLADR ++ gjutare/EAJY ++ gjutbar/OY ++-gjuten/MY ++ gjuteri/ABHYX ++ gjutform/ADGY ++ gjutgods/BDY ++ gjutjärn/ABYv ++ gjutjärnsrör/ABDY +++gjutna/Y ++ gjutning/ADGYvf ++ gjutprocess/HDY ++ gjutstycke/FECAY ++@@ -20402,7 +21852,7 @@ glamourisering/ADY ++ glamourös/OPQY ++ glandelhårig/OY ++ glandulös/OY ++-glans/HDYX +++glans/DYX ++ glansbagge/EAGY ++ glansbild/AHDY ++ glansdagar/AJY ++@@ -20427,9 +21877,11 @@ glasa/NMAPY ++ glasaktig/OY ++ glasarmerad/NQY ++ glasartad/NQY +++glasbit/ADGY ++ glasbjörk/ADGY ++ glasblåsare/EAJY ++ glasblåseri/ABHY +++glasbord/ABDY ++ glasbruk/ABDYv ++ glasbur/ADGY ++ glasburk/ADGY ++@@ -20441,13 +21893,16 @@ glasfiberb ++ glasfiberkabel/EAIY ++ glasfiberväv/ADGY ++ glasfibrer/AJY ++--glasfönster/FCA +++-glasfönster/FCAY ++ Glasgow/AX ++ glasgrossist/AHDYX ++ glashal/OY +++glashus/BDY ++ glashård/OY ++ glasig/OY ++ glasigloo/EAIY +++glasklar/OPY +++glaskross/DGY ++ glaskub/AHDY ++ glaskula/EAGY ++ glaslyftar/XZ ++@@ -20458,6 +21913,8 @@ glasm ++ glasmästeri/ABHYX ++ glasnudel/EAIY ++ glaspärla/EAGY +++glasruta/EAGY +++glasrör/ABDY ++ glass/HDGYX ++ glassbar/AHDY ++ glasservis/HDY ++@@ -20482,15 +21939,18 @@ glasull/ADY ++ glasvara/EAGY ++ glasvas/HDY ++ glasverk/ABDY ++-glasvin/ABHY +++glasvin/ABH +++glasvis ++ glasvägg/ADGY ++ glasyr/AHDY ++ glasål/ADGY ++ glasögon/ADYXU ++ glasögonprydd/OY ++ glatt/AOPY +++glaukom/ABY ++ glencheckrutig/OY ++-gles/OP +++gles/P +++glesa/NEMADGY ++ glesbebyggd/OY ++ glesbefolkad/NQY ++ glesbladig/OY ++@@ -20503,6 +21963,7 @@ gleshet/ADY ++ gleshårig/OQY ++ glesmaskig/OY ++ glesna/MDY +++glest ++ glesvävd/OY ++ gliacell/AHDY ++ gliavävnad/AHDY ++@@ -20511,7 +21972,7 @@ glida/KD ++ glidare/EAJY ++ glidflygning/ADGY ++ glidflygplan/ABDY ++-glidlös/OY +++glidlös/O ++ glidmedel/FCAY ++ glidna ++ glidning/ADGYv ++@@ -20520,11 +21981,10 @@ glidtackla/NMAPDY ++ glidtackling/ADGY ++ glidyta/EAGY ++ glimma/MDY ++-glimmer/AY +++glimmer/ECAY ++ glimmerartad/NQY ++ glimmerförande/Y ++ glimmerhaltig/OY ++-glimmret/AY ++ glimra/MDY ++ glimrig/OY ++ glimt/ADY ++@@ -20548,12 +22008,11 @@ globalisering/ADGYv ++ globaliseringsråd/ABDY ++ globetrotter/EAIY ++ globformig/OY ++-globin/ABY ++-globulin/ABHY +++globulin/ABH ++ glokalisering/ADGYv ++ glopaktig/OY ++ gloria/EAGY ++-glorifiera/NMAPY +++glorifiera/NMAPDY ++ glorifiering/ADGYv ++ gloriös/OY ++ glosa/EAGY ++@@ -20566,14 +22025,13 @@ glossera/MY ++ glosögd/OY ++ glottal/OY ++ glottis/DY ++-gluffa/NMAPDY ++-glufsa/NMAPDY +++gluffa/NMADY +++glufsa/NMADY ++ glufsig/OY ++ glugg/ADGY ++ gluggig/O ++ glukos/DY ++ glunka/NMAY ++-gluon/AHDY ++ glupa/MDY ++ gluphungrig/OY ++ glupsk/OPQY ++@@ -20620,24 +22078,23 @@ gl ++ glädjesprång/ABDY ++ glädjetår/ADGY ++ glädjeyra/EAY ++-gläfs/BDY +++gläfs/BY ++ gläfsa/KLADY ++ glänsa/KJDY ++ glänta/NEMAJPDGY ++ gläntnings/XZ ++-glätta/NAPY ++-glättar/JEYX ++-glättare/EAY +++glätta/NMAPY +++glättare/EAJYz ++ glättig/OPY ++ glättighet/AHDY ++-glöd/ABDYX +++glöd/ADYX ++ glöda/KDY ++ glödbakad/NQY ++ glödbeständig/OY ++ glödga/NMAPDY ++ glödgning/ADGY ++ glödgningsbeständig/OY ++-glödhet/OY +++glödhet/OQY ++ glödhög/ADGY ++ glödlampa/EAGY ++ glödlamps/XZ ++@@ -20652,7 +22109,6 @@ gl ++ glömsk/OQY ++ glömska/EAY ++ glömskebringande/Y ++-glöta/NMAPDY ++ GM ++ GmbH ++ GMO/r ++@@ -20666,6 +22122,7 @@ gnagare/EAJY ++ gnat/AB ++ gnata/NMADY ++ gnatig/OY +++gnejs/HDY ++ gnejsig/OY ++ Gnesta/AX ++ gnet/AJDY ++@@ -20680,7 +22137,6 @@ gnissla/MDY ++ gnissling/ADY ++ gnist/XZ ++ gnista/EMAGY ++-gnistfri/OY ++ gnistra/MDY ++ gnistregn/ABDY ++ gno/M ++@@ -20698,9 +22154,10 @@ gnukalv/ADGY ++ gnutta/EAGY ++ gny/NMAB ++ gnyende/CAY ++-gnägg/ABDY ++-gnägga/MDY +++gnägga/MJDY +++gnägget/Y ++ gnäggning/ADGYv +++gnäggs/Y ++ gnäll/BY ++ gnälla/KLABY ++ gnällig/OPQY ++@@ -20727,7 +22184,7 @@ godhj ++ godhällig/OY ++ goding/ADGY ++ godis/BDGYX ++-godiston/AHDY +++godiston/HD ++ godkväll ++ godkänna/KLAJOBRY ++ godkännande/FEY ++@@ -20737,9 +22194,10 @@ godlynthet/ADY ++ godmodig/OPQY ++ godmodighet/ADY ++ godmorgon ++-godnatt/YX +++godnatt/X ++ godnattkyss/DGY ++ godnattsaga/EAGY +++godnattstund/AHDY ++ godo/Y ++ godronnera/MY ++ gods/BDY ++@@ -20787,7 +22245,7 @@ gokartbana/EAGY ++ gokartbil/ADGY ++ gokartkörning/ADGY ++ gokartolycka/EAGY ++-gol +++gola/MJ ++ Goldman ++ goldonder/EAIY ++ golf/AHDYX ++@@ -20825,7 +22283,7 @@ gondolj ++ gonggong/ADGY ++ goniometrisk/OY ++ gonorré/AEYX ++-Gonzalez/A +++Gonzalez ++ goodwill/ADY ++ good-will ++ goodwillskapande/Y ++@@ -20840,7 +22298,6 @@ gorgonzolaost/ADGY ++ gorilla/EAGYX ++ gorma/MDY ++ gormig/OY ++-gorrig/OY ++ gosa/M ++ gosedjur/ABDY ++ gosefilt/ADGY ++@@ -20897,14 +22354,13 @@ grace/EAIY ++ gracil/OY ++ graciös/OPQY ++ grad/AHDYX ++--gradare/EAJ +++-gradare/EAJY ++ gradbeteckning/ADGY ++ gradera/NMAPY ++ gradering/ADGYv ++--graders/XZ ++-gradfri/OY +++-graders/XZU ++ gradient/AHDY ++--gradig/O +++-gradig/OY ++ gradtal/ABDY ++ graduell/OY ++ graduera/MPY ++@@ -20929,16 +22385,18 @@ grahamsbulle/EAGY ++ grahamsmjöl/ABY ++ grahamsskorpa/EAGY ++ gram/FCAY +++-grammare/EAJY ++ grammatik/AHDYX ++ grammatikalisk/OY ++ grammatiker/EY ++ grammatikkontroll/AHDY ++ grammatisk/OY +++grammis/DGY ++ grammofon/AHDYX ++ grammofonskiva/EAGY ++ gramnegativ/OY ++ grampositiv/OY ++--grams/XZ +++-grams/XZU ++ gramse/Y ++ gran/ADG ++ granat/AHDYsf ++@@ -21005,6 +22463,7 @@ gratisreklam/AHDY ++ gratisresa/EAGY ++ gratissak/AHDY ++ gratisåk/ABDY +++gratta/NMAPDY ++ grattis ++ gratulant/AHDY ++ gratulation/AHDYv ++@@ -21074,18 +22533,17 @@ grekofil/OY ++ grena/MJY ++ Grenada/AX ++ grenadisk/OY ++-grenfri/OY +++grenfri/O ++ grenig/OY ++ grenklyka/EAGY ++ grenkontakt/AHDY ++ grens/Y ++ grenseger/EAIY ++-grensla/MY +++grensla/NMAPDY ++ grensle ++ grenuttag/ABDY ++ grenverk/ABY ++ grep/QDGY ++-greplös/OY ++ grepp/ABDYX ++ greppa/NMAY ++ greppbar/OY ++@@ -21147,12 +22605,13 @@ gripreflex/HDY ++ griptång/ADY ++ griptänger/AJY ++ gris/DYX ++-grisa/NAPDIY +++grisa/NMADIY ++ grisaktig/OY ++ grisfot/AJDY ++ grisfösare/EAJY ++ grisig/OPQY ++ grisighet/ADY +++griskött/ABY ++ grissla/EAGY ++ Grisslehamn/Av ++ grisögd/OY ++@@ -21169,6 +22628,8 @@ grodd/ADY ++ grodda/NAPDIY ++ groddjur/ABDY ++ grodlår/ABDY +++grodman/AFY +++grodmän/AFY ++ grodsim/CAY ++ groende/Y ++ grogg/ADYX ++@@ -21214,6 +22675,7 @@ grovkornig/OPY ++ grovkornighet/ADY ++ grovkrossad/NQY ++ grovkvistig/OY +++grovkök/ABDY ++ grovlek/ADGY ++ grovlemmad/NQY ++ grovmaskig/OY ++@@ -21234,7 +22696,6 @@ grovullig/OY ++ grovådrig/OY ++ grubbel/CAY ++ grubbeltyngd/OY ++-grubbig/OY ++ grubbla/NMABY ++ grubblare/EAJYz ++ grubbleri/ABHY ++@@ -21256,6 +22717,7 @@ grundankar/XZ ++ grundankare/ECAJY ++ grundare/EAJYz ++ grundbok/ADY +++grundbult/ADGY ++ grundböcker/AJY ++ grundera/NMAPDY ++ grundform/AHDY ++@@ -21264,6 +22726,7 @@ grundfunktion/AHDY ++ grundfärg/AHDY ++ grundgående/Y ++ grundhet/ADY +++grundidé/AEHY ++ grundlade/AY ++ grundlag/ADGYv ++ grundlagd/OY ++@@ -21305,6 +22768,7 @@ grundstadium/AJY ++ grundsten/ADGY ++ grundstomme/EAGY ++ grundstötning/ADGY +++grundsyn/ADY ++ grundsås/HDY ++ grundsärskola/EAGY ++ grundtal/ABDY ++@@ -21319,10 +22783,11 @@ grundv ++ grundämne/FECAY ++ grundämnesatom/AHDY ++ grunka/EAGY ++-grunna/NMAPDY +++grunna/NMADY ++ grupp/AHDYsf ++ grupparbete/FECAY ++ gruppboende/FECAY +++gruppchef/AHDY ++ gruppera/NMAPY ++ gruppering/ADGYv ++ grupperingsområde/FECAY ++@@ -21338,7 +22803,7 @@ gruppsykologi/EAY ++ gruppvis ++ gruppvåldtäktsgäng/ABDY ++ gruppövning/ADGY ++-grus/BDYX +++grus/BYX ++ grusa/NMAPY ++ grusblandad/NQY ++ grusgång/ADGY ++@@ -21374,10 +22839,9 @@ gryende/Y ++ grym/KML ++ grymhet/AHDYv ++ grymt/ABY ++-grymta/NMADIY +++grymta/NMADY ++ grymtning/ADGYv ++ gryn/ABDY ++-gryna/NMAPDY ++ grynformig/OY ++ grynig/OPY ++ grynighet/ADYv ++@@ -21392,13 +22856,12 @@ grynv ++ gryt/ABDY ++ gryta/EAGY ++ grytbit/ADGY ++-grytig/OY ++ grytlapp/ADGY ++ grytlock/ABDY ++ grytskåp/ABDY ++ grytstek/ADGY ++-grå/QP ++-gråa/LAJY +++grå/QOP +++gråa/R ++ gråaktig/OY ++ gråal/ADGY ++ gråbeigea/JY ++@@ -21406,6 +22869,7 @@ gr ++ gråben/AY ++ gråblek/OQY ++ gråblå/OY +++gråbo/Y ++ gråbrun/OY ++ grådask/ABY ++ grådaskig/OPY ++@@ -21417,12 +22881,12 @@ gr ++ gråhalsad/NQY ++ gråhet/ADY ++ gråhund/ADGY ++-gråhuvad/NQY +++gråhuvad/NQ ++ gråhårig/OPQY ++ gråhårighet/ADY ++ gråhäger/EAIY ++ gråimport/AHDY ++-gråjärn/ABDY +++gråjärn/AB ++ gråkall/OY ++ gråkindad/NQY ++ gråklädd/OQY ++@@ -21442,7 +22906,7 @@ gr ++ gråsugga/EAGY ++ gråsvart/OY ++ gråsäl/ADGY ++-gråt/ODY +++gråt/DY ++ gråta/KLABY ++ gråtar/XZ ++ gråtare/EAJY ++@@ -21510,8 +22974,9 @@ gr ++ grässtjärnblomma/EAGY ++ grässtrå/EABY ++ grässtråna/AY ++-gräston/AHDY +++gräston/HD ++ grästuva/EAGY +++gräsyta/EAGY ++ gräsänkling/ADGY ++ gräsätare/EAJY ++ gräva/KLAJOBRY ++@@ -21567,13 +23032,14 @@ gr ++ grönska/EMADY ++ grönskimrande/Y ++ grönsvart/OY +++grönsåpa/EAGY ++ Grönvall/A ++ grönvit/OY ++ grönyta/EAGY ++ grönögd/OY ++ gröpa/KLAJY ++ gröt/ADGYX ++-gröta/NAPDY +++gröta/NMADY ++ grötaktig/OY ++ grötfat/ABDY ++ grötig/OPY ++@@ -21581,7 +23047,8 @@ gr ++ grötrim/FCAY ++ grövre/Y ++ grövst/OY ++-GSM/r +++gsm/r +++guacamole/EAY ++ Guangdong/A ++ guanin/ABY ++ guano/EAY ++@@ -21592,7 +23059,10 @@ guatemalanska/EAGY ++ gubbaktig/OY ++ gubbe/EAGY ++ gubbig/OY +++gubbighet/ADY ++ gubbjävel/EAIY +++gubbröra/EAY +++gubbsjuk/OQY ++ gubbvälde/FECAY ++ gubevars ++ gud/ADG ++@@ -21689,14 +23159,18 @@ guldkantad/NQY ++ guldkedja/EAGY ++ guldklimp/ADGY ++ guldklocka/EAGY +++guldkorn/ABDY ++ guldkrona/EAGY ++ guldlockig/OY +++guldläge/FECAY ++ guldmedalj/AHDY ++ guldmyntfot/ADY ++ guldnål/ADGY ++ guldpalm/AHDY ++ guldpeng/ADGY ++ guldpläterad/NQY +++guldpris/BHY +++guldram/ADGY ++ guldskimrande/Y ++ guldsmed/AHDYv ++ guldsmidd/OY ++@@ -21710,12 +23184,13 @@ guldvaruindustri/EAHY ++ guldvåg/ADGY ++ guldålder/EAIY ++ guldår/ABDY ++-gulf/ADY +++guldägg/ABDY ++ gulfläckig/OY ++-gulfotad/NQY +++gulfotad/NQ ++ gulfruktig/OY ++-gulfstat/AHDY +++gulfstat/AHD ++ gulgrå/OY +++gulgrön/OY ++ gulhyad/NQY ++ gulhårig/OY ++ gull/ABDY ++@@ -21736,16 +23211,15 @@ gulrutig/OY ++ gulröd/OY ++ gulsiktig/OY ++ gulsippa/EAGY ++-gulsot/ABDY +++gulsot/ADY ++ gulsparv/ADGY ++ gulstrimmig/OY ++ gulstrupig/OY ++-gultonad/NQY +++gultonad/NQ ++ gultörne/FECAY ++ gulvit/OY ++-gulål/ADGY ++ gulärla/EAGY ++-gumaktig/OY +++gumaktig/O ++ gumma/EAGY ++ gummera/MY ++ gummi/FECAYXU ++@@ -21798,7 +23272,6 @@ Gustavsson/A ++ gute/EAG ++ gutnisk/OY ++ guttural/OY ++-gutår ++ guvernant/AHDY ++ guvernör/AHDYv ++ guvernörskap/ABY ++@@ -21809,7 +23282,6 @@ gyckelspel/ABDY ++ gyckla/NMADY ++ gycklare/EAJY ++ gylf/ADGY ++-gylflös/OY ++ gyllenblond/OY ++ gyllenbrun/OY ++ gyllene/Y ++@@ -21849,14 +23321,13 @@ gyrokompass/HDY ++ gyromagnetisk/OY ++ gyroskop/ATBDY ++ gyrostatisk/OY ++-gytter/FCAY +++gytter/CAY ++ gyttja/EAY ++ gyttje/XZ ++ gyttjeaktig/OY ++ gyttjepöl/ADGY ++ gyttjig/OY ++ gyttrad/NQY ++-gyttrena/AY ++ gyttrig/OY ++ gå/NML ++ gågata/EAGY ++@@ -21867,6 +23338,7 @@ g ++ gångbana/EAGY ++ gångbar/OPQY ++ gångbarhet/ADYv +++gångbro/EAGY ++ gången/M ++ gångfart/ADYv ++ gångfartsgata/EAGY ++@@ -21876,6 +23348,8 @@ g ++ gångled/AHDY ++ gånglåt/ADGY ++ gångstig/ADGY +++gångstråk/ABDY +++gångtrafik/ADY ++ gångtrafikant/AHDY ++ gångtunnel/EAIY ++ gångväg/ADGY ++@@ -21916,7 +23390,7 @@ g ++ gäddsax/DGY ++ gäl/ADG ++ gälbåge/EAGY ++-gäld/AHD +++gäld/AD ++ gälda/NMAPDY ++ gäldbunden/MY ++ gäldenär/AHDYv ++@@ -21981,14 +23455,17 @@ g ++ gästgivaregård/ADGY ++ gästgivargård/ADGY ++ gästgiveri/ABHY +++gästhamn/ADGY +++gästhem/FCAY ++ Gästrikland/Av ++ gästrikländska/EAGY ++ gästriklänning/ADGY ++ gästrikska/EAY +++gästrum/FCAY ++ gästspel/ABDYv ++ gästvänlig/OY ++ Gävle/AX ++-Gävlebo/EAIY +++Gävlebo/EAI ++ gävleborgare/EAJY ++ Gävleborgs/XZ ++ göda/KLAJD ++@@ -22001,15 +23478,15 @@ g ++ gödsling/ADYv ++ Göinge/A ++ gök/AD ++-göka/NAPI +++göka/NMAI ++ gökblomster/FCAY ++-gökbo/FECABDY +++gökbo/FEABY ++ gökklocka/EAGY ++ gökotta/EAGY ++ göktyta/EAGY ++ gökunge/EAGY ++ gökur/ABDY ++-gökägg/ABDY +++gökägg/ABD ++ göl/ADG ++ göm/A ++ gömda/R ++@@ -22035,7 +23512,6 @@ g ++ görligaste/Y ++ görningen/Y ++ göromål/ABDY ++-görrolig/OY ++ gös/NDG ++ gösfilé/AEHY ++ gösspett/ABDY ++@@ -22058,6 +23534,7 @@ g ++ göticistisk/OQY ++ götisk/OY ++ h/r +++H43/r ++ ha/NEM ++ Haag/AX ++ habegär/ABY ++@@ -22071,9 +23548,8 @@ habituell/OY ++ Habo/AX ++ habsburgsk/OQY ++ hack/ABDY ++-hacka/NEAPDGY ++-hackar/JEDYX ++-hackare/AY +++hacka/NEMAPDGY +++hackare/EAJYz ++ hackbräde/FECAY ++ hacker/EAY ++ hackerattack/AHDY ++@@ -22083,7 +23559,8 @@ hackmat/ADY ++ hackning/ADGY ++ hackordning/ADY ++ hackspett/ADGYv ++-hackspettsbo/FEABDY +++hackspettsbo/FEABY +++Hades ++ haffa/NMAPY ++ hafnium/ABY ++ hafs/BY ++@@ -22112,16 +23589,18 @@ hagmark/AHDY ++ Hagström/A ++ hagtorn/ADGY ++ haha ++-hahnium/ABY +++hahnium/AB ++ haiku/AEHY ++ Haiti/AX ++ haitier/EAJY ++ haitisk/OQY ++ haitiska/EAGY ++ haj/AD ++-haja/NMADI +++haja/MDI ++ hajattack/AHDY +++hajk/AHDY ++ hajmal/ADGY +++hajp/ADYX ++ hajpa/NMAPY ++ hak/AB ++ haka/NEAPDG ++@@ -22134,8 +23613,8 @@ haklapp/ADGY ++ hakning/ADGY ++ hakparentes/HDY ++ hakskägg/ABY ++-hakstöd/ABDY ++-hal/PQ +++hakstöd/ABD +++hal/P ++ hala/NMAPD ++ halka/EMAY ++ halkbana/EAGY ++@@ -22190,7 +23669,7 @@ Halmstadslax/DGY ++ halmstrå/EABY ++ halmstråna/AY ++ halmtak/ABDY ++-halofil/OY +++halofil/AOHD ++ halogen/AHDYX ++ halogenera/MY ++ halogenglödlampa/EAGY ++@@ -22206,7 +23685,7 @@ halshugger/Y ++ halshuggit/AY ++ halshuggs/Y ++ halshögg/AY ++-halsont +++halsont/Y ++ halsring/ADGY ++ halsstarrig/OQY ++ halsstarrighet/ADY ++@@ -22230,10 +23709,14 @@ halvbesk/OY ++ halvbildad/NQY ++ halvblind/OY ++ halvbra +++halvbroder/EAY +++halvbror/AY +++halvbröder/AJY ++ halvcirkel/EAIY ++ halvcirkelformad/NQY ++ halvcirkelformig/OY ++ halvciviliserad/NQY +++halvdag/ADGY ++ halvdan/OY ++ halvdunkel/MY ++ halvdålig/OY ++@@ -22247,6 +23730,7 @@ halvenskild/OY ++ halvera/NMAPY ++ halvering/ADGYv ++ halvfabrikat/ABDY +++halvfart/ADY ++ halvferritisk/OY ++ halvfet/OQY ++ halvfnoskig/OY ++@@ -22283,6 +23767,7 @@ halvljum/MY ++ halvljumt/Y ++ halvljus/OBY ++ halvläkt/OY +++halvmara/EAGY ++ halvmatt/OY ++ halvmesyr/AHDY ++ halvmeter/EAJYX ++@@ -22293,11 +23778,14 @@ halvm ++ halvmånformig/OY ++ halvmätt/OY ++ halvmörk/OY +++halvnaken/KMY +++halvnot/AHDY ++ halvnöjd/OY ++ halvrim/FCAY ++ halvrund/OY ++ halvrå/OY ++ halvsann/OY +++halvsekel/FCAJY ++ halvsekelgamla/Y ++ halvsekelgammal/MY ++ halvsidesannons/HDY ++@@ -22315,6 +23803,7 @@ halvsur/OY ++ halvsöt/OY ++ halvtam/OY ++ halvtid/ADYv +++halvtimmes/XZ ++ halvtimmeslång/OY ++ halvtom/MY ++ halvtomt/Y ++@@ -22328,6 +23817,7 @@ halvv ++ halvår/ABDYv ++ halvårig/OQY ++ halvåring/ADGY +++halvårsbokslut/ABDY ++ halvårsgamla/Y ++ halvårsgammal/MY ++ halvårsvis ++@@ -22357,6 +23847,7 @@ hammondorgel/EAIY ++ hamn/ADYX ++ hamna/MIY ++ hamnavgift/AHDY +++hamnfyr/ADGY ++ Hamngatan/A ++ hamnpir/ADGY ++ hamnstad/ADY ++@@ -22364,11 +23855,13 @@ hamnst ++ hampa/EAY ++ hampfrö/EABY ++ hampfröna/AY ++-hamptåg/ABDY +++hamptåg/ABD ++ hamra/NAPDIY ++ Hamrén/A ++ hamster/EAIY ++ hamstra/NAPDY +++hamstring/ADGY +++han/E ++ hanbjälke/EAGY ++ hanblomma/EAGY ++ hand/DYX ++@@ -22391,6 +23884,8 @@ handdriven/MY ++ handduk/ADGYv ++ handel/EAYvf ++ handeldvapen/FCAY +++Handelsbanken/A +++Handelsbanks/XZ ++ handelsbod/ADGY ++ handelsled/AHDY ++ handelsråd/ABDY ++@@ -22402,7 +23897,7 @@ handfull/OY ++ handfängsel/FCAY ++ handgemäng/ABDY ++ handgjord/OY ++-handgranat/AHDYX +++handgranat/AHDYvX ++ handgrepp/ABDY ++ handgriplig/OPQY ++ handgripligen ++@@ -22422,9 +23917,10 @@ handikappr ++ handikappvänlig/OY ++ handjur/ABDY ++ handkirurgisk/OY ++-handklappning/ADGY +++handklappning/ADGYv ++ handklaver/ABDY ++ handklove/EAGY +++handknuten/MY ++ handla/NMABY ++ handlag/ABY ++ handlagd/OY ++@@ -22435,7 +23931,7 @@ handled/HDRY ++ handleda/KLDYv ++ handledare/EAJY ++ handledd/OY ++-handledning/ADGYf +++handledning/ADGYvf ++ handledsskott/ABDY ++ handling/ADGYvf ++ handlov/ADGY ++@@ -22444,10 +23940,10 @@ handl ++ handläggar/XZ ++ handläggare/EAJY ++ handlägger/Y ++-handläggning/ADGY +++handläggning/ADGYv ++ handläggs/Y ++-handlödd/OY ++-handlös/OY +++handlödd/O +++handlöst ++ handmanövrerad/NQY ++ handmata/NMAPDY ++ handmålad/NQY ++@@ -22456,7 +23952,7 @@ handplocka/NMAPY ++ handpåläggning/ADGYv ++ handreglerad/NQY ++ handräckning/ADYv ++-handrörelse/EAIY +++handrörelse/EAIYX ++ hands/DY ++ handsbred/OY ++ handsbredd/AHDY ++@@ -22467,8 +23963,9 @@ handske/EAGY ++ handskfack/ABDY ++ handskklädd/OY ++ handskprydd/OQY ++-handskrift/AHDY +++handskrift/AHDYv ++ handskriven/MY +++handslag/ABDY ++ handsmidd/OY ++ handsnidad/NQY ++ handstampad/NQY ++@@ -22485,9 +23982,8 @@ handviftande/CAY ++ handväska/EAGY ++ handvävd/OY ++ hane/EAGY ++-hanegäll/ABDY +++hanegäll/ABD ++ hanfot/ADY ++-hang/ABY ++ hangar/AHDY ++ hangarfartyg/ABDY ++ hangarplatta/EAGY ++@@ -22499,9 +23995,8 @@ hankontakt/AHDY ++ hankön/ABY ++ hankönad/NQY ++ hanlig/OY ++-hann/AQDGY ++ Hanna/A ++-hannes/Y +++hanne/EAGY ++ hanrej/ADY ++ Hans ++ hanseatisk/OY ++@@ -22529,6 +24024,7 @@ harang/AHDY ++ harangera/NMAPDY ++ Harare/A ++ hardangersöm/FAIY +++hardcore ++ hare/EAGY ++ harem/ABDYv ++ harhjärta/ECAPY ++@@ -22588,7 +24084,6 @@ hartsa/NMAPDY ++ hartsaktig/OY ++ hartsartad/NQY ++ hartsfattig/OY ++-hartsfri/OY ++ hartshaltig/OY ++ hartsig/OY ++ hartsimpregnerad/NQY ++@@ -22622,20 +24117,22 @@ hastverk/ABDY ++ hat/B ++ hata/NMAPD ++ hatare/EAJY ++-hatbild/AHDY +++hatbild/AHD ++ hatbrev/ABDY ++ hatbrott/ABDv ++ hatfull/OY ++ hatfylld/OQY ++ hatisk/OQY ++ hatkampanj/AHDY +++hatkultur/ADY ++ hatkärlek/ADY ++-hatmöte/FECAY +++hatmöte/FECA ++ hatobjekt/ABDY ++ hatpropaganda/EAY ++ hatstämning/ADGY ++ hatt/ADYX ++ hatta/MDIY +++hattask/ADGY ++ hattflor/ABY ++ hattformig/OY ++ hatthylla/EAGY ++@@ -22675,12 +24172,16 @@ havsgud/ADGY ++ havsis/DGY ++ havskappsegling/ADGY ++ havslax/DGY +++havsmiljö/EAHY ++ havsnära/Y ++ havsrätt/ADYv +++havssalt/ABHY ++ havsteknisk/OY ++ havsutsikt/AHDY ++ havsvatten/CAY ++ havsvik/ADGY +++havsvåg/ADY +++havsvågor/AJY ++ havsyta/EAY ++ havsöring/ADGYv ++ havsörn/ADGY ++@@ -22693,6 +24194,10 @@ hdmi/r ++ hd-ready ++ hdtv/r ++ H-dur/X +++headhunta/NMAPDY +++headhunter/EAYX +++headset/ABDY +++healing/ADY ++ hearing/ADGY ++ heat/ABDY ++ hebré/AEHY ++@@ -22718,6 +24223,7 @@ hedersman/AFY ++ hedersmedlem/FAIY ++ hedersmän/AFY ++ hedersord/ABDY +++hederspris/BHDY ++ hederssak/AHDY ++ hedervärd/OPQY ++ hedgefond/AHDY ++@@ -22752,10 +24258,12 @@ hejdl ++ hejdlöshet/ADY ++ hejduk/ADGY ++ hejdundrande/Y +++hejdå ++ hejig/OPQY ++ hejsan +++hejvilt ++ hektar/ABDY ++--hektars/XZ +++-hektars/XZU ++ hektisk/OQY ++ hekto/FECAY ++ hektograf/AHDY ++@@ -22773,6 +24281,7 @@ helar ++ helats ++ helautomatiserad/NQY ++ helautomatisk/OY +++helbild/AHDY ++ helbladig/OY ++ helbom/FAIY ++ helbräddad/NQY ++@@ -22789,6 +24298,7 @@ Helena ++ helfasad/NQY ++ helfestlig/OY ++ helfet/OQY +++helfigur/AHDY ++ helfodrad/NQY ++ helg/ADYX ++ helga/NMAPHDY ++@@ -22838,7 +24348,7 @@ heliograf/AHDY ++ heliostat/AHDY ++ heliotrop/AOTHDY ++ helium/ABYX ++-helix/HDY +++helix/DGY ++ helkantig/OY ++ helkapell/ABDY ++ helkapslad/NQY ++@@ -22853,7 +24363,7 @@ helkropps/XZ ++ helkroppsfigur/AHDY ++ helkroppsmassage/EAY ++ helkroppsträning/ADGY ++-hell +++helkväll/ADGY ++ helladisk/OY ++ Hellberg/A ++ helledig/OY ++@@ -22861,14 +24371,16 @@ hellenism/ADY ++ hellenistisk/OQY ++ heller/K ++ Heller/A ++-helljus/OY +++helljus/OBDY ++ hellogaritmisk/OY ++ Hells ++ Hellström/A +++hellång/OY ++ Helmer/A ++ helmetallisk/OY ++ Helmholtz ++ helmulen/MY +++helnot/AHDY ++ helnykterist/AHDY ++ helnöjd/OQY ++ helpension/ADY ++@@ -22880,6 +24392,7 @@ helsides/XZ ++ helsidesannons/HDY ++ helsike ++ Helsingborg/Av +++helsingborgare/EAJY ++ helsingborgsbo/EAIY ++ Helsingfors/X ++ helsingforsare/EAJY ++@@ -22890,7 +24403,7 @@ helsmidd/OY ++ helspänn/Y ++ helst ++ helstatlig/OY ++-helsteka/KQLAJY +++helsteka/KQLAY ++ helstollig/OY ++ helsvart/OY ++ helsvensk/OY ++@@ -22898,6 +24411,7 @@ helsvetsad/NQY ++ helsynkad/NQY ++ helsynkroniserad/NQY ++ helsyntetisk/OY +++helsåld/OY ++ helt ++ heltal/ABDYv ++ heltalsdel/ADGY ++@@ -22914,17 +24428,20 @@ helvete/FECA! ++ helvetes/XZ ++ helvetisk/OQY ++ helvit/OQY ++-helvävd/OY +++helylle/CAX +++helylletyg/ABHDY ++ helår/ABDYv ++ helårsvis ++ helägd/OY ++ hem/FMCAYX +++hemarbete/FECAY ++ hematit/AHDY ++ hematolog/ATHDY ++ hematologi/EAY ++ hembakad/NQY ++ hembakt/OY ++ hembar/AY +++hembesök/ABDY ++ hembiträde/FECAY ++ hembjuda/KLAJDRY ++ hembjuden/MY ++@@ -22957,6 +24474,8 @@ hemf ++ hemförsäljningslag/ADGY ++ hemgift/AHDY ++ hemgjord/OY +++hemgång/ADGY +++hemhjälp/ADY ++ hemhörighet/ADYv ++ hemiedrisk/OY ++ hemifrån ++@@ -22968,6 +24487,7 @@ hemkommun/AHDY ++ hemkomne/Y ++ hemkomst/AHDY ++ hemkär/OPQY +++hemköp/ABDY ++ hemkörd/OY ++ hemlagad/NQY ++ hemland/AJBYv ++@@ -22983,6 +24503,8 @@ hemligst ++ hemlik/OY ++ Hemlin/A ++ hemlis/DGY +++hemliv/ABY +++hemlån/ABDY ++ hemlånad/NQY ++ hemlän/ABDY ++ hemlängtan/AY ++@@ -22999,6 +24521,7 @@ hemmafru/AEGYX ++ hemmagjord/OY ++ hemmais/DGY ++ hemmakväll/ADGY +++hemmalag/ABDY ++ hemmamarknad/AHDY ++ hemmamatch/AHDY ++ hemman/ABDY ++@@ -23047,11 +24570,13 @@ hemtam/QOPY ++ hemteknisk/OY ++ hemtjänst/ADY ++ hemtjänsttaxa/EAGY +++hemtrakt/AHDY ++ hemtransportera/MY ++ hemtrevlig/OY ++ hemul/AOEY ++ hemulsskyldig/OY ++ hemvist/ABHDY +++hemvård/ADY ++ hemväg/ADY ++ hemvändande/Y ++ hemvärn/ABYvf ++@@ -23163,7 +24688,8 @@ hertiginnetitel/EAIY ++ hertiglig/OY ++ hertigpar/ABDY ++ Hertsön/A ++-hertz/ADY +++-hertz/XZU +++hertz/Y ++ herulisk/OY ++ hes/OPQ ++ heshet/ADY ++@@ -23173,6 +24699,7 @@ hesperisk/OY ++ het/OPQ ++ heta/K ++ hetblodig/OY +++hetero- ++ heterocyklisk/OY ++ heterodispers/OY ++ heterodox/OY ++@@ -23234,7 +24761,6 @@ hibiskus/DGY ++ hicka/NEMABY ++ hickning/ADGYv ++ hickory/EAY ++-hidös/OY ++ hierarki/EAHDY ++ hierarkisk/OQY ++ hieratisk/OY ++@@ -23247,6 +24773,7 @@ hillebard/AHDY ++ Hillevi/A ++ Himalaya/AX ++ himla/NMADIYX +++himlakropp/ADGY ++ himlastormare/EAJY ++ himlasänd/OY ++ himlavalv/ABY ++@@ -23261,7 +24788,7 @@ himmelsk/OQY ++ himmelspol/AHDY ++ himmelsvid/OY ++ Himmerfjärden/A ++-hin +++hin/E ++ hind/ADGY ++ hinder/FCAYvsfU ++ hinderlig/OY ++@@ -23269,7 +24796,7 @@ hinderl ++ hindersam/Y ++ hindersamt/Y ++ hinderslöshets/XZ ++-hindi/EAY +++hindi/AY ++ hindra/NMAPBY ++ hindu/ATEHY ++ hinduiska/EAGY ++@@ -23280,16 +24807,18 @@ hingst/ADGYX ++ hingstföl/ABDY ++ hink/ADGY ++ hinkvis ++-hinna/EAJRGY +++hinna/EAGY ++ hinnaktig/OY ++ hinnartad/NQY ++-hinner/Y ++-hinns/Y +++hinner +++hinnes ++ hinsides +++hint/ADGY ++ hip-hop/DY ++ hiphop/ADY ++ hip-hopare/EAJY ++ hiphoppare/EAJY +++hiphoppen/AY ++ hipp/PQ ++ hippa/EAGY ++ hippie/EAY ++@@ -23298,7 +24827,7 @@ hippodrom/AHDY ++ hippolog/ATHDY ++ hippologi/EAY ++ hippt ++-hipster/EAY +++hipster/EA ++ Hiroshima/AX ++ hirs/DY ++ Hisingen/A ++@@ -23330,9 +24859,9 @@ histidin/ABY ++ histogram/FCAY ++ histolog/ATHDY ++ histologi/EAY ++-histon/ABHY ++ historia/EAHY ++ historicism/ADY +++historicitet/ADY ++ historie/XZ ++ historielös/OY ++ historielöshet/ADYv ++@@ -23358,19 +24887,22 @@ hitkalla/MPY ++ hitkommen/MY ++ hitkörd/OY ++ Hitler/AX +++hitlista/EAGY ++ hitlockad/NQY ++ hitlåt/ADGY ++-hitländ/OY ++ hitom ++ hitrefräng/AHDY ++ hitresa/EAGY +++hits/D ++ hitskickad/NQY ++ hitsänd/OY ++ hitta/NMAPY +++hittar/AJ ++ hitte/XZ ++ hittebarn/ABDY ++ hittegods/BYX ++ hittelön/ADY +++hitten/A ++ hittilldags ++ hittills ++ hittillsgällande/Y ++@@ -23393,16 +24925,21 @@ hjort/ADGX ++ hjorthornssalt/ABY ++ hjortron/ABDYX ++ hjul/ABDYX ++-hjula/NMAPDY +++hjula/NMADY ++ hjulbana/EAGY +++hjulbas/HDY ++ hjulbent/OQY ++ hjulboja/EAGY ++ hjulburen/MY ++ hjuldon/ABDY ++ hjulformad/NQY ++ hjulformig/OY +++hjulhus/BDY ++ hjullastare/EAJY ++ hjulnav/ABDY +++hjulpar/ABDY +++-hjuls/XZU +++hjulspår/ABDY ++ hjulångare/EAJY ++ Hjällbo/A ++ hjälm/ADGYX ++@@ -23413,6 +24950,7 @@ hj ++ hjälpfil/AHDY ++ hjälpfru/AEGY ++ hjälplig/OY +++hjälplok/ABDY ++ hjälplös/OPQY ++ hjälplöshet/ADYv ++ hjälpmedel/FCAY ++@@ -23505,7 +25043,8 @@ ho/E ++ hoa/NMLADI ++ hobbies/Y ++ hobby/EAHYX ++-hoc +++hobbyrum/FCAY +++hoc-/XZ ++ hockey/EAYX ++ Hodgson/A ++ Hoffmann/A ++@@ -23550,14 +25089,13 @@ homeopat/ATHDY ++ homeopati/EAY ++ homerisk/OQY ++ homiletisk/OY ++-homo/YX +++homo/X ++ homocentrisk/OY ++ homocyklisk/OY ++ homofil/AOHDY ++ homofob/AOTHQDY ++ homofobi/EAYX ++ homofon/AOHDY ++-homogam/OY ++ homogen/OPY ++ homogenisera/NMAPDY ++ homogenitet/ADY ++@@ -23611,6 +25149,7 @@ hopblandad/NQY ++ hopblandning/ADGY ++ hopbragt/QY ++ hopbringa/NMAPDY +++hopbunden/MY ++ hopbuntad/NQY ++ hopbyggd/OY ++ hopbyltad/NQY ++@@ -23666,6 +25205,7 @@ hopl ++ hoplänkad/NQY ++ hoplödd/OY ++ hopmonterad/NQY +++hopning/ADGY ++ hopnitad/NQY ++ hopp/ABDY ++ hoppa/NMABY ++@@ -23678,6 +25218,7 @@ hoppfylld/OY ++ hoppig/OPY ++ hoppingivande/Y ++ hoppjerka/EAGY +++hoppla ++ hopplock/ABY ++ hopplockad/NQY ++ hopplös/OPQY ++@@ -23739,6 +25280,7 @@ hoptotad/NQY ++ hoptovad/NQY ++ hoptrasslad/NQY ++ hoptryckbar/OY +++hoptryckt/OY ++ hopträngd/OY ++ hoptvinnad/NQY ++ hopvecklad/NQY ++@@ -23749,7 +25291,6 @@ hopvispad/NQY ++ hopvuxen/MY ++ hopvälld/OY ++ hopväxt/OY ++-hopyrd/OY ++ hor/AB! ++ hora/NEMADG! ++ horbock/ADGY ++@@ -23789,11 +25330,12 @@ hortikulturell/OY ++ hortonom/AHDY ++ horunge/EAG! ++ hosianna +++hospis/BDY ++ hospital/ABDY ++ hospitalisera/NMAPDY ++ hospitera/MY ++ host/XZ ++-hosta/NEMADGY +++hosta/NEMADY ++ hostattack/AHDY ++ hostia/EAGY ++ hostig/OPQY ++@@ -23816,32 +25358,44 @@ hotfylld/OY ++ Hotmail/AX ++ hotnivå/EAHY ++ hottentott/AHDY ++-house/EAY ++-hov/ABDYX ++-hovar/AJ +++house/AX +++hov/ABDGYX ++ hovbal/AHDY ++-hovdans/HDY +++hovdam/AHDY +++hovdans/HD ++ hovera/MY +++hovfolk/ABDY ++ hovled/AHDY +++hovliv/ABY +++hovman/AFY ++ hovmannamässig/OY ++ hovmarskalk/ADGY +++hovmän/AFY ++ hovmästare/EAJY ++-hovra/NMAPY +++hovnarr/ADGY +++hovpoet/AHDY ++ hovrätt/AHDYv ++ hovrättsdom/ADGY ++ hovrättsråd/ABDY ++ hovsam/KMLY ++ hovsamt/Y ++ hovskägg/ABDY +++hovstat/AHDY ++ hovsångare/EAJY ++ hovsångerska/EAGY +++hovtång/ADY +++hovtänger/AJY ++ HP ++ HPV/r ++ HQ ++ HR/r +++HRT1/r ++ HSAN/r ++ HSB/r +++hsdpa/r +++hsupa/r ++ html +++html5/r ++ http/A ++ hu ++ Huawei/AX ++@@ -23858,7 +25412,7 @@ hudf ++ Hudiksvall/Av ++ hudklinik/AHDY ++ hudkräm/AHDY ++-hudlager/FCAJY +++hudlager/FCAY ++ hudläkare/EAJY ++ hudlös/OQY ++ hudlöshet/ADY ++@@ -23903,9 +25457,6 @@ huggyxa/EAGY ++ Hugh/A ++ Hugin/A ++ hugnad/ADY ++-hugnelig/OY ++-hugnesam/MY ++-hugnesamt/Y ++ Hugo/A ++ hugskott/ABDY ++ hugsvala/NEMAPDY ++@@ -23952,12 +25503,13 @@ humanvetenskap/AHDY ++ humbug/ADGY ++ humbugartad/NQY ++ humbugmässig/OY +++humida/AJY ++ humifiera/MY ++ humifiering/ADY ++ humla/EAPGY ++ humle/ECAYX ++ humlebeska/EAY ++-humlebo/FEABDY +++humlebo/FEABY ++ humlestång/ADY ++ humlestänger/AJY ++ humlesuga/EAY ++@@ -23966,6 +25518,7 @@ hummer/EAIYX ++ hummerklo/EAIY ++ hummersås/DY ++ hummertina/EAGY +++hummus/DY ++ humor/AEYX ++ humoresk/AHDY ++ humorfri/OY ++@@ -23975,19 +25528,19 @@ humoristiske/Y ++ humorlös/OY ++ humushaltig/OY ++ humör/ABDYX ++-humörlig/OY ++ humörmänniska/EAGY ++ humörsvängning/ADGY ++-humös/OY ++ hund/ADGYX ++ hundaktig/OY ++ hundan/Y ++ hundbajs/BY +++hundben/ABDY ++ hundbett/ABDY ++ hundbiten/MY ++ hundgodis/BY ++ hundgöra/CAY ++ hundhuvud/ABY +++hundhår/ABDY ++ hundkapplöpning/ADGY ++ hundkex/BDY ++ hundkoja/EAGY ++@@ -23998,8 +25551,7 @@ hundloka/EAGY ++ hundlort/ADGY ++ hundmat/ADY ++ hundnos/DGY ++-hundra ++-hundra- +++hundra/b ++ hundraarton ++ hundracka/EAGY ++ hundrade ++@@ -24142,15 +25694,15 @@ hundsim/CAY ++ hundskattemärke/FECAY ++ hundvalp/ADGY ++ hundår/ABDY +++hundägare/EAJY ++ hundöra/CAY ++ hundöron/ADY ++ hunger/EAYX ++ hungersnöd/ADY ++ hungra/MDY ++ hungrig/OPQY ++-hunn/AHDY ++-hunnen/MY ++-hunnit/AY +++hunner/AJY +++hunnit/A ++ hunsa/NMAPY ++ Hunspell/AX ++ hur ++@@ -24175,6 +25727,7 @@ husaga/EAY ++ husannons/HDY ++ husar/AHDY ++ husarrest/ADY +++husband/ABDY ++ husbehov/ABDY ++ husbil/ADGYv ++ husbilsförsäkring/ADGY ++@@ -24183,6 +25736,7 @@ husbocksf ++ husbonde/EAY ++ husbondfolk/ABDY ++ Husby/AX +++husbygge/FECAY ++ husbåt/ADGY ++ husbönder/AJY ++ husdjur/ABDYv ++@@ -24192,6 +25746,7 @@ husesyn/AHDY ++ husfader/EAY ++ husfaderlig/OY ++ husfar/AY +++husfolk/ABDY ++ husfrid/ADY ++ husfru/AEGY ++ husfäder/AJY ++@@ -24206,22 +25761,29 @@ hush ++ hushållsam/Y ++ hushållsamt/Y ++ hushållsel/ADY +++hushållsgas/HDY ++ hushållsnära/Y ++ hushållsost/ADGY ++ hushållsvåg/GY ++ huskatt/AHDY ++ husknut/ADGY +++huskors/BDY ++ huskur/AHDY ++ Huskvarna/AX +++husköp/ABDY ++ huslig/OPQY +++huslån/ABDY ++ husläkar/XZ ++ husläkare/EAJY ++ husmanskost/ADY ++ husmoder/EAYv ++ husmoderlig/OY ++ husmor/AYv +++husmus/DY ++ husmödrar/AJY +++husmöss/DY ++ huspiga/EAGY +++huspris/BHY ++ husrannsakan/AY ++ husrannsakning/ADGYv ++ husrannsakningsorder/EAJY ++@@ -24234,11 +25796,14 @@ hustak/ABDY ++ hustomte/EAGY ++ hustru/AEIYX ++ hustrulig/OY +++hustyp/AHDY ++ husvagn/ADGYv ++-husvill/OY ++-husvin/ABHY +++husvill/OQY +++husvin/ABH ++ husvägg/ADGY ++-huta/MJ +++husvärd/ADGY +++husägare/EAJY +++huta/NMAJD ++ hutlös/OY ++ hutlöshet/ADYv ++ hutt/ADGY ++@@ -24248,7 +25813,7 @@ hutu/AEHY ++ huv/ADG ++ huva/EAGY ++ huvformig/OY ++-huvlås/BDY +++huvlås/BD ++ huvtröja/EAGY ++ huvud/ABDYX ++ huvudalternativ/ABDY ++@@ -24278,6 +25843,7 @@ huvudl ++ huvudlöss/DY ++ huvudman/AFY ++ huvudmannaskap/ABY +++huvudmål/ABDY ++ huvudmän/AFY ++ huvudord/ABDY ++ huvudorsak/AHDY ++@@ -24285,11 +25851,13 @@ huvudort/AHDY ++ huvudperson/AHDY ++ huvudregel/EAJY ++ huvudroll/AHDYv +++huvudrätt/AHDY ++ huvudsak/AHDY ++ huvudsaklig/OY ++ huvudsakligen ++ huvudsaklighetsprincip/ADY ++ huvudskalv/ABDY +++huvudspår/ABDY ++ huvudspänning/ADGY ++ huvudstad/ADYv ++ huvudströmbrytar/XZ ++@@ -24300,20 +25868,21 @@ huvudtalsmetod/AHDY ++ huvudtes/HDY ++ huvudton/AHDY ++ huvudverk/ABDY +++huvudväg/ADGY ++ huvudvärk/ADYv ++ huvudvärkstablett/AHDY ++-huvudö/EAGY +++huvudö/EAG ++ hux ++-hy/E +++HV71 +++hy/EA ++ hyacint/AHDYX ++ hybrid/AHDYX ++ hybridisera/NMAPDY ++ hybridisering/ADGY ++ hybris/DY ++ hyckel/CAY ++-hyckla/NAPDY ++-hycklar/JEYX ++-hycklare/EAY +++hyckla/NMAPDY +++hycklare/EAJYz ++ hyckleri/CABHY ++ hydda/EAGY ++ hydra/ECAGY ++@@ -24324,7 +25893,6 @@ hydraulik/ADYX ++ hydraulikolja/EAGY ++ hydraulisk/OY ++ hydrera/NMAPDY ++-hydrid/AHDY ++ hydrodynamik/ADY ++ hydrodynamisk/OY ++ hydroelektrisk/OY ++@@ -24381,6 +25949,7 @@ hyllning/ADGYv ++ hyllningsdans/HDY ++ hyllningskör/AHDY ++ hyllningstal/ABDY +++hyllplan/ABDY ++ hylsa/EAGY ++ hylsformig/OY ++ hylskontakt/AHDY ++@@ -24447,7 +26016,7 @@ hyr/Ru ++ hyra/EAGY ++ hyrande ++ hyrbil/ADGYv ++-hyrbåt/ADGY +++hyrbåt/ADG ++ hyrcykel/EAIY ++ hyrd/OQ ++ hyresavi/EAHY ++@@ -24471,7 +26040,7 @@ hyrfilm/AHDY ++ hyrläkare/EAJY ++ hyrs/N ++ hyrtjänst/AHDY ++-hysa/KLAJDR +++hysa/KLADR ++ hysch ++ hyscha/MDY ++ hysch-hysch/ABY ++@@ -24485,7 +26054,6 @@ hytt/DRY ++ hytta/KELHDGY ++ hyttmästare/EAJY ++ Hyundai/AX ++-hyva/NMAPD ++ hyvel/EAIYX ++ hyvelspån/ABDY ++ hyveltag/ABDY ++@@ -24494,7 +26062,6 @@ hyvla/NAPDY ++ hyvlare/EAY ++ hyvleri/ABHYX ++ Hz ++-hå ++ Håbo/AX ++ Håfström/AX ++ håg/AD ++@@ -24507,7 +26074,7 @@ h ++ håhåjaja ++ Håkan/A ++ Håkansson/A ++-håken/AY +++håken/Y ++ hål/ABDYX ++ håla/EAGY ++ hålade/AO ++@@ -24518,6 +26085,8 @@ h ++ hålfots/XZ ++ hålig/OPY ++ hålighet/AHDY +++håljärn/ABDY +++hålkaka/EAGY ++ hålkindad/NQY ++ hålkort/ABDY ++ hålkrus/BDY ++@@ -24542,7 +26111,10 @@ h ++ hållpunkt/AHDY ++ hållriktig/OY ++ hålltid/AHDY +++hålrum/FCAY +++-håls/XZU ++ hålslagen/MY +++hålslev/ADGY ++ hålslå/NMAY ++ hålsöm/FAIY ++ hålven/AHDY ++@@ -24559,8 +26131,11 @@ h ++ hånskratta/MY ++ hår/ABDYX ++ håra/MD +++hårband/ABDY ++ hårbeklädd/OY +++hårboll/ADGY ++ hårborste/EAGY +++hårburr/ABDY ++ hård/OPQYX ++ hårdarbetad/NQY ++ hårdbarkad/NQY ++@@ -24611,7 +26186,10 @@ h ++ hårdsatsa/MDY ++ hårdskalig/OY ++ hårdsminkad/NQY ++-hårdsteka/KQLAJY +++hårdsteka/LA +++hårdsteker +++hårdstekt/OY +++hårdstekte ++ hårdstoppad/NQY ++ hårdtrafikerad/NQY ++ hårdtrampad/NQY ++@@ -24625,26 +26203,31 @@ h ++ hårfrisörska/EAGY ++ hårfärg/ADY ++ hårfön/ADGY +++hårgelé/ABEHY ++ hårig/OPQY ++ hårklyveri/ABHY ++ hårknut/ADGY +++hårkors/BDY +++hårlock/ADGY +++hårlugg/ADGY ++ hårlös/OY ++ hårman/ADGY ++ hårnål/ADGYv +++hårnät/ABDY ++ hårrem/FAIY ++-hårrufs/BY ++-hårrör/ABDYv ++-hårrörsbildning/ADGY ++-hårrörskärl/ADY +++hårrufs/B ++ Hårsfjärden/A ++ Hårsfjärds/XZ ++ hårsmån/ADY ++ hårstrå/ECABY ++ hårstråna/AY ++ hårsvall/ABDY +++hårsäck/ADGY ++ hårtest/ADGY ++ hårtofs/DGY ++ hårtork/ADGY +++hårvård/ADY +++hårväxt/ADY ++ håv/AD ++ håva/NAPDI ++ håvfiske/FECAY ++@@ -24661,6 +26244,7 @@ h ++ häckning/ADGYv ++ häckningsplats/HDY ++ häckningstid/AHDY +++häcksax/DGY ++ häda/NMAPD ++ hädan ++ hädanefter ++@@ -24674,7 +26258,7 @@ h ++ häfta/NMAPY ++ häftapparat/AHDY ++ häfte/FECAY ++-häftfri/OY +++häftfri/O ++ häftig/OPQY ++ häftighet/ADYv ++ häftklammer/EAIY ++@@ -24721,8 +26305,9 @@ H ++ hälskada/EAGY ++ hälsning/ADGYvf ++ hälsningsord/ABY +++hälsningstal/ABDY ++ hälso/XZU ++-hälsohot/ABDY +++hälsohot/ABD ++ hälsokost/XZ ++ hälsokostaffär/AHDY ++ hälsoråd/ABDY ++@@ -24772,16 +26357,15 @@ h ++ hängbro/EAGY ++ hängbröst/ABDY ++ hängbuk/ADGY ++-hänge/FNEMCAY +++hänge/FEMCAY ++ hängfärdig/OY ++ hängig/OPQY ++-hängiv/AQY ++-hängiva/ADY +++hängiva/JDY ++ hängivelse/EAY ++ hängiven/KMLY ++ hängivenhet/ADYv ++ hängiver/Y ++-hängivit/AY +++hängivit/Y ++ hänglista/EAGY ++ hänglås/BDY ++ hängmatta/EAGY ++@@ -24793,7 +26377,6 @@ h ++ hängsäkringshållar/XZ ++ hängsäkringshållare/EAJY ++ hängtorkad/NQY ++-hängåve/Y ++ hänrycka/KQLAJDRY ++ hänryckning/ADY ++ hänseende/FECAY ++@@ -24849,6 +26432,7 @@ h ++ härifrån ++ härigenom ++ härinne +++härintill ++ härja/NMAPBY ++ härjare/EAJYz ++ Härjedalen/A ++@@ -24874,6 +26458,7 @@ h ++ härnad/AHDY ++ härnadståg/ABDY ++ härnedan +++härnere ++ härnäst ++ Härnösand/Av ++ härnösandsbo/EAIY ++@@ -24925,15 +26510,21 @@ H ++ hässleholmsbo/EAIY ++ häst/ADGYX ++ hästanspänd/OY ++--hästare/EAJu +++-hästare/EAJY +++-hästars/XZU +++hästbok/ADY +++hästböcker/AJY ++ hästfibbla/EAGY ++ hästförspänd/OY +++hästgård/ADGY ++ hästhov/ADGY ++ hästhovsört/AHDY ++ hästigel/EAIY ++ hästkraft/AHDY ++ hästkur/AHDY +++hästköp/ABDY ++ hästman/ADGY +++hästmyra/EAGY ++ hästnos/DGY ++ hästras/HDY ++ hästsko/EAIYX ++@@ -24948,8 +26539,10 @@ h ++ hästuppfödar/XZ ++ hästuppfödare/EAJY ++ Hästveda/AX +++hästväg/Y ++ hästvän/AFY ++ hästvänner/AJY +++hästägare/EAJY ++ hätsk/OPQY ++ hätskhet/AHDYv ++ hätta/EAGY ++@@ -24982,14 +26575,17 @@ h ++ häxsabbat/AHDY ++ hö/AB ++ höbal/ADGY +++höbärgning/ADGY ++ höft/AHDYX ++ höfta/NMAPDY +++höftben/ABDY ++ höftled/AHDYv ++ höftledsoperation/AHDY ++ höftskada/EAGY ++ hög/ADGYX ++ hög- ++ höga +++högadel/EAY ++ högadlig/OY ++ högaffel/EAIY ++ högakta/NMAPDY ++@@ -25008,10 +26604,12 @@ h ++ högbarmad/NQY ++ högblå/OY ++ högboren/KMY +++högborg/ADGY ++ högborgerlig/OY ++ högbröstad/NQY ++ högbulkig/OY ++ högburen/MY +++högdjur/ABDY ++ högdragen/KMY ++ högdramatisk/OY ++ högdräktig/OY ++@@ -25068,24 +26666,23 @@ h ++ högglanspolerad/NQY ++ högglättad/NQY ++ höggradig/OY ++-höggul/OY ++ höghalsad/NQY ++ höghastighets/XZ ++ höghelig/OY ++ höghet/AHDYv ++ höghumifierad/NQY ++ höghus/BDYX ++-höghuvad/NQY +++höghuvad/NQ ++ höghöjds/XZ ++ högindustrialiserad/NQY ++ höginkomsttagar/XZ ++ höginkomsttagare/EAJY ++ högkalorisk/OY +++högkant/Y ++ högkarmad/NQY ++ högklackad/NQY ++ högklassig/OPQY ++ högkolhaltig/OY ++-högkolig/OY ++ högkoncentrerad/NQY ++ högkonjunktur/AHDYX ++ högkonjunkturår/ABDY ++@@ -25097,17 +26694,16 @@ h ++ högkvarter/ABDY ++ högkyrklig/OY ++ högkänslig/OY ++-högla/Y ++ höglade/AY ++ höglagd/OY ++ höglagt/AY +++högland/AJBY ++ höglegerad/NQY ++ högljudd/OPQY ++ höglyftsanordning/ADGY ++ höglägga/AJDRY ++ höglägger/Y ++ högläggs/Y ++-högländ/OY ++ högländare/EAJY ++ höglänt/OY ++ höglärd/OQY ++@@ -25165,12 +26761,14 @@ h ++ högstadielärare/EAJY ++ högstadium/AJY ++ högstammig/OY +++högstanivå/EAHY ++ högstatus/XZ ++ högstbjudande/Y ++ högstående/Y ++ högställd/OY ++ högstämd/OY ++ högsvavlig/OY +++högsäsong/AHDY ++ högsäte/FECAY ++ Högsön/A ++ högt ++@@ -25209,9 +26807,11 @@ h ++ högutbildad/NQY ++ högvakt/ADYv ++ högvaktsavlösning/ADGY +++högvarv/Y ++ högvarvig/OY ++ högvatten/CAY ++ högviktig/OY +++högvilt/ABY ++ högvis/OY ++ högviskös/OY ++ högvoluminös/OY ++@@ -25223,8 +26823,8 @@ h ++ högvördighet/AHDYv ++ högättad/NQY ++ högönsklig/OY ++-höj- ++-höja/KLAJR +++höj/bR +++höja/KL ++ höjande/Y ++ höjar/UZ ++ höjare/EAJYWZ ++@@ -25243,7 +26843,7 @@ h ++ höjning/ADGYvf ++ hök/ADG ++ hökaktig/OPY ++-hökartad/NQY +++hökartad/NQ ++ hökeri/ABHY ++ Hökmark/A ++ höknatt/ADY ++@@ -25252,7 +26852,6 @@ h ++ hölass/BDY ++ hölja/KLAJORY ++ hölje/FECY ++-höljelös/OY ++ Höllviken/A ++ hölster/FCAJY ++ höna/EAGY ++@@ -25275,12 +26874,13 @@ h ++ hörbarhet/ADYv ++ hörbarhetsfaktor/AEHY ++ Hörby/AX +++hördu ++ hörfel/ABDY ++ hörhåll/Y ++ hörlur/ADGYv ++ hörn/ABDY ++ hörna/EAGY ++-hörnben/ABDY +++hörnben/ABD ++ hörnflagga/EAGY ++ hörnhus/BDY ++ hörnlägenhet/AHDY ++@@ -25303,6 +26903,7 @@ h ++ hörselskydd/ABDY ++ hörselsvag/OY ++ hörslinga/EAGY +++hörspel/ABDY ++ hörsägen/FAY ++ hörsägner/AJY ++ hörvärd/OY ++@@ -25315,34 +26916,32 @@ h ++ höstdag/ADGY ++ höstdagjämning/ADGY ++ höstkall/OY ++-höstkant/ADY +++höstkanten/Y ++ höstlig/OY ++ höstlik/OY ++ höstlov/ABDY +++höstlöv/ABDY ++ höstmörk/OY ++ höstraps/DY +++höstsol/ADY ++ höststräck/ABDY ++ höstså/NKMLAY ++-höstvin/ABHY +++höstvin/ABH ++ hösäck/ADGY ++-höta ++ hötapp/ADGY ++-höter ++ hötjuga/EAGY ++ Hötorget/A ++ hötorgs/XZ ++ hötork/ADGY ++-hötta/KJDY +++hötta/KLAJDY ++ hövan/Y ++-hövas +++-hövdad/NQY ++ hövding/ADGYf ++-höves ++ hövisk/OQY ++ hövitsman/AFY ++ hövitsmän/AFY ++ hövlig/OPQY ++ hövlighet/AHDYv ++-hövs/N ++ hövålm/ADGY ++ hövändar/XZ ++ hövändare/EAJY ++@@ -25369,20 +26968,23 @@ ianspr ++ IB/r ++ iberisk/OY ++ ibidem +++ibis/DGY ++ ibisfågel/EAIY ++ ibland +++iblanda/NMAPDY ++ IBM ++ Ibrahim/A ++ Ibrahimovic/A ++ Ica/AX ++ ICA/r ++ icing/ADGY ++-icke/Xr +++icke/rX ++ ickelevande/Y ++ ickelinjär/OY ++ ickemuslim/AHDY ++ ickevålds/XZ ++ icke-våldslig/O +++ickevåldslig/OY ++ ICT/r ++ id/ARG ++ -ID/YWZ ++@@ -25404,6 +27006,8 @@ idealistiske/Y ++ idealitet/ADY ++ idealkvinna/EAGY ++ ideallösning/ADGY +++idéarv/ABDY +++idébank/AHDY ++ idéburen/MY ++ ideell/OQY ++ idéfattig/OY ++@@ -25478,6 +27082,8 @@ idyll/ATHDY ++ idylliker/EAJY ++ idyllisera/NMAPDY ++ IE +++IE8/r +++IE9/r ++ If ++ IF ++ ifall ++@@ -25504,12 +27110,13 @@ ifyllning/ADY ++ iföra/KLAJODR ++ igel/EAIY ++ igelkott/ADGYv ++-igelkottsbo/FEABDY +++igelkottsbo/FEABY ++ igen ++ igenbommad/NQY ++ igenfrusen/MY ++ igenfylld/OY ++ igengrodd/OY +++igenisad/NQY ++ igenkastad/NQY ++ igenkittad/NQY ++ igenklistrad/NQY ++@@ -25541,11 +27148,11 @@ igensotad/NQY ++ igenspikad/NQY ++ igenstoppad/NQY ++ igenstängd/OY +++igentäppt/OY ++ igenvallad/NQY ++ igenvuxen/MY ++ igenväxande/Y ++ igenväxt/OY ++-igenyrd/OY ++ iglo/EAI ++ igloo/EAI ++ ignorans/DY ++@@ -25616,6 +27223,7 @@ ikraft ++ ikraftträdande/FECAYX ++ ikraftträdd/OY ++ ikring +++ikringliggande/Y ++ iktyolog/ATHDY ++ iktyologi/EAY ++ ikull ++@@ -25709,7 +27317,6 @@ imagem ++ imaginär/OQY ++ imam/AHDX ++ imamutbildning/ADGY ++-imatad/NQY ++ imbecill/OQY ++ imbecillitet/ADY ++ imbibition/ADYv ++@@ -25719,16 +27326,12 @@ imitation/AHDYv ++ imitativ/OY ++ imitatör/AHDY ++ imitera/NMAPDY ++-imkanal/AHDY ++-imkåpa/EAGY ++-imma/EAGY ++-immade ++-immande +++imkanal/AHD +++imkåpa/EAG +++imma/EMAD ++ immanens/DY ++ immanent/OQY ++ Immanuel/A ++-immar ++-immat ++ immaterialisera/MY ++ immaterialrätt/ADYv ++ immaterialrättslig/OY ++@@ -25813,8 +27416,7 @@ impulsiv/OPQY ++ impulsivitet/ADY ++ impulsköp/ABDY ++ imrör/ABDY ++-in ++-in- +++in/b ++ inackordera/NMAPDY ++ inackordering/ADGYv ++ inadekvat/OY ++@@ -25866,7 +27468,6 @@ inbodd/OY ++ inbogserad/NQY ++ inboka/MPY ++ inbokning/ADGYv ++-inbommad/NQY ++ inborrad/NQY ++ inbringa/NMAPDY ++ inbromsning/ADGYv ++@@ -25874,13 +27475,14 @@ inbrott/ABDYvf ++ inbruten/MY ++ inbryta/KLAJRY ++ inbrytning/ADGYv ++-inbrädad/NQY +++inbrädad/NQ ++ inbränd/OY ++ inbucklad/NQY ++ inbuktad/NQY ++ inbuktning/ADGY ++ inbunden/KMY ++ inburad/NQY +++inburen/MY ++ inbyggare/EAJY ++ inbyggd/OY ++ inbyggnad/ADYv ++@@ -25888,7 +27490,7 @@ inbyltad/NQY ++ inbyte/FECAYv ++ inbytesbil/ADGY ++ inbytespris/BHY ++-inbytt/OQY +++inbytt/OQ ++ inbädda/NMAPDY ++ inbäddning/ADGY ++ inbärga/NMAPY ++@@ -25907,7 +27509,7 @@ incident/AHDYX ++ incinerera/MY ++ incitament/ABDYv ++ indansande/Y ++-indata/EAY +++indata/AY ++ indefinita/JY ++ indeklinabel/MY ++ indela/NQMAPDY ++@@ -25932,6 +27534,7 @@ indicera/NMAPDY ++ indicie/XZ ++ indicium/AJY ++ Indien/AX +++indiepop/ADY ++ indier/EAJY ++ indifferens/DY ++ indifferent/OQY ++@@ -25988,7 +27591,6 @@ Indonesien/AX ++ indonesier/EAJY ++ indonesiska/EAGY ++ indonesiske/Y ++-indoppad/NQY ++ indra/Y ++ indrag/ABDRY ++ indraga/DY ++@@ -26051,7 +27653,7 @@ infarkt/AHDYX ++ infarktpatient/AHDY ++ infart/AHDYvf ++ infartsled/AHDY ++-infasad/NQY +++infasad/NQ ++ infasning/ADGYvf ++ infatta/NMAPDY ++ infattning/ADGY ++@@ -26160,7 +27762,7 @@ inf ++ införskaffning/ADGYv ++ införstådd/OQY ++ införsäkring/ADYv ++-inföst/OY +++inföst/O ++ inga/R ++ Inga/A ++ Ingalill/A ++@@ -26221,7 +27823,7 @@ ing ++ ingång/ADGYvf ++ ingången/M ++ ingängad/NQY ++-inhalad/NQY +++inhalad/NQ ++ inhalation/AHDYv ++ inhalator/AEHY ++ inhalera/NMAPDY ++@@ -26302,13 +27904,15 @@ inkasso/CAYX ++ inkassoföretag/ABDY ++ inkassosed/AHDY ++ inkast/ABDY ++-inkasta/MPY +++inkastad/NQY ++ inkilad/NQY ++ inkl ++ inklampande/Y ++ inklarera/NMAPDY ++ inklination/AHDYv ++ inklinera/MY +++inklipp/ABDY +++inklippt/OY ++ inklistrad/NQY ++ inklivande/Y ++ inkludera/NMAPBY ++@@ -26453,7 +28057,6 @@ inl ++ inlärning/ADYvf ++ inläsning/ADGYvf ++ inläst/OY ++-inlödd/OY ++ inlöpa/KDY ++ inlös/DRY ++ inlösa/KQLDY ++@@ -26463,13 +28066,11 @@ inl ++ inlöslig/OY ++ inlösningspliktig/OY ++ inlösningsställe/FECAY ++-inmalad/NQY ++ inmarsch/AHDY ++ inmata/NMAPDY ++ inmatning/ADGYvf ++ inmejslad/NQY ++ inmonterad/NQY ++-inmotad/NQY ++ inmundiga/NMAPBY ++ inmurad/NQY ++ inmuta/NMAPDY ++@@ -26735,6 +28336,7 @@ inseminera/NMAPDY ++ inseminering/ADGYv ++ insemineringsbarn/ABDY ++ inseparabel/MY +++insexnyckel/EAIY ++ insida/EAGY ++ insider/EAYX ++ insideraffär/AHDY ++@@ -26760,7 +28362,7 @@ insjunken/MY ++ insjö/EAGYX ++ insjölax/DGY ++ insjövik/ADGY ++-inskavd/OY +++inskannad/NQY ++ inskeppa/NMAPDY ++ inskickad/NQY ++ inskjuta/KLAJDRY ++@@ -26821,6 +28423,7 @@ insortera/NMAPY ++ insortering/ADYv ++ insparad/NQY ++ inspark/ADGY +++insparkad/NQY ++ inspatserande/Y ++ inspektera/NMAPDY ++ inspektion/AHDYvf ++@@ -26843,6 +28446,7 @@ insprutar/XZ ++ insprutare/EAJY ++ insprutning/ADGYv ++ insprängd/OY +++insprängning/ADGY ++ inspänd/OY ++ inspärra/NMAPDY ++ inspärrning/ADYv ++@@ -27039,7 +28643,6 @@ interferera/NMADY ++ interfoliera/NMAPDY ++ intergalaktisk/OY ++ interglacial/OY ++-interim/OY ++ interimistisk/OQY ++ interims/XZ ++ interimsbevis/BDY ++@@ -27073,6 +28676,7 @@ internera/NMAPDY ++ internering/ADGYv ++ interneringsläger/FCAY ++ internet/XZ +++Internet/AY ++ internetleverantör/AHDY ++ internettrafik/ADY ++ internist/AHDY ++@@ -27131,7 +28735,7 @@ intj ++ intjänandeår/ABDY ++ intjäning/ADYv ++ intjäningsförmåga/EAGY ++-intjärad/NQY +++intjärad/NQ ++ intog/A ++ intolerabel/MY ++ intolerans/DY ++@@ -27140,7 +28744,7 @@ intolka/NMAPDY ++ intonation/AHDYv ++ intonera/NMAPDY ++ intonering/ADGYv ++-intorka/NMAPY +++intorkad/NQY ++ intorkning/ADY ++ intoxikera/MY ++ intraatomisk/OY ++@@ -27241,8 +28845,8 @@ invariant/AOHDY ++ invasion/AHDYv ++ invasionsförsök/ABDY ++ invasionshot/ABDY ++-invasiv/OY ++-invaxad/NQY +++invasiv/O +++invaxad/NQ ++ inveckla/NMAPDY ++ invektiv/ABDY ++ inventarie/XZ ++@@ -27250,12 +28854,14 @@ inventarief ++ inventarium/AJY ++ inventera/NMAPDY ++ inventerare/EAJY ++-inventering/ADGYv +++inventering/ADGYvf ++ inventiös/OY ++ inverka/EMDY ++ inverkning/ADGYv ++-invers/OHDY +++invers/HDY +++inversa ++ inversion/AHDY +++inverst ++ invertebrat/AHDY ++ invertera/NMAPDY ++ inverterare/EAJYz ++@@ -27325,7 +28931,7 @@ iordninggjord/OY ++ iordninglagd/OY ++ iordningställa/KLAJOBRY ++ iordningställande/FEY ++-iOS-/XZ +++iOS/r ++ iOS-app/DG ++ Iowa/AX ++ ip/r ++@@ -27341,9 +28947,12 @@ iplockad/NQY ++ iPod/Ar ++ Ipod/r ++ Ipred/AXr ++-Ipredlag/ADGY ++ ipsec/r ++ IPU/r +++ipv4/r +++IPv4/r +++ipv6/r +++IPv6/r ++ IQ/r ++ IRA/r ++ Irak/AX ++@@ -27400,8 +29009,7 @@ irrl ++ irrlärig/OQY ++ irrväg/ADGY ++ iråkad/NQY ++-is/D ++-isa/NAPI +++is/DG ++ Isaac/A ++ Isaak/A ++ Isabel/A ++@@ -27415,7 +29023,7 @@ isagogisk/OY ++ Isak/A ++ Isaksson/A ++ isande/Y ++-isavgift/AHDY +++isavgift/AHD ++ isavsmältning/ADY ++ isbalett/AHDY ++ isbana/EAGY ++@@ -27436,8 +29044,8 @@ isbl ++ isblåsa/EAGY ++ isbn/r ++ ISBN/r ++-isboll/ADGY ++-isbrist/AHDY +++isboll/ADG +++isbrist/AHD ++ isbrytande/Y ++ isbrytar/XZ ++ isbrytare/EAJY ++@@ -27457,7 +29065,7 @@ isdans/DYX ++ isdansare/EAJY ++ isdubb/ADGY ++ isdämd/OY ++-Isdös/DGY +++isdös/DGY ++ isfiske/CAY ++ isflak/ABDY ++ isfläck/ADGY ++@@ -27467,7 +29075,7 @@ isf ++ isförhållande/FECAY ++ isgata/EAGY ++ isglass/DGY ++-isglatt/OY +++isglatt/O ++ isgrå/OY ++ ishacka/EAGY ++ ishalka/EAY ++@@ -27487,7 +29095,7 @@ iskaffe/CAY ++ iskall/OQY ++ iskant/AHDY ++ iskarl/ADGY ++-isklassa/NMAPY +++isklassad/NQY ++ isklassning/ADGY ++ isklump/ADGY ++ iskonvalj/AHDY ++@@ -27531,7 +29139,7 @@ ism/AHD ++ ismaskin/AHDY ++ ismassa/EAGY ++ ISO/r ++-isobar/AOTHDY +++isobar/ATHDY ++ isobarometrisk/OY ++ isobatisk/OY ++ isocyanat/AHDYX ++@@ -27541,7 +29149,6 @@ isoelektronisk/OY ++ isoenergetisk/OY ++ isogon/AHDY ++ isokinetisk/OY ++-isokor/OY ++ isokromatisk/OY ++ isokronism/ADY ++ isolat/ABDY ++@@ -27559,7 +29166,7 @@ isoleringsband/ABDY ++ isoleringscell/AHDY ++ isoleringsstraff/ABDY ++ isolerkapslad/NQY ++-isolycka/EAGY +++isolycka/EAG ++ isomer/AHDY ++ isomeri/EAY ++ isomerisera/MPY ++@@ -27572,7 +29179,6 @@ isoterm/TAHDY ++ isotonisk/OY ++ isotop/ATHDYX ++ isotopsammansättning/ADGY ++-isotrop/OY ++ ispik/ADGY ++ ispress/DY ++ isprinsessa/EAGY ++@@ -27612,7 +29218,7 @@ ister/CA ++ isterband/ABDYv ++ isterbuk/ADGY ++ isterhaka/EAGY ++-istickad/NQY +++istickad/NQ ++ istid/AHDv ++ istjocklek/ADGY ++ istoppad/NQY ++@@ -27631,11 +29237,12 @@ ist ++ isutbredning/ADGY ++ Isuzu/A ++ isvak/ADGY ++-isvall/ADGY +++isvall/ADG ++ isvatten/CAY +++isvidd/AHD ++ isvind/ADGY ++ isvinter/EAIY ++-isväg/ADGY +++isväg/ADG ++ isydd/OY ++ isyxa/EAGY ++ isälv/ADGY ++@@ -27647,6 +29254,7 @@ is ++ isärtagen/MY ++ isärtagning/ADGY ++ isättning/ADGY +++isöken/FAIY ++ it-/X ++ Italien/AX ++ italienar/XZ ++@@ -27658,12 +29266,11 @@ italiensktalande/Y ++ italienskättad/NQY ++ italiker/EAJY ++ italisk/OY ++-itappad/NQY ++ iteration/AHDYv ++ iterativ/OY ++ iterera/NMAPDY ++ iterering/ADGYv ++--i-topp-lista/EAG +++-i-topp-lista/EAGY ++ itts ++ itu ++ iTunes/rX ++@@ -27681,7 +29288,6 @@ Ivan/A ++ Ivar/A ++ iver/EAY ++ IVF/r ++-ivispad/NQY ++ ivorian/AHDY ++ ivoriansk/OQY ++ ivorianska/EAGY ++@@ -27698,7 +29304,7 @@ iv ++ IX ++ iögonenfallande/Y ++ iögonfallande/Y ++-j/BQr +++j/Br ++ ja/r ++ jabb/ADG ++ jabba/NMAD ++@@ -27714,6 +29320,7 @@ Jackson/A ++ jackärm/ADGY ++ Jacob/A ++ Jacobson/A +++jacuzzi/EAY ++ jade/EAY ++ jadegrön/OY ++ jadå ++@@ -27733,6 +29340,8 @@ jagsvaghet/ADY ++ jaguar/AHDY ++ jaha ++ jaja +++jajamän +++jajamänsan ++ jak/AD ++ jaka/NAPI ++ jakande/Y ++@@ -27755,10 +29364,10 @@ jaktbeslut/ABDY ++ jaktbestämmelser/AJY ++ jaktbeteende/FECAY ++ jaktbevakare/EAJY ++-jaktbild/AHDY +++jaktbild/AHD ++ jaktbrott/ABDYv ++ jaktbyte/FECAY ++-jaktdag/ADGY +++jaktdag/ADG ++ jaktdebatt/AHDY ++ jaktduglig/OY ++ jaktetik/ADY ++@@ -27769,7 +29378,7 @@ jaktfartyg/ABDY ++ jaktflyg/ABY ++ jaktflygare/EAJY ++ jaktflygplan/ABDY ++-jaktform/AHDY +++jaktform/AHD ++ jaktfråga/EAGY ++ jaktförbud/ABDY ++ jaktförordning/ADGY ++@@ -27782,6 +29391,7 @@ jakthistoria/EAHY ++ jakthistorien/AY ++ jakthorn/ABDY ++ jakthund/ADGYv +++jakthydda/EAGY ++ jaktinstinkt/AHDY ++ jaktintresse/FECAY ++ jaktkamrat/AHDY ++@@ -27817,8 +29427,8 @@ jaktresa/EAGY ++ jaktridning/ADY ++ jaktrobot/ADGY ++ jakträtt/ADYv ++-jaktsame/EAIY ++-jaktscen/AHDY +++jaktsame/EAI +++jaktscen/AHD ++ jaktskytte/CAYX ++ jaktslott/ABDY ++ jaktstart/AHDYv ++@@ -27830,7 +29440,7 @@ jakttidning/ADGY ++ jakttilldelning/ADGY ++ jakttrofé/AEHY ++ jakttryck/ABDY ++-jakttur/AHDY +++jakttur/AHD ++ jaktturism/ADY ++ jaktuppdrag/ABDY ++ jaktutövning/ADGY ++@@ -27840,8 +29450,8 @@ jaktv ++ jaktväska/EAGY ++ jalapeño/EAY ++ jalusi/EAHY ++-jam/AB ++-jama/NMA +++jam +++jama/NMAD ++ Jamaica/AX ++ jamaican/AHDY ++ jamaicansk/OQY ++@@ -27866,7 +29476,7 @@ Janos ++ jansenism/ADY ++ jansenistisk/OY ++ Jansson/A ++-jantelagen/AY +++jantelag/ADGY ++ januari/AYX ++ januarimorgon/ADIY ++ janusanlete/FECAY ++@@ -27884,13 +29494,13 @@ jargongm ++ jarl/ADGY ++ Jas/r ++ Jasenko/A ++-jasida/EAY +++jasidan/A ++ jasmin/AHDY ++ jaspis/DGY ++ jaså ++ ja-sägare/EAJY ++ jasägare/EAJY ++-java/EAGY +++java/EAY ++ Java/AX ++ javanes/THDY ++ javanesiska/EAGY ++@@ -27950,6 +29560,7 @@ jetdrift/ADY ++ jetdriven/MY ++ jetflyg/ABY ++ jetflygplan/ABDY +++jetlag/ADY ++ jetlaggad/NQY ++ jetmotor/AEHY ++ jetong/AHDY ++@@ -27970,7 +29581,6 @@ jitterbugg/ADY ++ jiujitsu/AEY ++ JK/r ++ jo/E ++-JO ++ Joachim/A ++ Joacim/A ++ Joakim/A ++@@ -27992,7 +29602,7 @@ jobspost/AHDY ++ jockey/EAHYX ++ jockeymössa/EAGY ++ jod/AD ++-jodatom/AHDY +++jodatom/AHD ++ jodda/NMAPDY ++ joddla/NMAPDY ++ joddlare/EAJY ++@@ -28000,7 +29610,7 @@ jodera/NMAPY ++ jodförgiftning/ADGY ++ jodhalt/AHDY ++ jodhaltig/OY ++-jodisera/MY +++jodisera/M ++ jodsalt/ABHY ++ jodsprit/ADY ++ jodtablett/AHDY ++@@ -28010,6 +29620,7 @@ jogga/NMADY ++ joggare/EAJYz ++ jogging/ADYX ++ joggingtur/AHDY +++joggning/ADY ++ Johan/A ++ Johanna/AR ++ Johanneshov/Av ++@@ -28088,8 +29699,10 @@ jordebok/ADY ++ jordeböcker/AJY ++ jordeliv/ABY ++ jordemoder/EAY +++jordfel/ABDY ++ jordfelsbrytar/XZ ++ jordfelsbrytare/EAJY +++jordfräs/DGY ++ jordfästa/KLAJDY ++ jordfästning/ADGYv ++ jordförbindelse/EAIYX ++@@ -28127,13 +29740,12 @@ jorduppv ++ jordvärmd/OY ++ jordyta/EAY ++ jordärtskocka/EAGY ++-jos/HD ++ Josef/A ++ Josefina/AJ ++ Josefins ++-jota/ECAY ++-joule/EAY +++jota ++ jour/AHDYsf +++jourbutik/AHDY ++ jourhavande/Y ++ journal/AHDYX ++ journalfilm/AHDY ++@@ -28153,9 +29765,10 @@ jovialisk/QY ++ jovialitet/ADY ++ jovisst ++ jox/B ++-joxa/M +++joxa/NMA ++ joxig/OY ++ Joyce/A +++joystick/ADGY ++ ju ++ Juan/A ++ jubel/CAYX ++@@ -28204,6 +29817,7 @@ julbak/ABDY ++ julbock/ADGY ++ julbok/ADY ++ julbord/ABDY +++julbrev/ABDY ++ julbulle/EAGY ++ julböcker/AJY ++ julbön/AHDY ++@@ -28223,8 +29837,10 @@ julf ++ julglädje/EAY ++ julgran/ADGYvf ++ julgris/DGY +++julgröt/ADY ++ julgåva/EAGY ++ julhandel/EAY +++julhelg/AHDY ++ juli/A ++ Julia/EA ++ juliamängd/AHDY ++@@ -28238,19 +29854,32 @@ julklapp/ADGY ++ julklappsrim/FCAY ++ julklappsvin/ABHY ++ julkort/ABDY +++julkorv/ADGY ++ julle/EAGY ++ julledig/OY ++ jullov/ABDYv ++ jullåt/ADGY ++ julmat/ADY ++-julnöt/AJDY +++julmust/ADY +++julnatt/ADY +++julnätter/AJY +++julnöt/AJD +++julotta/EAGY ++ julpynt/ABY +++julros/DY +++julrosor/AJY ++ julrush/AHDY ++ julsed/AHDY +++julskinka/EAGY +++julspel/ABDY ++ julstämning/ADY ++-jultal/ABDY +++julstök/ABY +++julsång/AHDY +++jultal/ABD +++jultid/AHDY ++ jultidning/ADGY ++ jultomte/EAGY +++julvisa/EAGY ++ julöl/ABDY ++ jumbo/EAYX ++ jumbojet/ADGY ++@@ -28304,6 +29933,7 @@ justerare/EAJY ++ justerbar/OY ++ justering/ADGYvf ++ justis/DY +++justitie- ++ justitiedepartement/ABDY ++ justitiekansler/EAY ++ justitiekommissionär/AHDY ++@@ -28386,7 +30016,7 @@ j ++ jämngamle/Y ++ jämngammal/MY ++ jämngod/OY ++-jämngrov/OY +++jämngrov/O ++ jämngrå/OY ++ jämnhet/ADY ++ jämnhöjd/Y ++@@ -28401,7 +30031,7 @@ j ++ jämnstor/OQY ++ jämntjock/OY ++ jämnvarm/OY ++-jämnårig/OQY +++jämnårig/OQRY ++ JämO/r ++ jämra/NMABY ++ jäms ++@@ -28412,6 +30042,7 @@ j ++ jämställa/KLAJOBRY ++ jämställbar/OY ++ jämställdhet/ADYv +++jämställdhetsdebatt/AHDY ++ jämställdhetskommitté/AEHY ++ jämställdhetsminister/EAIY ++ jämställdhetsmärka/KQLAJDY ++@@ -28447,20 +30078,26 @@ j ++ järnek/ADGY ++ järnfattig/OY ++ järnfilspån/ABY ++-järnfri/OY +++järngrepp/ABDY ++ järngrå/OY ++ järnhaltig/OY +++järnhand/AJDY ++ järnhård/OQY ++ järnhäl/ADGY ++ järnklädd/OY +++järnkoll/ADY ++ järnmalm/AHDYv ++ järnmalmsgruva/EAGY ++ järnpiller/FCAJY ++ järnridå/EAY ++ järnrik/OPY ++ järnring/ADGYv ++-järnskodd/OY ++-järnslig/AOHDY +++järnrör/ABDY +++järnsko/KEAIY +++järnslig/OY +++järnsligen/A +++järnsliger/AJ +++järnsligs ++ järnsmidd/OY ++ järntablett/AHDY ++ järnten/ADGY ++@@ -28483,18 +30120,18 @@ J ++ järtecken/FCAY ++ järv/ADG ++ Järva/AX ++-järvabo/EAIY +++järvabo/EAI ++ Järvstrand/A ++ järvunge/EAGY ++ jäsa/KQLAJDR ++ jäsbar/OY ++ jäsig/OY ++-jäskorg/ADGY +++jäskorg/ADG ++ jäsning/ADGYv ++ jäsningsduglig/OY ++ jäst/DX ++ jästfabrik/AHDY ++-jästid/AHDY +++jästid/AHD ++ jästindustri/EAHY ++ jästsvamp/ADGY ++ jätte/EAGYX ++@@ -28600,12 +30237,12 @@ kadett/AHDYX ++ kadettofficer/EAHDY ++ kadettofficerare/JY ++ kadettrandig/OY ++-kadmiera/MY +++kadmiera/M ++ kadmium/ABYX ++ kadmiumhaltig/OY ++ kadrer/AJY ++ kadrilj/AHDY ++-kafé/ABHCYX +++kafé/ABHYX ++ kafeteria/EAGY ++ kafévagn/ADGY ++ kaféägare/EAJY ++@@ -28655,6 +30292,7 @@ kajavgift/AHDY ++ kajennpeppar/AEY ++ kajfritt ++ kajka/MY +++kajkant/AHDY ++ kajman/AHDY ++ kajplats/HDY ++ Kajsa/A ++@@ -28668,15 +30306,16 @@ kakaob ++ kakaosmör/ABY ++ kakbak/ABDY ++ kakburk/ADGY +++kakdeg/ADGY ++ kakel/FCAY ++ kakelborr/ADGY ++-kakelfil/ADGY +++kakelfil/ADG ++ kakelklädd/OY ++ kakelkryss/BDY ++ kakelplatta/EAGY ++ kakelskärar/XZ ++ kakelskärare/EAJY ++-kakelsåg/ADGY +++kakelsåg/ADG ++ kakelsättare/EAJY ++ kakelugn/ADGYv ++ kakelugnsfris/HDY ++@@ -28686,8 +30325,10 @@ kakform/ADGY ++ kaki/EAY ++ kakifärg/ADY ++ kakifärgad/NQY +++kakiskjorta/EAGY ++ kakla/NMAPY ++ kakmix/HDY +++kakmått/ABDY ++ Kaknästornet/A ++ kakofoni/EAHY ++ kakofonisk/OY ++@@ -28708,7 +30349,7 @@ kalaskula/EAGY ++ kalasmat/ADY ++ kalaspingla/EAGY ++ kalasstart/ADY ++-kalasöl/ABDY +++kalasöl/ABD ++ kalavverka/NMAPDY ++ kalavverkning/ADGY ++ kalcedon/AHDY ++@@ -28741,12 +30382,13 @@ kalhugger/Y ++ kalhuggit/AY ++ kalhuggning/ADY ++ kalhuggs/Y ++-kalhuvad/NQY +++kalhuvad/NQ ++ kalhygge/FECAY ++ kalhögg/AY ++ kaliber/EAIY ++ kalibrera/NMAPDY ++ kalibrering/ADGYv +++-kalibrig/OY ++ kalif/AHDY ++ kalifat/ABY ++ kalifattig/OY ++@@ -28766,10 +30408,7 @@ kalk/ADGYX ++ kalka/NAPY ++ kalkalg/AHDY ++ kalkartad/NQY ++-kalkbad/ABDY ++ kalkbehov/ABDY ++-kalkben/ABDY ++-kalkberg/ABDY ++ kalkbergart/AHDY ++ kalkbeständig/OY ++ kalkbetong/ADY ++@@ -28785,7 +30424,6 @@ kalkbr ++ kalkbunden/KMY ++ kalkcement/ADY ++ kalkdamm/ABY ++-kalkdeg/ADGY ++ kalkduk/ADGY ++ kalkera/NMAPD ++ kalkerpapper/FCAJBDY ++@@ -28794,10 +30432,9 @@ kalkfl ++ kalkgruva/EAGY ++ kalkhalt/ADY ++ kalkhaltig/OY ++-kalkhus/BDY ++ kalkhärdig/OY ++ kalkig/OY ++-kalklager/FCAJY +++kalklager/FCAY ++ kalkning/ADGY ++ kalkon/AHDYX ++ kalkonbröst/ABDY ++@@ -28896,7 +30533,7 @@ kallvalsa/NMAPDY ++ kallvalsning/ADGY ++ kallvatten/CAY ++ Kalmar/AX ++-kalmarbo/EAIY +++kalmarbo/EAI ++ kalmaritisk/OY ++ kalmark/AHDY ++ kalmera/MY ++@@ -28917,7 +30554,7 @@ kalsong/AHDYX ++ kalstammig/OY ++ kalufs/HDY ++ kalv/ADYX ++-kalva/MIY +++kalva/MDIY ++ kalvbog/ADGY ++ kalvbräss/DY ++ kalvdans/DY ++@@ -29057,6 +30694,7 @@ kanadensiska/EAGY ++ kanakisk/OY ++ kanal/AHDYX ++ kanalavgift/AHDY +++-kanalig/OY ++ kanalisation/AHDYv ++ kanalisera/NMAPDY ++ kanalisering/ADGY ++@@ -29086,6 +30724,7 @@ kandidatland/AJBY ++ kandidatur/AHDY ++ kandidera/NMADY ++ kandidering/ADY +++kandisocker/CAY ++ kanel/ADYX ++ kanelbulle/EAGY ++ kanelfärgad/NQY ++@@ -29133,7 +30772,7 @@ kanotled/AHDY ++ Kansas/X ++ kanske ++ kansler/EAHY ++-kansli/FEABHDYX +++kansli/ABHYX ++ kanslihus/BDY ++ kansliort/AHDY ++ kansliråd/ABDY ++@@ -29143,7 +30782,6 @@ kanslispr ++ kanslist/AHDYX ++ kanslistil/AHDY ++ kanslisvenska/EAY ++-kanslit/Y ++ kant/ADYX ++ kanta/NMAPHDY ++ kantabel/MY ++@@ -29167,7 +30805,7 @@ kantst ++ kantsåg/ADGY ++ kantsöm/FAIY ++ kantväxt/AHDY ++-kanvas/HD +++kanvas/D ++ kanvasband/ABDY ++ kanvasduk/ADGY ++ kanyl/AHDYX ++@@ -29186,7 +30824,7 @@ kapacitetstak/ABDY ++ kapacitiv/OY ++ kapar/XZ ++ kapare/EAJY ++-kapbänk/ADGY +++kapbänk/ADG ++ kapduva/EAGY ++ kapell/ABDY ++ kapellera/MY ++@@ -29224,8 +30862,8 @@ kaplan/AHDY ++ kapmaskin/AHDY ++ kapning/ADGYv ++ kapottera/MY ++-kapp/ADY ++-kappa/EAGY +++kapp/ADGY +++kappa/EAHGY ++ kappas/N ++ kappficka/EAGY ++ kappfoder/FCAY ++@@ -29267,7 +30905,7 @@ kapucinapa/EAGY ++ kapun/AHDY ++ kapunera/MY ++ kapuschong/AHDYX ++-kaputt/OY +++kaputt/Y ++ kapverdier/EAJY ++ kapverdisk/OQY ++ kapverdiska/EAGY ++@@ -29315,6 +30953,7 @@ karathalt/AHDY ++ karatstämpel/EAIY ++ karavan/AHDYX ++ karavanseraj/AHDY +++karbad/ABDY ++ karbamid/AHDY ++ karbid/ADYX ++ karbin/AHDYX ++@@ -29451,6 +31090,8 @@ karstbildning/ADGY ++ kart/ADGX ++ karta/EAGY ++ kartagisk/OQY +++kartbok/ADY +++kartböcker/AJY ++ kartell/AHDYX ++ kartellbildning/ADGY ++ kartellera/MY ++@@ -29496,8 +31137,8 @@ karva/NMAPDY ++ karvsnitt/ABDYv ++ karvstock/ADGY ++ karyatid/AHDY ++-kas/QDRG ++-kasa/NMD +++kas/QDG +++kasa/MDR ++ kaschera/MPY ++ kaschering/ADY ++ kaschmir/ABDY ++@@ -29509,6 +31150,7 @@ kasernf ++ kasernofficer/EAHDY ++ kasernofficerare/JY ++ kashmir/ABDX +++kashmirget/AJD ++ kashmirull/ADY ++ kasino/FECAYX ++ kask/ADG ++@@ -29555,13 +31197,12 @@ kastanjer ++ kastanjeträd/ABDY ++ kastanjett/AHDY ++ kastare/EAJY ++-kastarm/ADGY +++kastarm/ADG ++ kastby/EAGY ++ kastell/ABDY ++ kastellan/AHDY ++ kastfiske/CAY ++ kastgren/ADGY ++-kastig/OY ++ kastilian/AHDY ++ kastilianare/EAJY ++ kastilianska/EAGY ++@@ -29572,7 +31213,7 @@ kastmaskin/AHDY ++ kastmärke/FECAY ++ kastning/ADGYf ++ kastningsfri/OY ++-kastpil/ADGY +++kastpil/ADG ++ kastpjäs/HDY ++ kastrat/AHDYX ++ kastration/AHDYv ++@@ -29628,6 +31269,7 @@ katalysera/NMAPDY ++ katalysering/ADY ++ katalytisk/OY ++ katamaran/AHDY +++kataplexi/EAHY ++ katapult/AHDY ++ katapultstol/ADGY ++ katarakt/AHDY ++@@ -29742,6 +31384,7 @@ kavla/NPDIY ++ kavling/ADGY ++ kavring/ADGYv ++ kaxa/MD +++kaxe/EAGY ++ kaxig/OPQY ++ kaxighet/AHDY ++ Kazachstan/A ++@@ -29787,9 +31430,9 @@ Kelly/A ++ kelp/AD ++ kelsjuk/OQY ++ Kelso/A ++-kelt/ATHDY +++kelter/AJY +++keltisk/OQY ++ keltiska/EAGY ++-keltiske/Y ++ kemi/EAYX ++ kemigrafi/EADY ++ kemigrafisk/OY ++@@ -29799,6 +31442,7 @@ kemikalieh ++ kemikalieindustri/EAY ++ kemikalisk/OY ++ kemimekanisk/OY +++kemisal/ADGY ++ kemisk/OY ++ kemisk-mekanisk/OY ++ kemisk-teknisk/OY ++@@ -29834,14 +31478,17 @@ Kerstin/A ++ kerub/AHDY ++ kerubansikte/FECAY ++ keso/EAY ++-ketch/ADGY +++ketch/AHDY ++ ketchup/ADYX ++ ketonaldehyd/AHDY ++ ketonharts/BHY ++ kettellös/OY +++kevlar/ADX +++kevlarväst/ADGY ++ kex/BDYX ++ kexask/ADGY ++ keyboard/ABDY +++keyboardist/AHDY ++ keyboardspelare/EAJY ++ keynesiansk/OQY ++ KF/r ++@@ -29898,24 +31545,27 @@ killkompis/DGY ++ killtidning/ADGY ++ kilning/ADY ++ kilo/FECAY ++-kilobit/Y +++kilobit ++ kilobyte/Y ++ kilogram/FCAYX +++kilohertz/Y ++ kilokalori/EAHY ++ kilometer/EAJYX ++ kilometerbred/OY ++ kilometerlång/OY ++--kilometers/XZ +++-kilometers/XZU ++ kilometervis ++ kilopris/BHY ++--kilos/XZ +++-kilos/XZU ++ kiloton/Y ++ kilovara/EAGY ++ kilowatt/ADYX ++ kilowattimme/EAGY +++-kilowatts/XZU ++ kilovikt/AHDY ++ kilovis ++ kilovolt/ADY +++-kilovolts/XZU ++ kilrem/FAIY ++ kilskrift/ADYv ++ kilsöm/FAIY ++@@ -29965,7 +31615,7 @@ kippskodd/OY ++ kir/AD ++ Kirchhoff/A ++ kirgisisk/OY ++-kirgiz/ATHDY +++kirgiz/THDY ++ kirgiziska/EAGY ++ kirgiziske/Y ++ Kirgizistan/AX ++@@ -29982,6 +31632,7 @@ kirurg/ATHDYX ++ kirurgi/EAY ++ kirurgklinik/AHDY ++ kirurgmottagning/ADGY +++kis/B ++ kisa/MD ++ kisel/ECAYX ++ kiselartad/NQY ++@@ -30026,20 +31677,22 @@ kiv/AB ++ kiva/NMAD ++ kivaktig/OY ++ kivi/EAH ++-kiwi/EA +++kiwi/EAH ++ kiwifrukt/AHDY ++ kivifågel/EAIY ++ Kivik/Av ++ Kjell/A ++ Kjellberg/A ++ kjol/ADGYX +++kjolfåll/ADGY ++ kjoltyg/ABHDY +++kjolvidd/AHDY ++ kjortel/EAIY ++ kjortelfåll/ADGY ++ kjusa/EAGY ++ KK-stiftelsen/A ++ kl ++-klabb/AQDGY +++klabb/ABQDGY ++ klabbföre/FECAY ++ klabbig/OY ++ klabbsnö/EAY ++@@ -30213,7 +31866,6 @@ klatscha/NMADIY ++ klatschig/OPQY ++ klatschighet/AHDY ++ klatt/ADGY ++-klattrig/OY ++ klaustrofobi/EAY ++ klaustrofobisk/OY ++ klausul/AHDY ++@@ -30255,7 +31907,7 @@ klia/NMAPD ++ klibb/ABY ++ klibba/NMADY ++ klibbal/ADGY ++-klibbfri/OY +++klibbfri/O ++ klibbhårig/OY ++ klibbig/OPQY ++ klibbighet/ADYv ++@@ -30264,7 +31916,6 @@ klich ++ klichéartad/NQY ++ klichéfylld/OY ++ klichémässig/OY ++-klichera/MY ++ klick/ABDYX ++ klicka/NAPBIY ++ klickbar/OY ++@@ -30296,7 +31947,8 @@ klimatsmart/OPQY ++ klimax/DGY ++ klimp/ADGY ++ klimpig/OY ++-klinga/EMADGY +++klinch/ADY +++klinga/NEMADGY ++ klingon/AHDY ++ klinik/AHDYX ++ klinikchef/AHDY ++@@ -30315,6 +31967,7 @@ klippar/XZU ++ klippare/EAJY ++ klipparti/ABHY ++ klippavsats/HDY +++klippfyr/ADGY ++ klipphang/ABDY ++ klippig/OY ++ klippmassiv/ABDY ++@@ -30326,7 +31979,7 @@ klipskhet/ADY ++ klipulver/CAY ++ klirr/ABY ++ klirra/NMADY ++-klister/FCAYX +++klister/CAYX ++ klistermärke/FECAY ++ klistervalla/EAGY ++ klistra/NMAPY ++@@ -30369,7 +32022,7 @@ klon/AHDY ++ klona/NMAPY ++ kloning/ADYv ++ klor/D ++-kloral/ABDY +++kloral/ADY ++ klorbehandling/ADGY ++ klorbleka/KQLAJDRY ++ klorblekning/ADY ++@@ -30417,12 +32070,15 @@ klottring/ADY ++ klubb/ADYX ++ klubba/NEAPIGYf ++ klubbformad/NQY +++klubbhus/BDY ++ klubblag/ABDYv ++ klubblik/OY ++ klubbning/ADY ++ klubbnål/ADGY ++ klubbyte/FECAY +++kluck/ABY ++ klucka/MDY +++kludda/NMAPDY ++ kluddig/OY ++ klump/ADGYX ++ klumpa/NMAY ++@@ -30438,7 +32094,6 @@ klumpsumma/EAGY ++ klumpsöm/FAIY ++ klumpvis ++ klunga/EAGY ++-klungit/Y ++ klunk/ADY ++ klunka/MDIY ++ kluns/DGY ++@@ -30450,12 +32105,8 @@ klurig/OPQY ++ klurighet/AHDYv ++ kluring/ADGY ++ klusil/AHDY ++-klusta/Y ++-klustade/Y ++-klustat/Y ++ kluster/FCAYX ++ klusterbomb/AHDY ++-klustra/Y ++ klut/ADGY ++ kluven/KMY ++ kluvenhet/ADYv ++@@ -30521,6 +32172,7 @@ kl ++ klädsel/EAIY ++ klädselöverdrag/ABDY ++ klädsim/CAY +++klädstil/ADGY ++ klädstreck/ABDY ++ kläm/FIY ++ klämdag/ADGY ++@@ -30535,7 +32187,7 @@ kl ++ klämsmycke/FECAY ++ klämta/MDY ++ klämtning/ADGY ++-klänga/KJY +++klänga/KLAJDRY ++ klängig/OY ++ klängning/ADY ++ klängranka/EAGY ++@@ -30544,10 +32196,12 @@ kl ++ klängväxt/AHDY ++ klänning/ADGYvf ++ klänningsärm/ADGY +++kläpp/ADGY ++ klärvoajant/OQY ++ klätter/XZ ++ klätterfot/AJDY ++ klättervägg/ADGY +++klätterväxt/AHDY ++ klättra/NMADY ++ klättrare/EAJYz ++ klättring/ADGYv ++@@ -30583,6 +32237,7 @@ kl ++ klövsjuka/EAY ++ klövspalt/AHDY ++ km +++knack/ABDY ++ knacka/NMAPDY ++ knackig/OPQY ++ knackning/ADGYv ++@@ -30653,7 +32308,6 @@ knaster/CAY ++ knastertorr/OY ++ knastfri/OY ++ knasthål/ABDY ++-knastig/OY ++ knastra/MDY ++ knastrig/OPY ++ knata/NMAY ++@@ -30667,7 +32321,6 @@ knegare/EAJY ++ knegig/OY ++ knekt/ADGY ++ knep/BDY ++-knepfull/OY ++ knepig/OPQY ++ knepighet/AHDY ++ knickfri/OY ++@@ -30685,11 +32338,13 @@ knipslug/OQY ++ knipslughet/ADY ++ kniptång/ADYv ++ kniptänger/AJY ++-knirr/ABD +++knirr/AB ++ knirra/MDY ++ kniv/ADGYX ++ knivbeväpnad/NQY ++ knivblad/ABDY +++knivbråk/ABDY +++knivdrama/CAHY ++ knivdåd/ABDY ++ knivdöda/NMAPDY ++ knivformig/OY ++@@ -30705,15 +32360,21 @@ knivhuggning/ADY ++ knivhögg/AY ++ knivig/OPY ++ knivighet/AHDY +++knivmord/ABDY ++ knivråna/NMAPY ++ knivsegg/ADGY +++knivskar/AY ++ knivskarp/OY ++ knivskuren/KMY +++knivskurit/AY +++knivskära/AJDRY +++knivskärs/Y ++ knivspets/DGY ++ knivsrygg/ADGY ++ Knivsta/AX ++ knivstucken/KMY ++ knivvass/OY +++knixa/NMAD ++ knixig/OY ++ knock/ADGY ++ knocka/NAPY ++@@ -30727,9 +32388,8 @@ knogj ++ knollrig/OY ++ knop/ADGY ++ knoparmoj/ABY ++-knopp/ADGY ++-knoppande/Y ++-knoppas/N +++knopp/ADY +++knoppa/NAPDIY ++ knoppbildning/ADGY ++ knoppbärande/Y ++ knoppig/OY ++@@ -30789,8 +32449,7 @@ knyffel/EAIY ++ knyppel/XZ ++ knyppla/NMAPDY ++ knyppling/ADGYv ++-knyst/AQDGY ++-knysta/NMAY +++knysta/NMAJDY ++ knyta/KLAJY ++ knytblus/DGY ++ knyte/FECAY ++@@ -30826,10 +32485,13 @@ kn ++ knädjup/OY ++ knäfalla/KJDY ++ knäfallen/MY +++knähund/ADGY ++ knähög/OY +++knähöjd/Y ++ knäled/AHDYv ++ knäledsmekanism/AHDY ++ knäledsoperation/AHDY +++knälång/OY ++ knäpp/AOPQDGYX ++ knäppa/KQLAD ++ knäppanordning/ADGY ++@@ -30841,10 +32503,13 @@ kn ++ knäppning/ADGYv ++ knäppskalle/EAGY ++ knäpptyst/OQY ++-knäskada/EAGY +++knäsena/EAGY +++knäskada/EAPGY ++ knäskål/ADGY ++-knästyv/OY +++knästyv/O ++ knäsvag/OQY +++knätofs/DGY +++knäveck/ABDY ++ knävelborr/ADGY ++ knödel/EAIY ++ knökfull/OY ++@@ -30879,14 +32544,13 @@ kockm ++ Kockums/X ++ kod/AD ++ koda/NMAPH ++-Kodak/AX +++Kodak/A ++ kodanalys/HDY ++ kodare/EAJY ++ kodberoende/Y ++ kodbeteckning/ADGY ++ kodein/ABDYX ++ kodeintablett/AHDY ++-kodek/ADGY ++ kodex/DGY ++ kodexempel/FCAY ++ kodifiera/NMAPDY ++@@ -30900,11 +32564,10 @@ kodnummer/FCAY ++ kodnyckel/EAIY ++ kodomvandlare/EAJY ++ kodomvandling/ADGY ++-kodomän/AHDY ++-kodon/ABY +++kodomän/AHD ++ kodord/ABDY ++ kodpenna/EAGY ++-kodrad/AHDY +++kodrad/AHD ++ kodsiffra/EAGY ++ kodsignal/AHDY ++ kodspråk/ABDY ++@@ -30947,7 +32610,7 @@ kohandlare/EAJY ++ koherens/DY ++ koherent/OY ++ kohesionslös/OY ++-kohesiv/OY +++kohesiv/O ++ kohorn/ABDY ++ kohort/AHDY ++ koj/AHD ++@@ -30980,7 +32643,6 @@ kokh ++ kokill/AHD ++ kokillgjutning/ADGY ++ kokkärl/ABDY ++-kokmalen/MY ++ kokning/ADGYvf ++ kokong/AHDY ++ kokoppor/AJY ++@@ -30992,19 +32654,25 @@ kokott/AHDY ++ kokplatta/EAGY ++ kokpunkt/AHDY ++ koks/D +++koksalt/ABHY ++ koksaltlösning/ADGY ++ koksande/Y ++ kokseldad/NQY ++ kokseldning/ADY +++kokskåp/ABDY +++kokspad/ABY ++ kokt/Q +++koktid/AHDY ++ kokvrå/EAIY ++ kol/ABDYX ++ kola/EMAG ++ kolapapper/FCAY ++-kolartad/NQY +++kolartad/NQ ++ kolasås/HDY +++kolatom/AHDY ++ kolbaserad/NQY ++ kolchos/HDY +++koldamm/ABY ++ koldioxid/ADY ++ koldioxidutsläpp/ABDY ++ koleldad/NQY ++@@ -31019,6 +32687,7 @@ kolesterolhaltig/OY ++ kolesterolsänkande/Y ++ kolesterolvärde/FECAY ++ kolfattig/OY +++kolfält/ABDY ++ kolgruva/EAGY ++ kolgruvearbetare/EAJY ++ kolhalt/AHDY ++@@ -31027,12 +32696,12 @@ kolhydrat/AHDYX ++ kolhög/ADGY ++ kolibakterie/EAIY ++ kolibri/EAHYX ++-koliform/OY +++koliform/O ++ kolik/ADY ++ kolikanfall/ABDY ++ kolja/EAGY ++ koljafilé/AEHY ++-kolkraft/XZ +++kolkraft/ADYX ++ kolkraftsel/ADY ++ koll/ADGY ++ kolla/NAPY ++@@ -31077,6 +32746,7 @@ kolloidisk/OY ++ kollokvium/AJY ++ kollra/NMAY ++ kollrig/OY +++kolmila/EAGY ++ kolmonoxid/ADYX ++ Kolmården/AX ++ kolmörk/OY ++@@ -31143,12 +32813,11 @@ kolumnrubrik/AHDY ++ kolumnvis ++ kolv/ADGYX ++ kolvblomstrig/OY ++-kolvlös/OY ++ kolvmotor/AEHY ++ kolvpump/ADGY ++ kolväte/FECAYX ++ kolväteförening/ADGY ++-kom/KA +++kom/A ++ koma/EA ++ komage/EAGY ++ komatillstånd/ABDY ++@@ -31204,6 +32873,7 @@ kommando/FECAYX ++ kommandobrygga/EAGY ++ kommandoprompt/ADGY ++ kommandorop/ABDY +++kommandoräd/AHDY ++ kommandoton/AHDY ++ kommatecken/FCAY ++ kommatera/NMAPY ++@@ -31548,7 +33218,6 @@ kongruent/OY ++ kongruera/NMAPDY ++ konhögtalar/XZ ++ konhögtalare/EAJY ++-konig/OY ++ konisk/OY ++ konjak/AHDYv ++ konjaksflaska/EAGY ++@@ -31597,7 +33266,7 @@ konkurrentland/AJBY ++ konkurrera/NMADY ++ konkurs/HDYX ++ konkursad/NQY ++-konkursbo/FEABDY +++konkursbo/FEABY ++ konkursdrabbad/NQY ++ konkursfärdig/OY ++ konkursförvaltare/EAJY ++@@ -31617,6 +33286,7 @@ konsensus/DX ++ konsert/AHDYX ++ konsertant/OY ++ konsertera/MY +++konserthall/ADGY ++ konserthus/BDYX ++ konsertprogram/FCAY ++ konsertsal/ADGY ++@@ -31761,7 +33431,7 @@ kontaktbredd/AHDY ++ kontaktelektromotorisk/OY ++ kontaktfamilj/AHDY ++ kontaktlim/CAY ++-kontaktlins/HDY +++kontaktlins/HDYX ++ kontaktlängd/AHDY ++ kontaktlös/OY ++ kontaktlöshet/ADY ++@@ -31797,7 +33467,7 @@ kontinuerlig/OY ++ kontinuitet/ADY ++ kontinuum/ABDY ++ konto/FECAYXU ++-kontoföra/KLAJOY +++kontoföra/KLAJO ++ kontohavare/EAJY ++ kontokorts/XZ ++ kontokurant/AHDY ++@@ -31830,6 +33500,7 @@ kontraktsenlig/OY ++ kontraktsmässig/OY ++ kontramandera/MY ++ kontraponera/MY +++kontrapost/ADY ++ kontraproduktiv/OY ++ kontrapunktisk/OY ++ kontrarevolution/AHDYv ++@@ -31959,6 +33630,7 @@ koppartr ++ kopparärg/ADY ++ kopparödla/EAGY ++ koppel/FCAY +++koppeltvång/ABY ++ koppla/NMAPDY ++ kopplare/EAJYg ++ koppleri/ABHYX ++@@ -31968,7 +33640,7 @@ kopplingston/HDY ++ koppsmittad/NQY ++ koppärrig/OY ++ koprofag/AHDY ++-koptisk/OY +++kopt/ATHDY ++ kopulation/AHDY ++ kopulativ/OY ++ kopulera/MDY ++@@ -31985,7 +33657,7 @@ korandans/HDY ++ Koranen/A ++ kord/AD ++ korda/EAGY ++-kordera/MY +++kordera/M ++ kordial/OY ++ kordong/AHDY ++ kordongera/MY ++@@ -32016,7 +33688,6 @@ korkblandad/NQY ++ korkek/ADGY ++ korkskalle/EAGY ++ korkskruv/ADGY ++-korma/EAGY ++ korn/ABDYX ++ kornad/NQY ++ kornblå/OY ++@@ -32029,7 +33700,6 @@ korngr ++ korngul/OY ++ kornig/OPY ++ kornknarr/ADGY ++-kornlös/OY ++ kornmalt/ABDY ++ kornorienterad/NQY ++ kornstorlek/ADGY ++@@ -32108,8 +33778,9 @@ korsstyngsbroderi/CABHY ++ korståg/ABDYv ++ korsvirkeshus/BDY ++ korsvis +++korsväg/ADGY ++ kort/APBQDYX ++-korta/NMAY +++korta/NMAPDY ++ kortaxig/OY ++ kortbane/XZ ++ kortbent/OQY ++@@ -32134,12 +33805,14 @@ korthet/ADYv ++ korthornad/NQY ++ korthornig/OY ++ korthuggen/KMY +++korthus/BDY ++ korthårig/OY ++ kortisol/ABY ++ kortison/ABY ++ kortkort/OY ++ kortlek/ADGY ++ kortlivad/NQY +++kortlås/BDY ++ kortlänkad/NQY ++ kortmonterad/NQY ++ kortoxe/EAGY ++@@ -32262,7 +33935,7 @@ kpist/ADGY ++ kpistbeväpnad/NQY ++ kr ++ krabat/AHDY ++-krabb/OYX +++krabb/XZ ++ krabba/EAGY ++ krabbklo/EAIY ++ krabbskal/ABDY ++@@ -32286,6 +33959,7 @@ kraftledning/ADGY ++ kraftlös/OY ++ kraftlöshet/ADY ++ kraftmanövrerad/NQY +++kraftnät/ABDY ++ kraftord/ABDY ++ kraftstation/AHDY ++ krafttag/ABDY ++@@ -32309,13 +33983,14 @@ krakelerad/NQY ++ krakmandel/EAIY ++ kram/DY ++ krama/NAPBIY ++-kramar/EDYX ++-kramare/AY +++kramar/XZ +++kramare/EAYWZ ++ kramdjur/ABDY ++ Kramfors/X ++-kramgoa/JOY +++kramgoa/JY ++ kramgoe/Y ++ kramgott/Y +++kramig/OPQY ++ kramkalas/BDY ++ kramp/AHDYX ++ krampaktig/OPY ++@@ -32325,6 +34000,7 @@ krams/BY ++ kramsnö/EAY ++ kran/DGY ++ kranbalk/ADGY +++kranbestånd/ABDY ++ kranbil/ADGY ++ kranförare/EAJY ++ kraniologisk/OY ++@@ -32338,7 +34014,7 @@ kransblommig/OY ++ kransformig/OY ++ kranskommun/AHDY ++ kranskärl/ABDYv ++-Krantz/A +++Krantz ++ kranvatten/CAY ++ krappröd/OY ++ krarupisera/MY ++@@ -32367,6 +34043,7 @@ kravbeskrivning/ADGY ++ kravbild/AHDY ++ kravbrev/ABDY ++ kravellbyggd/OY +++kravfylld/OY ++ kravla/MDY ++ kravlista/EAGY ++ kravlös/OQY ++@@ -32379,7 +34056,7 @@ kravspecifikation/AHDY ++ kravställare/EAJY ++ kravställning/ADGY ++ krax/BD ++-kraxa/NMAPDY +++kraxa/NMADY ++ kraxig/OY ++ kreation/AHDYv ++ kreationism/AHDY ++@@ -32390,6 +34067,7 @@ kreatur/ABDYv ++ kreaturslös/OY ++ kreatursslakt/AHDY ++ kreatör/AHDY +++kredd/Y ++ kredit/AHDYXU ++ kreditera/NMAPDY ++ kreditering/ADGYv ++@@ -32406,10 +34084,11 @@ kremla/EAGY ++ kremlolog/AHDY ++ krenelera/MPY ++ krenelering/ADGY ++-krenisk/OY ++ kreol/AHDY ++ kreoliserad/NQY ++ kreolisering/ADY +++kreolsk/OY +++kreosot/ADYX ++ kreosotimpregnerad/NQY ++ krepera/MY ++ krestomati/EAHY ++@@ -32446,7 +34125,8 @@ krigsh ++ krigsmålad/NQY ++ krigsråd/ABDY ++ krigsår/ABDY ++-krill/ADG +++krikon/ABDY +++krill/AD ++ kriminal/ADYX ++ kriminalare/EAJY ++ kriminalisera/NMAPY ++@@ -32545,23 +34225,24 @@ krisinsats/HDY ++ krisinsikt/ADY ++ kriskommission/AHDY ++ kriskommunikation/AHDY ++-krislag/ABDY ++-krisland/AJBY +++krislag/ABD +++krisland/AJB ++ krisledande ++ krisledning/ADGYv ++ krislinje/EAIY ++-krislån/ABDY +++krislån/ABD ++ krisläge/FECAY +++krismedvetande/CAY ++ krismedvetenhet/ADY ++ krismekanism/AHDY ++ krismyndighet/AHDY ++ krismöte/FECAY ++ krisnation/AHDY ++-krisnivå/EAHY +++krisnivå/EAH ++ krisområde/FECAY ++ krisorganisation/AHDY ++ krispaket/ABDY ++-krispig/OY +++krispig/OPY ++ krisplan/AHDY ++ krispolitik/ADY ++ krisprogram/FCAY ++@@ -32619,7 +34300,6 @@ krit/XZ ++ krita/EMAGY ++ kritaktig/OY ++ kritartad/NQY ++-kriterad/NQY ++ kriterium/AJY ++ kritfodral/ABDY ++ krithaltig/OY ++@@ -32635,8 +34315,8 @@ kritisk/OQY ++ kritstreck/ABDY ++ kritstrecksrandig/OY ++ kritter/AJY ++-kritvit/OY ++-kroasera/MY +++kritvit/OQY +++kroasera/M ++ kroat/ATHDY ++ Kroatien/AX ++ kroatiska/EAGY ++@@ -32652,7 +34332,11 @@ krockskadad/NQY ++ krocktest/ABHDYX ++ krockvänlig/OY ++ krog/ADGYX +++krogbråk/ABDY +++kroggäst/AHDY +++krogkö/EAHY ++ krogliv/ABY +++krogshow/AHDY ++ krok/ADGY ++ kroka/NAPY ++ krokben/ABY ++@@ -32682,7 +34366,6 @@ kromat/TBHDY ++ kromatin/ABY ++ kromatografera/MY ++ kromatografisk/OY ++-kromera/MY ++ kromgul/OY ++ kromhalt/AHDY ++ kromhaltig/OY ++@@ -32692,7 +34375,6 @@ kromosompar/ABDY ++ kromosomskadad/NQY ++ kromosomuppsättning/ADGY ++ krompläterad/NQY ++-kromröd/OY ++ kron/XZ ++ krona/EAGY ++ kronblad/ABDY ++@@ -32710,7 +34392,8 @@ kronologisera/MY ++ kronologisk/OY ++ kronometer/EAIY ++ kronometrisk/OY ++--kronors/XZ +++-kronors/XZU +++-kronorsvin/ABHY ++ kronostratigrafisk/OY ++ kronprins/DGY ++ kronprinsess/XZ ++@@ -32731,6 +34414,7 @@ kroppskontroll/AHDY ++ kroppslig/OPQY ++ kroppsligen ++ kroppslighet/ADYv +++kroppsnära/Y ++ kroppsspråk/ABDY ++ kroppsstruma/EAGY ++ kroppsställning/ADGY ++@@ -32738,7 +34422,7 @@ kroppstemperatur/AHDY ++ kroppsvisitation/AHDY ++ kroppsvisitera/NMAPDY ++ kross/BDY ++-krossa/NMAPDY +++krossa/NAPDIY ++ krossfri/OY ++ krosskada/EAGY ++ krossning/ADY ++@@ -32754,9 +34438,9 @@ krukmakare/EAJY ++ krukmakeri/ABHY ++ krukskärva/EAGY ++ krukväxt/AHDY ++-krull/ABDY +++krull/ABY ++ krulla/NMAPDY ++-krullfri/OY +++krullfri/O ++ krullhår/ABY ++ krullhårig/OY ++ krullig/OPQY ++@@ -32784,7 +34468,7 @@ krusig/OPY ++ krusmynta/EAY ++ krusning/ADGYv ++ kruspersilja/EAY ++-krussyra/EAGY +++krussyra/EAG ++ krustad/AHDY ++ krustång/ADY ++ kruståtel/EAY ++@@ -32835,7 +34519,6 @@ kryoteknik/ADY ++ kryp/ABD ++ krypa/K ++ krypande/CAY ++-krypdjur/ABDY ++ kryperi/ABHY ++ krypfart/ADY ++ krypfil/AHDY ++@@ -32897,6 +34580,7 @@ kr ++ kräftartad/NQY ++ kräftbur/ADGY ++ kräftdjur/ABDY +++kräftgång/ADY ++ kräfthåv/ADGY ++ kräftkanon/Y ++ kräftklo/EAIY ++@@ -32928,7 +34612,7 @@ kr ++ kränka/KQLAJBRY ++ kränkning/ADGYv ++ kränkt/PY ++-kräppera/MY +++kräppera/M ++ kräsen/KMLY ++ kräslig/OY ++ kräsmagad/NQY ++@@ -32962,16 +34646,17 @@ kubformad/NQY ++ kubformig/OY ++ kubik/ADYX ++ kubikcentimeter/EAJY ++-kubikera/MY +++kubikdecimeter/EAJY ++ kubikfot/ADY ++ kubikkilometer/EAJY ++ kubikmeter/EAJY ++ kubikrot/AJDY +++-kubiks/XZU ++ kubisk/OY ++ kubism/ADY ++ kubist/ATHDY ++ kubmanet/AHDY ++-kucku/ABCY +++kucku/AY ++ kudde/EAGY ++ kuddkrig/ABDY ++ kuddvar/ABDY ++@@ -32983,7 +34668,7 @@ kugga/NAPIY ++ kuggfråga/EAGY ++ kugghjul/ABDYv ++ kugghjulsnav/ABDY ++-kuggrem/FAIY +++kuggrem/FAI ++ kuggväxel/EAIY ++ kujonera/MY ++ kuk/ADG! ++@@ -32993,9 +34678,11 @@ kuksugare/EAJ! ++ kul/X ++ kula/EAGY ++ kulak/AHDY +++kulbana/EAGY ++ kulen/MLY ++ kulformad/NQY ++ kulformig/OY +++kulfång/ABDY ++ kulhål/ABDY ++ kulig/OY ++ kulinarisk/OY ++@@ -33004,7 +34691,7 @@ kuliss/HDYX ++ kulkopplingslås/BDY ++ kull/AQDRY ++ kulla/NEPIGY ++-kullager/FCAJYX +++kullager/FCAYX ++ kullagrad/NQY ++ kullblåst/OY ++ kullbyttera/MY ++@@ -33027,8 +34714,11 @@ kulmage/EAGY ++ kulmen/AY ++ kulmination/AHDY ++ kulminera/MY +++kulning/ADY ++ kulram/ADGY +++kulregn/ABDY ++ kulskydd/ABDY +++kulspel/ABDY ++ kulspets/DGYX ++ kulspetspenna/EAGY ++ kulspruta/EAGY ++@@ -33036,6 +34726,8 @@ kulst ++ kulstötare/EAJY ++ kulstötning/ADGY ++ kult/ATHDYX +++kultbok/ADY +++kultböcker/AJY ++ kultfilm/AHDY ++ kulting/ADGY ++ kultivera/NMAPY ++@@ -33076,11 +34768,13 @@ kumulera/MY ++ kumulrisk/OY ++ kund/AHDYX ++ kundanpassad/NQY +++kundbas/HDY ++ kundbehov/ABDY ++ kunde ++ Kundera/A ++ kundinriktad/NQY ++ kundkontakt/AHDY +++kundkrets/DGY ++ kundorienterad/NQY ++ kung/ADGYv ++ kunga/XZ ++@@ -33088,6 +34782,7 @@ kungad ++ kungaed/AHDY ++ kungahus/BDY ++ kungamakt/AHDY +++kungapar/ABDY ++ kungarike/FECAY ++ kungatron/AHDY ++ kungaätt/AHDY ++@@ -33173,12 +34868,16 @@ kuriosa/YX ++ kuriositet/AHDYv ++ kuriosum/Y ++ kurir/AHDYX +++kurirpost/ADY ++ kuriös/OPQY ++ kurort/AHDY ++ kurr/ABDY ++ kurra/NEMADY ++ kurragömma/EAYX ++ kurs/HDYX +++kursare/EAJY +++kursbok/ADY +++kursböcker/AJY ++ kursdeltagar/XZ ++ kursdeltagare/EAJY ++ kursera/MY ++@@ -33187,7 +34886,7 @@ kursf ++ kursiv/OY ++ kursivera/NMAPY ++ kursivering/ADGYv ++-kurskod/AHDY +++kurskod/AHD ++ kursledare/EAJY ++ kurslista/EAGY ++ kurslitteratur/AHDY ++@@ -33229,8 +34928,12 @@ kustbo/EAIY ++ kustnära/Y ++ kustodiera/MY ++ kustort/AHDY +++kuststad/ADY +++kuststäder/AJY ++ kusttorsk/ADGYX ++ kusttorskbestånd/ABDY +++kustväg/ADGY +++kustzon/AHDY ++ kut/AD ++ kuta/NMADI ++ kutig/OPQY ++@@ -33253,6 +34956,7 @@ kuvertering/ADYv ++ kuvertmaskin/AHDY ++ kuvös/HDY ++ Kuznetsova/A +++kW ++ kvacka/NMADY ++ kvackare/EAJY ++ kvacksalvare/EAJY ++@@ -33262,7 +34966,8 @@ kvadda/NMAPDY ++ kvadrant/AHDYX ++ kvadrantfel/ABDY ++ kvadrat/ATHDYX ++--kvadratare/EAJ +++-kvadratare/EAJY +++kvadratdecimeter/EAJY ++ kvadratfot/ADY ++ kvadratiske/Y ++ kvadratmeter/EAJYX ++@@ -33293,7 +34998,9 @@ kvalitetsnudel/EAIY ++ kvalitetsutvecklingsprojekt/ABDY ++ kvalitetsvin/ABHY ++ kvalm/ABY +++kvalmatch/AHDY ++ kvalmig/OPY +++kvalplats/HDY ++ kvalserie/EAIY ++ kvalspel/ABDY ++ kvalster/FCAYX ++@@ -33331,7 +35038,12 @@ kvarh ++ kvarhållning/ADYv ++ kvark/ADGY ++ kvarka/EAY ++-kvarleva/KEAJDGY +++kvarlev +++kvarleva/EAGY +++kvarlevande +++kvarlevde +++kvarlever +++kvarlevt ++ kvarliggande/Y ++ kvarlåtenskap/ADYv ++ kvarlämna/NMAPDY ++@@ -33345,17 +35057,17 @@ kvarsittning/ADGY ++ kvarskatt/AHDY ++ kvarskatte/XZ ++ kvarskatteavgift/AHDY ++-kvarskrivning/ADY +++kvarskriven/KMY +++kvarskrivning/ADGY ++ kvarstad/AHDYv ++ kvarstanna/MY ++ kvarstå/MLY ++ kvart/DY ++-kvarta/MHIY +++kvarta/MIY ++ kvartal/ABDYv ++ kvartalsavgift/AHDY ++ kvartalsvis ++-kvarter/EBDY ++-kvartera/MYv +++kvarter/ABDYv ++ kvartermästare/EAJY ++ kvartersbio/EAY ++ kvarterskrog/ADGY ++@@ -33490,6 +35202,7 @@ kv ++ kväka/KJY ++ kväkar/XZ ++ kväkare/EAJY +++kväkning/ADGY ++ kvälja/KLAJDY ++ kväljning/ADGYv ++ kväll/ADGYv ++@@ -33504,6 +35217,7 @@ kv ++ kvällsmål/ABDY ++ kvällssen/OY ++ kvällssömnig/OY +++kvällstid/AHDY ++ kvällstidig/OY ++ kvällstidning/ADGY ++ kvällsvard/AHDY ++@@ -33515,7 +35229,6 @@ kv ++ kvävedioxid/ADY ++ kvävedioxidhalt/AHDY ++ kvävefattig/OY ++-kvävefri/OY ++ kvävehaltig/OY ++ kväveläckage/ECAY ++ kväveoxid/AHDYX ++@@ -33532,10 +35245,9 @@ kycklingl ++ kyffe/FECAY ++ kyffig/OPY ++ Kyi/A ++-kyl/DG ++-kyla/KELAJODRYz ++-kylar/XZ ++-kylare/EAJY +++kyl/DRYX +++kyla/KELODIY +++kylare/EAYz ++ kylaremblem/ABDY ++ kylarfläkt/ADGY ++ kylargardin/AHDY ++@@ -33546,12 +35258,16 @@ kylarlock/ABDY ++ kylarmärke/FECAY ++ kylarslang/ADGY ++ kylarvätska/EAGY +++kyldisk/ADGY +++kylfack/ABDY +++kylhus/BDY ++ kylig/OPQY ++ kylklamp/ADGY ++ kyller/FCAY ++ kyllerklädd/OY ++ kylmedel/FCAY ++ kylning/ADYv +++kylrum/FCAY ++ kylskadad/NQY ++ kylskåp/ABDYv ++ kylskåpsdörr/ADGY ++@@ -33575,9 +35291,11 @@ kyrassi ++ kyrillisk/OY ++ kyrk/XZ ++ kyrka/EAGY +++kyrkbok/ADY ++ kyrkby/EAGY ++ kyrkbåtsrodd/AHDY ++ kyrkbänk/ADGY +++kyrkböcker/AJY ++ kyrkdop/ABDY ++ kyrkkaffe/CAY ++ kyrkklocka/EAGY ++@@ -33600,6 +35318,7 @@ kyrksam/MLY ++ kyrksamt/Y ++ kyrktorn/ABDY ++ kyrktupp/ADGY +++kyrkväg/ADGY ++ kysk/OPQ ++ kyskhet/ADYv ++ kyss/DGY ++@@ -33609,10 +35328,9 @@ kyttig/OY ++ kåda/EA ++ kådavskiljnings/XZ ++ kåddoft/AHDY ++-kådhalt/AHDY +++kådhalt/AHD ++ kådhaltig/OY ++ kådig/OY ++-kådkanal/AHDY ++ kådrik/OPY ++ kåk/ADG ++ kåkfarare/EAJY ++@@ -33620,14 +35338,17 @@ k ++ kåkstan/AY ++ kåkstäder/AJY ++ kål/ADYX +++kålblad/ABDY ++ kåldolme/EAGY ++ Kållered/Av +++kålmask/ADGY ++ kålrot/AJDYv ++ kålsupar/XZ ++ kålsupare/EAJY ++ kånka/NMADY ++ kåpa/EAGY ++ kår/AHQDGYX +++kåranda/EAY ++ kåras/N ++ kåravgift/AHDY ++ kåres/Y ++@@ -33672,14 +35393,14 @@ k ++ källar/XZU ++ källare/EAJY ++ Källdahl/A ++-källfri/OY +++källfri/O ++ källfrisk/OY ++ källförteckning/ADGY ++ källing/ADGY ++ källkod/ADYv ++ källkritik/ADY ++ källmaterial/ABDY ++-källmyr/ADGY +++källmyr/ADG ++ källsjö/EAGY ++ källskatt/AHDY ++ källsortera/MY ++@@ -33770,12 +35491,14 @@ k ++ kärleksgåva/EAGY ++ kärlekshistoria/EAHY ++ kärlekshistorien/AY +++kärleksliv/ABY ++ kärlekslös/OY ++ kärleksvisa/EAGY ++ kärlig/OY ++ kärlkramp/ADY ++ kärlsjukdom/ADGY ++-kärlskåp/ABDY +++kärlskåp/ABD +++kärlvägg/ADGY ++ kärn/XZ ++ kärna/NEMAPDGY ++ kärnavfall/ABDY ++@@ -33791,6 +35514,8 @@ k ++ kärnfrisk/OY ++ kärnfråga/EAGY ++ kärnfull/OY +++kärnfysiker/EAJY +++kärnhus/BDY ++ kärnig/OY ++ kärnis/DGY ++ kärnkompetens/DGY ++@@ -33804,7 +35529,6 @@ k ++ kärnkraftskramare/EAJY ++ kärnkraftskramarn/AY ++ kärnkraftverk/ABDY ++-kärnlös/OY ++ kärnmagnetisk/OY ++ kärnminne/FECAY ++ kärnprodukt/AHDY ++@@ -33818,6 +35542,7 @@ k ++ kärnvapenfri/OY ++ kärnvapenkrig/ABDY ++ kärnverksamhet/AHDY +++kärnämne/FECAY ++ käromål/ABDY ++ kärr/ABD ++ kärra/EAGY ++@@ -33832,6 +35557,7 @@ k ++ kärvhet/ADYv ++ kärvt ++ kärvänlig/OPQY +++kärvänlighet/ADY ++ kättarbål/ABDY ++ kättare/EAYz ++ kätte/EAGY ++@@ -33844,7 +35570,6 @@ k ++ Kävlinge/AX ++ käx/BD ++ käxa/M ++-käxig/OY ++ köa/NMAJH ++ köande/CAY ++ köbildning/ADGYv ++@@ -33856,6 +35581,7 @@ k ++ köksarbete/CAY ++ köksavfall/ABDY ++ köksbord/ABDYv +++kökschef/AHDY ++ köksdörr/ADGY ++ köksfönster/FCAJY ++ köksgeråd/ABDY ++@@ -33870,8 +35596,7 @@ k ++ köksskåp/ABDY ++ kökstrappa/EAGY ++ köksträdgård/ADGY ++-köksväg/Y ++-köksvägen/Y +++köksvägen/AY ++ köksväxt/AHDY ++ köksö/EAGY ++ köl/ADG ++@@ -33880,11 +35605,14 @@ k ++ kölbåt/ADGY ++ köld/ADYX ++ köldbeständig/OY +++köldhål/ABDY ++ köldhärdig/OPY ++ köldmedium/EAJY ++ köldpol/AHDY ++ köldskada/EAPGY ++ köldskyddad/NQY +++köldvåg/ADY +++köldvågor/AJY ++ kölfena/EAGY ++ kölformig/OY ++ kölhala/NMAPDY ++@@ -33906,12 +35634,14 @@ k ++ könsdiskriminering/ADY ++ könsdrift/ADY ++ könsfördelning/ADGY +++könshår/ABDY ++ könskvotera/NMAPDY ++ könslig/OY +++könsliv/ABY ++ könsmakts/XZ ++ könsmaktsordning/ADGY ++ könsmogen/KMLY ++-könsmärka/KQLAJDY +++könsmärka/KQLAJD ++ könsord/ABDY ++ könsorgan/ABDY ++ könsroll/AHDYv ++@@ -33935,12 +35665,16 @@ k ++ köpenskap/AHDY ++ köpeskilling/ADGY ++ köpesumma/EAGY +++köpfest/ADY +++köpfilm/AHDY ++ köphets/DY ++ köping/ADGY ++ Köping/Av ++ köpingsbo/EAIY +++köpkraft/ADY ++ köpkraftig/OY ++ köpkurs/HDY +++köplust/ADY ++ köplysten/MY ++ köpman/AFYv ++ köpmanna/XZ ++@@ -33953,6 +35687,7 @@ k ++ köpstark/OY ++ köpsvag/OY ++ köpvillig/OY +++köpvärd/OY ++ kör/HDRYX ++ köra/KLOBY ++ körade/A ++@@ -33963,6 +35698,8 @@ k ++ körbar/OY ++ körfil/AHDY ++ körfält/ABDY +++körförbud/ABDY +++körglädje/EAY ++ körig/OPY ++ körkarl/ADGY ++ körklar/OY ++@@ -33974,6 +35711,7 @@ k ++ körmusik/ADY ++ körnare/EAJY ++ körning/ADGYvf +++körprov/ABDY ++ körriktningsvisar/XZ ++ körriktningsvisare/EAJY ++ körsbär/ABDYv ++@@ -33988,9 +35726,13 @@ k ++ körsvennen/AY ++ körsvenner/AJY ++ körsång/AHDY +++körsätt/ABDY ++ körtel/EAIYX ++ körtelliknande/Y +++körvana/EAGY ++ körvel/EAY +++körverk/ABDY +++körväg/ADGY ++ kös ++ kösituation/AHDY ++ köstatistik/AHDY ++@@ -33998,6 +35740,7 @@ k ++ kötid/AHDY ++ kött/ABYX ++ köttben/ABDY +++köttbit/ADGY ++ köttbuljong/AHDY ++ köttbulle/EAGY ++ köttbulls/XZ ++@@ -34012,9 +35755,11 @@ k ++ köttsoppa/EAGY ++ köttstycke/FECAY ++ köttsår/ABDY +++köttyxa/EAGY ++ köttätande/Y ++ köttätare/EAJY ++ l/r +++la/A ++ labb/ABDGY ++ labbrapport/AHDY ++ laber/MLY ++@@ -34059,7 +35804,6 @@ lackmustest/ABDY ++ lacknafta/EAY ++ lackning/ADGYv ++ lackröd/OY ++-lackt ++ lada/EAGY ++ ladda/NMA ++ laddad/NQY ++@@ -34090,6 +35834,7 @@ lagakraftvunnen/MY ++ laganda/EAY ++ lagbestämd/OY ++ lagbok/ADY +++lagbrott/ABDY ++ lagbrytare/EAJY ++ lagbud/ABDY ++ lagbunden/MY ++@@ -34118,9 +35863,10 @@ Lagerl ++ lagerskadad/NQY ++ lagervara/EAGY ++ lageröl/ABDY ++-lagfar/AORY +++lagfara/AJDRY ++ lagfaren/KMY ++ lagfarit/AY +++lagfars/Y ++ lagfart/AHDYv ++ lagfartsbevis/BDY ++ lagfor/AY ++@@ -34132,43 +35878,53 @@ lagg/ADY ++ lagga/MIY ++ laggkärl/ABDY ++ lagiske/Y +++lagkamrat/AHDY ++ lagkapp/AHDYX ++ lagkappsimning/ADGY +++lagkapten/AHDY ++ lagklok/OY ++ lagkunnig/OY +++lagledare/EAJY ++ laglig/OPQY ++ lagligen ++ laglighet/ADY +++laglott/AHDY ++ laglydig/OQY ++ laglydighet/ADYv ++ laglös/OQY ++ laglöshet/ADYv ++ lagman/AFY ++ lagmedlem/FAIY +++lagmoral/ADY ++ lagmän/AFY ++ lagning/ADGYvf ++ Lago/A ++ lagom ++ lagparagraf/AHDY ++-lagra/NAPDY +++lagra/NPDY ++ lagrangian/AHDY ++ lagring/ADGYvf ++ lagringsvin/ABHY +++lagrum/FECAY ++ lagråd/ABDYv ++ lagrådsremiss/HDY ++ lagskipande/Y +++lagspel/ABDY +++lagsport/AHDY ++ lagsprint/ADGY ++ lagstadga/NMAPY ++ lagstifta/NMAPDY ++ lagstiftare/EAJY ++ lagstiftning/ADGYf ++ lagstridig/OY +++lagstöd/ABY ++ lagsöka/KQLAJDRY ++ lagt/A ++ lagteknisk/OY ++ lagtempo/FECAYX ++ lagtempolopp/ABDY ++ lagtext/AHDY +++lagting/ABDY ++ lagun/AHDYX ++ lagunö/EAGY ++ lagvidrig/OY ++@@ -34212,7 +35968,6 @@ lallning/ADGYv ++ lam/QP ++ lama/EAGY ++ lamadjur/ABDY ++-lambda/CAY ++ lambdakalkyl/AHDY ++ Lamborghini/AX ++ lamé/AEHY ++@@ -34234,14 +35989,12 @@ lamp/XZ ++ lampa/EAGY ++ lampett/AHDY ++ lampfot/AJDY ++-lampglob/AHDY ++ lamphus/BDY ++ lampkrona/EAGY ++ lampskärm/ADGY ++ lamslagen/KMY ++ lamslå/NMLAY ++ lamt ++-lana/NMAD ++ Lancia/A ++ land/ABY ++ landa/NMAPDYv ++@@ -34445,7 +36198,6 @@ lapidarisk/OY ++ lapisera/NMAPDY ++ lapp/ADYX ++ lappa/NAPDIY ++-lappera/MY ++ Lappland/A ++ lapplisa/EAGY ++ lappländsk/OQY ++@@ -34456,6 +36208,7 @@ lapsk/OY ++ lapskojs/DY ++ lapsktalande/Y ++ lapsus/DGY +++laptop/ADGY ++ largetto/FECAY ++ largo/FECAY ++ larm/ABDYX ++@@ -34463,6 +36216,7 @@ larma/NMAPDY ++ larmatrapp/AHDY ++ larmcentral/AHDY ++ larmklocka/EAGY +++larmkod/AHD ++ larmrapport/AHDY ++ larmsamtal/ABDY ++ larmsiren/AHDY ++@@ -34485,6 +36239,7 @@ lasciv/OY ++ laser/EAIYX ++ lasera/MDY ++ laserkanon/AHDY +++laserljus/BDY ++ laserskrivare/EAJY ++ laserstråle/EAGY ++ laserstyrd/OY ++@@ -34497,12 +36252,14 @@ Lasse/A ++ lasso/EAIY ++ last/AHDYX ++ lasta/NMAPDY +++lastare/EAJY ++ lastbar/OPQY ++ lastbil/ADGYv ++ lastbilschaufför/AHDY ++ lastbilsförare/EAJY ++ lastbilskö/EAHY ++ lastbilstransport/AHDY +++lastbåt/ADGY ++ lastdryg/OPY ++ lastfartyg/ABDY ++ lastfull/OY ++@@ -34514,6 +36271,7 @@ lastkaj/AHDY ++ lastning/ADGYvf ++ lastpall/ADGY ++ lastriktning/ADGY +++lastrum/FCAY ++ lastspännar/XZ ++ lastspännare/EAJY ++ lastångare/EAJY ++@@ -34543,6 +36301,7 @@ latitud/AHDY ++ latmask/ADGY ++ latrin/AHDY ++ latsidan/Y +++latte/EAG ++ lattja/MDY ++ lattjo/Y ++ Latvala/A ++@@ -34580,7 +36339,6 @@ laxativ/ABDY ++ laxer/XZ ++ laxera/NMAPDY ++ laxerpiller/FCAJY ++-laxfena/EAGY ++ laxfisk/ABQDGY ++ laxfiskes/Y ++ laxforell/AHDY ++@@ -34588,7 +36346,7 @@ laxf ++ laxkar/ABDY ++ laxodling/ADGY ++ laxpudding/ADGY ++-laxrom/FAY +++laxrom/FA ++ laxskiva/EAGY ++ laxsoppa/EAGY ++ laxstjärt/ADGY ++@@ -34602,7 +36360,7 @@ lazzaron/AHDY ++ LBU/r ++ lcd/r ++ LCD/r ++-le/FNMA +++le/FKM ++ league/r ++ League/A ++ lealös/OQY ++@@ -34619,17 +36377,15 @@ ledam ++ ledar/XU ++ ledare/EAJY ++ ledarhunds/XZ +++ledarinna/EAGY ++ ledarskap/ABYvf ++ ledas/N ++ ledband/ABDYv ++ ledbrosk/ABDY ++ ledbruten/KMY ++-ledd/AHDY ++-ledda/R ++-ledde +++ledde/EAI ++ leddjur/ABDY ++ leddocka/EAGY ++-ledera/MY ++ ledfyr/ADGY ++ ledgångsreumatism/ADY ++ ledig/OPQY ++@@ -34737,22 +36493,27 @@ lekamligen ++ lekande/CAY ++ lekare/EAY ++ lekatt/AHDY +++lekboll/ADGY ++ Lekeberg/A ++-lekfull/OY +++lekfull/OPQY ++ lekfullhet/ADY ++ lekfärdig/OY ++ lekkamrat/AHDY +++leklust/ADY ++ lekman/AFY ++ lekmanna/XZ ++ lekmannamässig/OY ++-lekmogen/KMLY +++lekmogen/MY ++ lekmän/AFY +++lekpark/AHDY ++ lekplats/HDY +++lekrum/FCAY ++ leksak/AHDYvf ++ Leksand/Av ++ lekskola/EAGY ++ lekstuga/EAGY ++ lekstuge/XZ +++lektant/AHDY ++ lektion/AHDYvf ++ lektor/AEHYv ++ lektorat/ABDY ++@@ -34791,7 +36552,7 @@ lepr ++ leptosom/OY ++ ler/XZ ++ lera/EAGY ++-lerartad/NQY +++lerartad/NQ ++ lerblandad/NQY ++ lerduva/EAGY ++ lerduve/XZ ++@@ -34804,11 +36565,16 @@ lergodslera/EAGY ++ lergrå/OY ++ lergök/ADGY ++ lerhaltig/OY +++lerhus/BDY ++ lerig/OPQY ++ Leringe/X +++lerjord/ADGY ++ lerkruka/EAGY ++ lerkrus/BDY +++lerkärl/ABDY ++ Lerum/AX +++lervägg/ADGY +++leråker/EAIY ++ lesbianism/ADY ++ lesbisk/OY ++ lesothier/EAJY ++@@ -34823,7 +36589,7 @@ letare/EAJYWZ ++ letargi/EAY ++ letargisk/OQY ++ letning/ADGY ++-lett/HD +++lett/AHD ++ lettisk/OQY ++ lettiska/EAGY ++ Lettland/Av ++@@ -34854,7 +36620,7 @@ leverf ++ leverne/CAY ++ leverop/ABDY ++ leverpastej/AHDY ++-leverven/AHDY +++leverven/AHD ++ Lewis ++ levitera/MY ++ levitisk/OY ++@@ -34915,9 +36681,8 @@ libertinism/ADY ++ libertinistisk/OY ++ libidinös/OY ++ libido/EAY ++-libretti/Y ++ librettist/AHDY ++-libretto/EAYX +++libretto/FEAYX ++ Libyen/AX ++ libyer/EAJY ++ libysk/OQY ++@@ -34927,13 +36692,13 @@ licensera/NMADY ++ licensiera/NMAPY ++ licensiering/ADGYv ++ licensskjuta/KLAJRY ++-licensskjuten/MY ++ licentiat/AHDYX ++ licentiatexamen/AY ++ licentiatexamina/AY ++ licentiera/NMAPDY ++ Lichtenstein/AX ++-lida/J +++lid/AD +++lida ++ lidande/FECAY ++ lidelse/EAIYX ++ lidelsefri/OY ++@@ -34943,6 +36708,7 @@ Lid ++ lider/FCAY ++ liderlig/OPQY ++ liderlighet/ADYv +++liderna/A ++ Lidingö/AX ++ lidit ++ Lidköping/Av ++@@ -34978,12 +36744,12 @@ liggf ++ liggning/ADGYv ++ liggriktig/OY ++ liggsår/ABDY +++light/X ++ ligist/AHDYX ++ ligistdåd/ABDY ++ Ligurien/AX ++ ligurisk/OY ++-lik/AOB ++-lik- +++lik/AOBb ++ lika/NAPD ++ likabehandling/ADYv ++ likaberättigad/NQY ++@@ -35012,7 +36778,7 @@ likb ++ likbärare/EAJY ++ likdel/ADGY ++ like/EAGY ++-likfasig/OY +++likfasig/O ++ likfläck/ADGY ++ likflänsig/OY ++ likforma/NMAPDY ++@@ -35024,7 +36790,6 @@ likf ++ likgarn/ABY ++ likgiltig/OQY ++ likgiltighet/ADYv ++-likgul/OY ++ likhet/AHDYv ++ likhetstecken/FCAY ++ likhund/ADGY ++@@ -35033,14 +36798,13 @@ liklukt/ADY ++ likmask/ADGY ++ likna/NMAPDY ++ liknelse/EAIYX ++-liknämnd/OY ++ liknämnig/OY ++ liknöjd/OQY ++ liknöjdhet/ADYv ++ likplundrar/XZ ++ likplundrare/EAJY ++ likplundring/ADGYv ++-likpolig/OY +++likpolig/O ++ likpredikan/AY ++ likpredikningar/AJY ++ likrikta/NMAPDY ++@@ -35060,16 +36824,15 @@ likst ++ likställig/OY ++ likställighet/ADY ++ likställighetsprincip/D ++-likstämd/OY +++likstämd/O ++ likstämmig/OY ++ likstämmighet/ADY ++ liksvamp/ADGY ++ liksvepning/ADGY ++ liksvävig/OY ++ liksäck/ADGY ++-liktidig/OY ++ liktorn/ADGYv ++-liktryck/ABDYv +++liktrycks/XZ ++ liktrycksturbin/AHDY ++ liktrådig/OY ++ liktydig/OY ++@@ -35083,7 +36846,7 @@ likvidator/AEHY ++ likviddag/ADGY ++ likvidera/NMAPY ++ likviditet/AHDYvf ++-likvidus/YX +++likvidus/X ++ likviduslinje/EAIY ++ likvidustemperatur/AHDY ++ likvinklig/OY ++@@ -35109,12 +36872,12 @@ Liljeroth/A ++ Liljevall/A ++ liljevit/OQY ++ liljeväxt/AHDY ++-lilla/A +++lilla/AR ++ Lilla ++ lillan/AY ++ lillasyster/EAIY ++ lillaxel/EAIY ++-lille/A +++lille ++ lillebroder/EAY ++ lillebror/AY ++ lillebröder/AJY ++@@ -35126,6 +36889,7 @@ lillfinger/CAIYX ++ lillgamla/Y ++ lillgamle/Y ++ lillgammal/MY +++lillhjärnan/A ++ Lilliehöök/A ++ lillslam/FAIY ++ lillstuga/EAGY ++@@ -35134,9 +36898,8 @@ lillv ++ Lilly/A ++ lim/QCAHD ++ Lima/A ++-limartad/NQY ++ limbisk/OY ++-limbo/AY +++limbo/A ++ limeblad/ABDY ++ limejuice/EAIY ++ limeklyfta/EAGY ++@@ -35170,7 +36933,7 @@ linbane/XZ ++ Lincoln/A ++ lind/ADGYX ++ linda/NEAPDGY ++-Linda/A +++Linda/AR ++ Lindab/A ++ lindansar/XZ ++ lindansare/EAJY ++@@ -35179,7 +36942,7 @@ lindblomma/EAGY ++ lindbloms/XZ ++ lindblomste/ABHY ++ linde/XZ ++-Linde/A +++Linde ++ lindebarn/ABDY ++ Lindell/A ++ Lindesberg/A ++@@ -35254,17 +37017,16 @@ Linus ++ Linux/X ++ lipa/NMAD ++ lipen ++-lipid/AHDY ++ lipig/OY ++ lipsill/ADGY ++ lir/AB ++ lira/EARY ++-lirade +++lirade/A ++ lirar/X ++ lirare/EAJY ++-lirat +++lirat/A ++ lire/FY ++-lirka/NMAPDY +++lirka/NMADY ++ lisa/EAY ++ Lisa/AJ ++ Lisbeth/A ++@@ -35290,7 +37052,7 @@ liten ++ litenhet/ADY ++ liter/EAJY ++ litermått/ABDY ++--liters/XZ +++-liters/XZU ++ litervis ++ litet ++ litium/ABY ++@@ -35339,14 +37101,14 @@ liveskiva/EAGY ++ livespelning/ADGY ++ livestatistik/ADY ++ livesändning/ADGY ++-livfull/OY +++livfull/OPQY ++ livförsäkring/ADGYv ++ livgarde/FECAY ++ livhanken/Y ++ livlig/OPQY ++ livlighet/ADYv ++ livlina/EAGY ++-livlös/OY +++livlös/OQY ++ livmedikus/DY ++ livmoder/EAYX ++ livmoderhals/DGYX ++@@ -35389,29 +37151,36 @@ livsh ++ livsinställning/ADGY ++ livskraft/ADY ++ livskraftig/OY +++livskris/HDY ++ livskvalitet/AHDY ++ livsledsagare/EAJY ++ livsledsagarinna/EAGY ++ livslevande/Y +++livsluft/ADY ++ livslust/ADY ++ livslång/OY ++ livslängd/ADY ++ livslögn/AHDY +++livslön/AHDY ++ livsmedel/FCAY ++ livsmedelsaffär/AHDY ++ livsmedelsbutik/AHDY ++ livsmedelsindustri/EAHY ++ livsmedelsmaskin/AHDY ++ livsmedelsprogram/FCAY +++livsmiljö/EAHY ++ livsmod/ABY +++livsmål/ABDY ++ livsnjutare/EAJY ++ livsnödvändig/OY ++ livsoduglig/OY ++ livsomständighet/AHDY +++livsrum/CAY ++ livssituation/AHDY ++ livsstil/ADGYv ++ livsstilskombi/EAY ++ livsstilsrelaterad/NQY +++livssyn/AHDY ++ livstecken/FCAY ++ livstid/ADYv ++ livstidsdömd/OQY ++@@ -35421,12 +37190,14 @@ livstil/ADG% ++ livstro/EAY ++ livsuppehållande/Y ++ livsuppgift/AHDY +++livsval/ABDY ++ livsvarig/OY ++ livsvarm/OY ++ livsverk/ABDY ++ livsviktig/OY ++ livsvilja/EAY ++ livsvillkor/ABDY +++livsväg/ADGY ++ livsåskådning/ADGY ++ livsöde/FECAY ++ livtag/ABDY ++@@ -35452,14 +37223,18 @@ ljudlagsenlig/OY ++ ljudlig/OPQY ++ ljudlös/OY ++ ljudlöshet/ADY +++ljudnivå/EAHY ++ ljudpinne/EAGY ++ ljudreflekterande/Y +++ljudspår/ABDY ++ Ljudstörning/ADGY ++ ljudsymbolisk/OY ++ ljudteknisk/OY ++ ljudupptagning/ADGY ++-ljudöra/CAY ++-ljudöron/ADY +++ljudvåg/ADY +++ljudvågor/AJY +++ljudöra/CA +++ljudöron/AD ++ ljug/ABRY ++ ljuga/DY ++ ljugar/XZ ++@@ -35486,7 +37261,7 @@ Ljungstedt/A ++ ljungtuva/EAGY ++ ljus/BDYX ++ ljusa ++-ljusan +++ljusan/Y ++ ljusare ++ ljusast/Q ++ ljusbeständig/OY ++@@ -35508,6 +37283,7 @@ ljushyllt/OQY ++ ljushårig/OY ++ ljushärdig/OY ++ ljusklädd/OY +++ljuskälla/EAGY ++ ljuskänslig/OY ++ ljuslagd/OY ++ ljuslockig/OY ++@@ -35521,6 +37297,7 @@ ljuspunkt/AHDY ++ ljusreflekterande/Y ++ ljusrosa/Y ++ ljusröd/OY +++ljussabel/EAIY ++ ljussken/ABDY ++ ljusskygg/OY ++ ljusskäggig/OY ++@@ -35537,6 +37314,8 @@ ljuster/FCAY ++ ljustra/NMAPDY ++ ljusvarnar/XZ ++ ljusvarnare/EAJY +++ljusvåg/ADY +++ljusvågor/AJY ++ ljusår/ABDY ++ ljusögd/OY ++ ljuta/KJY ++@@ -35561,7 +37340,6 @@ lobbyverksamhet/ADY ++ lobformig/OY ++ lobotomera/NMAPDY ++ lobotomi/EAY ++-loci/Y ++ lock/ABDYX ++ locka/NAPDIY ++ lockbete/FECAY ++@@ -35577,7 +37355,6 @@ lockouta/NMAPDY ++ lockpris/BHY ++ lockrop/ABDY ++ lockton/AHDY ++-locus/Y ++ lod/ABD ++ loda/NMAPD ++ lodenrock/ADGY ++@@ -35598,7 +37375,7 @@ loge/EAIGY ++ logement/ABDYv ++ logera/NMAPDY ++ logg/ADGYX ++-logga/NAPY +++logga/NEAPGY ++ loggbok/ADY ++ loggböcker/AJY ++ loggert/ADGY ++@@ -35630,6 +37407,8 @@ lokalkontor/ABDY ++ lokalpatriotisk/OY ++ lokalsamtal/ABDY ++ lokaltelefon/AHDY +++lokaltåg/ABDY +++lokalval/ABDY ++ lokalvårdare/EAJY ++ lokatt/AHDY ++ lokförar/XZ ++@@ -35637,14 +37416,22 @@ lokf ++ lokomotiv/ABDY ++ lokomotivförar/XZ ++ lokomotivförare/EAJY +++lokskada/EAGY +++lokstall/ABGY +++loktåg/ABD +++lokurspårning/ADGY +++lokution/AHDY +++lokverkstad/ADY +++lokverkstäder/AJY ++ lom/FAI ++ lombardera/MY ++ lombardlån/ABDY ++ lomhörd/OQY ++-lomma/NMAPDY +++lomma/NMADY ++ lomägg/ABDY ++ London/AX ++-longera/MY +++longera/M +++longering/ADY ++ longitud/AHDY ++ longitudinell/OY ++ longör/AHDY ++@@ -35669,14 +37456,17 @@ lortgris/DGY ++ lortig/OPQY ++ Los ++ Losberg/AX +++loser/EAJY ++ loska/EAGY ++ loss ++ lossa/NMAPDY ++ lossna/MDY ++ lossning/ADGYv +++lotion/AHDY ++ lots/DYX ++ lotsa/NAPDIY ++ lotsavgift/AHDY +++lotsbåt/ADGY ++ lotsning/ADGY ++ lott/AHDYX ++ lotta/NEMAPDGY ++@@ -35697,7 +37487,7 @@ lov/ABDYX ++ lova/NAPI ++ lovande/Y ++ lovart/Y ++-lovera/MY +++lovdag/ADGY ++ lovgirig/OY ++ Lovisa/A ++ lovlig/OY ++@@ -35714,6 +37504,7 @@ lovsj ++ lovsång/AHDY ++ lovtal/ABDY ++ lovvärd/OY +++lp ++ LP/r ++ LPGA-tour/D ++ lp-skiva/EAGY ++@@ -35722,9 +37513,10 @@ LRF/r ++ LSD/r ++ LSS/r ++ LSU/r +++lte/r ++ LTH/r ++ LU/r ++-lubba/NMAPDY +++lubba/NMADY ++ lubrikator/AEHY ++ lucia/EAGYX ++ Lucia/A ++@@ -35755,7 +37547,6 @@ luetisk/OY ++ LUF/r ++ luffa/NMADY ++ luffare/EAJYz ++-luffning/ADY ++ lufsa/MDY ++ lufsig/OPQY ++ luft/ADYX ++@@ -35763,6 +37554,7 @@ lufta/NMAPDY ++ luftanfall/ABDY ++ luftballong/AHDY ++ luftbeständig/OY +++luftbro/EAGY ++ luftburen/KMY ++ luftcirkulation/ADY ++ luftdans/HDY ++@@ -35771,7 +37563,6 @@ luftfarkost/AHDY ++ luftfart/ADYv ++ luftfartsverk/ABY ++ luftflotta/EAGY ++-luftfri/OY ++ luftfuktare/EAJY ++ luftfuktighet/ADY ++ luftfylld/OY ++@@ -35779,16 +37570,19 @@ luftf ++ luftförorening/ADGY ++ luftgap/ABDY ++ luftgummihjul/ABDY +++lufthav/ABDY ++ lufthydraulisk/OY +++lufthål/ABDY ++ lufthärdad/NQY ++ lufthärdande/Y ++ luftig/OPY +++luftighet/ADY ++ luftisolerad/NQY ++ luftkonditionera/MPY ++ luftkonditionering/ADGY ++ luftkyld/OY ++ luftkänslig/OY ++-luftlager/FCAJY +++luftlager/FCAY ++ luftlandsatta/LJY ++ luftlandsatte/Y ++ luftlandsätta/LAJDY ++@@ -35798,10 +37592,13 @@ luftled/AHDY ++ luftlindad/NQY ++ luftmanövrerad/NQY ++ luftrenare/EAJY +++luftrum/CAY ++ lufträd/AHDY ++ lufträttslig/OY ++ luftrör/ABDYv ++ luftrörskatarr/AHDY +++luftskepp/ABDY +++luftslott/ABDY ++ luftsluss/DGY ++ luftsmord/OY ++ luftspridd/OY ++@@ -35815,6 +37612,7 @@ lufttrafikavgift/AHDY ++ lufttryck/ABDY ++ lufttät/OY ++ Luftwaffe/A +++luftvapen/FCAY ++ luftväg/ADGv ++ luftvägsbesvär/ABDY ++ luftvärdig/OY ++@@ -35825,7 +37623,7 @@ lugg/ADY ++ lugga/NAPDIY ++ luggig/OY ++ luggsliten/KMY ++-lugn/ABDY +++lugn/ABY ++ lugna/NMAPDY ++ lugnare ++ lugnast/Q ++@@ -35844,7 +37642,7 @@ luktsinne/FECAY ++ luktärt/AHDY ++ lukullisk/OY ++ Luleå/AX ++-luleåbo/EAIY +++luleåbo/EAI ++ lulla/MY ++ lullig/OPQY ++ lumbago/EAY ++@@ -35856,22 +37654,21 @@ lumin ++ lummerväxt/AHDY ++ lummig/OPY ++ lump/ADY ++-lumpar/XZ ++-lumpare/EAJY +++lumpare/EAJz ++ lumpen/KMLY ++ lumpenhet/ADYv ++ lumphaltig/OY ++ lumpig/OY ++-lumpsal/ADGY ++ lunarisk/OY ++ Lunarstorm/A ++ lunch/AHDYX ++-luncha/NMAPDY +++luncha/NMADY ++ lunchbar/AHDY ++ lunchdans/HDY ++ lunchgäst/AHDY ++ lunchrum/FCAY ++ lunchstängd/OY +++lunchtid/AHDY ++ lunchätar/XZ ++ lunchätare/EAJY ++ lund/ADGY ++@@ -35897,6 +37694,7 @@ lungsiktig/OQY ++ lungsot/ADY ++ lungsäck/ADGY ++ lungsäcksinflammation/AHDY +++lungört/AHDY ++ lunk/ADY ++ lunka/MDY ++ lunnefågel/EAIY ++@@ -35916,7 +37714,6 @@ lurifax/DGY ++ lurig/OPQY ++ luring/ADGY ++ lurk/ADG ++-lurkig/OY ++ lurpassa/NMADY ++ lurvig/OPQY ++ lus/D ++@@ -35968,8 +37765,8 @@ lutning/ADGYvf ++ lutspelande/Y ++ luttra/NMAPDY ++ luttring/ADGY ++-luv/ADG ++ luva/EAGY +++luven/Y ++ luvtröja/EAGY ++ lux ++ Luxemburg/Av ++@@ -36045,7 +37842,6 @@ Lyndon/A ++ lynne/FECAY ++ lynnesutbrott/ABDY ++ lynnig/OY ++-lyosom/AHDY ++ lyra/EAG ++ lyrfamilj/AHDY ++ lyrformig/OY ++@@ -36086,18 +37882,23 @@ lytesdrabbad/NQY ++ lyteskomik/ADY ++ lytt/OQ ++ lyx/DYX +++lyxa/M ++ lyxbetonad/NQY ++ lyxbil/ADGY ++ lyxhotell/ABDY ++ lyxig/OPY +++lyxjakt/AHDY +++lyxkrog/ADGY ++ lyxliv/ABY ++ lyxsanera/MY +++lyxsvit/AHDY ++ lyxupplaga/EAGY +++lyxvara/EAGY ++ lyxvilla/EAGY ++-lyxvodka/EAY +++lyxvodka/EA ++ låd/XZ ++ låda/EAGY ++-lådaktig/OY +++lådaktig/O ++ lådbil/ADGY ++ lådde ++ låder ++@@ -36122,19 +37923,21 @@ l ++ låghalsad/NQY ++ låghalt/OQY ++ låghet/AHDY +++låghus/BDY ++ lågimpediv/OY ++ lågintensiv/OY ++ lågkaloridiet/ADY +++lågkant/Y ++ lågklackad/NQY ++ lågklassig/OY ++ lågkolhaltig/OY ++ lågkonjunktur/AHDY ++ lågkvalificerad/NQY ++ lågkyrklig/OY +++lågland/AJBY ++ låglandsras/HDY ++ låglegerad/NQY ++ låglänt/OPY ++-låglönad/NQY ++ låglöne/XZ ++ låglöneyrke/FECAY ++ lågmjölkande/Y ++@@ -36165,6 +37968,7 @@ l ++ lågstatus/XZ ++ lågstatusperson/AHDY ++ lågsvavlig/OY +++lågsäsong/AHDY ++ lågt ++ lågtflygande/Y ++ lågtgående/Y ++@@ -36175,28 +37979,32 @@ l ++ lågtstående/Y ++ lågtysk/OY ++ lågutbildad/NQY +++lågvarv/Y ++ lågvarvig/OY ++ lågvatten/CAY ++ lågvattenmärke/FECAY ++ lågviskös/OY ++-lågvärd/OY +++lågvärd/O ++ lågvärdig/OY ++ lågväxt/OQY ++ lågättad/NQY ++ lån/ABDYX ++ låna/NMAPDY ++ låne/XZ +++lånebil/ADGY ++ lånebok/ADY ++ låneböcker/AJY ++ lånedel/DY ++ lånefinansiera/MY ++ lånekort/ABDY ++ lånetak/ABDY +++lånetid/AHDY ++ lång/OQYX ++ långa/EAG ++ långaxig/OY ++ långbent/OQY ++ långbladig/OY +++långboll/ADGY ++ långbord/ABDY ++ långbyxa/EAGY ++ långbänk/ADGY ++@@ -36224,10 +38032,14 @@ l ++ långhala/NMAPDY ++ långhalmig/OY ++ långhalsad/NQY +++långhelg/AHDY ++ långhornad/NQY ++ långhornig/OY +++långhus/BDY ++ långhårig/OQY +++långivare/EAJY ++ långkalsonger/AJY +++långkok/ABDY ++ långkornig/OY ++ långkörar/XZ ++ långkörare/EAJY ++@@ -36236,6 +38048,7 @@ l ++ långlig/OY ++ långliggare/EAJY ++ långlivad/NQY +++långlopp/ABDY ++ långlång/OY ++ långlänkad/NQY ++ långmod/ABY ++@@ -36246,6 +38059,7 @@ l ++ långpromenad/AHDY ++ långrandig/OY ++ långrandighet/ADY +++långresa/EAGY ++ långrev/ADGY ++ långsam/KMLY ++ långsamhet/ADYv ++@@ -36260,6 +38074,7 @@ l ++ långsint/OPQY ++ långskaftad/NQY ++ långskallig/OY +++långskott/ABDY ++ långskranglig/OY ++ långslagig/OY ++ långslipad/NQY ++@@ -36315,7 +38130,7 @@ l ++ låsanordning/ADGY ++ låsbar/OY ++ låsbricka/EAGY ++-låsbult/ADGY +++låsbult/ADG ++ låsbygel/EAIY ++ låskolv/ADGY ++ låsning/ADGYv ++@@ -36325,6 +38140,7 @@ l ++ låssmed/AHDY ++ låssprint/ADGY ++ låstangent/AHDY +++låstyp/AHD ++ låsvred/ABDY ++ -låt/ADG ++ låt/ODG ++@@ -36332,7 +38148,6 @@ l ++ låtanden/Y ++ låtbibliotek/ABDY ++ låtlista/EAGY ++-låtom ++ låtsa/MPDY ++ låtsas/NX ++ låtsaslek/ADGY ++@@ -36348,17 +38163,17 @@ l ++ låtskriveri/ABY ++ låttext/AHDY ++ låttitel/EAIY ++-låtval/ABDY ++-lä/A +++låtval/ABD +++lä ++ läbbig/OPQY ++-läcka/KEQAJDGY +++läcka/KEQLAJDRGY ++ läckage/ECAYX ++ Läckeby/AX ++ läcker/MLY ++ läckerbit/ADGY ++ läckergom/FAIY ++ läckerhet/AHDYv ++-läckfri/OY +++läckfri/O ++ läder/CAYX ++ läderartad/NQY ++ läderbälte/FECAY ++@@ -36369,7 +38184,6 @@ l ++ läderliknande/Y ++ läderrem/FAI ++ lädervaruindustri/EAHY ++-läfsa/EAGY ++ läge/FECAYv ++ lägel/EAIY ++ lägenhet/AHDYvf ++@@ -36409,7 +38223,6 @@ l ++ läggmatch/AHDY ++ läggning/ADGYvf ++ läggspel/ABY ++-lägirig/OY ++ läglig/OPY ++ lägra/NMAPDY ++ lägre ++@@ -36476,7 +38289,7 @@ l ++ längtansfull/OY ++ länk/ADGY ++ länka/NAPDYf ++-länkare/EAY +++länkare/EA ++ länklagrad/NQY ++ länkning/ADGYv ++ länkrörelse/EAIY ++@@ -36490,10 +38303,12 @@ l ++ länsman/AFYv ++ länsmän/AFY ++ länsråd/ABDY +++länsrätt/AHDY ++ länsstyrelse/EAIY ++ länstol/ADGY ++ länstrafik/ADY ++ länsvis +++länsväg/ADGY ++ läpp/ADGY ++ läppblomstrig/OY ++ läppformig/OY ++@@ -36540,10 +38355,13 @@ l ++ läroplan/AHDYv ++ lärorik/OPY ++ lärosal/ADGY +++lärosäte/FECAY +++lärotid/AHDY ++ läroverk/ABDYv ++ läroår/ABDY ++ lärs/N ++-läsa/KQLAR +++läs/bR +++läsa/KL ++ läsande/CAY ++ läsapparat/AHDY ++ läsar/XZ ++@@ -36563,7 +38381,7 @@ l ++ läsecirkel/EAIY ++ läsekrets/DGY ++ läsesal/ADGY ++-läsfel/ABDY +++läsfel/ABD ++ läsforskare/EAJY ++ läsforskning/ADY ++ läsfrämjande/Y ++@@ -36590,6 +38408,7 @@ l ++ läskedryck/AHDY ++ läskedrycksfabrik/AHDY ++ läskedrycksindustri/EAHY +++läskflaska/EAGY ++ läskig/OPQY ++ läskighet/AHDY ++ läsklass/HDY ++@@ -36618,7 +38437,7 @@ l ++ lässkydda/NMAPY ++ lässvag/OY ++ lässvårighet/AHDY ++-läst/HD +++läst/OHD ++ lästeknik/ADY ++ lästeknisk/OY ++ lästimma/EAY ++@@ -36662,7 +38481,6 @@ l ++ lättförståelig/OQY ++ lättgående/Y ++ lätthanterlig/OQY ++-lätthelg/AHDY ++ lätthet/ADYv ++ lättillgänglig/OY ++ lätting/ADGY ++@@ -36678,7 +38496,7 @@ l ++ lättläst/OPY ++ lättlöslig/OPY ++ lättlöst/OY ++-lättmald/OY +++lättmald/O ++ lättmanövrerad/NQY ++ lättmargarin/ABHY ++ lättmetall/AHDY ++@@ -36738,14 +38556,12 @@ l ++ läxhjälp/ADY ++ läxläsning/ADGY ++ löda/NKLAJ ++-lödbar/OY ++ lödd/O ++ lödder/CAY ++ löddra/MDY ++ löddrig/OPY ++ lödfog/ADGY ++-lödfri/OY ++-lödig/OY +++lödfri/O ++ lödkolv/ADGY ++ lödmetall/AHDY ++ lödning/ADGYv ++@@ -36770,13 +38586,13 @@ l ++ löjtnant/AHDYv ++ lök/ADGYX ++ lökfjäll/ABDY ++-lökfluga/EAGY ++ lökformig/OY ++-lökgroda/EAGY ++ lökkupol/AHDY ++ lökkvalster/FCAY ++ lökmönster/FCAJY ++ löksill/ADGY +++lökskal/ABDY +++löksmak/ADY ++ löksoppa/EAGY ++ lökstam/FAIY ++ löksås/HDY ++@@ -36789,12 +38605,16 @@ l ++ lönande/Y ++ löneanspråk/ABDY ++ lönearbete/FECAY +++löneavtal/ABDY ++ löneberedning/ADGY ++ lönebud/ABDY ++ löneförhöjning/ADGY ++ lönegap/ABDY ++ lönekostnad/AHDY +++lönekrav/ABDY +++lönelyft/ABDY ++ lönemässig/OY +++lönenivå/EAHY ++ lönepolitisk/OY ++ lönespiral/AHDY ++ lönespridning/ADGY ++@@ -36808,6 +38628,7 @@ l ++ lönlös/OY ++ lönn/ADGX ++ lönnbotten/FAIY +++lönndom/Y ++ Lönneberga/AX ++ lönnfack/ABDY ++ lönnfet/OQY ++@@ -36831,15 +38652,16 @@ l ++ löpar/XZ ++ löparbana/EAGY ++ löpare/EAJY +++löparsko/EAIY ++ löparsten/ADGY ++-löpbana/EAGY +++löpbana/EAG ++ löpband/ABDY ++ löpe/CAY ++ löpeld/ADGY ++ löpgrav/ADGY ++ löpknut/ADGY ++ löplina/EAGY ++-löplopp/ABDY +++löplopp/ABD ++ löpmage/EAGY ++ löpmaska/EAGY ++ löpmeter/EAJY ++@@ -36854,6 +38676,7 @@ l ++ löpteknik/AHDY ++ löptext/ADY ++ löptid/AHDY +++löptik/ADGY ++ löpträna/MDY ++ löpträning/ADY ++ löpvagn/ADGY ++@@ -36872,7 +38695,7 @@ l ++ lösaktighet/ADYv ++ lösare/EAJY ++ lösbar/OY ++-lösblads/XZ +++lösblad/ABDYv ++ lösbröst/ADY ++ lösdrivare/EAJY ++ lösdriveri/ABY ++@@ -36896,6 +38719,7 @@ l ++ lösgöra/AJRY ++ lösgörs/Y ++ löshet/ADY +++löshår/ABDY ++ löska/MY ++ löskekarl/ADGY ++ löskoka/NMAPDY ++@@ -36911,6 +38735,7 @@ l ++ lösningsmedelsbeständig/OY ++ lösningsmedelsfri/OY ++ lösnummer/FCAY +++lösnäsa/EAGY ++ lösriva/KLAJY ++ lösriven/MY ++ lösryckt/OY ++@@ -36920,6 +38745,7 @@ l ++ lösskägg/ABDY ++ lössläppt/OQY ++ lössläppthet/ADY +++lössnö/EAY ++ löstagbar/OY ++ lösvikt/Y ++ lösvikts/XZ ++@@ -36928,11 +38754,12 @@ l ++ löv/ABDYX ++ löva/NMAD ++ lövad/NQY +++lövbiff/ADGY ++ Lövdén/A ++ lövgroda/EAGY ++ lövhyddohögtid/AHDY ++ lövklädd/OY ++-lövkvist/ADGYX +++lövkvist/ADG ++ lövlös/OY ++ lövrik/OY ++ lövsal/ADGY ++@@ -36942,6 +38769,7 @@ l ++ lövsåg/ADGY ++ lövträd/ABDYv ++ lövtunn/OY +++lövverk/ABDY ++ löväng/ADGY ++ Lööw/A ++ m/Ar ++@@ -36982,8 +38810,6 @@ madrassera/NMAPDY ++ madrassnål/ADGY ++ Madrid/AX ++ madrigal/AHDY ++-madusa/EAGY ++-maduska/EAGY ++ maestoso ++ maestro/EAY ++ maffia/EAGYX ++@@ -36995,6 +38821,7 @@ mag/XZ ++ magasin/ABDYv ++ magasinera/NMAPDY ++ magasinerbar/OY +++magasinering/ADGY ++ magasinmatad/NQY ++ magborstare/EAJY ++ Magdalena/A ++@@ -37006,6 +38833,7 @@ magenta/Y ++ mager/KMLY ++ magerlagd/OQY ++ maggot/ADGY +++maggrop/ADGY ++ magi/EAY ++ magik/AHDY ++ magiker/EY ++@@ -37015,6 +38843,7 @@ magistral/OY ++ magistrat/AHDY ++ magkatarr/AHDY ++ magknip/ABY +++magkänsla/EAGY ++ magma/EAGY ++ magmatisk/OY ++ magmun/AFY ++@@ -37053,15 +38882,20 @@ magnolia/EAGYX ++ magnumbutelj/AHDY ++ Magnus ++ Magnusson/A +++magont/Y +++magplask/ABDY ++ magpumpning/ADGY ++ magra/MDY ++-magsjuka/EAGY ++-magsjuke/XZ +++magsaft/AHDY +++magsjuk/OQY +++magsjuka/EAGYy ++ magsmärta/EAGY ++ magsond/AHDY ++ magstark/OY ++ magsur/OQY +++magsyra/EAGY ++ magsår/ABDYv +++magsäck/ADGY ++ mag-tarm/XZ ++ magtrakten/Y ++ magyarisk/OY ++@@ -37074,11 +38908,13 @@ Mahmoud/A ++ mahogny/ECAYX ++ mahognyfärgad/NQY ++ mainstream/X +++maizena ++ maj/X ++ Maja/AJ ++ majbrasa/EAGY ++ majbål/ABDY ++-majeld/ADGY +++majdag/ADGY +++majeld/ADG ++ majestät/ATBYv ++ majestätiske/Y ++ majeure-/XZ ++@@ -37111,7 +38947,6 @@ makadam/ADYX ++ makadambeläggning/ADGY ++ makadamisera/MY ++ makade ++-makak/AHDY ++ makalös/OPQY ++ makare/EAYWZ ++ makaron/ATHDY ++@@ -37128,7 +38963,7 @@ makeup/AHDY ++ makeupspegel/EAIY ++ maklig/OPQY ++ makrill/ADGYX ++-makro/FECAYX +++makro/FECAX ++ makrobiotisk/OY ++ makrocyklisk/OY ++ makroekonomisk/OY ++@@ -37150,15 +38985,17 @@ maktkamp/AHDY ++ maktlysten/MLY ++ maktlös/OY ++ maktlöshet/ADY +++maktmedel/FCAY ++ maktpolitisk/OY ++ maktposition/AHDY +++maktspel/ABDY ++ maktställning/ADGY ++ maktutövning/ADY ++ maktövertagande/FECAY ++ makulatur/ADY ++ makulera/NMAPY ++ makulering/ADGY ++-mala/LAJDI +++mala/LAJODI ++ malagassisk/OY ++ malaj/ATHDY ++ malajiska/EAGY ++@@ -37175,8 +39012,7 @@ malaysier/EAJY ++ malaysisk/OQY ++ malaysiska/EAGY ++ malbehandlad/NQY ++-malda ++-malde +++mald/Q ++ Maldiverna/A ++ maldivisk/OQY ++ maldiviska/EAGY ++@@ -37188,7 +39024,7 @@ malign/OY ++ malimpregnerad/NQY ++ Malin/A ++ malisk/OQY ++-malkula/EAGY +++malkula/EAG ++ mall/ADGY ++ malla/MY ++ mallig/OPQY ++@@ -37199,7 +39035,7 @@ malmbrytning/ADY ++ malmedel/FCAY ++ malmfattig/OY ++ malmficka/EAGY ++-malmfri/OY +++malmfri/O ++ malmfyndighet/AHDY ++ malmfält/ABDY ++ malmförande/Y ++@@ -37212,7 +39048,7 @@ malmkropp/ADGY ++ malmkross/BDY ++ Malmkvist/A ++ Malmlund/A ++-malmrik/OY +++malmrik/O ++ Malmskillnadsgatan/A ++ Malmström/A ++ malmtransport/AHDY ++@@ -37225,9 +39061,9 @@ malplacerad/NQY ++ malpåse/EAGY ++ malström/FAIY ++ malt/ABDY ++-Malta/ARX +++Malta/AX ++ maltdryck/AHDY ++-Malte +++Malte/A ++ maltes/THDY ++ maltesare/EAJY ++ maltesiska/EAGY ++@@ -37308,14 +39144,14 @@ mandrillhona/EAGY ++ mandrillunge/EAGY ++ mandråpar/XZ ++ manege/EAIY ++-manen/A +++manen/AI ++ maner/ABDY ++ manér/ABDY ++ manerfri/OY ++ manet/HDY ++ manfall/ABDY ++ manfolk/ABDY ++-manga/EAY +++manga/EY ++ mangan/BY ++ manganfattig/OY ++ manganhaltig/OY ++@@ -37374,7 +39210,7 @@ mank ++ manlig/OPQY ++ manlighet/ADYv ++ manlucka/EAGY ++--manna/XZ +++-manna/XZU ++ manna/EAY ++ mannagryn/ABDYv ++ mannaminne/Y ++@@ -37400,6 +39236,7 @@ manskropp/ADGY ++ manskör/AHDY ++ manslem/FAIY ++ manslukerska/EAGY +++mansnamn/ABDY ++ mansperson/AHDY ++ manspillan/AY ++ mansroll/AHDY ++@@ -37419,7 +39256,8 @@ mantelkyld/OY ++ mantelyta/EAGY ++ mantimme/EAGY ++ mantlad/NQY ++-mantra/CAY +++mantra/ECAY +++mantrana/AY ++ mantåg/ABDY ++ manual/AHDY ++ Manuel/A ++@@ -37448,8 +39286,7 @@ maoism/ADY ++ maoist/ATHDY ++ maori/EAHY ++ maorisk/OY ++-mapp/ADY ++-mappa/NAPIY +++mapp/ADGY ++ mappning/ADY ++ mara/EAG ++ maraton/YX ++@@ -37458,6 +39295,7 @@ Marcus ++ mardröm/FAIYv ++ mardrömsaktig/OY ++ mardrömslik/OY +++mareld/ADGY ++ Margareta/A ++ Margaretha/A ++ margarin/ABHYX ++@@ -37469,13 +39307,14 @@ marginell/OY ++ Margita/AJ ++ Margits ++ Margot/A ++-Maria/QA +++Maria/QAR ++ Marianne/A ++-Marie/A +++Marie ++ Mariefred/A ++ Mariestad/Av ++ marig/OPQY ++ marijuana/EAYX +++marimba/EAGY ++ marin/AOHDYX ++ marina/EAGY ++ marinad/AHDY ++@@ -37484,6 +39323,7 @@ marinbatteri/ABHY ++ marinbiolog/ATHDY ++ marinblå/OY ++ marinera/NMAPY +++marinering/ADGY ++ marinkår/AHDYv ++ marinkårsgeneral/AHDY ++ marinsoldat/AHDY ++@@ -37503,9 +39343,11 @@ markberedning/ADGY ++ markeffektfarkost/AHDY ++ markera/NMAPY ++ markering/ADGYv +++Market ++ marketenteri/ABHYX ++ marketing/ADY ++ markis/HDY +++markköp/ABDY ++ Marklund/A ++ marknad/AHDYvf ++ marknadsandel/ADGY ++@@ -37528,11 +39370,14 @@ marknadssida/EAGY ++ marknadsvimmel/CAY ++ marknadsvärde/FECAYX ++ marknära/Y +++marknät/ABDY ++ markreflekterad/NQY ++ marksänd/OY ++ marktäckare/EAJY ++ Markus ++ Markusplatsen/A +++markyta/EAGY +++markägare/EAJY ++ markör/AHDYX ++ markörförflyttning/ADGY ++ marmelad/AHDYX ++@@ -37597,7 +39442,7 @@ Maserati/A ++ masig/OY ++ mask/ADYX ++ maska/NEAPHDIGY ++-maskaron/AHDY +++maskaron/AHD ++ maskera/NMAY ++ maskerad/AHDYX ++ maskeradbal/AHDY ++@@ -37655,6 +39500,7 @@ maskulinitet/ADY ++ maskulinum/AJY ++ maskäten/MY ++ maskör/AHDY +++masochism/ADY ++ masochistisk/OY ++ masonit/ADY ++ massa/EAGYX ++@@ -37667,10 +39513,13 @@ massagestav/ADGY ++ massageterapeut/AHDY ++ massaimpregnerad/NQY ++ massaindustri/EAHY +++massaj/AHDY ++ massaker/EAY ++ massakrer/AJY ++ massakrera/NMAPY ++ massarbetslöshet/ADY +++masscentrets/Y +++masscentrum/EABDY ++ massdöd/ADGY ++ massenhet/AHDY ++ massera/NMAPDY ++@@ -37680,7 +39529,7 @@ massframst ++ massförintelsevapen/FCAY ++ massförstörelsevapen/FCAY ++ massgrav/ADGY ++-massiv/AOPBDY +++massiv/AOPBQDY ++ masskonsumtion/ADY ++ masskultur/ADY ++ masslös/OY ++@@ -37693,15 +39542,21 @@ massoretisk/OY ++ massproducera/NMAPY ++ massproduktion/ADY ++ masstal/ABDY +++masstart/AHDY ++ massvis ++ massör/AHDY +++massös/HDY ++ mast/AHDY ++ mastad/NQY +++master/EYX +++masterexamen/AY +++masterexamina/AY ++ mastermålning/ADGY ++ masterprogram/FCAY ++ masticera/MY ++ mastiff/AHDY ++ mastig/OY +++mastix/DY ++ mastixbuske/EAGY ++ mastodont/ATHDYX ++ mastodontartad/NQY ++@@ -37715,17 +39570,23 @@ mat/ADYX ++ mata/NMA ++ matad/NQY ++ matador/AHDY +++mataffär/AHDY ++ matande/CAY ++ matar/XZ ++ matare/EAJY +++matavfall/ABY ++ matberedare/EAJY +++matbit/ADGY ++ matbord/ABDY +++matbrist/ADY ++ matbröd/ABDY +++matbutik/AHDY ++ match/AHDYX ++ matcha/NMAPDY ++ matchboll/ADGY ++ matchning/ADGYv ++ matchningsbar/OQY +++matchur/ABDY ++ matelassera/MY ++ matematik/AHDYX ++ matematiker/EY ++@@ -37746,6 +39607,7 @@ material ++ materie/EIY ++ materiel/ADYXU ++ materiell/OY +++matfett/ABHY ++ matfisk/ADGY ++ matfrisk/OY ++ matförgiftad/NQY ++@@ -37754,27 +39616,41 @@ matglad/OQY ++ matgäst/AHDY ++ Mathias ++ mathållning/ADY ++-matig/OY +++matig/OPY ++ Matilda/A ++ matiné/AEHYX ++ matinéföreställning/ADGY ++ matjessill/ADGY ++ matjord/ADGY +++matkasse/EAGY ++ matkniv/ADGY ++ matkorg/ADGY +++matkultur/AHDY ++ matkällare/EAJY ++ matkö/EAHY +++matlag/ABDY ++ matlagare/EAJY ++ matlagning/ADY ++ matlagningsintresserad/NQY ++ matlagningsvin/ABHY +++matlust/ADY +++matlåda/EAGY +++matmoder/EAY ++ matmoms/DYX +++matmor/AY +++matmödrar/AJY ++ matning/ADGYvf ++ matnyttig/OPY ++ matnyttighet/AHDY +++matolja/EAGY ++ matos/BY ++-matprat/ABY ++-matpumpa/EAGY +++matpaus/HDY +++matplats/HDY +++matprat/AB +++matpris/BHY +++matpumpa/EAG +++matrast/AHDY +++matrester/AJY ++ matriarkalisk/OY ++ matrikel/EAIY ++ matris/HDY ++@@ -37784,6 +39660,7 @@ matrona/EGY ++ matronaliknande/Y ++ matros/HDYX ++ matroskostym/AHDY +++matrum/FCAY ++ maträtt/AHDY ++ Mats ++ matsal/ADGYv ++@@ -37809,7 +39686,6 @@ mattbl ++ matte/EY ++ mattera/MY ++ mattförgylld/OY ++-mattgul/OY ++ matthet/ADY ++ Mattias ++ mattindustri/EAHY ++@@ -37817,7 +39693,7 @@ mattkalandrera/MY ++ mattlackera/MY ++ mattläggar/XZ ++ mattläggare/EAJY ++-mattnål/DGY +++mattnål/DG ++ mattpolera/MY ++ mattrulle/EAGY ++ Mattsson/A ++@@ -37826,6 +39702,7 @@ mattv ++ mattvävare/EAJY ++ mattvävarn/AY ++ mattögd/OY +++matvanor/AJY ++ matvara/EAGY ++ matvaru/XZ ++ matvin/ABHY ++@@ -37840,15 +39717,15 @@ Mauritius/X ++ Mauritz ++ mausoleum/AJY ++ mauvefärgad/NQY ++-max ++ Max +++maxa/NMAJD ++ maxad/NQY ++ maxbelopp/ABDY ++ maxfart/AHDY ++ maxförbrukning/ADGY ++ maxgräns/HDY ++ maxhastighet/AHDY ++-maxhöjd/AHDY +++maxhöjd/AHD ++ maxim/AHDY ++ maximal/OY ++ maximalistisk/OY ++@@ -37858,10 +39735,11 @@ maximi/XZ ++ maximum/EABDY ++ maxnivå/EAHY ++ maxpoäng/ADY +++maxpris/BHY ++ maxstraff/ABDY ++-maxtak/ABDY +++maxtak/ABD ++ maxtaxa/EAGY ++-maxtid/AHDY +++maxtid/AHD ++ Maxwell/AX ++ maxvikt/AHDY ++ mazarin/AHDY ++@@ -37892,6 +39770,7 @@ medansvarig/OY ++ medarbetar/XZ ++ medarbetare/EAJY ++ medarrangör/AHDY +++medberoende/Y ++ medbeslutande/CAYX ++ medbestämmande/CAYX ++ medbestämmandeavtal/ABDY ++@@ -38025,7 +39904,7 @@ medkopplad/NQY ++ medkämpe/EAGY ++ medkännande/Y ++ medkänsla/EAY ++-medla/NMAY +++medla/NMAPDY ++ medlarbud/ABDY ++ medlare/EAJYz ++ medlarroll/AHDY ++@@ -38047,6 +39926,7 @@ medl ++ medlöpar/XZ ++ medlöpare/EAJY ++ medlöperi/ABY +++medmusiker/EAJY ++ medmänniska/EAGY ++ medmänsklig/OY ++ medmänsklighet/ADY ++@@ -38105,16 +39985,21 @@ mefitisk/OY ++ megabit/Y ++ megabyte/Y ++ megafon/AHDY ++--megahertz/XZ +++-megahertz/XZU +++megahertz/Y +++megahit/AY +++megahittar/AJY +++megahitten/AY ++ megakaryocyt/AHDY ++ megalit/AHDX ++ megalitgrav/ADGY ++ megalitisk/OY ++--megapixel/XZ +++-megapixel/XZU ++ megapixel/EAIY ++ megastjärna/EAGY ++ megaton/Y ++-megawatt/AYX +++megawatt/ADYX +++-megawatts/XZU ++ meja/NMAPD ++ mejeri/ABHYX ++ mejeriindustri/EAHY ++@@ -38124,6 +40009,7 @@ mejerivara/EAGY ++ mejl/ABDYX ++ mejla/NMADY ++ mejladress/HDY +++mejram/ADY ++ mejsel/EAIY ++ mejsla/NAPY ++ meka/NMAD ++@@ -38144,7 +40030,7 @@ melanom/ABDY ++ melass/DY ++ melatonin/ABY ++ Melbourne/AX ++-melera/MPY +++melerad/NQY ++ melismatisk/OY ++ Melker/A ++ mellan/YX ++@@ -38164,6 +40050,7 @@ mellankrigstid/AHDY ++ mellanlagrad/NQY ++ mellanled/AHDY ++ mellanlägg/ABDY +++mellanmål/ABDY ++ mellanmänsklig/OY ++ mellanrum/FCAY ++ mellanskillnad/AHDY ++@@ -38226,12 +40113,13 @@ meningsl ++ menisk/AHDY ++ menlig/OY ++ menlös/OY +++menlöshet/ADY ++ mens/D ++ mensskydd/ABDY ++ menstruation/AHDYv ++ menstruera/MY ++ mensvärk/ADY ++-mental/OYX +++mental/OQYX ++ mentalhygienisk/OY ++ mentalism/ADY ++ mentalistisk/OY ++@@ -38251,7 +40139,6 @@ mentorsprogram/FCAY ++ menuett/AHDY ++ meny/EAHYX ++ menyalternativ/ABDY ++-menyrad/AHDY ++ menystyrd/OY ++ mer- ++ mera/J ++@@ -38288,25 +40175,24 @@ merv ++ mervärdesskattelag/ADY ++ mes/DG ++ mesaktig/OY +++mesallians/HDY ++ mesig/OPQY ++ mesojonisk/OY ++ mesolitisk/OY ++ meson/AHDY ++-mesopisk/OY +++mesopisk/O ++ mesopotamisk/OY ++ mesosfärisk/OY ++-mesotrof/OY +++mesotrof/O ++ mesozoisk/OY ++ mess/BDY ++ messa/NMAY ++ Messerschmitt/A ++ Messias/X ++ Messing/A ++-mest/Y ++-mesta +++mest/OQ ++ mestadels ++ mestbjudande/Y ++-meste ++ meta/NMADX ++ metabolisera/NMAPDY ++ metabolisering/ADY ++@@ -38315,14 +40201,17 @@ metacentrisk/OY ++ metadata/XZ ++ metadon/ABX ++ metafor/ATHDY +++metaforik/ADY ++ metafysik/ADY ++ metafysisk/OY ++ metall/ATHDYX +++metallare/EAJY ++ metallartad/NQY ++ metallbearbetningsmaskin/AHDY ++ metallbearbetningsmaskinindustri/EAHY ++ metallbeklädd/OY ++ metallbelagd/OY +++metallbit/ADGY ++ metallbågsvetsning/ADGY ++ metalldel/ADGY ++ metallduk/ADGY ++@@ -38375,7 +40264,7 @@ meter/EAJIY ++ meterbred/OY ++ meterdjup/OY ++ meterhög/OY ++--meters/XZ +++-meters/XZU ++ metersystem/ABDY ++ metervis ++ metkrok/ADGY ++@@ -38400,7 +40289,9 @@ metrik/ADY ++ metrisera/MY ++ metriserbar/OY ++ metrisk/OY +++metro/EAY ++ metrologisk/OY +++metronom/AHDY ++ metropol/AHDY ++ metspö/ECABY ++ metspöna/AY ++@@ -38413,6 +40304,7 @@ mexikan/AHDY ++ mexikansk/OQY ++ mexikanska/EAGY ++ Mexiko/AX +++meze/Y ++ mezzosopran/AHDY ++ MFF/r ++ m.fl. ++@@ -38458,10 +40350,10 @@ migrera/MDY ++ migrering/ADGYv ++ migrän/ADYX ++ Miguel/A ++-Mika/A +++Mika/AR ++ Mikaela/AJ ++ Mikaels ++-Mike/A +++Mike ++ mikra/NMAPDY ++ mikro/EAYX ++ mikroanalys/HDY ++@@ -38478,16 +40370,18 @@ mikrofinansinstitut/ABDY ++ mikrofon/AHDYX ++ mikrofonjack/ABDY ++ mikrofotografera/MY +++mikrogram/FCAY ++ mikrokanonisk/OY ++ mikrokemisk/OY ++ mikroklimatisk/OY ++-mikrokod/AHDY +++mikrokod/AHD ++ mikrokornig/OY ++ mikrokosmisk/OY ++ mikrokosmos/Y ++ mikrokredit/AHDY ++ mikrokreditlån/ABDY ++ mikromekanisk/OY +++-mikrometers/XZU ++ mikrometrisk/OY ++ mikronesisk/OY ++ mikronisera/MY ++@@ -38496,7 +40390,8 @@ mikroskop/ATBDY ++ mikroskopera/MY ++ mikrostruktur/AHDY ++ mikrovågsugn/ADGY ++-mil/A +++mil/AD +++-mila/sZvfU ++ mila/EAGY ++ Milan/AX ++ Milano/AX ++@@ -38505,7 +40400,6 @@ mild/OPQ ++ mildhet/ADYv ++ mildra/NMAPY ++ mildögd/OY ++-mile/EAY ++ milersättning/ADY ++ Miliband/A ++ milis/HDYX ++@@ -38533,13 +40427,13 @@ milj ++ miljard/AHDYX ++ miljardbud/ABDY ++ miljarddel/ADGY ++--miljarders/XZ +++-miljarders/XZU ++ miljardförlust/AHDY ++ miljardtals ++ miljardär/AHDY ++ miljon/AHDYX ++ miljondel/ADGY ++--miljoner/XZv +++-miljoner/sZvUf ++ miljonsatsning/ADGY ++ miljonstad/ADY ++ miljonstäder/AJY ++@@ -38573,15 +40467,17 @@ millennieskifte/FECAY ++ millennium/AJY ++ Miller/A ++ milligram/FCAY +++-milligrams/XZU ++ milliliter/EAJYX ++--milliliters/XZ +++-milliliters/XZU ++ millimeter/EAIYX ++--millimeters/XZ +++-millimeters/XZU ++ million/AHDY ++ millisekund/AHDY ++ millisievert/Y +++milliwatt/ADY +++-milliwatts/XZU ++ millopp/ABDY ++--mils/XZ ++ milsbred/OY ++ milslång/OY ++ milstolpe/EAGY ++@@ -38589,6 +40485,7 @@ milsvid/OY ++ miltals ++ Milton/A ++ mima/NMAPD +++mimare/EAJY ++ mimartist/AHDY ++ mimik/ADY ++ mimisk/OY ++@@ -38621,23 +40518,24 @@ mineralvattenindustri/EAHY ++ mineralvattenkälla/EAGY ++ minering/ADGY ++ minerotrof/OY ++-minfri/OY ++ minfällande/Y ++ minfällar/XZ ++ minfällare/EAJY ++ minfält/ABDY ++ mingel/FCAY ++ mingla/NMADY ++-minhund/ADGY +++minhund/ADG ++ mini/XZ ++ miniatyr/AHDYX ++ miniatyrisera/MY ++ miniatyrporträtt/ABDY ++ minibar/AHDY +++minibil/ADGY ++ minibuss/DGY ++ minidator/AEHY ++ miniformat/ABY ++ minigolf/ADYX +++minikök/ABDY ++ minimal/OPQY ++ minimalism/ADY ++ minimalist/ATHDY ++@@ -38676,12 +40574,14 @@ minnesord/ABY ++ minnesrik/OPY ++ minnessak/AHDY ++ minnessten/ADGY +++minnestal/ABDY ++ minnesvärd/OY ++ minns ++ minoisk/OY ++ minoritet/AHDYv ++ minoritetsregering/ADGY ++ minoritetsåterremittering/ADGY +++minröjare/EAJY ++ minröjning/ADGY ++ minsann ++ minska/NMAPBY ++@@ -38697,6 +40597,7 @@ minsvepare/EAJY ++ minsökar/XZ ++ minsökare/EAJY ++ mint/ADY +++mintgrön/OY ++ mintsmak/AHDY ++ minus/BDYX ++ minusgrad/AHDY ++@@ -38706,8 +40607,9 @@ minuspol/AHDY ++ minuspoäng/ADY ++ minustecken/FCAY ++ minut/AHDYX ++--minuters/XZ ++--minuterstur/HD +++-minutare/EAJY +++-minuters/XZU +++-minuterstur/HDY ++ minutiös/OQY ++ minutlig/OY ++ minutvisar/XZ ++@@ -38782,6 +40684,7 @@ misskl ++ missklädsam/MY ++ missklädsamt/Y ++ misskreditera/NMAPDY +++misskreditering/ADGY ++ misskund/Y ++ misskundsam/MY ++ misskundsamt/Y ++@@ -38819,6 +40722,7 @@ misstas/Y ++ misstecknad/NQY ++ misstog/AY ++ misstolka/NMAPY +++misstolkning/ADGY ++ misstro/NKEMAY ++ misstroende/CAYX ++ misstroendevotum/ABDY ++@@ -38831,6 +40735,7 @@ misst ++ misstänkliggjorde/AOY ++ misstänkliggjort/AY ++ misstänkliggöra/AJBRY +++misstänkliggörande/FEY ++ misstänkliggörs/Y ++ misstänksam/KMLY ++ misstänksamhet/ADYv ++@@ -38857,8 +40762,7 @@ mistral/ADY ++ misär/AHDY ++ Mitelman/A ++ mitokondrie/EAIY ++-mitos/HDY ++-mitotisk/OY +++mitotisk/O ++ mitra/EAGY ++ mitraprydd/OY ++ Mitsubishi/AX ++@@ -38880,7 +40784,7 @@ mittf ++ mittgång/ADGY ++ Mitthögskolan/A ++ mittlinje/EAIY ++-mittläge/FECAY +++mittläge/FECA ++ mittoceanisk/OY ++ mittperiod/AHDY ++ mittplan/ADY ++@@ -38890,16 +40794,18 @@ mittp ++ mitträcke/FECY ++ mittuppslag/ABDY ++ mittzon/AHDY ++-mix/DG +++mix/D +++mixa/NAPDI ++ mixer/EAI ++ mixerstav/ADGY ++-mixotrof/OY +++mixotrof/AOHDY ++ mixtra/NMADY ++ mjau ++ mjugg ++ mjuk/OPQ ++ mjuka/NMA ++ mjukgjord/OY +++mjukglass/DYX ++ mjukglödgning/ADGY ++ mjukgörande/Y ++ mjukgörare/EAJY ++@@ -38911,6 +40817,7 @@ mjuklandning/ADGY ++ mjukna/MY ++ mjukost/ADGY ++ mjukplast/AHDY +++mjukporr/ADY ++ mjukryggad/NQY ++ mjukskalig/OY ++ mjukstart/AHDY ++@@ -38948,6 +40855,7 @@ mj ++ mjölkbud/ABDY ++ mjölkchoklad/ADY ++ mjölkdrink/ADGY +++mjölkerska/EAGY ++ mjölkflaska/EAGY ++ mjölkig/OY ++ mjölkkanna/EAGY ++@@ -38962,7 +40870,7 @@ mj ++ mjölksyre/XZ ++ mjölktand/AJDY ++ mjölkvit/OY ++-mjölmix/DGY +++mjölmix/DG ++ mjölnar/XZ ++ mjölnare/EAJY ++ MKB/r ++@@ -38972,13 +40880,12 @@ mm/A ++ mms-/XZ ++ mnemoteknisk/OY ++ mo/EG ++-moarera/MY ++ mobb/ADY ++-mobba/NAPDIY ++-mobbare/EAY +++mobba/NMAPDY +++mobbare/EAJY ++ mobbing/ADY ++-mobbla/NMADY ++ mobbning/ADYvf +++mobboffer/FCAY ++ Moberg/A ++ mobil/AOHQDYX ++ mobilapp/ADGY ++@@ -38988,7 +40895,7 @@ mobiliseringsofficer/EAHDY ++ mobiliseringsofficerare/JY ++ mobilitet/ADY ++ mobilladdare/EAJY ++-mobilnät/ABDY +++mobilnäts/XZ ++ mobilporto/FECAY ++ mobilprat/ABY ++ mobilsamtal/ABDY ++@@ -39000,12 +40907,14 @@ mo ++ Moçambique/AX ++ mocka/NEMAPDG ++ mod/ANx +++modal/OY ++ moddig/OY ++ mode/FECAIYX ++ Mode/A ++ modebetonad/NQY ++ modebransch/ADY ++ modeexpert/AHDY +++modehus/BDY ++ modell/AHDYX ++ modellberäkning/ADGY ++ modellera/NEMAPY ++@@ -39024,7 +40933,8 @@ moderatledd/OY ++ moderator/AEHY ++ moderbolag/ABDY ++ modercell/AHDY ++-moderera/NMAPY +++moderera/NMAPDY +++moderering/ADGY ++ moderiktig/OY ++ moderkaka/EAGY ++ moderkort/ABDY ++@@ -39054,6 +40964,7 @@ modifiera/NMAPY ++ modifiering/ADGYv ++ modifikation/AHDYv ++ modig/OPQY +++modiga/AY ++ modlös/OY ++ modstulen/MY ++ modul/AHDY ++@@ -39073,8 +40984,6 @@ mognadsprocess/HDY ++ mogul/AHDY ++ mohair/ADY ++ mohikan/AHDY ++-moiré/AEHY ++-moirera/MY ++ moj/AB ++ mojna/MY ++ mojäng/AHDY ++@@ -39105,6 +41014,7 @@ molnleverant ++ molnlösning/ADGY ++ molnplattform/ADGY ++ molnsatsning/ADGY +++molnsky/EAG ++ molnstrategi/EAHY ++ molntjänst/AHDY ++ molntung/OY ++@@ -39151,13 +41061,13 @@ monografi/EAHY ++ monografisk/OY ++ monogram/FCAYX ++ monojaktplan/ABDY +++monokel/EAIY ++ monokrom/OY ++ monokromatisk/OY ++ monokultur/AHDY ++ monolitisk/OY ++ monolog/AHDY ++ monoman/OQY ++-monomer/AHDY ++ monopol/ABDYXU ++ monopolisera/NMAPDY ++ monopolisering/ADGY ++@@ -39172,11 +41082,9 @@ monotoxisk/OY ++ monster/FCAJYX ++ monstrum/Y ++ monstruös/OQY ++-monströs/OY ++ monsun/AHD ++ monsunregn/ABDY ++ montage/ECAYX ++-monté/AEY ++ Montenegro/AX ++ monter/EAIY ++ montera/NMAPY ++@@ -39201,6 +41109,7 @@ mor/ATY ++ mora/EGY ++ Mora/AX ++ moraklocka/EAGY +++morakniv/ADGY ++ moral/ATHDYX ++ moralisera/MBY ++ moralism/ADY ++@@ -39211,7 +41120,7 @@ moralpredikan/AY ++ moraluppfattning/ADGY ++ moralupplösning/ADY ++ moras/BDY ++-morasig/OY +++morasig/O ++ moratorium/AJY ++ morbid/PQY ++ morbida/Y ++@@ -39223,6 +41132,7 @@ mordbrand/AJDY ++ morddömd/OQY ++ mordfall/ABDY ++ mordförsök/ABDY +++mordgåta/EAGY ++ mordhot/ABDY ++ mordhota/NMAPY ++ mordkväll/ADGY ++@@ -39274,6 +41184,7 @@ morot/AJDYv ++ morotsfärgad/NQY ++ morotsnudlar/AJY ++ morotsröd/OY +++morr/ABY ++ morra/NMADY ++ Morrell/A ++ morrhår/ABDY ++@@ -39296,12 +41207,13 @@ mosa/NMAPD ++ mosaik/AHDYX ++ mosaiksöm/FAIY ++ mosaisk/OY ++-mosartad/NQY ++ Mose/A ++ mosig/OY ++ mosippa/EAGY ++ moské/AEHYX +++moskit/AHDYX ++ moskitbett/ABDY +++moskitnät/ABDY ++ moskovit/ATHDY ++ Moskva/AX ++ Moskvitch/A ++@@ -39316,27 +41228,29 @@ Mosul/A ++ mota/NMAP ++ Motala/AX ++ motarbeta/NMAPY +++motattack/AHDY ++ motbevis/BDY ++ motbevisa/NMAPY +++motbild/AHDY ++ motbjudande/Y ++ motbok/ADY ++ motbokslös/OY ++ motbud/ABDY ++ motböcker/AJY ++ motdrag/ABDY +++moteld/ADY ++ motelektromotorisk/OY ++ motell/ABDY ++ motett/AHD ++ motettkör/AHDY ++-motfas/HDY ++-motflank/AHDY +++motfas/HD ++ motfråga/EAGY ++ motförslag/ABDY ++ motgift/ABHY ++ motgång/ADGY ++ mothugg/ABDY ++ mothårs ++-motig/OY +++motig/OPY ++ motighet/AHDYv ++ motion/AHDYv ++ motionera/NMABY ++@@ -39350,14 +41264,16 @@ motivat ++ motivera/NMAPDY ++ motivering/ADGYv ++ motkandidat/AHDY ++-motkast/ABDY +++motkast/ABD ++ motkopplad/NQY +++motkraft/AHDY +++motkrav/ABDY ++ motköp/ABDYv ++ motköpsavtal/ABDY ++-motlagd/OY ++ motljus/BY ++ motlut/ABDY ++ motläsa/KQLAJDRY +++motmedel/FCAY ++ motocross/DYX ++ motoffensiv/AHDY ++ motor/ATEHYXU ++@@ -39404,7 +41320,9 @@ motsatsf ++ motsatt/AOQY ++ motsattes/Y ++ motse/NKMAY +++motsida/EAGY ++ motsols +++motspel/ABDY ++ motspelar/XZ ++ motspelare/EAJY ++ motspelerska/EAGY ++@@ -39476,12 +41394,14 @@ Mozart/AX ++ Mozilla/AX ++ mozzarella/EAY ++ mp/r +++mp3/r ++ MPR/r ++ MR/r ++ MRSA/r ++ ms-/XZ ++ MTR/r ++ MTV/r +++MTV3/r ++ mu ++ Muammar/A ++ mucka/NMAPDY ++@@ -39496,18 +41416,23 @@ muffins/BDYX ++ muffinsform/ADGY ++ muffinsplåt/ADGY ++ mufflonfår/ABDY +++mufti/EAHY ++ Mugabe/A ++ mugg/ADGY ++ Muhammed/AX +++muhammedan/AHDY +++muhammedansk/OQY +++mujahedin/A ++ mula/EARGY ++ mulatt/AHDY ++ mule/EGY ++ mulet/Y ++ muljera/MY ++ mull/ADY ++-mulla/EADGY +++mulla/EAGY ++ mullartad/NQY ++ mullbänk/ADGY +++mullbär/ABDY ++ Mulle/A ++ muller/CAY ++ mullfattig/OY ++@@ -39516,10 +41441,12 @@ mullig/OPQY ++ mullighet/ADYv ++ mullra/NMADY ++ Mullsjö/AX +++mulltoa/EAY ++ mullvad/ADGYv ++ mullvadsfärgad/NQY ++ mullvadshög/ADGY ++ mulna/MY +++mulning/ADGY ++ multi/XZ ++ multiaktiv/OY ++ multietnisk/OY ++@@ -39535,7 +41462,7 @@ multimedie/XZ ++ multimeter/EAIY ++ multimiljonär/AHDY ++ multinationell/OY ++-multipel/EMAJY +++multipel/EMAJYX ++ multipelborrmaskin/AHDY ++ multipelkopplad/NQY ++ multiplicera/NMAPY ++@@ -39545,6 +41472,7 @@ multiplikativ/OY ++ multiresistent/OY ++ multisektoriell/OY ++ multna/MPY +++multum/Y ++ mulåsna/EAGY ++ mulåsne/XZ ++ mumie/EAIY ++@@ -39554,6 +41482,7 @@ mumifiera/MY ++ mumla/NMADY ++ mumma/EAY ++ mummel/CAY +++mums ++ mumsa/NMAY ++ mumsig/OPY ++ mun/AFYX ++@@ -39582,6 +41511,7 @@ Munktell/A ++ munlås/BDY ++ munnar/AJY ++ munsbit/ADGY +++munskydd/ABDY ++ munskänk/ADGY ++ munspel/ABDY ++ munstycke/FECAY ++@@ -39621,7 +41551,7 @@ Murray/A ++ murreva/EAGY ++ murrig/OPY ++ murrighet/ADY ++-mursand/ADY +++mursand/AD ++ murslev/ADGY ++ mursten/ADGY ++ murstock/ADGY ++@@ -39636,6 +41566,8 @@ muschprydd/OY ++ muscovadosocker/CAY ++ museal/OY ++ musei/XZ +++museichef/AHDY +++museiföremål/ABDY ++ museimässig/OY ++ museiråd/ABDY ++ museisal/ADGY ++@@ -39650,6 +41582,7 @@ musicera/NMADY ++ musik/AHDYXU ++ musikal/AOTHDYX ++ musikalier/AJY +++musikalisk/QY ++ musikalitet/ADY ++ musikant/ATHDY ++ musiker/EY ++@@ -39657,7 +41590,6 @@ musikfil/AHDY ++ musikolog/AHDY ++ musikologi/EAY ++ musiköra/CAY ++-musivisk/OY ++ muskedunder/FCAY ++ muskel/EAJYX ++ muskelanspänning/ADGY ++@@ -39717,6 +41649,7 @@ mutterdragare/EAJY ++ mutterdragarsats/HDY ++ muttra/NMADIY ++ mutåtal/ABDY +++mW ++ MVG/r ++ mycel/ABHY ++ myceliet/AY ++@@ -39729,11 +41662,13 @@ mygga/EAGY ++ myggbett/ABDY ++ myggbiten/MY ++ myggmedel/FCAY +++myggnät/ABDY ++ myggolja/EAGY ++ myggplåga/EAGY ++ mygla/NMADY ++ myglare/EAJYz ++-mygleri/CABHY +++mygleri/ABHY +++mygling/ADY ++ mykolog/ATHDY ++ mykologi/EAY ++ myling/ADGY ++@@ -39756,7 +41691,6 @@ mynta/NMAPY ++ myntablad/ABDY ++ myntan/A ++ myntare/EAJYz ++-myntfack/ABDY ++ myntfot/ADY ++ myntor/AJ ++ myntverk/ABDY ++@@ -39766,19 +41700,29 @@ myon/AHD ++ myopi/EADY ++ myopisk/OY ++ myosin/ABY ++-myr/ADGX ++-myra/EAGY +++myr/AD +++myra/EAIG ++ Myrdal/A ++ Myresjö/AX ++ myriad/AHDY ++ myrkott/ADGY +++myrkrypning/ADGY +++myrmalm/AHDY +++myrmark/AHDY ++ myrra/EAY ++ myrslok/ADGY ++ myrstack/ADGY +++myrsteg +++myrstig +++myrstigar +++myrstigens +++myrsyra/EAGY ++ myrten/AIY ++ myrtenbuske/EAGY ++ myrtenkrans/Y ++ myrtenkrona/EAGY +++myrväg/ADGY +++myrägg/ABDY ++ mys/B ++ mysa/KLDR ++ mysfaktor/AEHY ++@@ -39831,7 +41775,7 @@ myxomatos/DY ++ myxödem/ABY ++ myxödemsymptom/ABDY ++ myxödemsymtom/ABDY ++-må/N +++må/NL ++ måbär/ABDY ++ måbärsbuske/EAGY ++ mådde ++@@ -39857,28 +41801,36 @@ m ++ måleriarbete/FECAY ++ målerisk/OQY ++ målfarlig/OY +++målfest/AHDY ++ målfoto/FECAY +++målgest/AHDY ++ målgrupp/AHDY +++målgång/ADY +++målgård/ADGY ++ målgörare/EAJY ++ Målilla/AX ++ målinriktad/NQY +++målkalas/BDY +++målkvot/AHDY ++ målla/EAGY ++ mållinje/EAIY ++-mållös/OY +++mållös/OQY ++ mållöshet/ADY ++ målmedveten/KMY ++ målning/ADGYvf ++ målområde/FECAY ++ målorienterad/NQY +++målpass/BDY ++ målrekord/ABDY ++ målrelaterad/NQY ++ målrik/OPY ++--måls/XZ +++-måls/XZU ++ målskillnad/AHDY ++ målskytt/ADGY ++ målsman/AFY ++ målsmanskap/ABY ++ målsmän/AFY +++målsnöre/FECAY ++ målspottare/EAJY ++ målstolpe/EAGY ++ målstyrd/OY ++@@ -39889,13 +41841,16 @@ m ++ Målsäter/A ++ målsättning/ADGYv ++ målsökande/Y +++måltavla/EAGY ++ måltid/AHDYvf +++måltjuv/ADGY +++måltorka/EAY ++ måluppfyllelse/EAIY ++ måluppställning/ADGY ++ målvakt/AHDYv ++ måna/MJ ++ månad/AHDYv ++--månaders/XZ +++-månaders/XZU ++ månadsavgift/AHDY ++ månadsavlönad/NQY ++ månadskort/ABDY ++@@ -40026,8 +41981,9 @@ M ++ Mårtensson/A ++ mås/DG ++ måsskrik/ABDY ++-måst/DY ++-måste/FCAY +++måst +++måste/FECAY +++måstematch/AHDY ++ måsunge/EAGY ++ måsvinge/EAGY ++ måsägg/ABDY ++@@ -40061,10 +42017,12 @@ M ++ Mälaröarna/A ++ män/AFY ++ mängd/AHDYX +++mängdlära/EAY ++ människa/EAGY ++ människo/XZ ++ människoande/EAY ++ människoapa/EAGY +++människoarm/ADGY ++ människoart/AHDY ++ människofientlig/OY ++ människohaj/ADGY ++@@ -40101,7 +42059,6 @@ m ++ märgelblandad/NQY ++ märgfull/OY ++ märgfylld/OY ++-märgig/OY ++ märglig/OY ++ märglös/OY ++ märgpipa/EAGY ++@@ -40114,7 +42071,7 @@ m ++ märklig/OPQY ++ märklighet/AHDY ++ märkning/ADGYvf ++-märkord/ABDY +++märkord/ABD ++ märksnöre/FECAY ++ märksnöresats/HDY ++ märkvärdig/OPQY ++@@ -40172,23 +42129,26 @@ m ++ mätdata/AY ++ mätdon/ABDY ++ mätetal/ABDY ++-mätfel/ABDY +++mätfel/ABD ++ mätföretag/ABDY ++ mätglas/BDY ++ mätinstitut/ABDY ++ mätinstrument/ABDY ++-mätintyg/ABDY ++-mätkolv/ADGY +++mätintyg/ABD +++mätkolv/ADG ++ mätmetod/AHDY ++ mätning/ADGYvf ++ mätningstal/ABDY ++ mätperiod/AHDY ++ mätpunkt/AHDY ++-mätregel/EAJY +++mätregel/EAJ ++ mätresultat/ABDY ++-mätsnöre/CAY +++mätsnöre/CA ++ mätstation/AHDY +++mätstav/ADG ++ mätsticka/EAGY +++mätstång/AD +++mätstänger/AJ ++ mätsystem/ABDY ++ mätta/NMAPDY ++ mätteknik/AHDY ++@@ -40268,7 +42228,7 @@ m ++ mönstring/ADGYv ++ mönstringsskyldig/OY ++ mör/P ++-möra/MLAP +++möra/NMAP ++ mörbulta/NMAPY ++ mörbultning/ADY ++ Mörbylånga/AX ++@@ -40279,8 +42239,10 @@ m ++ mörderska/EAGY ++ mörhet/ADY ++ mörjig/OY ++-mörk/PQ +++mörk/PQR ++ mörka/NMAPBY +++mörkares +++mörkastes ++ mörkbetsad/NQY ++ mörkblommig/OY ++ mörkblond/OQY ++@@ -40332,7 +42294,7 @@ m ++ mötande/Y ++ möte/FECAYv ++ n/r ++-nabbad/NQY +++nabob/AHDY ++ nabofolk/ABDY ++ naboskap/ABY ++ nacka/NAPIY ++@@ -40360,6 +42322,7 @@ nackst ++ nackstödskudde/EAGY ++ nacksving/ABDY ++ Nadal/A +++nadir/Y ++ Nadja/A ++ nafs/BY ++ nafsa/NMAPDY ++@@ -40410,17 +42373,18 @@ namibiska/EAGY ++ namn/ABQDYX ++ namna/MRY ++ namnaktie/EAIY ++-namndel/ADGY +++namnbyte/FECAY +++namndel/ADG ++ namnförtydligande/FECAY ++ namnge/NMAY ++-namngiva/AJRY +++namngiva/AJDRY ++ namngiven/MY ++ namngiver/Y ++ namngivit/AY ++-namngivne ++ namngivning/ADGY ++ namngivs/Y ++ namnkunnig/OPQY +++namnlag/ADGY ++ namnlista/EAGY ++ namnlös/OY ++ namnsdag/ADGYv ++@@ -40431,7 +42395,7 @@ namn ++ Nancy/A ++ nand-/XZ ++ nanometer/EAIY ++--nanometers/XZ +++-nanometers/XZU ++ nanosekund/AHDY ++ nanoteknik/ADY ++ Nantes ++@@ -40488,12 +42452,12 @@ narrk ++ narrspegel/EAIY ++ narrspel/ABDY ++ narval/ADGY ++-narvig/OY ++ nasal/OPQY ++ nasalera/MY ++ nasare/EAJ ++ nasaré/AEHY ++ Nasdaq/AX +++natband/ABDY ++ Nathalie/A ++ nation/AHDYvf ++ national/XZ ++@@ -40514,6 +42478,7 @@ nationalpark/AHDYv ++ nationalromantisk/OY ++ nationalskuld/AHDY ++ nationalsocialist/ATHDYX +++nationalstat/AHDY ++ nationalsång/AHDY ++ nationell/OQ ++ nativ/O ++@@ -40532,19 +42497,24 @@ nattaxa/EAGY ++ nattbio/EAY ++ nattblind/OY ++ nattblå/OY +++nattbuss/DGY ++ nattduksbord/ABDY ++ nattetid/Y ++ nattfack/ABDY ++ nattfjäril/ADGY ++ nattfly/EABY +++nattflyg/ABY ++ nattflyna/AY ++ nattgäst/AHDY +++nattis/BDGY ++ nattjänstgöring/ADYv +++nattklubb/ADGY ++ nattkvarter/ABDY ++ nattlampa/EAGY ++ nattlig/OY ++ nattlinne/FECAY ++ nattliv/ABDY +++nattmål/ABDY ++ nattmössa/EAGY ++ nattning/ADGY ++ nattparkera/MY ++@@ -40553,7 +42523,9 @@ nattro/EAY ++ nattrock/ADGY ++ nattskjorta/EAGY ++ nattsuddare/EAJY +++nattsvart/OY ++ nattsärk/ADGY +++nattsömn/ADY ++ nattuggla/EAGY ++ nattvak/ABY ++ nattvakt/AHDYv ++@@ -40601,6 +42573,7 @@ naturlighet/ADY ++ naturligtvis ++ naturnära/Y ++ naturnödvändig/OY +++naturskog/ADGY ++ Naturskyddsföreningen/A ++ naturskyddslag/ADGY ++ naturskön/OY ++@@ -40614,13 +42587,13 @@ naturvetare/EAJY ++ naturvetenskap/AHDY ++ naturvetenskaplig/OY ++ naturvidrig/OY ++-naturvin/ABHY ++-naturvit/OY +++naturvin/ABH +++naturvit/O ++ naturvård/ADY ++ Naturvårdsverket/A ++ naturvän/AFY ++ naturvänner/AJY ++-naturäng/ADGY +++naturäng/ADG ++ naurisk/OY ++ nautik/AHDY ++ nautiker/EY ++@@ -40643,6 +42616,7 @@ nazi/XZ ++ nazi-eran/A ++ nazism/ADY ++ nazist/ATHDYX +++nazistiske/Y ++ nazitysk/OQY ++ Nazityskland/A ++ Nazi-Tyskland/A ++@@ -40660,8 +42634,7 @@ nearktisk/OY ++ nebulosa/EAGY ++ nebulös/OY ++ necessär/AHDY ++-ned ++-ned- +++ned/b ++ nedaddera/MY ++ nedan/Y ++ nedanför ++@@ -40677,7 +42650,6 @@ nedblodad/NQY ++ nedblåst/OY ++ nedbläckad/NQY ++ nedbländning/ADGY ++-nedblödd/OY ++ nedbringa/NMAPDY ++ nedbringning/ADY ++ nedbrunnen/MY ++@@ -40700,14 +42672,9 @@ neddekad/NQY ++ neddimpande/Y ++ neddoppad/NQY ++ neddoppning/ADGY ++-neddra/Y ++-neddraga/ADRY ++ neddragen/MY ++-neddrager/Y ++-neddragit/AY ++ neddragning/ADGYvf ++ neddrivning/ADGY ++-neddrog/AY ++ neddrogad/NQY ++ neddämpad/NQY ++ neddämpning/ADGY ++@@ -40753,11 +42720,10 @@ nedf ++ nedfällning/ADGYv ++ nedfärd/AHDY ++ nedför ++-nedförd/OY +++nedförd/O ++ nedföring/ADGY ++ nedförsbacke/EAGY ++ nedförslöpa/EAGY ++-nedgasad/NQY ++ nedgjorda/RY ++ nedgjorde/OY ++ nedgjort/AY ++@@ -40771,7 +42737,7 @@ nedgr ++ nedgrävning/ADGY ++ nedgående/CAY ++ nedgång/ADGYv ++-nedgången/MY +++nedgången/KMY ++ nedgöra/AJDRY ++ nedgörs/Y ++ nedhalad/NQY ++@@ -40788,11 +42754,11 @@ nedhuggning/ADY ++ nedhukad/NQY ++ nedhyssjad/NQY ++ nedhårad/NQY ++-nedhälld/OY +++nedhälld/O ++ nedhämtad/NQY ++ nedhämtning/ADY ++ nedhängande/Y ++-nedhängd/OY +++nedhängd/O ++ nedifrån ++ nedisad/NQY ++ nedisning/ADYv ++@@ -40801,7 +42767,7 @@ nedjustering/ADGY ++ nedkalla/NMAPDY ++ nedkallelse/EAIY ++ nedkammad/NQY ++-nedkapad/NQY +++nedkapad/NQ ++ nedkast/ABDY ++ nedkastad/NQY ++ nedkastning/ADY ++@@ -40824,7 +42790,7 @@ nedknackning/ADY ++ nedknapp/ADGY ++ nedknarkad/NQY ++ nedknuffad/NQY ++-nedkokad/NQY +++nedkokad/NQ ++ nedkomma/KDY ++ nedkommen/MY ++ nedkomst/AHDY ++@@ -40848,7 +42814,7 @@ nedlagd/OY ++ nedlagt/AY ++ nedlegad/NQY ++ nedliggande/Y ++-nedlocka/MY +++nedlocka/M ++ nedlortad/NQY ++ nedlugnad/NQY ++ nedlusad/NQY ++@@ -40874,7 +42840,7 @@ nedmyllad/NQY ++ nedmyllning/ADY ++ nedmörk/OY ++ nednött/OY ++-nedoljad/NQY +++nedoljad/NQ ++ nedom ++ nedpackad/NQY ++ nedpackning/ADY ++@@ -40948,7 +42914,7 @@ nedskakning/ADGY ++ nedskalad/NQY ++ nedskalning/ADGY ++ nedskickad/NQY ++-nedskjuta/KLAJY +++nedskjuta/KLAJ ++ nedskjuten/KMY ++ nedskjutning/ADGY ++ nedskottad/NQY ++@@ -41024,8 +42990,8 @@ nedstucken/KMY ++ nedstukad/NQY ++ nedstuvad/NQY ++ nedstuvning/ADGY +++nedstämd/OQY ++ nedstämdhet/ADY ++-nedstämma/KLAJODY ++ nedstängd/O ++ nedstängning/ADY ++ nedstänkning/ADY ++@@ -41049,7 +43015,7 @@ neds ++ nedsätta/LAJDY ++ nedsätter/Y ++ nedsättning/ADGYvf ++-nedsöla/MPY +++nedsölad/NQY ++ nedsölning/ADY ++ nedsövd/OY ++ nedsövning/ADY ++@@ -41141,13 +43107,12 @@ negress/HDY ++ Neil/A ++ nej/ABDr ++ nejd/AHDY ++-nejdå ++ nejlika/EAGY ++ nejlikbroskskivling/ADGY ++ nejlikedoft/ADY ++ nejonöga/CAY ++ nejonögon/ADY ++-nejsida/EAGY +++nejsidan/AY ++ nejsägar/XZ ++ nej-sägare/EAJY ++ nejsägare/EAJY ++@@ -41163,12 +43128,11 @@ nekrotisk/OY ++ nektar/AEY ++ nektarfylld/OY ++ nektarin/AHDY ++-nematisk/OY +++nematisk/O ++ nemesis/DY ++ neodym/ABY ++ neofascism/ADY ++ neofili/EAY ++-neofyt/AHDY ++ neoklassicism/ADY ++ neoklassiker/EAJY ++ neoklassisk/OY ++@@ -41186,6 +43150,7 @@ neonatalv ++ neonatologi/EAY ++ neongas/HDY ++ neonljus/BDY +++neonrör/ABDY ++ neorealism/ADY ++ Nepal/AX ++ nepales/THDY ++@@ -41213,7 +43178,6 @@ nerdragen/MY ++ nerdragning/ADGY ++ nerdrogad/NQY ++ nerdämpad/NQY ++-nerevid ++ nerfall/ABDY ++ nerfart/AHDY ++ nerfartsväg/ADGY ++@@ -41224,6 +43188,8 @@ nerf ++ nerförsbacke/EAGY ++ nerförslöpa/EAGY ++ nergrävd/OY +++nergång/ADGY +++nergången/KMY ++ nerifrån ++ nerkokning/ADY ++ nerladdad/NQ ++@@ -41237,9 +43203,11 @@ nerl ++ nerpackad/NQ ++ nersjunkne/Y ++ nerslagen/M +++nersliten/KMY ++ nersmutsad/NQY ++ nersparkad/NQ ++ nertill +++nertryckt/OQY ++ nerv/AHDYX ++ nervcell/AHDY ++ nervgas/HDY ++@@ -41311,6 +43279,7 @@ neutralitet/ADYv ++ neutralitetspolitik/ADY ++ neutralitetsprincip/ADY ++ neutralställd/OY +++neutriner/AJY ++ neutrino/EAY ++ neutron/ATHDYX ++ neutronabsorberande/Y ++@@ -41358,12 +43327,12 @@ niding/ADGY ++ nidingsdåd/ABDY ++ nidingsverk/ABDY ++ nidporträtt/ABDY +++nidramsa/EAGY ++ nidskrift/AHDY ++ nidskrivare/EAJY ++ nidskriveri/ABHY ++ nidteckning/ADGY ++ nidvisa/EAGY ++-niellera/MY ++ Niels/D ++ Nietzsche/AX ++ niga/J ++@@ -41399,10 +43368,7 @@ Nilstam/A ++ Nina/A ++ Nintendo/A ++ nio ++-niob/AB ++ niobarns/XZ ++-niobhaltig/OY ++-niobiumhaltig/OY ++ niodagars/XZ ++ niofaldig/OQY ++ nioföreställning/ADGY ++@@ -41413,7 +43379,7 @@ nioh ++ niohörnig/OY ++ niokilos/XZ ++ nioliters/XZ ++-niomånaders/XZ +++niomånaders/X ++ nionde ++ niondeklassare/EAJY ++ niondel/ADGY ++@@ -41454,7 +43420,7 @@ nit/ADG ++ nita/NAP ++ nitare/EAJY ++ nitbricka/EAGY ++-nitfri/OY +++nitfri/O ++ nithammare/EAJY ++ nithuvud/ABDY ++ nithuvudena/AY ++@@ -41470,7 +43436,6 @@ nitrathalt/AHDY ++ nitrathaltig/OY ++ nitratrik/OPY ++ nitrera/MY ++-nitril/Y ++ nitrit/AHDY ++ nitritbakterie/EAIY ++ nitrogen/ABY ++@@ -41490,7 +43455,7 @@ nittioprocentig/OY ++ nittiosex ++ nittiosexprocentig/OY ++ nittiosju ++-nittiotal/ABYv +++nittiotal/ABDYv ++ nittiotalism/ADY ++ nittiotalist/AHDYX ++ nittiotalsstil/ADGY ++@@ -41539,8 +43504,8 @@ njutningsrik/OY ++ NMT/r ++ NO/r ++ Noak/A ++-nobb/ADY ++ nobba/NMAPDY +++nobben/Y ++ nobbning/ADGY ++ nobel/KMLY ++ Nobel/AX ++@@ -41567,7 +43532,7 @@ noja/EAGY ++ nojig/OPQY ++ nojsa/NMADY ++ Nokia/AX ++-nolla/EAJGYz +++nolla/NEMAJPDGYz ++ nollbud/ABDY ++ nollgradig/OY ++ nollintagning/ADGY ++@@ -41669,7 +43634,7 @@ nordostmonsun/AHDY ++ nordpol/AHDv ++ nordpolsfarare/EAJY ++ nordportugisisk/OY ++-nordsame/EAIY +++nordsame/EAI ++ nordsamiska/EAJY ++ nordsamiskt/Y ++ nordsida/EAY ++@@ -41792,20 +43757,24 @@ nostalgi/EAYX ++ nostalgiker/EAJY ++ nostalgisk/OQY ++ nostalgitripp/ADGY ++-not/AHDYX +++not/AJHD ++ nota/EAPGY ++ notabel/MY ++ notabilitet/AHDY ++-notam ++-notar/AJ +++notapparat/AHDY ++ notariat/ABDY ++ notariatavdelning/ADGYv ++ notarie/EAIYX ++ notation/AHDYv +++notbild/AHDY ++ notblad/ABDY +++notbok/ADY +++notböcker/AJY ++ notera/NMAPDY ++ noterbar/OY ++ notering/ADGYvf +++notfiske/CAY +++nothäfte/FECAY ++ notificera/NMAPDY ++ notificering/ADGY ++ notifiera/NMAPDY ++@@ -41814,8 +43783,15 @@ notifikation/AHDYv ++ notis/HDY ++ notisform/ADY ++ notkunnig/OY +++notlinje/EAIY ++ notorisk/OQY +++notpapper/FCAJBDY +++notrad/AHDY +++notskrift/AHDY +++notställ/ABDY +++notsystem/ABDY ++ Nottingham/AX +++notväxling/ADGY ++ nougat/AHDYX ++ nov. ++ nova/EAGY ++@@ -41835,6 +43811,9 @@ novistid/AHDY ++ NP/r ++ NPT/r ++ nr +++NRK/r +++NRK1/r +++NRK2/r ++ NSG/r ++ NTF/r ++ nu/B ++@@ -41856,7 +43835,6 @@ nudism/ADY ++ nudist/ATHDYX ++ nuförtiden ++ nukleinsyra/EAGY ++-nukleol/AHDY ++ nukleotid/AHDY ++ nukleär/OY ++ nuklid/AHD ++@@ -41874,7 +43852,6 @@ numin ++ numismatik/AHDY ++ numismatiker/EY ++ numismatisk/OY ++-nummen/MY ++ nummer/FCAYXU ++ nummerplåtsbelysning/ADGYv ++ numrera/NMAPDY ++@@ -41932,7 +43909,7 @@ nybakad/NQY ++ nybakt/OY ++ nybearbetning/ADGY ++ nybebyggelse/EAIY ++-nybelagd/OY +++nybelagd/O ++ Nyberg/A ++ nybesatta/LJY ++ nybesatte/Y ++@@ -41993,7 +43970,7 @@ nydana/NMAPDY ++ nydanare/EAJY ++ nydaning/ADGY ++ nydemokrat/AHDY ++-nydiskad/NQY +++nydiskad/NQ ++ nydisputerad/NQ ++ nyduschad/NQY ++ nydöpt/OQY ++@@ -42018,9 +43995,9 @@ nyfriskjobb/ABDY ++ nyfrälst/OQY ++ nyfunne/Y ++ nyfunnen/MY ++-nyfylld/OY +++nyfylld/O ++ nyfångad/NQY ++-nyfälld/OY +++nyfälld/O ++ nyfödd/OQY ++ nyfödelse/EAIY ++ nyföretagande/CAY ++@@ -42050,7 +44027,7 @@ nyhetsdesk/ADGY ++ nyhetsflash/ADGY ++ nyhetsmakeri/ABHY ++ nyhetsmässig/OY ++-nyhetsår/ABDY +++nyhetsår/ABD ++ nyhumanism/ADY ++ nyinflyttad/NQY ++ nying/ADGY ++@@ -42069,7 +44046,7 @@ nyinstiftad/NQY ++ nyintagen/KMY ++ nyintroducera/NMAPDY ++ nyintroduktion/AHDY ++-nyinvald/OY +++nyinvald/O ++ nyinvandrad/NQY ++ nyinvestera/NMAPDY ++ nyinvestering/ADGY ++@@ -42092,7 +44069,7 @@ nykomne/Y ++ nykomponerad/NQY ++ nykonstruerad/NQY ++ nykonstruktion/AHDY ++-nykorad/NQY +++nykorad/NQ ++ nykritisk/OY ++ nykter/KMLY ++ nykterhet/ADYvf ++@@ -42105,7 +44082,7 @@ nyk ++ nykärnad/NQY ++ Nyköping/Av ++ nyköpt/OQY ++-nyladdad/NQY +++nyladdad/NQ ++ nylagad/NQY ++ nylagd/OY ++ Nyland/Av ++@@ -42158,7 +44135,7 @@ nyplantering/ADGY ++ nyplatonism/ADY ++ nyplatonsk/OQY ++ nyplockad/NQY ++-nyplöjd/OY +++nyplöjd/O ++ nypning/ADGY ++ nypon/ABDYX ++ nyponros/DY ++@@ -42192,23 +44169,22 @@ nyreparerad/NQY ++ nyrestaurerad/NQY ++ nyrik/OPQY ++ nyrikedom/ADY ++-nyriven/MY +++nyriven/M ++ nyrokoko/EAY ++ nyromantik/AHDY ++ nyromantiker/EY ++ nyromantisk/OY ++ nyrostad/NQY ++-nyröjd/OY ++-nyrökt/OY +++nyröjd/O +++nyrökt/O ++ nysa/KLADR ++ nysatsning/ADGY ++ nysattack/AHDY ++ nysilver/CAYX ++-nysit ++ nyskapa/NMAPDY ++ nyskapare/EAJY ++ nyskapelse/EAIY ++-nyskick/ABY +++nyskick/Y ++ nyskild/OQY ++ nyskriven/MY ++ nyskördad/NQY ++@@ -42252,7 +44228,7 @@ nytillkomne/Y ++ nytillsatt/OY ++ nytillskott/ABDY ++ nytillträdd/OQY ++-nytillverkad/NQY +++nytillverka/NMAPY ++ nytolka/NMAPDY ++ nytolkning/ADGY ++ nytryck/BDRY ++@@ -42277,7 +44253,7 @@ nyttobetonad/NQY ++ nytvättad/NQY ++ nytänd/OQY ++ nytändning/ADGY ++-nytänk/ABY +++nytänk/AB ++ nytänkande/CAY ++ nytänkare/EAJY ++ nyuppfunnen/MY ++@@ -42296,7 +44272,8 @@ nyutgiven/MY ++ nyutgåva/EAGY ++ nyutkommen/MY ++ nyutkomne/Y ++-nyutnämna/KLAJOY +++nyutnämna/KLAJ +++nyutnämnd/OY ++ nyutsedd/OQY ++ nyutslagen/MY ++ nyutsprungen/MY ++@@ -42307,6 +44284,7 @@ nyvakna/PDY ++ nyval/BDY ++ nyvald/OQY ++ nyvals/NY +++nyvaxad/NQ ++ nyvorden/KMY ++ nyvunne/Y ++ nyvunnen/MY ++@@ -42385,7 +44363,8 @@ n ++ nånting ++ Nåntuna/A ++ nånvart ++-nåt/DG +++nåt/D +++nåta/NAPI ++ nåväl ++ nä ++ näbb/ADGY ++@@ -42424,6 +44403,7 @@ n ++ näppeligen ++ näpsa/KQLAJDRY ++ nära/KLAJOz +++närakut/AHDY ++ näraliggande/Y ++ närande/Y ++ närapå ++@@ -42432,7 +44412,6 @@ n ++ närbild/AHDY ++ närboende/Y ++ närbutik/AHDY ++-närfart/Y ++ närfiskad/NQY ++ närgången/KMLY ++ närgångenhet/ADY ++@@ -42463,6 +44442,7 @@ n ++ närminne/CAY ++ närmre ++ närmst/OQ +++närodlad/NQY ++ närområde/FECAYv ++ närpolis/HDYX ++ närpolisområde/FECAY ++@@ -42473,7 +44453,7 @@ n ++ närstående/AYX ++ närsynt/OPQY ++ närsynthet/ADYv ++-närtid/ADv +++närtid/v ++ närvara/MDY ++ närvarit/Y ++ närvaro/EAYX ++@@ -42509,12 +44489,13 @@ n ++ nästa/EARY ++ näste/FECY ++ nästföljande/Y +++nästgårds ++ nästintill ++ nästipp/ADGY ++ nästjumbo/EAY ++ nästkommande/Y ++ nästkusin/AHDY ++-nästla/NMAPY +++nästla/NMAP ++ nästning/ADGY ++ nästnästa/Y ++ nästäppa/EAY ++@@ -42523,14 +44504,17 @@ n ++ näsvis/OPQY ++ näsvishet/AHDYv ++ nät/AJBDYX +++näta/NMAPD +++nätboll/ADGY ++ nätdeklarant/AHDY ++ nätelement/ABDY ++ nätformig/OY +++näthat/ABY ++ näthinna/EAGY ++ näthinne/XZ ++ nätkasse/EAGY ++ nätpoker/XZ ++-nätpris/BHDY +++nätspel/ABDY ++ nätspänning/ADGY ++ nätt/OP ++ nättak/ABDY ++@@ -42614,9 +44598,10 @@ n ++ nöjaktighet/ADYv ++ nöjd/P ++ nöjdförklaring/ADGY ++-nöjdhet/ADY +++nöjdhet/ADYv ++ nöje/FECAYv ++ nöjesbransch/AHDY +++nöjesbåt/ADGY ++ nöjesfält/ABDY ++ nöjesguide/EAY ++ nöjesliv/ABDY ++@@ -42631,7 +44616,7 @@ n ++ nörd/ADGY ++ nördig/OPQY ++ nös ++-nöt/JBD +++nöt/BD ++ nöta/KQLAD ++ nötaktig/OY ++ nötallergi/EAY ++@@ -42640,7 +44625,7 @@ n ++ nötdjur/ABDY ++ nötfärs/HDY ++ nötig/OPY ++-nötkaka/EAGY +++nötkaka/EAG ++ nötknäppare/EAJY ++ nötkreatur/ABDY ++ nötkärna/EAGY ++@@ -42651,6 +44636,7 @@ n ++ nötningstålig/OY ++ nötskal/ABDY ++ nötskrika/EAGY +++nöttårta/EAGY ++ nötväcka/EAGY ++ o/r ++ oaccentuerad/NQY ++@@ -42781,11 +44767,11 @@ obeh ++ obehövlig/OY ++ obeivrad/NQY ++ obekant/OQY ++-obeklädd/OY +++obeklädd/O ++ obekräftad/NQY ++ obekväm/QOPY ++ obekymrad/NQY ++-obelagd/OY +++obelagd/O ++ obelastad/NQY ++ obelevad/NQY ++ obeliskformig/OY ++@@ -42930,7 +44916,7 @@ observator/AEHY ++ observatorie/XZ ++ observatorium/AJY ++ observatör/AHDYv ++-observera/NMAPY +++observera/NMAPDY ++ observerbar/OY ++ obskyr/OY ++ obsoleta/JY ++@@ -42947,6 +44933,7 @@ obygd/AHDY ++ obyggd/OY ++ obyråkratisk/OY ++ obäddad/NQY +++obältad/NQY ++ obändig/OY ++ obärgad/NQY ++ oböjd/OY ++@@ -42969,7 +44956,6 @@ ociviliserad/NQY ++ ock ++ Ockelbo/AX ++ ocker/CAX ++-ockergul/OY ++ ockerhyra/EAGY ++ ockerpris/BHY ++ ockerränta/EAGY ++@@ -42993,6 +44979,7 @@ ockupera/NMAPDY ++ ockupering/ADGY ++ OCR/r ++ o.d. +++odak/XZ ++ odalbonde/EAY ++ odalbönder/AJY ++ odalisk/AHDY ++@@ -43002,7 +44989,7 @@ odalm ++ odaterad/NQY ++ odaterbar/OY ++ odds/BD ++--oddsare/EAJ +++-oddsare/EAJY ++ oddssättare/EAJY ++ oddstal/ABDY ++ ode/FECA ++@@ -43062,6 +45049,7 @@ oduglighet/ADYv ++ odugling/ADGY ++ odygd/AHDY ++ odygdig/OPQY +++odygdighet/ADY ++ odygdspåse/EAGY ++ odyssé/AEHDY ++ odåga/EAGY ++@@ -43167,12 +45155,13 @@ officiell/OQY ++ officiera/MY ++ officiös/OY ++ offline +++offpist ++ offpiståkning/ADY ++ offra/NMAPY ++ offsetmatad/NQY ++ offsetpress/DGY ++ offsettryck/ABDY ++-offshore/XZ +++offshore/X ++ offside/YX ++ offsideregel/EAJY ++ ofilosofisk/OY ++@@ -43182,8 +45171,7 @@ ofinansierad/NQY ++ ofinhet/ADY ++ ofinkänslig/OY ++ ofinkänslighet/ADY ++-ofitisk/OY ++-ofjädrad/NQY +++ofjädrad/NQ ++ ofjällad/NQY ++ oflottad/NQY ++ oflyt/ABY ++@@ -43210,8 +45198,8 @@ ofredande/FEY ++ ofredstid/AHDY ++ ofredsår/ABDY ++ ofri/QOP ++-ofridsam/MY ++-ofridsamt/Y +++ofridsam/M +++ofridsamt ++ ofrihet/ADYv ++ ofrisk/OY ++ ofrivillig/OQY ++@@ -43221,7 +45209,7 @@ ofruktsam/MY ++ ofruktsamhet/ADY ++ ofruktsamt/Y ++ ofrusen/MY ++-ofrysbar/OY +++ofrysbar/O ++ ofryst/OY ++ ofrånkomlig/OPQY ++ ofrånkomligen ++@@ -43328,7 +45316,7 @@ of ++ oförpackad/NQY ++ oförrätt/AHDY ++ oförrättad/NQY ++-oförsagd/OY +++oförsagd/O ++ oförsiktig/OPQY ++ oförsiktighet/ADYv ++ oförskräckt/OQY ++@@ -43460,7 +45448,6 @@ ogynnsam/MLY ++ ogynnsamhet/ADY ++ ogynnsamt/Y ++ ogångbar/OY ++-ogäldad/NQY ++ ogängad/NQY ++ ogärna ++ ogärning/ADGYv ++@@ -43474,7 +45461,7 @@ OH/r ++ ohanterlig/OPQY ++ ohanterlighet/ADY ++ oharmonisk/OQY ++-oharpad/NQY +++oharpad/NQ ++ ohederlig/OPQY ++ ohederlighet/ADY ++ ohejdad/NQY ++@@ -43497,7 +45484,7 @@ ohj ++ Ohlander/A ++ Ohlsson/A ++ Ohly/A ++-ohmisk/OY +++ohoj ++ ohotad/NQY ++ ohuggen/MY ++ ohydrolyserad/NQY ++@@ -43510,7 +45497,7 @@ ohyra/EAY ++ ohyrefri/OY ++ ohyvlad/NQY ++ ohågad/NQY ++-ohågsen/MY +++ohågsen/M ++ ohållbar/OY ++ ohållbarhet/ADY ++ ohäcklad/NQY ++@@ -43526,7 +45513,7 @@ oh ++ ohämmad/NQY ++ ohängd/OQY ++ ohärdad/NQY ++-ohärdbar/OY +++ohärdbar/O ++ ohärdbarhet/ADY ++ ohöljd/OY ++ ohöljdhet/ADY ++@@ -43552,13 +45539,13 @@ oinformerad/NQY ++ oinfriad/NQY ++ oinhägnad/NQY ++ oinitierad/NQY ++-oinkörd/OY +++oinkörd/O ++ oinlösbar/OY ++ oinlöslig/OY ++ oinlöslighet/ADY ++ oinlöst/OY ++ oinredd/OY ++-oinsatt/OQY +++oinsatt/OQ ++ oinskränkt/OQY ++ oinskränkthet/ADY ++ oinslagen/MY ++@@ -43576,7 +45563,6 @@ ointroducerad/NQY ++ oinvigd/OQY ++ oisolerad/NQY ++ oja/NMAJD ++-ojdå ++ ojordad/NQY ++ ojordisk/OY ++ ojordiskhet/ADY ++@@ -43597,10 +45583,10 @@ oj ++ ojäst/OY ++ ojävad/NQY ++ ojävaktig/OY ++-ojävbar/OY ++ ojävig/OQY ++ ojävighet/ADY ++ ok/ABD +++oka/NMAPD ++ okalandrerad/NQY ++ okalkad/NQY ++ okallad/NQY ++@@ -43610,7 +45596,6 @@ okamratlig/OY ++ okamratlighet/ADY ++ okantad/NQY ++ okanterlig/OY ++-okay ++ okben/ABDY ++ okbåge/EAGY ++ okej ++@@ -43651,7 +45636,6 @@ okopplad/NQY ++ okorrekt/OQY ++ okorrigerad/NQY ++ okorrumperad/NQY ++-okostig/OY ++ okrigisk/OY ++ okristalliserbar/OY ++ okristen/KMY ++@@ -43675,16 +45659,16 @@ okr ++ okt. ++ oktaeder/EAIY ++ oktaedrisk/OY ++-oktagon/AHDY +++oktagon/AHD ++ oktal/OY ++ oktan/Y ++--oktanig/O +++-oktanig/OY ++ oktant/AHDY ++ oktantal/ABDY ++ oktav/AHDYX ++-oktavark/ABDY +++oktavark/ABD ++ oktett/AHDY ++-oktiljon/AHDY +++oktiljon/AHD ++ oktober/AX ++ oktobermorgon/ADIY ++ oktrojera/MY ++@@ -43751,8 +45735,7 @@ oledare/EAJY ++ olegaliserad/NQY ++ olegerad/NQY ++ Olenius ++-oleofob/OY ++-olfaktorisk/OY +++olfaktorisk/O ++ Olga/A ++ olicensierad/NQY ++ olidlig/OPQY ++@@ -43794,14 +45777,13 @@ olik ++ olimiterad/NQY ++ olimmad/NQY ++ olinjerad/NQY ++-olinjär/OY +++olinjär/O ++ olistad/NQY ++ olitterär/OY ++ oliv/AHDX ++ olivformig/OY ++ olivfärgad/NQY ++ olivgrön/OY ++-olivgul/OY ++ olivhyad/NQY ++ Olivia/A ++ olivkvist/ADGYX ++@@ -43818,6 +45800,7 @@ oljeaktig/OY ++ oljeartad/NQY ++ oljebeständig/OY ++ oljeblandad/NQY +++oljebolag/ABDY ++ oljeborr/XZ ++ oljeduk/ADGY ++ oljedöd/OY ++@@ -43832,6 +45815,7 @@ oljefr ++ oljefröna/AY ++ oljefuktad/NQY ++ oljefylld/OY +++oljefält/ABDY ++ oljefärg/AHDY ++ oljeförbrukning/ADY ++ oljegrusbelagd/OY ++@@ -43841,12 +45825,16 @@ oljeimpregnerad/NQY ++ oljeindustri/EAHY ++ oljeisolerad/NQY ++ oljekammad/NQY ++-oljekyld/OY +++oljeläcka/EAGY ++ oljelöslig/OY ++ oljemålning/ADGY ++ oljepalm/AHDY +++oljepir/ADG ++ oljeplattform/ADGY +++oljepris/BHY +++oljerigg/ADGY ++ oljerik/OPY +++oljesand/ADY ++ oljeskadad/NQY ++ oljeskydd/ABDY ++ oljeskyddsavgift/AHDY ++@@ -43943,7 +45931,7 @@ ol ++ oläslig/OPQY ++ oläslighet/ADY ++ oläst/OY ++-olödbar/OY +++olödbar/O ++ olönad/NQY ++ olönsam/KMLY ++ olönsamt/Y ++@@ -43991,7 +45979,6 @@ omblandning/ADGY ++ omboka/NMAPDY ++ ombokning/ADGYv ++ ombonad/NQY ++-omboning/ADY ++ ombord ++ ombordanställd/OQY ++ ombordkomst/ADY ++@@ -44018,14 +46005,12 @@ ombygge/FECAY ++ ombyggnad/AHDYvf ++ ombyggnation/AHDY ++ ombyggning/ADGY ++-ombyltad/NQY ++ ombytbar/OY ++ ombyte/FECAYv ++ ombyteskläder/AJY ++ ombytlig/OPQY ++ ombytlighet/ADYv ++ ombytt/OY ++-omböjd/OY ++ omdana/NMAPDY ++ omdanare/EAJY ++ omdaning/ADGYv ++@@ -44063,7 +46048,6 @@ omedg ++ omedgörlighet/ADYv ++ omedveten/KMY ++ omedvetenhet/ADY ++-omega/Y ++ omejad/NQY ++ omelett/AHDYX ++ omelodisk/OY ++@@ -44097,20 +46081,19 @@ omformatering/ADGYv ++ omformning/ADY ++ omformulera/NMAPDY ++ omformulering/ADGYv ++-omfrågad/NQY ++-omfrågande/Y +++omfrågad/NQ +++omfrågande ++ omfrågandekopia/EAGY ++-omfrågas/NY +++omfrågas/N ++ omfång/ABY ++ omfångsrik/OPQY ++ omfångsrikhet/ADY ++-omfärgad/NQY +++omfärgad/NQ ++ omfärgning/ADGY ++ omföderska/EAGY ++ omföra/KLAJODRY ++ omfördela/NMAPDY ++ omfördelning/ADGYv ++-omförer/Y ++ omförhandla/NMAPDY ++ omförhandling/ADGYv ++ omföring/ADGYv ++@@ -44133,7 +46116,7 @@ omgjutning/ADGY ++ omgruppera/NMAPDY ++ omgruppering/ADGYv ++ omgränsande/Y ++-omgrävd/OY +++omgrävd/O ++ omgrävning/ADGY ++ omgående ++ omgång/ADGY ++@@ -44213,7 +46196,7 @@ omkl ++ omklädningsrum/FCAY ++ omklädsel/EAIY ++ omknytning/ADY ++-omkoda/NMAPY +++omkoda/NMAP ++ omkok/ABDY ++ omkokning/ADY ++ omkomma/KDY ++@@ -44251,7 +46234,6 @@ omkullv ++ omkväde/FECAY ++ omköp/ABDY ++ omkörare/EAJY ++-omkörbar/OY ++ omkörd/OY ++ omkörning/ADGYv ++ omkörningsfil/AHDY ++@@ -44259,11 +46241,9 @@ omladdad/NQY ++ omladdbar/OY ++ omladdning/ADGY ++ omladdningsbar/OY ++-omlade/AY ++ omlagd/OY ++ omlagra/NMAPDY ++ omlagring/ADGY ++-omlagt/AY ++ omlasta/NMAPDY ++ omlastning/ADGYv ++ omliggande/Y ++@@ -44283,10 +46263,7 @@ omlott ++ omlottkappa/EAGY ++ omlottkjol/ADGY ++ omlottlagd/OY ++-omlägga/AJDRY ++-omlägger/Y ++ omläggning/ADGYv ++-omläggs/Y ++ omläsning/ADGY ++ omlöpning/ADY ++ ommaskera/MY ++@@ -44335,7 +46312,7 @@ omplantera/NMAPDY ++ omplantering/ADGYv ++ omplåstrad/NQY ++ omplåstring/ADGYv ++-ompolera/MY +++ompolera/NMAP ++ ompressad/NQY ++ omprioritera/NMAPDY ++ omprioritering/ADGYv ++@@ -44358,7 +46335,6 @@ omriggning/ADGY ++ omringa/NMAPY ++ omringning/ADGY ++ omrubricera/NMAPY ++-omrufsad/NQY ++ omruskad/NQY ++ omruskning/ADGY ++ område/FECAYvf ++@@ -44377,9 +46353,7 @@ omsadling/ADY ++ omsatta/LJY ++ omsatte/Y ++ omse/NKMLA ++-omsegad/NQY ++ omsegling/ADY ++-omsfri/OY ++ omsider ++ omsiktsfull/OY ++ omsintrad/NQY ++@@ -44422,8 +46396,7 @@ omsluten/MY ++ omslutning/ADY ++ omsmälta/KLAJDY ++ omsmältning/ADY ++-omsnodd/OY ++-omsnörd/OY +++omsnörd/O ++ omsnörning/ADGY ++ omsorg/AHDYvf ++ omsortera/NMAPDY ++@@ -44472,7 +46445,7 @@ omst ++ omstörta/NMAPDY ++ omstörtare/EAJYz ++ omstörtning/ADGYv ++-omsusa/NMAPDY +++omsusad/NQY ++ omsvepa/KQLAJDY ++ omsvängning/ADGYv ++ omsvärma/NMAPDY ++@@ -44480,7 +46453,6 @@ omsv ++ omsydd/OY ++ omsyn/ADY ++ omsägning/ADGY ++-omsända/KLAJY ++ omsändning/ADGYv ++ omsätta/LAJDY ++ omsättbar/OY ++@@ -44493,7 +46465,6 @@ omtagning/ADGYv ++ omtal/ABDY ++ omtala/NMAPDY ++ omtanke/EAY ++-omtaxera/NMAPY ++ omtenta/EAGY ++ omtentamen/AY ++ omtentamina/AY ++@@ -44513,6 +46484,7 @@ omtvistbar/OY ++ omtvistlig/OY ++ omtyckt/OQY ++ omtyckthet/ADY +++omtänkande/CAY ++ omtänksam/KMLY ++ omtänksamhet/ADYv ++ omtänksamt/Y ++@@ -44525,7 +46497,7 @@ omutlig/OQY ++ omutlighet/ADYv ++ omval/BDY ++ omvald/OQY ++-omvallad/NQY +++omvallad/NQ ++ omvallning/ADGY ++ omvals/NY ++ omvandla/NMAPDY ++@@ -44537,7 +46509,8 @@ omvirning/ADY ++ omvittna/NMAPDY ++ omvriden/MY ++ omvridning/ADGY ++-omvårda/NMAPDY +++omvårda/NMAD +++omvårdad/NQY ++ omvårdnad/ADYv ++ omväg/ADGY ++ omvälja/AJDY ++@@ -44602,16 +46575,15 @@ ondo/Y ++ ondsinnad/NQY ++ ondsint/OQY ++ ondska/EAY ++-ondskefull/OY +++ondskefull/OPQY ++ ondulera/MY ++ oneklig/OY ++ onekligen ++-onerös/OY ++ onjutbar/OY ++ onkel/EAIY ++ onkolog/ATHDY ++ onkologi/EAY ++-online +++online/X ++ onlinespel/ABDY ++ Ono/A ++ onomastisk/OY ++@@ -44636,7 +46608,7 @@ onyttighet/AHDY ++ onyx/DGY ++ onyxsten/ADY ++ onåbar/OY ++-onåd/ADY +++onåd/Y ++ onådig/OY ++ onämnbar/OY ++ onämnd/OY ++@@ -44646,7 +46618,6 @@ on ++ onödigtvis ++ onöjaktig/OY ++ onöjd/OY ++-oolitisk/OY ++ oombedd/OY ++ oomkullkastlig/OY ++ oomkullrunkelig/OY ++@@ -44664,6 +46635,7 @@ oordnad/NQY ++ oordning/ADYv ++ oorganiserad/NQY ++ oorganisk/OY +++oortodox/OQY ++ opak/O ++ opaketerad/NQY ++ opal/AHDY ++@@ -44687,6 +46659,7 @@ opera/EAGYX ++ operaaria/EAGY ++ operabel/MY ++ operaföreställning/ADGY +++operahus/BDY ++ operamässig/OY ++ operand/AHDY ++ operasångare/EAJY ++@@ -44699,7 +46672,7 @@ operationsb ++ operationskö/AHY ++ operationsärr/ABDY ++ operativ/OQY ++-operativsystem/ABDY +++operativsystem/ABDYvX ++ operator/AEHY ++ operatör/AHDYv ++ operaverk/ABDY ++@@ -44726,7 +46699,6 @@ opoetisk/OY ++ opolariserad/NQY ++ opolerad/NQY ++ opolitisk/OY ++-opolär/OY ++ opp/Q ++ opponent/AHDY ++ opponera/NMAPDY ++@@ -44828,6 +46800,8 @@ orden/AYv ++ ordensprydd/OY ++ ordentlig/OPQY ++ order/EAJYX +++orderbok/ADY +++orderböcker/AJY ++ ordf ++ ordfattig/OY ++ ordform/AHDY ++@@ -44845,11 +46819,11 @@ ordinarie/Y ++ ordination/AHDYv ++ ordinera/NMAPY ++ ordinär/OY ++-ordjur/ABDY ++ ordkarg/OQY ++ ordklass/HDY ++ ordklyveri/ABHY ++ ordknapp/OY +++ordkrig/ABDY ++ ordled/ABDY ++ ordlek/ADGY ++ ordlista/EAGY ++@@ -44861,9 +46835,10 @@ ordningsamt/Y ++ ordningstal/ABDY ++ ordonnans/HDY ++ ordovicisk/OY ++-ordrapp/OY +++ordrappt ++ ordrik/OPY ++ ordrikedom/ADY +++ordspel/ABDY ++ ordspråk/ABDY ++ ordstam/FAIY ++ ordstäv/ABDY ++@@ -44947,6 +46922,7 @@ original/AOBDYX ++ originaldel/ADGY ++ originalfil/AHDY ++ originalitet/ADY +++originaltapet/AHDY ++ originell/OPQY ++ origo/Y ++ oriktad/NQY ++@@ -44972,7 +46948,7 @@ Orleans ++ orlov/ABY ++ orlovssedel/EAY ++ orm/ADGYX ++-orma/NAP +++orma/M ++ ormande/Y ++ ormbett/ABDY ++ ormbiten/KMY ++@@ -45001,6 +46977,7 @@ orn ++ oro/EA ++ oroa/NMAP ++ oroande/Y +++oroare/EAJY ++ orogenetisk/OY ++ orografisk/OY ++ orolig/OPQY ++@@ -45012,7 +46989,7 @@ oroscentrum/EABDY ++ orosfylld/OY ++ oroshärd/ADGY ++ oroskänsla/EAGY ++-orosläte/FECAY +++orosläte/FECA ++ orosmoln/ABDY ++ orosmoment/ABDY ++ orosmättad/NQY ++@@ -45044,8 +47021,9 @@ ortodox/OQY ++ ortodoxi/EAHY ++ ortoepisk/OY ++ ortogonal/OYX ++-ortograf/ATHDY +++ortograf/AHD ++ ortografi/EAHDY +++ortografisk/OY ++ ortokromatisk/OY ++ ortolan/AHDY ++ ortolansparv/ADGY ++@@ -45056,7 +47034,7 @@ ortorombisk/OY ++ ortoskopisk/OY ++ ortostereoskopisk/OY ++ ortosymmetrisk/OY ++-ortotrop/OY +++ortotrop/O ++ ortsbefolkning/ADY ++ ortsbeskrivning/ADGY ++ ortsbo/EAIY ++@@ -45075,7 +47053,7 @@ orutin/ADY ++ orutinerad/NQY ++ Orvar/A ++ Orwell ++-orwellsk/OY +++orwellsk/O ++ orygglig/OPQY ++ orygglighet/ADYv ++ orytmisk/OY ++@@ -45087,7 +47065,6 @@ or ++ oräknad/NQY ++ oräknelig/OPY ++ oräntabel/MY ++-oräntbar/OY ++ orätt/AHDY ++ orätta ++ orättfärdig/OPQY ++@@ -45129,7 +47106,7 @@ osanningsenlig/OY ++ osannolik/OPY ++ osannolikhet/ADYv ++ Osby/AX ++-Oscar/A +++Oscar/Av ++ Oscarsgala/EAGY ++ Oscarsson/A ++ oschysst/OQY ++@@ -45179,14 +47156,14 @@ oskadligg ++ oskadlighet/ADY ++ oskaftad/NQY ++ oskalad/NQY ++-oskalbar/OY +++oskalbar/O ++ oskapad/NQY ++ oskaplig/OY ++ Oskar/A ++-oskarisk/OY ++ oskarp/OPY ++ Oskarshamn/Av ++ oskarshamnsbo/EAIY +++oskattad/NQY ++ oskattbar/OY ++ oskattbarhet/ADY ++ oskick/ABDY ++@@ -45200,11 +47177,9 @@ oskodd/OY ++ oskolad/NQY ++ oskriven/MY ++ oskrymtad/NQY ++-oskrädd/OY ++ oskuld/AHDY ++ oskuldsfull/OY ++ oskuldsfullhet/ADYv ++-oskulera/MY ++ oskummad/NQY ++ oskyddad/NQY ++ oskygg/OY ++@@ -45248,12 +47223,14 @@ osm ++ osnuten/MY ++ osnygg/OY ++ osnygga/MY +++osnygghet/ADY +++osocial/OY ++ osockrad/NQY ++ osofistikerad/NQY ++ osolidarisk/OY ++ osorterad/NQY ++ osovrad/NQY ++-ospaltad/NQY +++ospaltad/NQ ++ osparad/NQY ++ ospard/OY ++ ospecificerad/NQY ++@@ -45261,21 +47238,22 @@ ospecifik/OY ++ ospelad/NQY ++ ospelbar/OY ++ osplittrad/NQY ++-ospolad/NQY ++-ospord/OY +++ospolad/NQ ++ osportslig/OY ++-ospädd/OY +++osportslighet/ADY ++ ospänd/OY +++ospännande ++ ospänstig/OY ++ ospärrad/NQY ++ OSSE/r ++ ost/AD ++ osta/NAPDI +++ostabil/OY ++ ostadgad/NQY ++ ostadig/OPQY ++ ostadighet/ADY ++ ostaffär/AHDY ++-ostagad/NQY +++ostagad/NQ ++ ostan ++ ostanvind/ADY ++ ostartad/NQY ++@@ -45303,7 +47281,7 @@ ostjak/ATHDY ++ ostkaka/EAGY ++ ostkant/AHDY ++ ostkniv/ADGY ++-ostkorg/ADGY +++ostkorg/ADG ++ ostkupa/EAGY ++ ostkust/ADY ++ ostlig/OPY ++@@ -45335,7 +47313,7 @@ ostuderad/NQY ++ ostvassla/EAY ++ ostyckad/NQY ++ ostyrbar/OY ++-ostyrd/OY +++ostyrd/O ++ ostyrig/OY ++ ostädad/NQY ++ ostämd/OY ++@@ -45343,7 +47321,7 @@ ost ++ ostämplad/NQY ++ ostörd/OY ++ ostördhet/ADYv ++-ostöttad/NQY +++ostöttad/NQ ++ osund/OY ++ o.s.v. ++ osv ++@@ -45367,7 +47345,7 @@ osystematisk/OY ++ osådd/OY ++ osågad/NQY ++ osåld/OY ++-osållad/NQY +++osållad/NQ ++ osårbar/OY ++ osägbar/OY ++ osäglig/OY ++@@ -45391,10 +47369,11 @@ otacksamt/Y ++ otadlig/OY ++ otagbar/OY ++ otakt/Y ++-otal/ABMY +++otal/MY ++ otalig/OY ++ otandad/NQY ++ otempererad/NQY +++otestad/NQ ++ otid/Y ++ otidig/OY ++ otidighet/AHDY ++@@ -45426,7 +47405,7 @@ otj ++ otjärad/NQY ++ otolkad/NQY ++ otologisk/OY ++-otorkad/NQY +++otorkad/NQ ++ otraditionell/OY ++ otrafikerad/NQY ++ otrafikerbar/OY ++@@ -45440,7 +47419,7 @@ otro/EAY ++ otrogen/KMLY ++ otrohet/ADYv ++ otrolig/OPY ++-otrugad/NQY +++otrugad/NQ ++ otryckbar/OY ++ otryckt/OY ++ otrygg/OPQY ++@@ -45450,7 +47429,6 @@ otr ++ oträngd/OY ++ otröskad/NQY ++ otröstlig/OY ++-otröttad/NQY ++ otröttlig/OY ++ otta/EAGY ++ ottesång/ADY ++@@ -45479,7 +47457,7 @@ otydbarhet/ADY ++ otydd/OY ++ otydlig/OPY ++ otydlighet/AHDYv ++-otyg/ABDY +++otyg/ABY ++ otyglad/NQY ++ otymplig/OPY ++ otymplighet/ADY ++@@ -45495,8 +47473,8 @@ ot ++ otänjbar/OY ++ otänkbar/OY ++ otänkbarhet/ADYv ++-otät/OPQ ++-otätad/NQY +++otät/OP +++otäta/P ++ otäthet/AHDY ++ otörstig/OY ++ oumbärlig/OQY ++@@ -45522,7 +47500,7 @@ oupph ++ oupphörligen ++ ouppklarad/NQY ++ ouppklistrad/NQY ++-oupplagd/OY +++oupplagd/O ++ oupplevad/NQY ++ oupplevd/OY ++ oupplöslig/OY ++@@ -45550,7 +47528,7 @@ outbalanserad/NQY ++ outbildad/NQY ++ outbyggd/OY ++ outbytbar/OY ++-outdelad/NQY +++outdelad/NQ ++ outforskad/NQY ++ outförbar/OY ++ outförd/OY ++@@ -45558,7 +47536,8 @@ outgiven/MY ++ outgrundlig/OY ++ outhyrd/OY ++ outhärdlig/OY ++-outmanad/NQY +++outlet/AY +++outmanad/NQ ++ outnyttjad/NQY ++ outplånad/NQY ++ outplånlig/OY ++@@ -45592,15 +47571,16 @@ outt ++ outtömlig/OY ++ outvecklad/NQY ++ ouvertyr/AHDY +++ouzo/EAY +++ovaccinerad/NQY ++ ovaggad/NQY ++ oval/AHDY ++ ovala ++ ovalare ++ ovalast/Q ++-ovale ++ ovalformad/NQY ++ ovalformig/OY ++-ovalkad/NQY +++ovalkad/NQ ++ ovallad/NQY ++ ovalt ++ ovan/Q ++@@ -45623,6 +47603,7 @@ ovantill ++ ovanvåning/ADGY ++ Ovanåker/Av ++ ovaraktig/OY +++ovarium/AJY ++ ovarsam/KMLY ++ ovarsamhet/ADYv ++ ovarsamt/Y ++@@ -45638,7 +47619,7 @@ ovederl ++ ovedersäglig/OY ++ ovedersägligen ++ overall/AHDYsf ++-overhead/XZ +++overhead/X ++ overifierad/NQY ++ overkill/Y ++ overklig/OY ++@@ -45662,13 +47643,13 @@ ovilja/EAY ++ ovillig/OY ++ ovillkorlig/OY ++ ovillkorligen ++-ovinklad/NQY +++ovinklad/NQ ++ ovis/O ++ ovispad/NQY ++ oviss/OY ++ ovisshet/AHDYv ++ ovittrad/NQY ++-ovulkad/NQY +++ovulkad/NQ ++ ovulkaniserad/NQY ++ ovårdad/NQY ++ ovårdsam/MY ++@@ -45678,10 +47659,11 @@ ov ++ ovägad/NQY ++ ovägbar/OY ++ ovägd/OY +++oväld/AD ++ oväldig/OY ++ ovälkommen/MY ++ ovälkomne/Y ++-ovälvd/OY +++ovälvd/O ++ ovän/AFY ++ ovänlig/OPQY ++ ovänlighet/AHDY ++@@ -45691,6 +47673,7 @@ ov ++ oväpnad/NQY ++ ovärderlig/OY ++ ovärdig/OPQY +++ovärdighet/ADY ++ ovärldslig/OY ++ oväsen/AY ++ oväsendet/AY ++@@ -45712,7 +47695,7 @@ oxalsyresalt/ABHY ++ oxalursyra/EAGY ++ oxalättiksyra/EAGY ++ oxamidsyra/EAGY ++-oxblod/ABDYv +++oxblod/ABYv ++ oxblodsröd/OPQY ++ oxbringa/EAGY ++ oxbär/ABDYv ++@@ -45728,21 +47711,21 @@ oxelall ++ oxelbär/ABDY ++ oxelhäck/ADGY ++ oxeltand/AJDY ++-oxelträ/CABY +++oxelträ/AB ++ Oxelösund/Av ++ oxetanpolymer/AHDY ++ oxfilé/AEHYX ++ Oxford/AX ++-oxgalla/EAGY +++oxgalla/EAG ++ oxhackar/XZ ++ oxhackare/EAJY ++ oxhud/ADGY ++ oxhuvud/ABDY ++-oxhyvel/EAIY +++oxhyvel/EAI ++ oxiasfalt/AHDY ++ oxicellulosa/EAY ++ oxid/ATHDYX ++-oxidant/AHDY +++oxidant/AHD ++ oxidation/AHDYvf ++ oxidationshämmar/XZ ++ oxidationstal/ABDY ++@@ -45771,34 +47754,11 @@ oxidmalm/AHDY ++ oxidmineral/AHDY ++ oxidreduktionsprocess/HDY ++ oxidring/ADGYv ++-oxidrör/ABDY ++ oxidsalt/ABHY ++ oxidskal/ABDY ++ oxidskikt/ABDY ++-oxidul/AHDYX ++-oxidulhydrat/ABDY ++-oxidulhydrater/AY ++-oxiduloxid/AHDY ++-oxidulsalt/ABHY ++-oxietylcellulosa/EAY ++-oxiförenings/XZ ++-oxigas/HDY ++-oxigenerings/XZ ++-oxihalogenid/AHDY ++-oxihydrat/ABDY ++-oxihydrater/AY ++ oxikautschuk/ADGY ++-oxiketon/AHDY ++-oxiklorering/ADGYv ++-oximandelsyra/EAGY ++-oxioxoförening/ADGYv ++-oxioxokarbonsyra/EAGY ++-oxipolykarbonsyra/EAGY ++-oxisulfonsyra/EAGY ++-oxisyra/EAGY ++-oxisyre/XZ ++-oxisyreamid/AHDY ++-oxiättiksyra/EAGY +++oxiketon/AHD ++ oxjärpe/EAGY ++ oxkärra/EAGY ++ oxkött/ABY ++@@ -45806,7 +47766,7 @@ oxl ++ oxojodsyra/EAGY ++ oxoklorsyra/EAGY ++ oxoniumsalt/ABHY ++-oxosyra/EAGY +++oxosyra/EAG ++ oxrulad/AHDY ++ oxrullad/AHDY ++ oxspann/ABDY ++@@ -45817,11 +47777,11 @@ oxsvanssoppa/EAGY ++ oxtung/XZ ++ oxtunga/EAGY ++ oxtungsvamp/ADGY ++-oxvagn/ADGY ++ oxvandring/ADGYv ++ oxvecka/EAGY ++ oxydemetonmetyl/ADY ++ oxyfettsyra/EAGY +++oxygen/AB ++ oxygenapparat/AHDY ++ oxygenatom/AHDY ++ oxygenbleknings/XZ ++@@ -45846,7 +47806,6 @@ ozongenerator/AEHY ++ ozonhalt/AHDY ++ ozonhaltig/OY ++ ozonhål/ABDY ++-ozonid/AHDY ++ ozonisator/AEHY ++ ozonisera/NMAPDY ++ ozonlager/CAY ++@@ -45856,7 +47815,7 @@ ozonmolekyl/AHDY ++ ozonmättad/NQY ++ ozonoxidation/AHDY ++ ozonpapper/FCAJBDY ++-ozonrik/OPQY +++ozonrik/OP ++ ozonskikt/ABY ++ ozonsyre/CAY ++ ozonöverskott/ABDY ++@@ -45868,7 +47827,7 @@ o ++ oåterkalleligen ++ oåterställbar/OY ++ oåtkomlig/OPQY ++-oåtspord/OY +++oåtspord/O ++ oäkta/Y ++ oäkte/Y ++ oäkting/ADGY ++@@ -45916,6 +47875,10 @@ o ++ oövervinnlig/OQY ++ oövervägd/OY ++ p/r +++P1/r +++P2/r +++P3/r +++P4/r ++ Pablo/A ++ pacemaker/EAIYX ++ pacemakerbärare/EAJY ++@@ -45934,6 +47897,7 @@ packboxfri/OY ++ packboxlös/OY ++ packdos/XZ ++ packdosa/EAGY +++packhus/BDY ++ packis/DGY ++ packlår/ADGY ++ packning/ADGYv ++@@ -45956,12 +47920,13 @@ page/EAI ++ pagefrisyr/AHDY ++ paginera/MY ++ paginering/ADGYv +++pagod/AHDY ++ Pagrotsky/A ++ pair/AHD ++ paj/AHD ++ paja/MP ++ Pajala/AX ++-pajalabo/EAIY +++pajalabo/EAI ++ pajas/NHDG ++ pajasaktig/OY ++ pajaseri/ABHY ++@@ -46019,7 +47984,6 @@ pallplats/HDY ++ pallra/MY ++ pallvis ++ palm/AHD ++-palma/NMAY ++ palmblad/ABDY ++ Palme/AX ++ palmera/MY ++@@ -46191,7 +48155,6 @@ pappig/OY ++ pappkartong/AHDY ++ papplåda/EAGY ++ pappografi/EAHY ++-pappsal/ADGY ++ paprika/EAGYX ++ paprikaröd/OY ++ paprikasås/HDY ++@@ -46220,6 +48183,7 @@ paradnummer/FCAY ++ paradox/HDY ++ paradoxal/OY ++ paradoxartad/NQY +++paradroll/AHDY ++ paraduniform/AHDY ++ paradvåning/ADGY ++ parafera/MY ++@@ -46292,7 +48256,6 @@ paratuberkulos/DY ++ paravan/AHDY ++ parbladig/OY ++ parboende/FECAYX ++-parce/EIY ++ parcellera/MY ++ pardans/HDY ++ pardon/ADY ++@@ -46317,6 +48280,8 @@ parfymeri/CABHY ++ parfymering/ADYv ++ parfymör/AHDY ++ parfyrmerad/NQY +++parhus/BDY +++parhäst/ADGY ++ paria/EAY ++ pariastämpel/EAY ++ pariastämplad/NQY ++@@ -46325,7 +48290,7 @@ parikurs/HDY ++ Paris/X ++ parisar/XZ ++ parisare/EAJY ++-parisbo/EAIY +++parisbo/EAI ++ pariserblå/OY ++ pariserhjul/ABDY ++ parisiska/EAJGY ++@@ -46335,6 +48300,7 @@ paritetsbit/ADGY ++ paritetsspel/ABY ++ park/AHDYX ++ parkas/HDGY +++parkbänk/ADGY ++ parkchef/AHDY ++ parkera/NMAPY ++ parkering/ADGYvf ++@@ -46347,6 +48313,7 @@ parkinson/XZ ++ Parkinson/A ++ parklek/ADGYv ++ parkområde/FECAY +++parkour/ADY ++ parksoffa/EAGY ++ parkärnig/OY ++ parlament/ABDYvf ++@@ -46366,6 +48333,7 @@ parodi/EAHDYX ++ parodiera/NMAPDY ++ parodisk/OY ++ paroll/AHDY +++parputt/ADGY ++ parrimmad/NQY ++ pars/TY ++ parser/EAY ++@@ -46383,14 +48351,14 @@ partig ++ partikel/EAIYX ++ partikelkaraktär/AHDY ++ partikelverb/ABDY ++-partikod/AHDY +++partikod/AHD ++ partikularistisk/OY ++ partikulär/OY ++-partiled/ABDY +++partiled/ABD ++ Partille/AX ++ partilösas/Y ++ partimässig/OY ++-partiråd/ABDY +++partiråd/ABD ++ partisan/HDY ++ partiskatteskyldig/OY ++ partiske/Y ++@@ -46442,11 +48410,13 @@ passionsfri/OY ++ passionsfrukt/AHDYv ++ passiv/OPY ++ passivera/NMAPDY +++passivform/AHDY ++ passivhus/BDY ++ passivisera/NMAPDY ++ passivisering/ADGY ++ passivitet/ADY ++ passivum/AJY +++passlag/ADGY ++ passlig/OY ++ passning/ADGYvf ++ passopp/AHDY ++@@ -46488,7 +48458,7 @@ paternalism/ADY ++ paternalistisk/OY ++ paternoster/Y ++ patetik/ADY ++-patetisk/OY +++patetisk/OQY ++ patiens/HDY ++ patient/AHDYX ++ patientavgift/AHDY ++@@ -46539,6 +48509,7 @@ pausvila/EAY ++ pava/EAG ++ paviljong/AHDY ++ Pavlidis +++paxa/NMAP ++ PBL/r ++ pc/r ++ pc-användare/EAJY ++@@ -46556,7 +48527,8 @@ pedant/ATHDY ++ pedanteri/ABHY ++ Peder/A ++ pederast/AHDY ++-pediatriker/EAJY +++pediatrik/AHDY +++pediatriker/EY ++ pediatrisk/OY ++ pedikyr/AHDY ++ pedofil/AOHDYX ++@@ -46571,11 +48543,12 @@ pegmatit/AHDY ++ Pehr/A ++ Pehrson/A ++ Pehrsson/A ++-pejla/NMAPY +++pejl/ADY +++pejla/NAPDIY ++ pejling/ADGY ++ pejorativ/OY ++ pek- ++-peka/NMAP +++peka/NMA ++ pekande/CAY ++ pekannöt/AJDY ++ pekanpassad/NQY ++@@ -46588,7 +48561,7 @@ pekbok/ADY ++ pekböcker/AJY ++ pekdator/AEHYX ++ pekdon/ABDY ++-pekenhet/AHDY +++pekenhet/AHD ++ pekfinger/CAIYX ++ pekfunktion/AHDY ++ pekgränssnitt/ABDY ++@@ -46598,27 +48571,27 @@ Peking/A ++ pekinges/HDY ++ pekkänsla/EAGY ++ pekkänslig/OY ++-pekmeny/EAHY ++-pekmobil/AHDY +++pekmeny/EAH +++pekmobil/AHD ++ pekoral/ABDY ++ pekoralartad/NQY ++ pekoralist/ATHDY ++ pekoralmässig/OY ++-pekpenna/EAGY +++pekpenna/EAG ++ pekpinne/EAGY ++ pekplatta/EAGY ++-pekpryl/ADGY +++pekpryl/ADG ++ pekreglage/ECAY ++ pekskärm/ADGYv ++-pekstyrd/OY +++pekstyrd/O ++ pekstyrning/ADY ++-peksystem/ABDY ++-pekteknik/AHDY +++peksystem/ABD +++pekteknik/AHD ++ pektelefon/AHDY ++ pekuniär/OY ++-pekupplevelse/EAIY +++pekupplevelse/EAI ++ pekvänlig/OPY ++-pekyta/EAGY +++pekyta/EAG ++ pelagisk/OY ++ pelarborrmaskin/AHDY ++ pelare/EAJz ++@@ -46760,7 +48733,7 @@ peristaltisk/OY ++ peritektisk/OY ++ peritektoida/JY ++ perkulator/AEHY ++-perlit/ATDY +++perlitisk/OY ++ permafrost/ADY ++ permanens/DY ++ permanent/AQDYX ++@@ -46780,6 +48753,7 @@ permissionsf ++ permittera/NMAPDY ++ permittering/ADGYv ++ permitteringshotad/NQY +++permobil/AHDY ++ permutation/AHDYv ++ permutera/NMAPY ++ perniciös/OQY ++@@ -46831,8 +48805,9 @@ personbil/ADGYv ++ personbästa/ECAY ++ personbästana/AY ++ persondator/AEHY +++persondosimeter/EAIY ++ personell/OY ++--personers/XZ +++-personers/XZU ++ persongalleri/ABHY ++ personhistorisk/OY ++ personifiera/NMAPY ++@@ -46844,6 +48819,7 @@ personlighet/AHDYv ++ personlighetsklyvning/ADGYv ++ personmina/EAGY ++ personnummer/FCAY +++personrån/ABDY ++ personskildring/ADGYv ++ personteckning/ADGYv ++ persontåg/ABDYv ++@@ -46883,6 +48859,7 @@ peta/NMAP ++ Pete/A ++ Peter/A ++ pet-flaska/EAGY +++petflaska/EAGY ++ PET-flaska/EAGY ++ petig/OPQY ++ petita/EAGY ++@@ -46932,7 +48909,6 @@ piccolo/EAIY ++ pick/ADY ++ picka/NAPDIY ++ pickelhuva/EAGY ++-picket/Y ++ picknick/ADGYX ++ picknickkorg/ADGY ++ pickolo/EAIY ++@@ -47014,7 +48990,6 @@ Pilatus ++ pilbladig/OY ++ pilbåge/EAGY ++ pilefoder/FCAY ++-pilera/MY ++ pilfink/ADGYv ++ pilfinkshane/EAGY ++ pilformig/OY ++@@ -47034,24 +49009,26 @@ pilkastning/ADGY ++ pilkfiskare/EAJY ++ pilkning/ADY ++ pilkoger/FCAJY ++-pilla/NMAPHDY +++pilla/NMAHDY ++ pilleknarkare/EAJY ++ pillemarisk/OY ++ piller/FCYX ++ pillerburk/ADGY ++ pilleri/ABY ++ pillertrillare/EAJY +++pillig/OPY ++ pillrig/OY ++ pilot/AHDYX ++ pilotfall/ABDY ++ pilotförbund/ABDY ++-pilotlös/OY ++ pilotstudie/EAIY +++pilregn/ABY ++ pilsk/OPQY ++ pilsnabb/OY ++ pilsner/EAJYX ++ Pilsäter/A ++ pilt/ADG +++pilträd/ABDY ++ pimpa/NMAPDY ++ pimpel/XZ ++ pimpeldon/ABDY ++@@ -47102,15 +49079,16 @@ pinjeskog/ADGY ++ pinjeträd/ABDY ++ pinka/NMADY ++ pinknödig/OPQY +++pin-kod/AHDY ++ pinkod/AHDY ++ pinlig/OY +++pinn ++ pinna/MIY ++ pinnbröd/ABDY ++ pinne/EAY ++ pinnhål/ABDY ++ pinnig/OY ++ pinnmo/EAY ++-pinnmoar/AY ++ pinnsoffa/EAGY ++ pinnstol/ADGY ++ pinnved/ADY ++@@ -47121,7 +49099,6 @@ pinsam/KMLY ++ pinsamhet/AHDYv ++ pinsamt/Y ++ pinscher/EAIY ++-pintera/MY ++ pinuppa/EAGY ++ pinuppig/OY ++ pion/AHDY ++@@ -47159,6 +49136,7 @@ pipr ++ piprökning/ADY ++ pipskaft/ABDY ++ pipskägg/ABDY +++pipsvängen ++ piptobak/ADY ++ pir/ADG ++ pirat/AHDYX ++@@ -47171,21 +49149,21 @@ pirig/OY ++ piripiri/EAY ++ piripirisås/HDY ++ pirog/AHDY +++pirr/ABY ++ pirra/EMADGY ++ pirrig/OPY ++ pirrning/ADGY ++-pirrögd/OY +++pirrögd/O ++ piruett/AHDYX ++ piruettera/MY ++ PISA/r ++-pisk/XZ ++-piska/NEMAPDGY ++-piskare/EAJY +++pisk/ABDYX +++piska/NEAPDIGY +++piskare/EAY ++ piskbalkong/AHDY ++ piskning/ADY ++ piskrapp/ABDY ++-pisksnärt/XZ ++-pisksnärts/XZ +++pisksnärt/XZv ++ piss/BY ++ pissa/NMADY ++ pissljumma/Y ++@@ -47196,6 +49174,7 @@ pissn ++ pissoar/AHDYX ++ pissträngd/OY ++ pist/AHD +++pistage/EAIY ++ pistasch/AHDY ++ pistill/AHDYX ++ pistmaskin/AHDY ++@@ -47213,23 +49192,23 @@ pitbull/ADGY ++ pitbullterrier/EAJY ++ pitepalt/ADGY ++ Piteå/AX ++-piteåbo/EAIY +++piteåbo/EAI ++ pitt/ADG! ++ pittoresk/OY ++ pivotera/MY ++ pixel/EAIY +++pixlig/OPY ++ pizza/EAGYX ++ pizzeria/EAGY ++ pizzicato/FECAYX ++ pizzicatoliknande/Y ++-pjattig/OY ++ pjolleraktig/OY ++ pjollrig/OPY ++ pjollrighet/ADY ++ pjosk/ABY ++ pjoska/NMAY ++ pjoskeri/ABHY ++-pjoskfri/OY +++pjoskfri/O ++ pjoskig/OPY ++ pjoskighet/ADY ++ pjunkig/OY ++@@ -47251,7 +49230,7 @@ placera/NMAPDY ++ placerare/EAJYzg ++ placering/ADGYvf ++ placeringsort/AHDY ++-plack/AHDY +++plack/ADY ++ pladask ++ pladder/CAY ++ pladderaktig/OY ++@@ -47287,7 +49266,8 @@ planetarisk/OY ++ planetarium/AJY ++ planetsystem/ABDY ++ plangeometrisk/OY ++-planhet/ADY +++planhalva/EAGY +++planhet/ADYv ++ planimetrisk/OY ++ planing/ADYv ++ plank/ABDYX ++@@ -47315,6 +49295,7 @@ planm ++ planmässighet/ADYv ++ planpolariserad/NQY ++ planpressad/NQY +++-plans/XZU ++ plansch/AHDYX ++ planschett/AHDY ++ planskild/OY ++@@ -47333,7 +49314,7 @@ plask/ABDY ++ plaska/MBY ++ plaskdamm/ADGY ++ plaskvåt/OQY ++-plasma/EAGYX +++plasma/EAYX ++ plasmaskärm/ADGY ++ plast/ATHDYX ++ plasta/NMAPDY ++@@ -47359,6 +49340,8 @@ plastkl ++ plastlaminera/MY ++ plastmantlad/NQY ++ plastmugg/ADGY +++plastning/ADY +++plastpåse/EAGY ++ plastråvara/EAGY ++ plasttak/ABDY ++ plasttapet/AHDY ++@@ -47381,7 +49364,7 @@ platonism/ADY ++ platonsk/OQY ++ plats/HDYXU ++ platsa/MY ++-platstal/ABDY +++platstal/ABD ++ platt/PYX ++ platta/NEMAGY ++ plattbladig/OY ++@@ -47451,6 +49434,7 @@ plikttrohet/ADY ++ pliktvidrig/OY ++ pling/ABDY ++ plinga/MDY +++plingplong ++ plint/ADGY ++ plinthopp/ABDY ++ plira/MDY ++@@ -47488,10 +49472,9 @@ plogben/ABDY ++ plogbil/ADGY ++ plogbill/ADGYv ++ plogbillsaktion/AHDY ++-plogdjup/ABY ++ plogformig/OY ++ plogfåra/EAGY ++-ploglok/ABDY +++ploglok/ABD ++ plogning/ADGYv ++ ploj/ADGY ++ plomb/AHDY ++@@ -47521,9 +49504,9 @@ pluggning/ADY ++ pluggskivling/ADGY ++ pluggskola/EAGY ++ pluggämne/FECAY +++plugin/A ++ plump/AOQDGY ++ plumphet/AHDY ++-plumpig/OY ++ plumpudding/ADGY ++ plums/BY ++ plumsa/MDY ++@@ -47542,20 +49525,23 @@ pluricentricitet/ADY ++ pluricentrisk/OY ++ pluring/ADGY ++ plurret/Y ++--plus/XZ ++-plus/BDYX +++-plus/XZU +++plus/YX +++plusen/A +++pluset/A ++ plusgiro/XZ ++ plusgrad/AHDY +++plusjobb/ABDY ++ pluskonto/FECAY ++ pluskvamperfekt/ABHY ++ pluspol/AHDY ++ pluspoäng/ABDY ++ plussa/NMAY ++--plussare/EAJ +++-plussare/EAJY ++ plussig/OY ++ plustecken/FCAY ++--plusåring/ADG ++-pluta/NMAPD +++-plusåring/ADGY +++pluta/NMAD ++ plutig/OY ++ Pluto/AX ++ plutokrat/ATHDY ++@@ -47605,6 +49591,8 @@ pl ++ plåt/ADYX ++ plåta/NAPDIY ++ plåtbeklädd/OY +++plåtbit/ADGY +++plåtburk/ADGY ++ plåtfat/ABDY ++ plåtfälg/ADGY ++ plåtkar/ABDY ++@@ -47633,7 +49621,6 @@ pl ++ plöjare/EAJY ++ plöjbar/OY ++ plöjning/ADGYv ++-plörös/OY ++ plös/DG ++ plötslig/OPQY ++ plötsligen ++@@ -47646,7 +49633,7 @@ pneumokockinfektion/AHDY ++ pneumoni/EAHY ++ PNR/r ++ pochera/NMAPDY ++-pocka/NMAP +++pocka/NMA ++ pockande/Y ++ pocket/ADGYX ++ pocketbok/ADY ++@@ -47678,14 +49665,14 @@ pointillistiske/Y ++ pojk/XZ ++ pojkaktig/OPQY ++ pojkaktighet/AHDY ++-pojkbands/XZ +++pojkband/ABDYv ++ pojkbok/ADYv ++ pojkbyting/ADGY ++ pojkböcker/AJY ++ pojke/EAGY ++-pojklags/XZ +++pojklag/ABDYv ++ pojknamn/ABDY ++-pojkrums/XZ +++pojkrum/FCAYv ++ pojkstreck/ABDY ++ pojkvasker/EAIY ++ pojkvän/AFY ++@@ -47721,7 +49708,7 @@ polaritet/AHDY ++ polaroidkamera/EAGY ++ Polarpris/XZ ++ polartrakt/AHDY ++-polaxel/EAY +++polaxel/EA ++ polcirkel/EAIY ++ polemik/AHDY ++ polemiker/EY ++@@ -47748,7 +49735,6 @@ poliovaccin/ABHY ++ poliovaccinera/NMAPDY ++ poliovirus/BDY ++ polis/HDYXU ++-polisdatalag/D ++ polish/ADY ++ polisiär/OY ++ poliskask/ADGY ++@@ -47800,7 +49786,7 @@ polskregistrerad/NQY ++ polskspråkig/OQY ++ polskt ++ polsktillverkad/NQY ++-polskydd/ABDY +++polskydd/ABD ++ polstjärna/EAGY ++ Polstjärnan/A ++ polyamid/AHDY ++@@ -47845,7 +49831,8 @@ polyteism/ADY ++ polyteistisk/OY ++ polyteknisk/OY ++ polytoxisk/OY ++-polytrop/OTY +++polytrop/O +++polytropisk/OY ++ polyvinylklorid/ADY ++ polär/OY ++ pomada/EAGY ++@@ -47871,7 +49858,7 @@ ponny/EAHYX ++ ponnyras/HDY ++ Pontiac/AX ++ pontifikat/ABDY ++-pontisk/OY +++pontisk/O ++ Pontius ++ ponton/AHDY ++ pontonbro/EAGY ++@@ -47891,7 +49878,7 @@ popgala/EAGY ++ popgrupp/AHDY ++ pophelgon/ABDY ++ popidol/AHDY ++-popikon/AHDY +++popikon/AHD ++ popkarriär/AHDY ++ popkonsert/AHDY ++ popkonst/ADY ++@@ -47908,6 +49895,7 @@ poppa/NMAPDY ++ Poppe/A ++ poppel/EAIY ++ poppelallé/AEHY +++poppen/A ++ poppig/OPY ++ poppis/Y ++ popplatta/EAGY ++@@ -47936,6 +49924,7 @@ popv ++ por/AHD ++ porfyr/ATHDY ++ porig/OY +++porl/ABY ++ porla/MDY ++ pormask/ADGY ++ pornograf/ATHDY ++@@ -47949,7 +49938,7 @@ porrbiograf/AHD! ++ porrbransch/ADY ++ porrbutik/AHD! ++ porrfilm/AHD! ++-porrfri/OY +++porrfri/O ++ porrig/OPQ! ++ porrindustri/EAHY ++ porrkanal/AHDY ++@@ -47989,6 +49978,7 @@ portionera/NMAPY ++ portionsförpackad/NQY ++ portionspaj/AHDY ++ portkod/AHDY +++portlås/BDY ++ portmonnä/EAHY ++ porto/FECA ++ portofri/OY ++@@ -48026,35 +50016,46 @@ possessiv/OY ++ post/AHDYX ++ posta/NMPBY ++ postadress/HDY +++postal/OY ++ postament/ABDY ++ postavgift/AHDY +++postbil/ADGY +++postbox/DGY ++ postbuss/DGY +++postbåt/ADGY ++ postdatera/MY ++ poster/EI ++ postera/NMAPY ++ postering/ADGY +++postfack/ABDY ++ postfrisk/OY ++ postförskott/ABDY ++ postgiro/FECAYX ++ postgirokonto/FECAY ++ postgironummer/FCAY ++ postgång/ADY +++posthus/BDY ++ postiljon/AHDY ++ postkommunistisk/OY ++ postkontor/ABDY ++ postkur/ADGY +++postlåda/EAGY +++postman/AFY ++ postmodern/OY ++ postmodernistisk/OY +++postmän/AFY ++ postmästare/EAJY ++ postning/ADYv ++ postnummer/FCAY +++posto/Y ++ postoperativ/OY ++ postorder/EAYX ++ postorderföretag/ABDY ++-postort/AHDY +++postort/AHD ++ postponera/MY ++ postpositiv/OY ++ postremissväxel/EAIY +++postrån/ABDY ++ poströst/ADYX ++ poströsta/NMAHY ++ poströstning/ADY ++@@ -48090,15 +50091,18 @@ pottkant/AHDY ++ potträning/ADGY ++ poujadistisk/OY ++ Povel/A +++powerplay/AY ++ Powerpoint/r ++ PowerPoint/r ++ poäng/ABHDYX +++-poängare/EAJY ++ poängbäst/OY ++ poänggörare/EAJY +++poängliga/EAGY ++ poänglös/OY ++ poängmässig/OY ++ poängnöd/ADY ++--poängs/XZ +++-poängs/XZU ++ poängsatt/AOQY ++ poängsattes/Y ++ poängsätt/AORY ++@@ -48164,7 +50168,7 @@ pratshow/AHDYX ++ pratsjuk/OPQY ++ pratstund/AHDY ++ pratvänlig/OY ++-praxis/YX +++praxis/DYX ++ precancerös/OY ++ precedens/DY ++ precedensfall/ABDY ++@@ -48318,6 +50322,7 @@ pressare/EAY ++ pressarfot/ADY ++ pressbar/OY ++ pressbyrå/EAHY +++presschef/AHDY ++ pressduk/ADGY ++ pressekreterare/EAJY ++ presseri/ABY ++@@ -48335,6 +50340,7 @@ pressl ++ presslägger/Y ++ pressläggs/Y ++ pressmeddelande/FECAY +++pressmöte/FECAY ++ pressning/ADGY ++ pressofficer/EAHDY ++ pressofficerare/JY ++@@ -48441,12 +50447,11 @@ prinsess/XZ ++ prinsessa/EAGY ++ prinsesstårta/EAGY ++ prinskorv/ADGY ++-prior/AEHY ++ priorinna/EAGY ++ prioritera/NMAPBY ++ prioritering/ADGYv ++ prioriteringsfråga/EAGY ++-prioritet/ADYv +++prioritet/AHDYv ++ prioritetsordning/ADGY ++ pris/BHDGYX ++ prisa/NAPBY ++@@ -48454,10 +50459,11 @@ prisavvikelse/EAIY ++ prisbelagd/OY ++ prisbelönad/NQY ++ prisbelönt/OQY +++prisbild/AHDY ++ prisbillig/OY ++ priselastisk/OY ++ prisfall/ABDY ++-prisgap/ABDY +++prisgap/ABD ++ prisge/NMAY ++ prisgiva/AJDRY ++ prisgiven/MY ++@@ -48467,6 +50473,7 @@ prisgivs/Y ++ prishöjning/ADGY ++ prisklass/HDY ++ priskontrollera/MY +++priskrig/ABDY ++ priskänslig/OY ++ prislapp/ADGY ++ prisläge/FECAY ++@@ -48479,6 +50486,8 @@ prism ++ prismässig/OY ++ prisnivå/EAHY ++ prisnotera/MY +++prispall/ADGY +++prispress/DY ++ prisras/BDY ++ prisreglera/MY ++ prissatta/LJY ++@@ -48487,6 +50496,7 @@ prisse/EAGY ++ prissegment/ABDY ++ prisstabilitet/ADY ++ prisstabilitetsmål/ABDY +++prissumma/EAGY ++ prissätta/LAJDY ++ prissätter/Y ++ prissättning/ADGY ++@@ -48525,7 +50535,7 @@ privilegiel ++ privilegiera/NMAPDY ++ privilegium/AJY ++ prix-/XZ ++-pro-/XZ +++pro/r ++ PRO/r ++ proaktiv/OY ++ probabel/MY ++@@ -48556,10 +50566,11 @@ procent/ADYX ++ procentare/EAJY ++ procentenhet/AHDY ++ procenthalt/AHDY +++-procentig/OY ++ procentig/OYWZ ++--procents/XZ +++-procents/XZU ++ procentsats/HDY ++--procentsöl/B +++-procentsöl/BY ++ procenttal/ABDY ++ procentuell/OY ++ process/DYXU ++@@ -48631,7 +50642,9 @@ profit ++ profoss/HDY ++ profylaktisk/OY ++ profylax/DY +++progg/ADY ++ proggare/EAJY +++proggig/OPQY ++ proggmusik/ADY ++ prognos/HDYXU ++ prognosera/MY ++@@ -48682,7 +50695,7 @@ projektionsduk/ADGY ++ projektiv/OY ++ projektledare/EAJY ++ projektledning/ADY ++-projektor/AEHYX +++projektor/AEHYXU ++ projektorduk/ADGY ++ projektstyrning/ADGY ++ projektstyrningssystem/ABDY ++@@ -48716,6 +50729,7 @@ prominens/HDY ++ prominent/OPQY ++ promiskuitet/ADY ++ promiskuös/OQY +++promota/NMAPDY ++ promotion/AHDYvf ++ promotiv/OPQY ++ promotor/AEHY ++@@ -48771,6 +50785,7 @@ proselyt/AHDY ++ prosenkymatisk/OY ++ prosit ++ proskribera/MY +++prosodi/EAY ++ prosodisk/OY ++ prospekt/ABDY ++ prospektera/MY ++@@ -48806,10 +50821,11 @@ protestant/ATHDY ++ protestantism/ADY ++ protestera/NMADY ++ protestlista/EAGY +++protestnot/AHDY ++ protestprotokoll/ABDY ++ protestrop/ABDY ++ protetisk/OY ++-protisk/OY +++protisk/O ++ protokoll/ABDYXv ++ protokollera/MY ++ protokollföra/KLAJOY ++@@ -48827,6 +50843,7 @@ provar/UZ ++ provare/EAJY ++ proveniens/HDYX ++ provensalsk/OY +++provfilma/NMADY ++ provgiltig/OY ++ provgå/NMLAY ++ proviant/ADYX ++@@ -48841,6 +50858,7 @@ provinsiell/OQY ++ provision/AHDYv ++ provisorisk/OY ++ provisorium/AJY +++provkök/ABDY ++ provköra/KLAJODY ++ provkörning/ADGY ++ provning/ADGYvf ++@@ -48850,6 +50868,7 @@ provokation/AHDYv ++ provokativ/OQY ++ provokatorisk/OY ++ provokatör/AHDY +++provrum/FCAY ++ provrör/ABDYv ++ provrörsbefruktning/ADGY ++ provskjuta/KLAJY ++@@ -48857,12 +50876,14 @@ provskjuten/MY ++ provskjutning/ADGY ++ provsmakare/EAJY ++ provsmakning/ADGYv ++-provsteka/KQLAJY +++provsteka/KQLA ++ provstopp/ABDYv ++-provsända/KLAJDY +++provsvar/ABDY +++provsända/KLAJD ++ provtagare/EAJY ++ provtagning/ADGY ++ provtur/AHDY +++provval/ABDY ++ provåka/KQLAJY ++ provår/ABDY ++ proxyserver/EAIY ++@@ -48870,7 +50891,6 @@ PRT/r ++ prudentlig/OY ++ prudentlighet/ADY ++ prunka/MDY ++-prunklös/OY ++ prut/ABY ++ pruta/NMAY ++ prutmån/ADY ++@@ -48886,6 +50906,7 @@ prydnad/AHDYv ++ prydnadspumpa/EAGY ++ prydnadssak/AHDY ++ prydnadssten/ADGY +++prydno/Y ++ prygel/ECAIYX ++ prygla/NAPDY ++ prygling/ADY ++@@ -48895,7 +50916,7 @@ prylformig/OY ++ prylgalen/KMY ++ pryo/EA ++ prål/AB ++-pråla/NMADY +++pråla/MDY ++ prålfri/OY ++ prålig/OY ++ pråm/ADGY ++@@ -48910,6 +50931,7 @@ pr ++ präktighet/ADY ++ pränta/NMAJPDY ++ prärie/EAIYX +++präriebrand/AJDY ++ präst/AHDYX ++ prästadöme/FECAY ++ prästbetyg/ABDY ++@@ -49062,6 +51084,7 @@ puh ++ puka/EAG ++ pukslag/ABDY ++ pukslagare/EAJY +++pula/NMA ++ pulka/EAGYX ++ pulkaåkning/ADY ++ pulkbacke/EAGY ++@@ -49091,7 +51114,7 @@ pulvermetallurgi/AY ++ pulvermetallurgin/Y ++ pulvermetallurgisk/OY ++ pulvermos/BY ++-pulvrisera/MY +++pulvrisera/NMAPDY ++ pulvrisering/ADGY ++ puma/EAG ++ pumaunge/EAGY ++@@ -49102,7 +51125,7 @@ pumpafr ++ pumpakärna/EAGY ++ pumpan/A ++ pumparm/ADGY ++-pumpbar/OY +++pumpbar/O ++ pumphus/BDY ++ pumpning/ADGYvf ++ pumpor/AJ ++@@ -49119,11 +51142,13 @@ pungformig/OY ++ pungråtta/EAGY ++ punisk/OY ++ punk/ADY +++punka/EAGY ++ punkar/XZ ++ punkare/EAJY ++ punkband/ABDY ++ punkfrisyr/AHDY ++ punkgrupp/AHDY +++punkig/OPQY ++ punkmusik/ADY ++ punkrock/ADY ++ punkt/AHDYsf ++@@ -49136,6 +51161,7 @@ punktformig/OY ++ punktlig/OPQY ++ punktlighet/ADY ++ punktmarkera/MY +++-punkts/XZU ++ punktskrift/ADY ++ punktvis ++ punsch/ADYX ++@@ -49144,7 +51170,7 @@ punschig/OY ++ pupill/AHDYX ++ pupinisera/MY ++ puppa/EAGY ++-pur/OPQ +++pur/OP ++ puré/AEHYX ++ purea/NMAPY ++ purfärsk/OQY ++@@ -49171,7 +51197,6 @@ purpurskimmer/AY ++ purpurskimmren/AY ++ purpurskimmret/AY ++ purra/MY ++-purrig/OY ++ purser/EAY ++ purung/OQY ++ pusha/NMAPDY ++@@ -49190,7 +51215,6 @@ pust/ADGY ++ pusta/MY ++ pustig/OY ++ puta/MD ++-putativ/OY ++ putig/OY ++ Putin/AX ++ putmage/EAGY ++@@ -49201,7 +51225,7 @@ putsbar/OY ++ putsbruk/ABY ++ putsbräde/FECAY ++ putsduk/ADGY ++-putsfri/OY +++putsfri/O ++ putshyvel/EAIY ++ putslustig/OPQY ++ putslustighet/AHDY ++@@ -49217,9 +51241,9 @@ puttefnask/ADGY ++ puttenuttig/OPY ++ putter/EAY ++ puttning/ADY ++-puttra/MDIY +++puttra/NMADIY ++ puttrig/OPQY ++-PVC/r +++pvc/r ++ pyemisk/OY ++ pygmé/AEHYX ++ pygmeisk/OY ++@@ -49243,8 +51267,8 @@ pyroforisk/OY ++ pyroklastisk/OY ++ pyrola/EAGY ++ pyrolaart/AHDY ++-pyrolys/Y ++-pyrolysen/Y +++pyrolys +++pyrolysen ++ pyrolytisk/OY ++ pyromagnetisk/OY ++ pyroman/AHDYX ++@@ -49255,7 +51279,8 @@ pyroteknik/AHDY ++ pyrotekniker/EY ++ pyroteknisk/OY ++ pyrrhusseger/EAIY ++-pysa/KJD +++pys/BDG +++pysa/KD ++ pysning/ADGY ++ pyssel/CAY ++ pysselgrupp/AHDY ++@@ -49264,7 +51289,7 @@ pysslig/OPQY ++ pysslighet/ADY ++ pyssling/ADGY ++ Pytagoras ++-pytagoré/AEHY +++pytagoré/AEH ++ pytagoreisk/OY ++ Pythagoras ++ pythagoreisk/OY ++@@ -49274,7 +51299,7 @@ pyts/DGY ++ pytsa/NMADY ++ pytsning/ADY ++ pytsspruta/EAGY ++-pytt/Y +++pytt/ADY ++ pytte ++ pyttelilla/Y ++ pyttelille/Y ++@@ -49287,7 +51312,7 @@ p ++ påannons/HDY ++ påannonsera/NMAPDY ++ påannonsering/ADGY ++-påbackad/NQY +++påbackad/NQ ++ påbackning/ADGY ++ påbindning/ADGY ++ påbjuda/KLAJDRY ++@@ -49350,7 +51375,7 @@ p ++ påhopp/ABDY ++ påhoppad/NQY ++ påhugg/ABDY ++-påhäktad/NQY +++påhäktad/NQ ++ påhällning/ADY ++ påhälsning/ADGY ++ påhäng/ABDYv ++@@ -49374,12 +51399,13 @@ p ++ påkommen/MY ++ påkopplad/NQY ++ påkoppling/ADGY ++-påkosta/MPDY +++påkostad/NQY +++påkostande/Y ++ påkrängning/ADY ++ påkslag/ABDY ++ påkänning/ADGYvf ++ påkörare/EAJY ++-påkörd/OY +++påkörd/OQY ++ påkörning/ADGY ++ pålade/AOY ++ pålaga/EAOGY ++@@ -49404,7 +51430,7 @@ p ++ pålmast/AHDY ++ pålning/ADGYv ++ pålningsverk/ABDY ++-pålspets/DGY +++pålspets/DG ++ Pålsson/A ++ pålstek/ABDY ++ pålurad/NQY ++@@ -49422,7 +51448,7 @@ p ++ pålöpande/Y ++ påmanad/NQY ++ påmaning/ADGY ++-påmatad/NQY +++påmatad/NQ ++ påminna/KLAJODRY ++ påminnelse/EAIYX ++ påminnelseavi/EAHY ++@@ -49434,9 +51460,9 @@ p ++ påmålning/ADGY ++ påmönstra/MPY ++ påmönstring/ADGY ++-pånitad/NQY +++pånitad/NQ ++ pånitning/ADGY ++-pånystad/NQY +++pånystad/NQ ++ pånystning/ADGY ++ pånyttfödd/OQY ++ pånyttfödelse/EAIY ++@@ -49457,7 +51483,6 @@ p ++ påringning/ADGYv ++ påräkna/NMAPDY ++ påräknelig/OY ++-påränd/OY ++ påsadling/ADY ++ påsatt/OY ++ påse/EAGY ++@@ -49473,18 +51498,23 @@ p ++ påsk/ADGYX ++ påskafton/ADIY ++ påskas/Y ++-påskdags/XZ +++påskdag/ADGYv +++påskeld/ADGY +++påskhelg/AHDY ++ påskina/Y ++ påskjutning/ADGY ++ påsklilja/EAGY +++påsklov/ABDY ++ påskrift/AHDY ++ påskris/BDY ++ påskriven/MY ++ påskruvad/NQY ++ påskruvning/ADGY ++-påskvin/ABHY +++påsktid/AHDY +++påskvin/ABH ++ påskynda/NMAPDY ++ påskyndning/ADGY +++påskägg/ABDY ++ påskö/XZ ++ Påskön/A ++ påslag/ABDY ++@@ -49548,7 +51578,7 @@ p ++ påtaglighet/AHDYv ++ påtagning/ADGY ++ påtala/NEMAPDY ++-påtalbar/OY +++påtalbar/O ++ påtappning/ADGY ++ påteckna/NMAPDY ++ påteckning/ADGY ++@@ -49559,7 +51589,7 @@ p ++ påtryckargrupp/AHDY ++ påtryckning/ADGYv ++ påtråcklad/NQY ++-påträdd/OY +++påträdd/O ++ påträdning/ADY ++ påträffa/NMAPDY ++ påträngande/Y ++@@ -49580,16 +51610,16 @@ p ++ påverkbarhet/ADY ++ påverkning/ADGYv ++ påvestol/ADGY +++påveval/ABDY ++ påvisa/NMAPDY ++ påvisbar/OY ++ påvisk/OY ++ påvlig/OY ++ påvridning/ADGY ++-påväxt/AHDY +++påväxt/ADY ++ påyrka/NMAPDY ++-påöka/MY ++ påökning/ADGY ++-påökt/OY +++påökt/Y ++ päls/DGYX ++ pälsa/NMAY ++ pälsbeklädnadsindustri/EAHY ++@@ -49615,6 +51645,7 @@ p ++ pärlemorskimrande/Y ++ pärlformig/OY ++ pärlgrå/OY +++pärllök/ADGY ++ pärlprydd/OY ++ pärlspont/AHDY ++ pärlspontad/NQY ++@@ -49639,11 +51670,10 @@ p ++ pöl/ADG ++ pölsa/EAGY ++ pölsig/OY ++-pömsig/Y ++ pörte/FECAY ++ pösa/KJ ++ pösande/Y ++-pösig/OY +++pösig/OPQY ++ pösighet/ADY ++ pösmagad/NQY ++ pösmunk/ADGY ++@@ -49657,10 +51687,13 @@ Qin ++ qr-kod/AHDY ++ QR-kod/AHDY ++ Qruiser/A +++queer/QOYX +++queerfeministisk/OY +++queerteori/EAY ++ quenell/AHDY ++ quisling/ADGY ++ quorn/Y ++-r/Rr +++r/r ++ rabalder/FCAY ++ rabarber/EAYX ++ rabarberkompott/AHDY ++@@ -49683,8 +51716,9 @@ rabulism/ADY ++ rabulist/ATHDY ++ race/ECAY ++ racematisk/OY ++-racemisk/OY +++racemisk/O ++ racer/XZ +++racerbana/EAGY ++ racerförare/EAJY ++ racing/ADYX ++ racingserie/EAIY ++@@ -49697,7 +51731,10 @@ racket/DGYX ++ racketsport/AHDY ++ racklig/OY ++ rackmontera/NMAPY ++-rackskåp/ABDY +++rackskåp/ABD +++raclette/Y +++raclettejärn/ABDY +++racletteost/ADGY ++ rad/AHDYX ++ rada/NCA ++ radade ++@@ -49705,6 +51742,7 @@ radannons/HDY ++ radar/AEYX ++ radareko/FECAY ++ radarekvation/AHDY +++radarfyr/ADGY ++ radarisera/MY ++ radarskärm/ADGY ++ radarstation/AHDY ++@@ -49714,6 +51752,7 @@ radart ++ radarutrustning/ADGY ++ radavstånd/ABDY ++ radband/ABDYv +++radda/EAGY ++ radera/NMAPD ++ raderbar/OY ++ radergummi/FECAY ++@@ -49723,7 +51762,7 @@ radial/OY ++ radialbelastning/ADGY ++ radialborrmaskin/AHDY ++ radian/AHDY ++-radiativ/OY +++radiativ/O ++ radiator/AEHYX ++ radiatorkyld/OY ++ radie/EAIY ++@@ -49736,7 +51775,8 @@ radikalisering/ADY ++ radikalism/ADY ++ radikalitet/ADY ++ radikalkur/AHDY ++-radio/EAIYXU +++radio/EAYXU +++radiofyr/ADGY ++ radiografera/MY ++ radioisotopteknisk/OY ++ radiolog/AY ++@@ -49778,13 +51818,13 @@ rafr ++ rafsa/NMADY ++ rafsig/OY ++ ragata/EAGY ++-ragg/ADG +++ragg/AD ++ ragga/NMAPDY ++ raggare/EAJYz ++ raggaråk/ABDY ++ raggig/OPQY ++ raggmunk/ADGY ++-raggning/ADGY +++raggning/ADGYv ++ raggsocka/EAGY ++ ragla/MDY ++ Ragnar/A ++@@ -49792,23 +51832,29 @@ Ragnar ++ Ragnhild/A ++ ragu/AEHY ++ Ragunda/A +++Rai/r ++ raid/AHDr ++-raita/EAY ++-rak/OP ++-raka/NMAP +++rajgräs/BDY +++rak/P +++raka/EAGY +++rakade/AO ++ rakapparat/AHDY +++rakar +++rakats ++ rakbent/OQY ++ rakblad/ABDYv ++ rakbladsvass/OY ++ rakborste/EAGY ++ rakdon/ABDY ++ Rakel/A +++raken ++ raket/AHDYX ++ raketbestyckad/NQY ++ rakethopp/ABDY ++ raketteknisk/OY ++ raketuppskjutning/ADGY ++ rakfibrig/OY +++rakhet/ADY ++ rakhornad/NQY ++ rakhyvel/EAIY ++ rakit/AD ++@@ -49830,6 +51876,7 @@ rakstammig/OY ++ rakstrigel/EAIY ++ raksträcka/EAGY ++ rakstuga/EAGY +++rakt ++ raktvål/ADGY ++ rakvatten/CAY ++ rakvuxen/KMY ++@@ -49839,8 +51886,7 @@ raljans/DY ++ raljant/OQY ++ raljera/NMADY ++ raljeri/ABHY ++-rall/AD ++-ralla/NAPDI +++rall/ADG ++ rallar/XZ ++ rallare/EAJY ++ rallarsving/ADGY ++@@ -49850,17 +51896,19 @@ rallyna/AY ++ rallytävling/ADGY ++ ram/ADGYX ++ rama/NAPD +++ramadan/AX ++ ramaskri/FEABDY +++ramavtal/ABDY ++ ramberättelse/EAIY ++ rambeslut/ABDY ++ ramekonomisk/OY ++ ramla/MDY +++ramlag/ADGY ++ ramlare/EAJY ++-ramlös/OY ++ ramm/ADG ++ ramma/NMAPDY ++ rammelbuljong/Y ++-rammning/ADGYv +++rammning/ADGv ++ ramning/ADGY ++ ramp/AHDYX ++ rampfeber/EAY ++@@ -49870,7 +51918,6 @@ ramponering/ADY ++ ramsa/EAGY ++ ramslök/ADGY ++ ramsåg/ADGY ++-ramtid/AHDY ++ ramverk/ABDY ++ ranch/AHDYX ++ rand/AJDYX ++@@ -49882,13 +51929,13 @@ randomisera/NMAPDY ++ randomisering/ADGY ++ randsydd/OY ++ randvillkor/ABDY ++-rang/AHDY +++rang/ADY ++ rangera/NMAPDY ++ rangerbangård/ADGY ++ rangering/ADGY ++ rangerlok/ABDY ++ rangklass/HDY ++-rangla/NMAPDY +++rangla/NMADY ++ ranglig/OPQY ++ ranglighet/ADY ++ ranglista/EAGY ++@@ -49898,7 +51945,7 @@ rangplats/HDY ++ rangrulla/EAGY ++ rangskala/EAGY ++ rangställning/ADGY ++-rank/PQ +++rank/P ++ ranka/NEMAPDGY ++ rankhet/ADY ++ rankig/OY ++@@ -49920,12 +51967,12 @@ ranunkel/EAJIY ++ ranunkelgul/OY ++ ranunkelväxt/AHDY ++ rap/BD ++-rapa/NMADI +++rapa/NMAD ++ rapartist/AHDY ++ rapid/PQY ++ rapida/Y ++ rapiditet/AHDY ++-raplåt/AHDY +++raplåt/ADGY ++ rapmusik/ADY ++ rapp/ABDY ++ rappa/MDY ++@@ -49958,24 +52005,25 @@ rapstj ++ rar/OPQ ++ raring/ADG ++ raritet/AHDYv ++-rarka/NMAPDY ++ ras/BHDX ++ rasa/M ++ rasande/Y ++ rasbiologisk/OY ++ rasdiskriminering/ADGY ++ rasera/NMAPDY ++-raseri/ABHYX +++raseri/ABYX ++ raserianfall/ABDY ++ rasering/ADGYv ++ rashat/ABY ++ rashets/DY ++ rashygien/TADY +++rashäst/ADGY ++ rasism/ADY ++ rasist/ATHDYX ++ rasistiske/Y ++ rask/PQ ++ raska/MY +++raskatt/AHDY ++ rasket/Y ++ raskhet/ADY ++ raskt ++@@ -50002,17 +52050,19 @@ rastert ++ rastlös/OY ++ rastlöshet/ADY ++ rastning/ADGY +++rastplats/HDY ++ rastplatsmord/ABDY ++ rastrera/MPY ++ rastrering/ADGYv ++ rastvakt/AHDY ++-rata/NMAPD +++rata/NMAPHDR ++ ratatouille/EAY +++rate/E ++ ratificera/NMAPDY ++ ratificering/ADGYv ++ ratifikation/AHDYv ++-ratinera/MY ++ rating/ADY +++ration/AHDY ++ rationalisera/NMAPDY ++ rationaliserare/EAJY ++ rationalisering/ADGYv ++@@ -50029,14 +52079,16 @@ rattfylla/EAGY ++ rattfylleri/ABY ++ rattfylleridömd/OY ++ rattfyllerist/AHDY +++rattlås/BDY ++ rattmuff/ADGY ++ rattonykterhet/ADYv ++ rauk/ADGY ++ ravefest/AHDY +++raveklubb/ADGY ++ ravin/AHDY ++ ravioli/EAYX ++ razzia/EAGYX ++-rea/NEMAGv +++rea/NEMAG ++ reabok/ADY ++ reabränsle/FECAY ++ reaböcker/AJY ++@@ -50048,8 +52100,8 @@ Reagan/AX ++ reagens/BHDYX ++ reagera/NMADY ++ reakatalog/AHDY ++-reaktans/HDY ++-reaktansfri/OY +++reaktans/HD +++reaktansfri/O ++ reaktion/AHDYvf ++ reaktionär/AOPHQDY ++ reaktiv/OY ++@@ -50112,7 +52164,8 @@ receptivitet/ADY ++ receptor/AEHY ++ receptur/AHDY ++ recess/HDY ++-recession/AHDY +++recession/AHDYv +++recessionsår/ABDY ++ recessiv/OY ++ recherchera/MY ++ recidiv/ABDY ++@@ -50293,6 +52346,8 @@ reggaemusik/ADY ++ regi/EAYX ++ regianvisning/ADGY ++ regiassistent/AHDY +++regidebut/AHDY +++regikonst/ADY ++ regim/AHDYX ++ regimkritiker/EAJY ++ regimskifte/FECAY ++@@ -50360,17 +52415,20 @@ regngr ++ regnhärdig/OY ++ regnig/OPY ++ regnkappa/EAGY ++-regnlös/OY +++regnmoln/ABDY ++ regnoväder/FCAY ++ regnperiod/AHDY ++ regnrik/OPY ++ regnrock/ADGYv ++ regnskadad/NQY ++ regnskog/ADGYv +++regnskur/ADGY ++ regnsky/EAGY ++ regnskyddad/NQY +++regnställ/ABDY ++ regntålig/OY ++ regntät/OY +++regnvatten/CAY ++ regnvåt/OQY ++ regnväder/FCAY ++ regnvädersdag/ADGY ++@@ -50420,7 +52478,7 @@ reka/M ++ rekapitulation/AHDY ++ rekapitulera/NMAPDY ++ rekapitulering/ADGY ++-rekavi/AHDY +++rekavi/EAHY ++ reklam/AHDYX ++ reklamaffisch/AHDY ++ reklamare/EAJY ++@@ -50551,11 +52609,10 @@ religiositet/ADY ++ religiös/OPQY ++ relik/AHDYX ++ reling/ADGY ++-relokera/MY ++-relokerbar/OY +++relokera/M +++relokerbar/O ++ relä/ABHY ++ reläa/NMAPDY ++-reläera/MY ++ reläskydd/ABDY ++ reläsockel/EAIY ++ reläspråk/ABDY ++@@ -50570,7 +52627,7 @@ remburs/HDY ++ rembursera/MY ++ remdriven/MY ++ remedium/AJY ++-remhjul/ABDY +++remhjul/ABD ++ remi/EAH ++ reminiscens/HDY ++ remiparti/ABHY ++@@ -50606,11 +52663,12 @@ renast/Q ++ renbete/FECAYv ++ renbetesland/ABDY ++ renbog/ADGY ++-renbränd/OY ++ rendera/NMAPDY ++ rendezvous/BHY ++ renegat/AHDY +++renfana/EAGY ++ renframställa/KLAJODRY +++renfäll/ADGY ++ rengjorda/Y ++ rengjorde/AOY ++ rengjort/AY ++@@ -50622,10 +52680,12 @@ renhet/ADYv ++ renhjord/ADGY ++ renhjärtad/NQY ++ renhjärtenhet/ADY +++renhorn/ABDY ++ renhållning/ADY ++ renhårig/OY ++ renhårighet/ADY ++ rening/ADGYvf +++renkalv/ADGY ++ renko/EAIY ++ renkött/ABY ++ renlav/ADGY ++@@ -50636,8 +52696,10 @@ renlig/OPQY ++ renlighet/ADYv ++ renlighetsmani/EAHY ++ renlinjig/OY +++renlosta/EAGY ++ renlärig/OPQY ++ renlärighet/ADYv +++rennäring/ADY ++ renodla/NMAPDY ++ renommé/ABCYX ++ renommerad/NQY ++@@ -50650,15 +52712,15 @@ renrasig/OY ++ renrasighet/ADY ++ renrita/NMAPDY ++ rens/B ++-rensa/NAPDY ++-rensar/EYXU ++-rensare/EAJY +++rensa/NMAPDY +++rensare/EAJYzg ++ rensbar/OY ++ rensbrunn/ADGY ++ renseri/ABY ++ renshacka/EAGY ++ renskalad/NQY ++ renskav/ABY +++renskinn/ABDYv ++ renskniv/ADGY ++ renskriva/KLAJRY ++ renskriven/MY ++@@ -50671,8 +52733,10 @@ rensn ++ rensopad/NQY ++ renspolad/NQY ++ rensspiral/AHDY +++renstek/ADGY ++ rentav ++ rentier/AHDY +++rentjur/ADGY ++ rentorka/NMAPDY ++ rentutav ++ rentvå/NKMLAY ++@@ -50724,7 +52788,7 @@ replikf ++ replikskifte/FECAY ++ replokal/AHDY ++ repning/ADGY ++-reponera/MY +++reponera/M ++ reportage/ECAYX ++ reportagemässig/OY ++ reporter/EAIYX ++@@ -50768,18 +52832,21 @@ Republiken/A ++ repulsion/AHDYv ++ repulsiv/OY ++ reputerlig/OY ++-resa/EABIGY +++repända/EAIRY +++repände/EY +++res/QDRYX +++resa/KEQLBIGYy ++ resande/FEYX ++ resandebok/ADY ++ resandeböcker/AJY ++ resdag/ADGY ++ resdamm/ABY ++-rese/EAYX ++ research/AHDY ++ researcher/EY ++ reseavdrag/ABDY ++ reseberättelse/EAIY ++ resebeskrivning/ADGY +++resebolag/ABDY ++ resebransch/ADY ++ resebroschyr/AHDY ++ resebyrå/EAHY ++@@ -50792,8 +52859,7 @@ resekostnad/AHDY ++ resekreditiv/ABDY ++ resektion/AHDYv ++ resenär/AHDY ++-reser ++-reserisk/OY +++reseriskt ++ reserv/AHDYX ++ reservant/AHDY ++ reservare/EAJY ++@@ -50813,7 +52879,7 @@ reservoarpenna/EAGY ++ reservofficer/EAHDY ++ reservofficerare/JY ++ reservutgång/ADGY ++-reseråd/ABDY +++reseråd/ABD ++ reseräkning/ADGY ++ reseskildring/ADGY ++ resesällskap/ABDY ++@@ -50868,6 +52934,7 @@ resorberbar/OY ++ resorbering/ADY ++ resorption/ADYv ++ resp +++respass/BDY ++ respekt/ADYX ++ respektabel/KMLY ++ respektabilitet/ADY ++@@ -50891,10 +52958,10 @@ respondera/NMADY ++ respons/DY ++ responsorisk/OY ++ responsorium/AJY +++resrutt/AHDY ++ ressentiment/ABDY ++ ressällskap/ABDY ++-rest/AHDYX ++-resta/L +++rest/HDYX ++ restaurang/AHDYX ++ restauranganställd/OY ++ restaurangkök/ABDY ++@@ -50907,7 +52974,6 @@ restaurat ++ restaurera/NMAPDY ++ restaurering/ADGYv ++ restavgift/AHDY ++-reste ++ restera/NMADY ++ restföra/KLAJODY ++ restföring/ADGY ++@@ -50997,6 +53063,8 @@ retur/AHDYX ++ returbiljett/AHDY ++ returfiber/EAY ++ returfibrer/AJY +++returmatch/AHDY +++returmöte/FECAY ++ returnera/NMAPDY ++ returnering/ADGY ++ returpapper/FCAJBDY ++@@ -51117,6 +53185,7 @@ rickshaw/AEHYX ++ rida/KLAJD ++ ridanläggning/ADGY ++ ridbana/EAGY +++ridbyx/XZ ++ ridbyxor/AJY ++ riddar/XZ ++ riddare/EAJY ++@@ -51138,7 +53207,7 @@ ridkl ++ ridkonst/AHDY ++ ridkunnig/OQY ++ ridkunnighet/ADY ++-ridkäpp/ADGY +++ridkäpp/ADG ++ ridlektion/AHDYv ++ ridläger/FCAYX ++ ridlärare/EAJY ++@@ -51236,7 +53305,9 @@ riksmarsk/ADGY ++ riksmarskalk/ADGY ++ riksmuseum/AJY ++ riksmöte/FECAY +++riksnivå/EAHY ++ riksomfattande/Y +++riksplan/ABY ++ rikspolis/HDY ++ rikspolitik/AHDY ++ rikspolitiker/EY ++@@ -51261,11 +53332,13 @@ riktare/EAJY ++ riktig/OPQY ++ riktighet/ADYv ++ riktlinje/EAIY +++riktmärke/FECAY ++ riktning/ADGYvf ++ riktnummer/FCAY +++riktpris/BHY ++ riktpunkt/AHDY ++ riktvärde/FECAYX ++-rillkniv/ADGY +++rillkniv/ADG ++ rim/FCA ++ rimflätning/ADY ++ rimfrost/ADY ++@@ -51317,15 +53390,17 @@ ringrev/ABDY ++ ringrostig/OQY ++ ringräv/ADGY ++ ringsignal/AHDY +++ringväg/ADGY ++ rink/ADGY ++ rinkeby/XZ ++ Rinkeby/A ++ rinna/JDY ++ rinner/Y ++-rinnfri/OY +++rinnfri/O ++ rinnig/OPY ++ Rio ++ Rioch +++rioja/EAGY ++ ripa/EAGY ++ ripjakt/AHDY ++ ripjägare/EAJY ++@@ -51356,15 +53431,18 @@ riskfull/OY ++ riskfylld/OPY ++ riskgrupp/AHDY ++ riskkapital/ABDY +++risklump/G ++ riskmoment/ABDY ++ riskoja/EAGY ++ riskorn/ABDY ++ risktagande/FECAY ++ risktal/ABDY ++ risktäckning/ADGY +++riskzon/AHDY ++ risnudel/EAIY ++ risodling/ADGY ++ risotto/EAY +++risp/ABDY ++ rispa/NEMAPGY ++ rispapper/FCAJBDY ++ rispig/OY ++@@ -51388,11 +53466,9 @@ ritblock/ABDY ++ ritbok/ADY ++ ritbord/ABDY ++ ritböcker/AJY ++-ritenlig/OY ++ ritkol/ABDY ++ ritkontor/ABDY ++ ritning/ADGYvf ++-ritorkad/NQY ++ ritpapper/FCAJBDY ++ ritpenna/EAGY ++ ritplatta/EAGY ++@@ -51450,6 +53526,7 @@ Robertsfors ++ Robin/A ++ robot/ADGYX ++ robotaktig/OQY +++robotarm/ADGY ++ robotartad/NQY ++ robotbestyckad/NQY ++ robotbeväpnad/NQY ++@@ -51511,7 +53588,7 @@ roderbeslag/ABDY ++ roderblad/ABDY ++ roderbroms/DGY ++ roderlös/OY ++-rodiera/MY +++rodiera/M ++ rodium/ABY ++ rodiumhaltig/OY ++ rodna/MDY ++@@ -51540,6 +53617,7 @@ rolighetsminister/EAIY ++ roll/AHDYX ++ rollator/AEHY ++ roller/EIY +++rollfigur/AHDY ++ rollista/EAGY ++ rollspel/ABDY ++ rollspelare/EAJY ++@@ -51563,6 +53641,7 @@ romanist/ATHDY ++ romanistik/ADY ++ romankonst/ADY ++ romanlitteratur/ADY +++romanpris/BHDY ++ romans/HDYX ++ romanserie/EAIY ++ romansk/OQY ++@@ -51591,7 +53670,7 @@ Romeo/A ++ romersk/OQY ++ romersk-katolsk/OQY ++ romflaska/EAGY ++-romhona/EAGY +++romhona/EAG ++ romkorn/ABDY ++ romläggning/ADGY ++ rommani/EAY ++@@ -51606,19 +53685,19 @@ Ronaldo/A ++ rond/AHDY ++ rondell/AHDYX ++ rondo/FECAY ++-rondör/AHDY +++rondör/ADY ++ Ronja/A ++ Ronna/A ++ Ronneby/AX ++ Ronnie/A ++ Ronny/A +++rookie/EAY ++ rop/ABD ++ ropa/NMAPD ++ roquefort/ADY ++ roquefortost/ADGY ++ rorgängare/EAJY ++ rorkult/ADGY ++-rorlös/OY ++ rorpinne/EAGY ++ rorsman/AFY ++ rorsmän/AFY ++@@ -51633,7 +53712,7 @@ rosaskimrande/Y ++ rosbukett/AHDY ++ rosbuske/EAGY ++ rosdoft/AHDY ++-rosé/AEHY +++rosé/AEH ++ Rosenbad/Av ++ Rosenberg/A ++ rosenblad/ABDY ++@@ -51711,7 +53790,7 @@ rostskada/EAGY ++ rostskydd/ABDY ++ rostskydda/NMAPDYv ++ rostsvamp/ADGY ++-rot/AJQDGYX +++rot/JQDGYX ++ rota/NA ++ rotad/NQY ++ rotande/CAY ++@@ -51723,7 +53802,7 @@ rotationsr ++ rotblöta/EAGY ++ rotborste/EAGY ++ rotdiameter/EAIY ++-rotdjup/ABDY +++rotdjup/ABD ++ rotel/EAIY ++ rotenon/ABY ++ rotera/NMAPDY ++@@ -51737,19 +53816,21 @@ rotig/OY ++ rotisseri/ABHY ++ rotknöl/ADGY ++ rotkonsonant/AHDY ++-rotlängd/AHDY +++rotlängd/AHD ++ rotlös/OY ++ rotlöshet/ADYv ++ rotmos/BY ++ rotogravyr/AHDY ++ rotor/AEHY ++ rotorblad/ABDY ++-rotröta/EAY +++rotröta/EA +++rots/DY ++ rotsak/AHDY ++ rotselleri/EAY ++ rotslagen/MY ++ rotslå/NMAY ++ rotting/ADGYX +++rottråd/ADGY ++ rottweiler/EAJYX ++ rottweilertik/ADGY ++ rotunda/EAGY ++@@ -51783,15 +53864,15 @@ royalty/EAYX ++ Royce/A ++ RPS/r ++ RSS +++RTL/r ++ rubank/ADGY ++-rubatera/NMAY +++rubatera/NMA ++ rubato/FECAY ++ rubb/ABY ++ rubba/NMAPDY ++ rubbning/ADGY ++ rubel/EAY ++ rubelkurs/HDY ++-Rubenowitz/A ++ Rubens/X ++ Rubenson/A ++ rubidium/ABY ++@@ -51817,7 +53898,7 @@ ruelse/EAYX ++ ruelsefull/OY ++ ruelsefylld/OY ++ ruff/ADGY ++-ruffad/NQY +++ruffa/NAPDY ++ ruffel/CAY ++ ruffig/OPQY ++ ruffighet/AHDY ++@@ -51835,7 +53916,6 @@ ruggig/OPQY ++ ruggighet/AHDY ++ ruggning/ADGYv ++ ruggningstid/AHDY ++-rugos/OY ++ ruin/AHDY ++ ruinera/NMAPDY ++ ruinering/ADY ++@@ -51859,7 +53939,7 @@ rullformig/OY ++ rullgardin/AHDY ++ rullgardinsmeny/EAHY ++ rullning/ADGYv ++-rullningslager/FCAJY +++rullningslager/FCAY ++ rullskridsko/EAIY ++ rullskridskoåkning/ADY ++ rullsten/ADGYv ++@@ -51870,7 +53950,6 @@ rullstolsbunden/KMY ++ rullstolsburen/KMY ++ rulltrappa/EAGY ++ rulltårta/EAGY ++-rulsig/OY ++ rultig/OPQY ++ rum/FCAY ++ rumba/EAGY ++@@ -51878,6 +53957,7 @@ rumla/MDY ++ rumlare/EAJY ++ rumlös/OY ++ rumma +++-rummare/EAJY ++ rumpa/EAGY ++ rumphugga/AJDRY ++ rumphuggen/MY ++@@ -51887,6 +53967,7 @@ rumphuggs/Y ++ rumphögg/AY ++ rumpnisse/EAGY ++ rumpstek/ADGY +++-rums/XZU ++ rumsadverb/ABDY ++ rumsadverbial/ABDY ++ rumsarrest/ADY ++@@ -52071,6 +54152,7 @@ rutertrea/EAGY ++ rutertvåa/EAGY ++ ruteråtta/EAGY ++ ruteräss/BDY +++rutet ++ rutformig/OY ++ Ruth/A ++ rutig/OY ++@@ -52085,6 +54167,7 @@ rut-jobb/ABDY ++ rutmönster/FCAJY ++ rutmönstrad/NQY ++ rutning/ADGY +++rutnät/ABDY ++ rutscha/MY ++ rutschbana/EAGY ++ rutschig/OY ++@@ -52103,6 +54186,7 @@ Rwanda/AX ++ rwandier/EAJY ++ rwandisk/OQY ++ rwandiska/EAGY +++rya/NEMLAG ++ ryafår/ABDY ++ ryagarn/ABY ++ ryamatta/EAGY ++@@ -52126,7 +54210,7 @@ ryggkota/EAGY ++ ryggläge/FECAY ++ ryggmärg/ADYv ++ ryggmärgsbråck/ABDY ++-ryggont +++ryggont/Y ++ ryggrad/AHDYv ++ ryggradsdjur/ABDY ++ ryggradslös/OY ++@@ -52182,7 +54266,7 @@ rynka/NEMAPDGY ++ rynkfri/OY ++ rynkig/OPQY ++ rynkighet/ADY ++-rysa/KJD +++rysa/KD ++ rysansvärd/OY ++ rysar/XZ ++ rysare/EAJY ++@@ -52223,7 +54307,7 @@ r ++ råbarkad/NQY ++ råbiff/ADGY ++ råbock/ADGY ++-råd/BQDRX +++råd/BDRX ++ råda/KL ++ rådande/Y ++ rådata/AYX ++@@ -52248,7 +54332,6 @@ r ++ rådjur/ABDYv ++ rådjurskid/ABDY ++ rådjurslägg/ADGY ++-rådklok/OQY ++ rådlade/AY ++ rådlagt/AY ++ rådlig/OY ++@@ -52260,6 +54343,7 @@ r ++ rådman/AFY ++ rådmän/AFY ++ rådplägning/ADGY +++rådrum/CAY ++ rådsbeslut/ABDY ++ rådsförordning/ADGY ++ rådsförsamling/ADGY ++@@ -52268,7 +54352,6 @@ r ++ rådslå/NMAY ++ rådsmedlem/FAIY ++ rådsmöte/FECAY ++-rådsnabb/OY ++ rådsnar/OY ++ rådspresident/AHDY ++ rådsrepublik/AHDY ++@@ -52280,7 +54363,8 @@ r ++ rågar ++ rågas/N ++ rågblond/OY ++-råggul/OY +++rågbröd/ABDY +++rågkaka/EAGY ++ rågkli/ABY ++ råglas/BY ++ rågmjöl/ABYv ++@@ -52292,13 +54376,14 @@ r ++ råka/EAGY ++ råkade/A ++ råkall/OY ++-råkantig/OY ++ råkar ++ råkat/A ++ råkopia/EAGY ++ råkost/ADYX +++råkurr/ABDY +++råm/AB ++ råma/MD ++-råmanus/BDY +++råmanus/BD ++ råmaterial/ABDYX ++ råmjölk/ADYv ++ råmjölkspannkaka/EAGY ++@@ -52308,6 +54393,8 @@ r ++ rånar/XZ ++ rånare/EAJY ++ Råneå/A +++rånförsök/ABDY +++rånkupp/AHDY ++ rånmord/ABDY ++ rånmörda/NMAPY ++ rånmördare/EAJY ++@@ -52323,7 +54410,7 @@ r ++ råsocker/CAY ++ råsop/ADGY ++ råspont/ADY ++-råsprit/ADY +++råsprit/AD ++ råstark/OY ++ råstyrka/EAY ++ Råsunda/AX ++@@ -52336,7 +54423,9 @@ r ++ råttbo/FEABY ++ råttfälla/EAGY ++ råttfärgad/NQY +++råttgift/ABY ++ råttgrå/OY +++råtthål/ABDY ++ råttlik/OY ++ råttspillning/ADGY ++ råttäten/MY ++@@ -52370,6 +54459,7 @@ r ++ räka/EAGY ++ räkenskap/AHDYvf ++ räkenskapsår/ABDY +++räkmacka/EAGY ++ räkna/NMAPDY ++ räknare/EAJYzg ++ räkne/XZ ++@@ -52389,15 +54479,14 @@ r ++ räkstjärt/ADGY ++ räktrålar/XZ ++ räktrålare/EAJY ++-räl/HD ++-rälig/O +++rälig/OP ++ räls/DG ++ rälsbrott/ABDY ++ rälsbuss/DGY ++ rälsfordon/ABDY ++ rälsolycka/EAGY ++ rämna/EMAPDGY ++-ränk/AHDY +++ränker/AJY ++ ränkfull/OY ++ ränksmidar/XZ ++ ränksmidare/EAJY ++@@ -52445,6 +54534,7 @@ r ++ rättegång/ADGYvf ++ rätteligen ++ rättelse/EAIYXU +++-rätters/XZU ++ rättesnöre/FECAY ++ rättfram/KMY ++ rättframhet/ADYv ++@@ -52464,6 +54554,7 @@ r ++ rättrogenhet/ADY ++ rättrådig/OY ++ rättrådighet/ADYv +++rättschef/AHDY ++ rättsenlig/OY ++ rättsfall/ABDY ++ rättsfallena/AY ++@@ -52500,6 +54591,7 @@ r ++ rättsskyddsförsäkring/ADGY ++ rättsstats/XZ ++ rättsstridig/OY +++rättssäker/MY ++ rättssäkerhet/ADY ++ rättstavad/NQY ++ rättstavning/ADYv ++@@ -52518,13 +54610,22 @@ r ++ räv/ADGYX ++ rävaktig/OY ++ rävboa/EAGY +++rävfarm/AHDY +++rävfarmare/EAJY +++rävgift/ABY +++rävgryt/ABDY +++rävhona/EAGY ++ rävhund/ADGY +++rävjakt/AHDY ++ rävlya/EAGY +++rävpäls/DGY ++ rävrumpa/EAGY ++ rävröd/OY +++rävsax/DGY ++ rävskabb/ADY +++rävspel/ABDY ++ rävtik/ADGY ++-rö/EAB +++rävvalp/ADGY ++ röd/OPQX ++ rödakors/XZ ++ rödaktig/OY ++@@ -52544,6 +54645,7 @@ r ++ rödfläckig/OY ++ rödfnasig/OY ++ rödfruktig/OY +++rödfärg/ADY ++ rödfärgad/NQY ++ rödgardist/ATHDY ++ rödgardistiske/Y ++@@ -52554,7 +54656,7 @@ r ++ rödgumpad/NQY ++ rödhake/EAGY ++ rödhalsad/NQY ++-rödhuvad/NQY +++rödhuvad/NQ ++ rödhårig/OQY ++ rödhåriga/AY ++ röding/ADGY ++@@ -52563,11 +54665,14 @@ r ++ rödklädd/OQY ++ rödkål/ADYv ++ rödlackera/MY +++rödljus/BDY ++ Rödluvan/A ++ rödlätt/OPY +++rödlök/ADGY ++ rödmosig/OY +++rödmyra/EAGY ++ rödmåla/NMAPY ++-rödmålla/EAGY +++rödmålla/EAG ++ rödmärkt/OY ++ rödnäbbad/NQY ++ rödpannad/NQY ++@@ -52576,6 +54681,7 @@ r ++ rödrandig/OY ++ rödrosig/OY ++ rödrutig/OY +++rödräv/ADGY ++ rödskaftad/NQY ++ rödskägg/ABDY ++ rödskäggig/OY ++@@ -52589,7 +54695,8 @@ r ++ rödstjärtad/NQY ++ rödstrimmig/OY ++ rödstrupig/OY ++-rödtott/ADGY +++rödtjut/ABY +++rödtott/ADG ++ rödtunga/EAGY ++ rödvin/ABHYv ++ rödvingad/NQY ++@@ -52599,34 +54706,46 @@ r ++ rödögdhet/ADY ++ röja/KLAJOR ++ röjande/CAY ++-röjkurs/HDY +++röjkurs/HD ++ röjning/ADGYvf ++ röjsåg/ADGY ++ rök/DGYX ++ röka/KQLADY ++ rökare/EAYz ++ rökbar/AOHDY +++rökbomb/AHDY +++rökdykare/EAJY ++ rökelse/EAIYX ++ rökelsekar/ABDY ++ rökeri/ABHY ++-rökfri/OY ++-rökfylla/KLAJOY +++rökfri/QOY +++rökfylld/OY ++ rökfärgad/NQY +++rökförbud/ABDY ++ rökgas/HDYX +++rökgång/ADGY ++ rökhandgranat/AHDY ++ rökhuv/ADGY ++ rökig/OY +++rökighet/ADY ++ rökkampanj/AHDY +++rökkupé/AEHY +++röklukt/ADY ++ rökmaskin/AHDY ++ rökmoln/ABDY ++ rökning/ADYv ++ rökpaus/HDY ++ rökpelare/EAJY +++rökpuff/ADGY +++rökpust/ADGY ++ rökridå/EAHY +++rökring/ADGY +++rökrum/FCAY ++ rökruta/EAGY ++ röksignal/AHDY ++-rökskadad/NQY +++rökskada/EAPGY ++ röksky/EAGY +++röksmak/AHDY ++ röksugen/KMY ++ röksvag/OY ++ röksvamp/ADGY ++@@ -52634,8 +54753,8 @@ r ++ rökverk/ABY ++ rölakan/ABY ++ rölleka/EAGY ++-rön/BD ++-röna/KA +++rön/ABD +++röna/K ++ rönn/ADGY ++ rönnbär/ABDYv ++ rönnbärsmal/ADGY ++@@ -52671,7 +54790,8 @@ r ++ rörs/N ++ rörsocker/CAY ++ rörströmning/ADGY ++-röse/FECA +++rös/D +++röse/FCA ++ röst/AHDYX ++ rösta/NMAPBY ++ röstare/EAJYWZ ++@@ -52681,6 +54801,7 @@ r ++ röstfiska/NMADY ++ röstförklaring/ADGY ++ röstkort/ABDYv +++röstköp/ABDY ++ röstlängd/AHDYv ++ röstning/ADGYvf ++ rösträtt/ADYv ++@@ -52700,20 +54821,25 @@ r ++ rövar/XZ ++ rövare/EAY ++ rövarkula/EAGY +++rövarliv/Y ++ rövarroman/AHDY ++ rövhål/ABDY +++:s/YWZ ++ s/ORr ++ Saab/AX ++ Saade/A ++ SaaS/r ++ sabadill/Y +++sabb/ABY ++ sabba/NMAPDY ++ sabbat/HDY ++ sabbatsdag/ADGY ++ sabbatsfirande/CAY ++ sabbatsvila/EAY ++ sabbatsår/ABDY ++-sabel/EAIY +++sabel/EAIX +++sabelbent/OY +++sabelbenthet/ADY ++ sabelformad/NQY ++ sabelhandrem/ADGY ++ sabeltandad/NQY ++@@ -52777,6 +54903,7 @@ safir/AHDYX ++ safirblå/OY ++ saft/AHDYX ++ safta/NMAY +++saftglas/BDY ++ saftig/OPY ++ saftighet/ADY ++ saftning/ADY ++@@ -52790,6 +54917,8 @@ sago/XZ ++ sagoaktig/OY ++ sagoberättande/CAY ++ sagoberätterska/EAGY +++sagobok/ADY +++sagoböcker/AJY ++ sagofigur/AHDY ++ sagofolk/ABY ++ sagoförtäljare/EAJY ++@@ -52846,7 +54975,7 @@ sakregister/FCAY ++ sakristia/EAGY ++ sakrättslig/OY ++ sakskäl/ABDY ++-sakstöd/ABDY +++sakstöd/ABD ++ sakta/NMAY ++ saktare/Y ++ sakteliga ++@@ -52890,7 +55019,7 @@ salladshuvudena/AY ++ salladskål/ADGY ++ salladsland/ABDY ++ salladssås/HDY ++-sallat/AHDYv +++sallat/ADYv ++ sallatsblad/ABDY ++ salmonella/EAYX ++ salmonellasmitta/EAPY ++@@ -52909,17 +55038,19 @@ salsgolv/ABDY ++ salt/APBHYX ++ salta/NKMAPY ++ saltaktig/OY +++saltbad/ABDY ++ saltbemängd/OY ++-saltfri/OY ++ saltglasera/MY +++salthalt/AHDY ++ salthaltig/OY ++ saltig/OY +++saltimbocca/EAY ++ saltkar/ABDY ++-saltlös/OY ++ saltmättad/NQY ++ saltning/ADY ++ saltomortal/AHDY ++ saltsillfilé/AEHY +++saltsjö/EAGY ++ Saltsjöbaden/A ++ Saltsjöbads/XZ ++ Saltsjö-Boo ++@@ -52941,11 +55072,11 @@ Salvador/AX ++ salvadoran/AHDY ++ salvadoransk/OQY ++ salvartad/NQY +++salvationist/AHDY ++ salvelsefull/OY ++ salvia/EA ++ salviablad/ABDY ++-sam/QAHD ++-sam- +++sam/QAHbD ++ samarbeta/MDRY ++ samarbete/FECY ++ samarbets/XZ ++@@ -53030,8 +55161,7 @@ samma/Y ++ sammald/OY ++ sammaledes ++ sammalunda ++-samman ++-samman- +++samman/b ++ sammanband/AY ++ sammanbinda/AJDY ++ sammanbinder/Y ++@@ -53133,6 +55263,7 @@ sammansluta/KLAJDY ++ sammansluten/MY ++ sammanslutning/ADGYv ++ sammanslå/NMAY +++sammansmälta/KLAJDY ++ sammansmältning/ADGY ++ sammansnörd/OY ++ sammanstråla/MY ++@@ -53185,6 +55316,7 @@ samorganisation/AHDY ++ samorganisera/MY ++ samorientera/MY ++ samovar/AHDY +++sampel/FCAY ++ sampla/NMAPY ++ samplanera/NMAPDY ++ samplanering/ADGY ++@@ -53224,13 +55356,14 @@ samtaxerad/NQY ++ samtid/ADY ++ samtida/Yv ++ samtidig/OY +++samtidighet/ADY ++ samtidsdans/HDY ++ samtidskonst/ADY ++ samtidsroman/AHDY ++ samtidsskildring/ADGY ++ samtlig/OY ++ samtligas ++-samtycka/KJRY +++samtycka/KQLAJDRY ++ samtycke/FECYv ++ Samuel/A ++ Samuelsson/A ++@@ -53262,6 +55395,7 @@ sam ++ samåkning/ADYv ++ samäga/KLAJOBY ++ samöva/MPDY +++samövning/ADGY ++ San ++ sanatorium/AJY ++ sand/ADYX ++@@ -53278,6 +55412,7 @@ sandf ++ sandgjutning/ADGY ++ sandgul/OY ++ sandhaltig/OY +++sandhed/ADGY ++ sandhög/ADGY ++ sandig/OY ++ sandinist/AHDY ++@@ -53299,6 +55434,7 @@ sands ++ sandtag/ABDY ++ sandtrav/ADY ++ sandtäkt/AHDY +++sandwich/ADGY ++ Sandviken/AX ++ sandvita/EAGY ++ sanera/NMAPDY ++@@ -53347,6 +55483,7 @@ sanskrit/ATY ++ sanslös/OY ++ sanslöshet/ADY ++ Santiago/AX +++SAOL/r ++ sapfisk/OY ++ sapiens ++ saponifiera/MY ++@@ -53366,17 +55503,18 @@ sarga/NMAPY ++ Sargassohavet/A ++ sarglist/AHDY ++ sariklädd/OY ++-sarin/ABY ++ Sarkar/A ++ sarkasm/AHDY ++ sarkastisk/OQY ++ sarkofag/AHDY ++ Sarkozy/A ++ sarmatisk/OY +++sarong/AHDY ++ Sarpsborg/A ++ sars/Y ++ SAR-värde/FECA ++ SAS/r +++SAT1/r ++ satan/A! ++ Satan/A ++ satanisk/OY ++@@ -53433,7 +55571,7 @@ sauvignon ++ sav/AD ++ savann/AHDY ++ savbarkad/NQY ++-savfull/OY +++savfull/O ++ savhaltig/OY ++ savig/OY ++ savojkål/ADY ++@@ -53441,7 +55579,7 @@ savolaxar/XZ ++ savolaxare/EAJY ++ savolaxisk/OY ++ sax/TDGYX ++-saxa/M +++saxa/MCA ++ saxare/EAY ++ saxofon/AHDYX ++ saxofonist/AHDY ++@@ -53449,6 +55587,7 @@ saxofonkvartett/AHDY ++ saxskänkel/EAIY ++ SBAB/r ++ SBU/r +++scampi/EAY ++ Scania/AX ++ scanning/ADGY ++ scarf/ADGY ++@@ -53461,12 +55600,13 @@ scenario/FECAY ++ sceneri/ABHY ++ scenframträdande/FECAY ++ scenförändring/ADGY +++scenkonst/ADY ++ scenlösning/ADGY ++ scenograf/ATHDY ++ scenografi/EAHY ++ scenprat/ABY +++scenrum/FCAY ++ scenshow/AHDY ++-sch ++ schablon/AHDYX ++ schablonartad/NQY ++ schablonavdrag/ABDY ++@@ -53585,13 +55725,18 @@ sconesen/Y ++ scoop/ABDY ++ scorzonera/MY ++ scout/AHDYX +++scouting/ADY ++ scoutläger/FCAY ++ scoutmässig/OY +++Scrabble/A +++scratch/Y ++ screening/ADY +++script/ABDY +++scrolla/NMADY ++ SD/r ++ SDHC/r ++ sd-kort/ABDYX ++-se/NKMC +++se/NKC ++ SeaMonkey/A ++ seans/HDY ++ SEAT ++@@ -53623,15 +55768,17 @@ sedimentera/MY ++ sedimenterbar/OY ++ sedlig/OPY ++ sedlighet/ADYv +++sedum/ADY ++ sedvana/EAGY ++ sedvanemässig/OY ++ sedvanerätt/ADY ++ sedvanlig/OY ++ sedvänja/EAGY ++ seeda/NMAPY +++seedning/ADGY ++ seende/CAY ++ sefardisk/OY ++-sefir/ABDY +++sefir/ADY ++ sefyr/AHDY ++ seg/OPQ ++ sega/M ++@@ -53668,6 +55815,7 @@ segerrop/ABDY ++ segerrus/BY ++ segerrusig/OQY ++ segersiffra/EAGY +++segersvit/AHDY ++ segersäll/OQY ++ segertal/ABDY ++ segertecken/CAY ++@@ -53681,7 +55829,7 @@ segeryra/EAY ++ segflytande/Y ++ seghet/ADYv ++ seghärdbar/OY ++-segjärn/ABDY +++segjärn/ABD ++ segla/NMABY ++ seglare/EAJYzg ++ seglats/HDY ++@@ -53710,6 +55858,7 @@ sej/ADG ++ sejdel/EAIY ++ sejour/AHDY ++ sek. +++sekant/AHDY ++ sekatör/AHDY ++ sekel/FCAJYX ++ sekelgamla/Y ++@@ -53718,6 +55867,7 @@ sekelgammal/MY ++ sekellång/OY ++ sekelskifte/FECAY ++ sekelskifteshus/BDY +++sekin/AHDY ++ Seko/A ++ sekond/AHDYX ++ sekondofficer/EAHDY ++@@ -53747,6 +55897,7 @@ sektledare/EAJY ++ sektor/AEHYvf ++ sektorformad/NQY ++ sektorformig/OY +++sektorfyr/ADGY ++ sektorisera/MY ++ sekularisera/MPY ++ sekularisering/ADYv ++@@ -53797,6 +55948,7 @@ semesterstuga/EAGY ++ semesterstängd/OY ++ semesterö/EAGY ++ semestra/MDIY +++semi/EAY ++ semialkalisk/OY ++ semifinal/AHDYX ++ semifinalist/AHDYX ++@@ -53854,7 +56006,7 @@ senig/OY ++ senil/OQY ++ senildement/OQY ++ senilitet/ADYv ++-senior/AHDYX +++senior/AOHDYX ++ seniorlag/ABDY ++ senkapitalistisk/OY ++ senklassisk/OY ++@@ -53910,11 +56062,11 @@ sepsis/Y ++ sept. ++ september/AX ++ septembermorgon/ADIY ++-septerad/NQY ++ septiktank/ADGY ++ septiljon/AHDY ++ septima/EAGY ++ septisk/OY +++ser ++ seraf/ATHDY ++ serb/ATHDY ++ Serbien/AX ++@@ -53939,7 +56091,7 @@ serpentinera/MY ++ serpentinisera/MY ++ Serrano/A ++ serum/ABY ++-serva/MIY +++serva/NAPDIY ++ servare/EAY ++ serve/EAYX ++ serveess/BDY ++@@ -53987,22 +56139,23 @@ sexarbetare/EAJY ++ sexarbete/FECAY ++ sexatomig/OY ++ sexbarns/XZ ++-sexbild/AHDY ++-sexbok/ADY +++sexbild/AHD +++sexbok/AD ++ sexbomb/AHDY ++ sexbrott/ABDYv ++ sexbrottsling/ADGY ++ sexbutik/AHDY ++-sexböcker/AJY +++sexböcker/AJ ++ sexcentiliters/XZ ++ sexcylindrig/OY ++ sexdagars/XZ ++ sexdebut/AHDY ++ sexdrottning/ADGYv ++ sexdubbel/MY ++-sexdåre/EAGY +++sexdubbling/ADGY +++sexdåre/EAG ++ sexfaldig/OQY ++-sexfest/AHDY +++sexfest/AHD ++ sexfilig/OY ++ sexfilm/AHDY ++ sexfixerad/NQY ++@@ -54036,14 +56189,14 @@ sexlek/ADGY ++ sexleksak/AHDY ++ sexling/ADGY ++ sexliters/XZ ++-sexliv/ABDY +++sexliv/ABY ++ sexlust/ADGY ++ sexmissbruk/ABY ++ sexmissbrukare/EAJY ++ sexmord/ABDY ++ sexmotorig/OY ++ sexmåls/XZ ++-sexmånaders/XZ +++sexmånaders/X ++ sexmästar/XZ ++ sexmästare/EAJY ++ sexmästeri/ABHY ++@@ -54100,7 +56253,7 @@ sextionio ++ sextioprocentig/OY ++ sextiosex ++ sextiosju ++-sextiotal/ABYv +++sextiotal/ABDYv ++ sextiotalist/AHDYX ++ sextiotalsstil/ADY ++ sextiotimmars/XZ ++@@ -54149,11 +56302,12 @@ sexualorgan/ABDY ++ sexualrådgivning/ADY ++ sexualundervisning/ADGY ++ sexuell/OQY +++sexvanor/JY ++ sexveckors/XZ ++ sexvinklig/OY ++ sexvånings/XZ ++ sexvåningshus/BDY ++-sexvärd/OY +++sexvärd/O ++ sexvärdig/OY ++ sexväxlad/NQY ++ sexårig/OQY ++@@ -54177,7 +56331,7 @@ SGI/r ++ shah/AHDY ++ Shakespeare/AX ++ shaman/AHDY ++-Shanghai/A +++Shanghai/AX ++ sharialag/ADGY ++ sharialagstiftning/ADY ++ Sheffield/AX ++@@ -54195,15 +56349,18 @@ shiit/ATHDY ++ shilling/ADY ++ shintoism/ADY ++ Shiva/AX ++-shop/ADGY ++-shoppa/MDY ++-shoppare/EAJY +++shop/AY +++shoppa/MDIY +++shoppare/EAY +++shoppen/AY ++ shopping/ADYX ++ shoppingrunda/EAGY ++ shoppingtur/AHDY ++ shorts/Y ++ shortsklädd/OY ++-show/AHDY +++show/ADY +++showa/NMAHDY +++shownummer/FCAY ++ shuntlindad/NQY ++ shuntmagnetiserad/NQY ++ SI ++@@ -54215,7 +56372,6 @@ Sibirien/AX ++ sibirier/EAJY ++ sibirisk/OY ++ sibylla/EAGY ++-sic ++ sicilianar/XZ ++ sicilianare/EAJY ++ siciliansk/OQY ++@@ -54256,7 +56412,7 @@ sidhuvud/ABDY ++ sidhuvudena/AY ++ sidhäftad/NQY ++ sidhänvisning/ADGYv ++--sidig/O +++-sidig/OY ++ sidled ++ sidledes ++ sidlinje/EAIY ++@@ -54277,18 +56433,20 @@ sidoljus/BDY ++ sidomonterad/NQY ++ sidoordnad/NQY ++ sidorientering/ADGY ++--sidors/XZ +++-sidors/XZU +++sidorum/FCAY ++ sidosprång/ABDY ++ sidospår/ABDY ++ sidoställd/OY ++ sidovindskänslig/OY +++sidoväg/ADGY ++ sidpanel/AHDY ++ sidriktning/ADGY ++ sidroder/FCAYX ++ sidrubrik/AHDY ++ sidsiffra/EAGY ++ sidskruv/ADY ++-sidslut/ABY +++sidslut/AB ++ sidsteppa/MY ++ sidställd/OY ++ sidsöm/FAIY ++@@ -54297,8 +56455,8 @@ sidvall/ADGY ++ sidvind/ADGYv ++ sidvindskänslig/OY ++ sidvisning/ADGY ++-sidvänd/OY ++-sidyta/EAGY +++sidvänd/O +++sidyta/EAG ++ Siegfried/A ++ siemens/Y ++ Siemens/X ++@@ -54314,6 +56472,7 @@ sifferbitare/EAJY ++ sifferkod/AHDY ++ siffermässig/OY ++ siffra/EAGY +++-siffrig/OY ++ Sifo/r ++ sig ++ sightseeing/ADYX ++@@ -54371,7 +56530,7 @@ siktf ++ siktig/OY ++ siktinrättning/ADGY ++ siktlinje/EAIY ++-siktlös/OY +++siktlös/O ++ siktmaskin/AHDY ++ siktmedel/FCAY ++ siktmjöl/ABY ++@@ -54405,6 +56564,7 @@ silkesstrumpa/EAGY ++ silkestunn/OY ++ silkig/OY ++ sill/ADGYX +++sillbit/ADGY ++ sillgrissla/EAGY ++ sillmjölke/EAGY ++ sillsallad/AHDY ++@@ -54494,6 +56654,7 @@ simsalabim ++ simskola/EAGY ++ simsnäppa/EAGY ++ simsport/ADY +++simsätt/ABDY ++ simtag/ABDY ++ simtur/AHDY ++ simtävling/ADGY ++@@ -54535,7 +56696,6 @@ singularistisk/OY ++ singularitet/AHDY ++ singuljär/OY ++ singulär/OY ++-sinisk/OY ++ sinister/KMLY ++ sinka/NMAPY ++ sinkadus/HDY ++@@ -54573,25 +56733,18 @@ sionism/ADY ++ sionist/ATHDYX ++ sionistiske/Y ++ sioux/HDYX ++-sipp/ADGY ++-sippa/EMAGY ++-sippare ++-sippast/Q ++-sippblå/OY ++-sippe +++sipp +++sippa/EMADGY ++ sipphet/ADY ++ sippra/MDY ++-sippranka/EAGY ++ sippt ++ Sipri ++-sir/ABD ++-sira/NA ++-sirad/Q +++sir/D ++ sirap/ADYv ++ sirapslen/OY +++sirapslimpa/EAGY ++ sirapsstekt/OY ++ sirapssöt/OY ++-sirar ++ sirat/AHDY ++ siratlig/OY ++ siren/HDX ++@@ -54620,10 +56773,10 @@ sisuladdad/NQY ++ sisyfosarbete/FECAY ++ sisådär ++ sitar/AHDY ++-site/EAIY ++--sits/XZ +++-sits/XZU ++ sits/DGY ++ sitsdyna/EAGY +++-sitsig/OY ++ sitta/JBYz ++ sittben/ABDYv ++ sitter/Y ++@@ -54670,11 +56823,14 @@ sjuhundra ++ sjuhundratal/ABY ++ sjuhundraårig/OY ++ sjuhörnig/OY +++sjuhövdad/NQY ++ sjuk/OPQYX ++ sjuka/EAGY ++ sjukamp/AHDY ++ sjukampare/EAJY ++ sjukbår/ADGY +++sjukbädd/ADGY +++sjukdag/ADGY ++ sjukdom/ADGYv ++ sjukdomshärd/ADGY ++ sjukdomsmärkt/OQY ++@@ -54683,6 +56839,7 @@ sjukf ++ sjukhemsvård/ADY ++ sjukhus/BDYXU ++ sjukilos/XZ +++sjukintyg/ABDY ++ sjukkassa/EAGY ++ sjukkasse/XZ ++ sjukledig/OY ++@@ -54695,6 +56852,7 @@ sjukna/MY ++ sjukpeng/ADY ++ sjukpenningförsäkring/ADGY ++ sjukpenningklass/HDY +++sjukrum/FCAY ++ sjuksal/ADGY ++ sjukskriva/KLAJRY ++ sjukskriven/NKMY ++@@ -54713,7 +56871,7 @@ sjumannalag/ABDY ++ sjumilakliv/ABDY ++ sjumilasteg/ABDY ++ sjumilastövel/EAIY ++-sjumånaders/XZ +++sjumånaders/X ++ sjunde ++ sjundedagsadventist/AHDY ++ sjundedel/ADGY ++@@ -54745,7 +56903,7 @@ sjusn ++ sjusovare/EAJY ++ sjustjärna/EAGY ++ sjusärdeles ++-sjutalig/OY +++sjutalig/O ++ sjutiden/Y ++ sjutillhållarlås/BDY ++ sjutimmars/XZ ++@@ -54762,7 +56920,7 @@ sjuttionio ++ sjuttioprocentig/OY ++ sjuttiosex ++ sjuttiosju ++-sjuttiotal/ABYv +++sjuttiotal/ABDYv ++ sjuttiotalist/AHDYX ++ sjuttiotalsstil/ADY ++ sjuttiotre ++@@ -54851,6 +57009,7 @@ sj ++ självbetjäningssamhälle/FECAY ++ självbevarelse/EAIYX ++ självbevarelsedrift/AHDY +++självbild/AHDY ++ självbiografi/EAHDY ++ självbiografisk/OY ++ självcentrerad/NQY ++@@ -54986,21 +57145,26 @@ sj ++ sjöbevakningsofficer/EAHDY ++ sjöbevakningsofficerare/JY ++ sjöblå/OY +++sjöblöt/OY ++ Sjöbo/AX ++ sjöbod/ADGY ++ sjöborre/EAGY +++sjöbris/DY ++ sjöduglig/OY ++ sjöfarare/EAJY ++ sjöfart/ADYv ++ sjöfartsavgift/AHDY ++ sjöfartsmuseum/AJY +++sjöfolk/ABY ++ sjöfågel/EAIYX ++ sjögräs/BYX ++ sjögående +++sjögång/ADY ++ sjöhistorisk/OY +++sjöhäst/ADGY ++ sjöis/DGY ++ sjöjungfru/AEIY ++-sjökaptens/XZ +++sjökapten/AHDYv ++ sjöko/EAIY ++ sjökommendera/MY ++ sjökort/ABDY ++@@ -55008,7 +57172,8 @@ sj ++ sjökrigföring/ADY ++ sjökunnig/OY ++ sjölejon/ABDY ++-sjömack/ADGY +++sjöliv/ABY +++sjömack/ADG ++ sjöman/AFYv ++ sjömansbiff/ADGY ++ sjömansmässig/OY ++@@ -55032,28 +57197,36 @@ sj ++ sjöresa/EAGY ++ sjöräddning/ADYv ++ sjöräddningsplan/ABDY +++sjörätt/ADY ++ sjörättslig/OY ++ sjörövar/XZ ++ sjörövare/EAJY ++ sjöröveri/ABY ++ sjösatta/LJY ++ sjösatte/Y +++sjösida/EAY ++ sjösjuk/OQY ++ sjösjuka/EAYy ++ sjöslag/ABDY ++ sjöss/Y +++sjöstad/ADY ++ Sjöstedt/A ++ sjösten/ADY ++ sjöstjärna/EAGY +++sjöstäder/AJY ++ sjösäkerhet/ADYv ++ sjösäkerhetsteknik/AHDY ++ sjösätt/AORY ++ sjösätter/Y +++sjötaxi/EAY +++sjöterm/AHDY +++sjötomt/AHDY ++ sjötrafik/ADYX ++ sjötransport/AHDY ++ sjötunga/EAGY ++ sjötungs/XZ ++ sjövan/OQY +++sjövett/ABY ++ sjövild/OY ++ sjöväg/ADGYv ++ sjövärdig/OY ++@@ -55072,7 +57245,6 @@ skadeg ++ skadegörare/EAJY ++ skadegörelse/EAIYX ++ skadeskjuta/KLAJRY ++-skadeskjuten/MY ++ skadeslös/OY ++ skadeslöshet/ADY ++ skadestånds/XZ ++@@ -55242,7 +57414,6 @@ skarp/OPQYX ++ skarpblå/OY ++ skarpeggad/NQY ++ skarpen/Y ++-skarpgul/OY ++ skarphet/ADY ++ skarpkantad/NQY ++ skarpkantig/OY ++@@ -55273,11 +57444,10 @@ Skarsg ++ skarsnö/EAY ++ skarv/ADYX ++ skarva/NAPDIY ++-skarvbar/OY +++skarvbar/O ++ skarvdel/ADGY ++ skarvfri/OY ++ skarvhylsa/EAGY ++-skarvig/OY ++ skarvkabel/EAIY ++ skarvklämma/EAGY ++ skarvning/ADGYv ++@@ -55291,7 +57461,7 @@ skatbo/FEABY ++ skateboard/ADGYX ++ skatt/ADYX ++ skatta/NMAPHDY ++-skattbar/OY +++skattbar/O ++ skattbelagd/OY ++ skatte/XZU ++ skattebrottslag/ADGY ++@@ -55299,6 +57469,8 @@ skattefelskarta/EAY ++ skatteflyktslag/ADGY ++ skattekil/ADGY ++ skattekramar/XZ +++skattekramare/EAY +++skattekramarn/AY ++ skattemässig/OY ++ skattesmitar/XZ ++ skattetak/ABDY ++@@ -55322,7 +57494,7 @@ skattskriven/MY ++ skattskrivning/ADY ++ skattskyldig/OQY ++ skav/AB ++-skava/K +++skava/KD ++ skavank/AHDY ++ skavankfri/OY ++ skavankig/OY ++@@ -55359,13 +57531,11 @@ skel ++ sken/ABDYX ++ skena/EMADGY ++ skenbar/OQY ++-skenbens/XZ +++skenben/ABDYv ++ skendö/MY ++ skendöd/OQY ++-skenfri/OY ++ skenfärdig/OY ++ skenhelig/OY ++-skenlös/OY ++ skenmanöver/EAIY ++ skenmanövrer/AJY ++ skepnad/AHDY ++@@ -55392,7 +57562,7 @@ skeptisk/OQY ++ sketch/AHDY ++ sketchförfattare/EAJY ++ sketen/M ++-skev/PQ +++skev/P ++ skeva/MY ++ skevbent/OQY ++ skevhet/AHDY ++@@ -55471,7 +57641,7 @@ skildk ++ skildra/NMAPY ++ skildrare/EAJYz ++ skildring/ADGYvf ++-skilja/KLAJOBRY +++skilja/KLAJBRY ++ skiljaktig/OY ++ skiljaktighet/AHDYv ++ skiljare/EAJY ++@@ -55510,7 +57680,9 @@ skimmingapparat/AHDY ++ skimning/ADGY ++ skimningskort/Y ++ skimra/MDY ++-skimrig/OY +++skimrig/OPY +++skimriga/AY +++skimrigaste/AY ++ skimring/ADGY ++ skin/FECY ++ skina/KDY ++@@ -55533,6 +57705,7 @@ Skinnskatteberg/Av ++ skinntorr/OQY ++ skipa/NMAPY ++ skippa/NMAPY +++skipper/EAIY ++ skir/M ++ skira/NMAPDY ++ skirblå/OY ++@@ -55586,19 +57759,21 @@ skivinspelning/ADGY ++ skivling/ADGY ++ skivminne/FECAY ++ skivomslag/ABDY +++skivsläpp/ABDY ++ skivspelare/EAJY ++ skjort/XZ ++ skjorta/EAGY ++ skjortärm/ADGY ++ skjul/ABDYX ++ skjultak/ABDY ++-skjut/BDRX +++skjut/BRX ++ skjuta/K ++ skjutande/CAY ++ skjutbana/EAGY ++ skjutbar/OY ++ skjutdörr/ADGY ++-skjuten/KM +++skjuten/KMY +++skjutens ++ skjutfält/ABDY ++ skjutfärdig/OY ++ skjutgalen/KMY ++@@ -55641,6 +57816,7 @@ skoglig/OY ++ skoglös/OY ++ skogrik/OPY ++ skogsbeklädd/O% +++skogsbestånd/ABDY ++ skogsbevuxen/M% ++ skogsbeväxt/O% ++ skogsbo/EAIY ++@@ -55655,11 +57831,13 @@ skogskl ++ skogslind/ADGY ++ skogslän/ABDY ++ skogsmark/AHDYv +++skogsmyra/EAGY ++ skogsrå/EABIY ++ skogsråna/AY ++ skogssame/EAIY ++ skogssjö/EAGY ++ skogsvård/ADY +++skogsväg/ADGY ++ skogsås/DGY ++ skogvaktare/EAJz ++ skohorn/ABDY ++@@ -55679,9 +57857,9 @@ skol/sZh ++ skola/EAPGY ++ skolar ++ skolas/N ++-skolast/ATHDY ++ skolastik/AHDY ++ skolastiker/EY +++skolastisk/OY ++ skolavslutning/ADGY ++ skolbal/AHDY ++ skolbarn/ABDYv ++@@ -55694,10 +57872,13 @@ skolbuss/DGYX ++ skolbyggnad/AHDY ++ skolbänk/ADGY ++ skolböcker/AJY +++skolchef/AHDY +++skoldag/ADGY ++ skoldans/HDY ++ skolelev/AHY ++ skolflicka/EAGY ++ skolflicksaktig/OY +++skolform/AHDY ++ skolfröken/AIY ++ skolfux/DGY ++ skolförvaltning/ADY ++@@ -55705,12 +57886,15 @@ Skolgatan/A ++ skolgosse/EAGY ++ skolgång/ADY ++ skolgård/ADGY +++skolhem/FCAY +++skolhus/BDY ++ skolk/ABY ++ skolka/NMADY ++ skolkamrat/AHDY ++ skolkare/EAJYz ++ skolklass/HDY ++ skolkning/ADGY +++skolkök/ABDY ++ skolla/EAGY ++ skollag/ABDGYv ++ skollov/ABDY ++@@ -55728,6 +57912,7 @@ skolm ++ skolmästare/EAJY ++ skolning/ADGY ++ skolnära/Y +++skolpeng/ADY ++ skolplikt/ADY ++ skolpliktig/OY ++ skolpojke/EAGY ++@@ -55739,13 +57924,13 @@ skolr ++ skolsal/ADGY ++ skolskjuts/DGY ++ skolstart/AHDY ++-skoltid/Y +++skoltid/AHDY ++ skoltidning/ADGY ++-skoltisk/OY ++ skoltrött/OQY ++ skoltrötthet/ADYv ++ skolungdom/ADGY ++ skolvecka/EAGY +++skolverk/ABDY ++ Skolverket/A ++ skolväg/ADGY ++ skolväska/EAGY ++@@ -55759,6 +57944,7 @@ skomakare/EAJY ++ skomakarlax/DGY ++ skomakarlärling/ADGY ++ skomakeri/ABHY +++skomode/FECAY ++ skona/NMPY ++ skonare/EAJY ++ skonert/AHDY ++@@ -55766,16 +57952,16 @@ skonertriggad/NQY ++ skonertskepp/ABDY ++ skoningslös/OPQY ++ skoningslöshet/ADYv ++-skonlös/OY ++ skonsam/MLY ++ skonsamhet/ADYv ++ skonsamt/Y ++ skonummer/FCAY +++skop/ABDY ++ Skop/A ++ skopa/EAGY ++ skopformig/OY ++ skoplastare/EAJY ++-skoplös/OY +++skoplös/O ++ skopning/ADY ++ skoputsare/EAJY ++ skorbutisk/OY ++@@ -55797,7 +57983,7 @@ skorstensfejare/EAJY ++ skorstensfejeri/ABY ++ skorstenshuv/ADGY ++ skorstensmur/ADGY ++-skorvfri/OY +++skorvfri/O ++ skorvig/OY ++ skorvighet/ADY ++ skoskav/ABY ++@@ -55827,10 +58013,12 @@ skott/BQDRYX ++ skotta/NLPDIYf ++ skottare/EAY ++ skottavla/EAGY +++skottdrama/CAHY ++ skottdåd/ABDY ++ skottehistoria/AHY ++ skottehistorien/AY ++ skottfri/OY +++skotthål/ABDY ++ skotthåll/Y ++ skottkärra/EAGY ++ Skottland/Av ++@@ -55843,12 +58031,11 @@ skottskydds/XZ ++ skottsår/ABDY ++ skottår/ABDY ++ skotvinsch/ADGY ++-skovax/BHY +++skovax/BH ++ skovel/EAIYX ++ skovelformad/NQY ++ skovelformig/OY ++ skovelhjul/ABDY ++-skovig/OY ++ skrabbig/OY ++ skraffera/MY ++ skraffering/ADGY ++@@ -55883,9 +58070,8 @@ skred/BD ++ skredrisk/AHDY ++ skredvarning/ADGY ++ skrek/AY ++-skrev/BQDY +++skrev/BDY ++ skreva/EMADGY ++-skrevig/OY ++ skri/FEABDY ++ skria/NMAODY ++ skribent/AHDY ++@@ -55978,7 +58164,7 @@ skrotbilspremie/EAIY ++ skrotfärdig/OY ++ skrothandlare/EAJY ++ skrothög/ADGY ++-skrotig/OPY +++skrotig/OP ++ skrotning/ADGYv ++ skrotsten/ADGY ++ skrott/ADGY ++@@ -56043,7 +58229,6 @@ skryta/KLADY ++ skrytaktig/OY ++ skrytare/EAJY ++ skrytbygge/FECAY ++-skrytfri/OY ++ skrythals/DGY ++ skrytig/OPQY ++ skrytighet/ADY ++@@ -56076,9 +58261,9 @@ skr ++ skräckslagen/KMY ++ skräckvälde/FECAY ++ skräcködla/EAGY ++-skräda/KY ++-skräddar/XZ ++-skräddare/EAJY +++skräda/KLAJDRY +++skrädda/NMAJPDY +++skräddare/EAJYz ++ skräddarsy/NKMAY ++ skrädderi/ABHYX ++ skrädkaka/EAGY ++@@ -56096,13 +58281,13 @@ skr ++ skrän/ABDY ++ skräna/NMADY ++ skränfock/ADGY ++-skränfri/OY +++skränfri/O ++ skränhals/DGY ++ skränig/OY ++ skränighet/ADY ++ skränktång/ADY ++ skränktänger/AJY ++-skräp/ABDYX +++skräp/ABYX ++ skräpa/NMAY ++ skräpbod/ADGY ++ skräphög/ADGY ++@@ -56111,7 +58296,7 @@ skr ++ skräpmat/ADY ++ skräppost/ADY ++ skräpsak/AHDY ++-skräpvin/ABHY +++skräpvin/ABH ++ skräpvrå/EAIY ++ skrävel/CAY ++ skrävelmåns/DGY ++@@ -56169,6 +58354,7 @@ skulderparti/ABHY ++ skuldfri/OY ++ skuldfråga/EAGY ++ skuldfälla/EAGY +++skuldkris/HDY ++ skuldkänsla/EAGY ++ skuldlös/OY ++ skuldmedveten/KMLY ++@@ -56244,7 +58430,7 @@ SKV ++ skvader/EAIY ++ skvadron/AHDY ++ skvadronchef/AHDY ++-skval/ABDY +++skval/ABY ++ skvala/NMAY ++ skvaller/FCAYX ++ skvalleraktig/OQY ++@@ -56389,13 +58575,13 @@ sk ++ skåpsupa/KLAJDRY ++ skåpsupare/EAJY ++ skåra/EAGY ++-skårig/OY ++ skäck/ADGY ++ skäckig/OY ++ skäckighet/ADY ++ skädda/EAGY ++ skäftig/OY ++ skägg/ABD +++skäggbarn/ABD! ++ skäggbevuxen/KMY ++ skäggdopping/ADGY ++ Skäggetorp/Av ++@@ -56427,7 +58613,7 @@ sk ++ skälmsk/OQY ++ skälmskhet/ADY ++ skälmstycke/FECAY ++-skälva/KEAJDGY +++skälva/KEAJDY ++ skälvning/ADGYv ++ skämma/KLAJOY ++ skämmig/OPY ++@@ -56461,18 +58647,18 @@ sk ++ skära/NEMAJDRGY ++ skärapparat/AHDY ++ skärare/EAJYz ++-skärarea/EAGY +++skärarea/EAG ++ skärbar/OY ++ skärbräda/EARGY ++ skärbräde/FECY ++ skärbrännare/EAJY ++ skärböna/EAGY ++-skärdata/AY +++skärdata/A ++ skäregg/ADGY ++ skärformad/NQY ++ skärformig/OY ++ skärgeometri/EAHDY ++-skärgul/OY +++skärgul/O ++ skärgård/ADGYv ++ skärgårdsbo/EAIY ++ skärgårdstur/AHDY ++@@ -56488,14 +58674,13 @@ sk ++ skärkraft/ADY ++ skärkvalitet/AHDY ++ skärlinje/EAIY ++-skärlåga/EAGY +++skärlåga/EAG ++ skärm/ADGYX ++ skärma/NAPDYf ++ skärmaskin/AHDYv ++ skärmbild/AHDY ++ skärmbilda/NMADYv ++ skärmblad/ABDY ++-skärmbox/DGY ++ skärmdump/ADGY ++ skärmfjäll/ABDY ++ skärmflygare/EAJY ++@@ -56516,7 +58701,7 @@ sk ++ skärmyta/EAGY ++ skärmytsling/ADGY ++ skärning/ADGYvf ++-skärolja/EAGY +++skärolja/EAG ++ skärp/BDRY ++ skärpa/KEQLY ++ skärpning/ADGYvf ++@@ -56528,7 +58713,7 @@ sk ++ skärskada/EAGY ++ skärskåda/NMAPDY ++ skärskådning/ADY ++-skärslev/ADGY +++skärslev/ADG ++ skärslipare/EAJY ++ skärstål/ABY ++ skärsår/ABDY ++@@ -56689,6 +58874,7 @@ slagrute/XZ ++ slagrörd/OY ++ slagseghet/ADY ++ slagsida/EAY +++slagskott/ABDY ++ slagskämpe/EAGY ++ slagsmål/ABDY ++ slagsondera/MY ++@@ -56715,6 +58901,7 @@ slaktoffer/FCAY ++ slaktsup/ADGY ++ slalom/ADYX ++ slalombacke/EAGY +++slalomhang/ABY ++ slalomtävling/ADGY ++ slalomåk/ABDY ++ slalomåkar/XZ ++@@ -56748,10 +58935,10 @@ slamning/ADGY ++ slampa/EAGY ++ slampig/OPQY ++ slampighet/ADY ++-slampump/ADGY +++slampump/ADG ++ slamra/MDY ++ slamrig/OPY ++-slamrör/ABDY +++slamrör/ABD ++ slamsa/EAJGY ++ slamsig/OY ++ slamsugare/EAJY ++@@ -56795,14 +58982,13 @@ slash/Y ++ slashas/DGY ++ slashing/ADGY ++ slasig/OY ++-slask/ABDGY +++slask/ABDGYX ++ slaska/NAPDY ++ slaskbrunn/ADGY ++ slaskhink/ADGY ++ slaskig/OPY ++ slaskighet/ADY ++ slaskledning/ADGY ++-slaskrör/ABDY ++ slaskspalt/AHDY ++ slaskspann/ADGY ++ slasktratt/ADGY ++@@ -56889,13 +59075,12 @@ slinker/Y ++ slinkig/OY ++ slint/OY ++ slinter/Y ++-slintig/OY ++ slip/DGYX ++ slipa/NA ++ slipad/NQY ++ slipande/CAY ++ slipare/EAYz ++-slipbar/OY +++slipbar/O ++ slipduk/ADGY ++ sliper/EAIY ++ sliperi/ABHY ++@@ -56988,11 +59173,11 @@ slughuvud/ABDY ++ slughuvudena/AY ++ sluka/NMAPDY ++ slukare/EAJYz ++-slum/FAIYX +++slum/FAYX ++ slumdistrikt/ABDY ++ slumkvarter/ABDY ++ slummer/EAY ++-slummig/OPY +++slummig/OP ++ slumområde/FECAY ++ slump/ADYX ++ slumpa/NMAPY ++@@ -57016,7 +59201,7 @@ sluppe/Y ++ sluppit/Y ++ slurk/ADGY ++ slurpa/NMAY ++-slurpare/EAJY +++slurpare/EAJ ++ slusk/ADGY ++ sluskaktig/OY ++ sluskig/OPQY ++@@ -57033,6 +59218,7 @@ slussystem/ABDY ++ slut/BDRYX ++ sluta/KMLDY ++ slutackord/ABDY +++slutakt/AHDY ++ slutanvändar/XZ ++ slutanvändare/EAJY ++ slutanvändarintyg/ABDY ++@@ -57049,6 +59235,7 @@ slutdebatt/AHDY ++ slutdebattera/MY ++ slutdel/ADGY ++ sluten/KMLY +++slutenhet/ADY ++ slutenvård/ADYv ++ slutfas/HDY ++ slutfiskat ++@@ -57071,11 +59258,14 @@ slutledning/ADGY ++ slutledningsförmåga/EAGY ++ slutlig/OY ++ slutligen +++slutlön/AHDY ++ slutminut/AHDY +++slutmål/ABDY ++ slutnota/EAY ++ slutord/ABDY ++ slutplockat ++ slutpunkt/AHDY +++slutrad/AHDY ++ slutraka/EAGY ++ slutredigera/MY ++ slutrim/FCAY ++@@ -57106,8 +59296,10 @@ sluttamp/ADY ++ sluttid/AHDY ++ sluttning/ADGYvf ++ slutversion/AHDY ++-slutår/ABDY ++-sly/ABY +++slutår/ABD +++slutändan/Y +++slutänden/Y +++sly/AB ++ slybekämpning/ADY ++ slybestånd/ABDY ++ slyna/EAGY ++@@ -57190,7 +59382,7 @@ sl ++ släpkontakt/AHDY ++ släpkärra/EAGY ++ släpning/ADGYf ++-släpp/BQDRY +++släpp/BDRY ++ släppa/KQLDY ++ släpphänt/OPQY ++ släpphänthet/ADY ++@@ -57225,7 +59417,7 @@ sl ++ slättoppad/NQY ++ slätvar/ADGY ++ slö/QOP ++-slöa/M +++slöa/MA ++ slödder/CAY ++ slödderaktig/OY ++ slöfock/ADGY ++@@ -57241,6 +59433,7 @@ sl ++ slöjdsal/ADGY ++ slöjfri/OY ++ slöjig/OY +++slök/Y ++ slölyssna/MY ++ slöläsa/KQLAJDRY ++ slöläsning/ADY ++@@ -57250,7 +59443,6 @@ sl ++ slösare/EAJYz ++ slöseri/ABY ++ slösig/OY ++-slöte/Y ++ slötitta/NMAY ++ -SM/YWZ ++ SM/r ++@@ -57270,7 +59462,7 @@ smakl ++ smaklöshet/AHDY ++ smakprov/ABHDY ++ smakren/OY ++-smakrik/OPQY +++smakrik/OPY ++ smakriktning/ADGY ++ smakråd/ABDY ++ smaksak/Y ++@@ -57336,7 +59528,7 @@ smekning/ADGYv ++ smeksam/MLY ++ smeksamhet/ADYv ++ smeksamt/Y ++-smekt/TY +++smektisk/O ++ smet/ADY ++ smeta/NMAPHDY ++ Smetana/AX ++@@ -57368,6 +59560,7 @@ smidning/ADY ++ smil/ABDY ++ smila/NMAPD ++ smilband/ABDY +++smiley/EAY ++ smilfink/ADGY ++ smilgrop/ADGY ++ smilig/OY ++@@ -57376,7 +59569,8 @@ sminka/NMAPY ++ sminkare/EAJY ++ sminkgrejor/AJY ++ sminkning/ADGYv ++-sminkröd/OY +++sminkröd/O +++sminkväska/EAGY ++ sminkör/AHDY ++ sminkös/HDY ++ smisk/ABY ++@@ -57419,6 +59613,7 @@ smittv ++ smittämne/FECAY ++ smocka/NEMAGY ++ smockfull/OY +++smog/ADY ++ smogliknande/Y ++ smoking/ADGYX ++ smokinglir/ABY ++@@ -57427,8 +59622,7 @@ smolkig/OY ++ smorda/Y ++ smorde/AOY ++ smort/AY ++-sms/D ++-smsa/MA +++sms ++ smuggel/XZ ++ smuggelgods/BY ++ smuggelsprit/ADY ++@@ -57643,6 +59837,7 @@ sm ++ småkryp/ABDY ++ småkräk/ABDY ++ småkrämpa/EAGY +++småkul/Y ++ småkund/AHDY ++ småkung/ADGY ++ småkvick/OY ++@@ -57802,7 +59997,7 @@ sm ++ småtjänst/AHDY ++ småtokig/OQY ++ småtorpare/EAJY ++-småtorr/OY +++småtorr/O ++ småtrevlig/OQY ++ småtrist/OQY ++ småtroll/ABDY ++@@ -57858,8 +60053,8 @@ sm ++ smäkta/MDY ++ smälek/ADY ++ smäleksfull/OY ++-smäll/ADY ++-smälla/KDIY +++smäll/DRY +++smälla/KLODIY ++ smällare/EAYz ++ smällfet/OQY ++ smällkall/OY ++@@ -57897,6 +60092,7 @@ sm ++ smöra/NMAPDY ++ smörblomma/EAGY ++ smörboll/ADGY +++smördeg/ADGY ++ smörgul/OY ++ smörgås/DGYX ++ smörgåsbord/ABDY ++@@ -57917,6 +60113,7 @@ sm ++ smörkola/EAY ++ smörpaket/ABDY ++ smörpapper/FCAJBDY +++smörrebröd/ABDY ++ smörsteka/KQLAJY ++ smörsås/HDY ++ snabb/OPQYX ++@@ -57944,17 +60141,18 @@ snabbsteka/KQLAJY ++ snabbtorka/NMAPDY ++ snabbtur/AHDY ++ snabbtving/ADGY +++snabbtåg/ABDY ++ snabbtänkt/OQY ++ snabbtänkthet/ADY ++ snabbvalsmeny/EAHY ++ snabbvisit/AHDY ++ snabel/EAIY ++-snack/BDY +++snack/BY ++ snacka/NMAY ++ snackis/DGY ++ snacks/DY ++ snacksalig/OY ++-snafsig/OY +++snagg/AD ++ snagga/NMAP ++ snagghårig/OY ++ snaggig/OY ++@@ -57962,10 +60160,11 @@ snappa/NMAY ++ snapphane/EAGY ++ snaps/DGYX ++ snapsglas/BDY +++snapshot/ABDY ++ snapsvisa/EAGY ++ snar/PM ++ snara/EAGY ++-snarbedd/OY +++snarbedd/O ++ snarfager/MY ++ snarfyndig/OY ++ snarka/NMADY ++@@ -58032,20 +60231,23 @@ snibbkrage/EAGY ++ snickar/XZU ++ snickarbod/ADGY ++ snickare/EAJY ++-snickarsåg/ADGY ++ snickeri/ABHYX ++ snickra/NMAPY ++ snida/NMAPY ++ snidare/EAJY ++ snideri/ABHY +++sniff/ADGY ++ sniffa/NMADY ++ sniffning/ADY ++ snigel/EAIYX ++ snigelaktig/OY ++ snigelfart/ADY +++snigla/MDY ++ sniken/KMLY ++ snikenhet/ADY ++ sniljbroderi/CABHY +++sniljegarn/ABDY +++sniljegarner/AY ++ snilla/NMARY ++ snille/FECY ++ snilleblixt/ADGY ++@@ -58060,7 +60262,8 @@ snirkla/MPDY ++ snirkleri/ABHY ++ snirklig/OPQY ++ sniskan/Y ++-snitsa/MJY +++snits/DY +++snitsa/MY ++ snitsare/EAJY ++ snitsel/EAY ++ snitseljakt/AHDY ++@@ -58068,7 +60271,7 @@ snitsig/OPQY ++ snitsla/NAPIY ++ snitt/ABDGYX ++ snitta/NAPDYf ++-snittare/EAY +++snittare/EA ++ snittbetyg/ABDY ++ snittblomma/EAGY ++ snittpolera/MY ++@@ -58085,7 +60288,7 @@ snobbsport/AHDY ++ snodd/ADGY ++ snodda ++ snodde ++-snoddfri/OY +++snoddfri/O ++ snofsig/OPQY ++ snok/ADY ++ snoka/NMADIY ++@@ -58097,7 +60300,7 @@ snopp/ADG! ++ snoppa/NAPY ++ snoppning/ADGY ++ snor/ABYX ++-snora/NMAPDY +++snora/NMADY ++ snorgärs/DGY ++ snorig/OPQY ++ snorighet/ADY ++@@ -58107,6 +60310,7 @@ snorkighet/AHDY ++ snorkla/NMAIY ++ snorkling/ADY ++ snorkråka/EAGY +++snorta/NMAPDY ++ snorunge/EAGY ++ snorvalp/ADGY ++ snott ++@@ -58138,6 +60342,7 @@ snusf ++ snusig/OY ++ snusk/ABYX ++ snuska/MDY +++snuskburk/ADGY ++ snuskhummer/EAIY ++ snuskig/OPQY ++ snuskighet/AHDY ++@@ -58148,7 +60353,6 @@ snut/ADGY ++ snuten/M ++ snutfager/KMY ++ snutt/ADGY ++-snutta/NAPDY ++ snuttefilt/ADGY ++ snuttetrasa/EAGY ++ snuttifiera/NMAPDY ++@@ -58166,6 +60370,7 @@ snyftning/ADGYv ++ snyftreportage/FECAY ++ snygg/OPQY ++ snygga/NMAY +++snygghet/ADY ++ snygging/ADGY ++ snylta/MBY ++ snyltare/EAJYz ++@@ -58196,20 +60401,22 @@ sn ++ snällhet/ADY ++ snällism/ADY ++ snälltåg/ABDYv ++-snällögd/OY ++-snäpp/ABDY +++snällögd/O +++snäpp/BDRY +++snäppa/KELDGY ++ snäppöljett/AHDY ++ snärja/KLAJOY ++ snärjig/OY ++-snärplös/OY ++ snärt/ADGY ++ snärta/EMADGY ++ snärtig/OY ++ snäsa/KLAJRY ++ snäsig/OY ++-snäv/OP +++snäv/P +++snäva/NMAPDY +++snävt ++ snö/EAYX ++-snöa/M +++snöa/MO ++ snöande/CAY ++ snöblandad/NQY ++ snöblaskig/OY ++@@ -58217,7 +60424,7 @@ sn ++ snöboll/ADGYv ++ snöbollskrig/ABDY ++ snöby/EAGY ++-snöd/OP +++snöd/P ++ snödjup/ABDY ++ snödrev/ABDY ++ snödriva/EAGY ++@@ -58226,6 +60433,7 @@ sn ++ snöfattig/OY ++ snöflinga/EAGY ++ snöfri/OY +++snöfält/ABDY ++ snöglopp/ABY ++ snögloppig/OY ++ snögubbe/EAGY ++@@ -58233,10 +60441,13 @@ sn ++ snöhöljd/OY ++ snöig/OY ++ snökanon/AHDY +++snökaos/BY ++ snöklädd/OY ++ snölös/OY ++ snömodd/ADY ++ snömos/BY +++snöoväder/FCAY +++snöpa/KQLAJDY ++ snöplig/OPY ++ snöplighet/ADY ++ snöplog/ADGYv ++@@ -58249,7 +60460,7 @@ sn ++ snörik/OPY ++ snörkänga/EAGY ++ snörliv/ABDY ++-snörlös/OY +++snörlös/O ++ snörmakeri/ABHY ++ snörning/ADGY ++ snörnystan/ABDY ++@@ -58266,10 +60477,15 @@ sn ++ snörvla/NMADY ++ snörvlig/OY ++ snörvling/ADGY ++-snöröja/KLAJODRY +++snöröja/KLAOR ++ snöröjare/EAJY +++snöröjning/ADGY +++snöröjningslok/ABDY +++snörök/ADY +++snösko/EAIY ++ snöskoter/EAIYX ++ snöskottare/EAJY +++snöskottning/ADYv ++ snöskovel/EAIY ++ snöskred/ABDY ++ snöskyffel/EAIY ++@@ -58280,7 +60496,10 @@ sn ++ snötyngd/OY ++ snötäcke/FECAY ++ snötäckt/OY +++snövall/ADGY +++snövidd/AHDY ++ snövit/OY +++snöväder/FCAY ++ snöyra/EAY ++ so/FECA ++ soaré/AEHY ++@@ -58288,8 +60507,8 @@ sobel/EAIYX ++ sobelpäls/DGY ++ sobelskinn/ABDY ++ sober/KMY ++-sociabel/MY ++-social/OPQYXU +++SoC/r +++social/OPQDYXU ++ Socialdemokraterna/A ++ socialförsäkringssystem/ABDY ++ socialisation/ADYv ++@@ -58313,9 +60532,10 @@ sociologi/EAY ++ socionom/AHDYX ++ sociopat/AHDY ++ socioterapi/EAY ++-socka/EAGY +++sock/ADY +++socka/EAIGY ++ sockel/EAIY ++-socken/FAIYX +++socken/FIYX ++ sockenbo/EAIY ++ sockenhjon/ABDY ++ sockenvis ++@@ -58395,6 +60615,7 @@ soldis/BY ++ soldyrkare/EAJY ++ soldäck/ABDY ++ soleksem/ABDY +++solenergi/EAY ++ solenn/OY ++ solennitet/AHDY ++ solennitetssal/ADGY ++@@ -58411,6 +60632,7 @@ solglas ++ solglimt/ADGY ++ solgud/ADGY ++ solgul/OY +++solhatt/ADGY ++ solid/OPQY ++ solidarisera/MY ++ solidarisk/OQY ++@@ -58424,6 +60646,7 @@ solipsistisk/OY ++ solist/ATHDYX ++ solitär/OY ++ solka/NMAY +++solkatt/AHDY ++ solkig/OPQY ++ solkighet/AHDY ++ solklar/OY ++@@ -58436,20 +60659,27 @@ soll ++ solmogen/MY ++ solmättad/NQY ++ Solna/AX ++-solnabo/EAIY +++solnabo/EAI ++ solnedgång/ADGYv ++ solo/FECAYX +++soloalbum/ABDY +++soloartist/AHDY ++ sol-och-vårare/EAJY ++ solochvårare/EAJY ++ solodans/HDY ++-sololåt/ADGY +++sololja/EAGY +++sololåt/ADG +++solonummer/FCAY ++ soloräd/AHDY +++soloskiva/EAGY ++ solpanel/AHDY +++solregn/ABY ++ solros/DYX ++ solrosfrö/EABY ++ solrosfröna/AY ++ solrosor/AJY ++ solsemester/EAIY +++solsida/EAGY ++ solsken/ABYv ++ solskydd/ABDYv ++ solskyddsficka/EAGY ++@@ -58461,6 +60691,7 @@ solsting/ABY ++ solstol/ADGY ++ solstrimma/EAGY ++ solstråle/EAGY +++solstånd/ABDY ++ solsystem/ABY ++ soltak/ABDY ++ solterrass/HDY ++@@ -58471,11 +60702,13 @@ soltorka/NMAPDY ++ soluppgång/ADGY ++ solur/ABDY ++ solution/AHDYv +++solvarm/OY ++ Solveig/A ++ solvens/DY ++ solvent/OY ++ solventraffinerad/NQY ++ solvera/MY +++solvind/ADGY ++ solvärmd/OY ++ solvärme/EAYX ++ solvärmekraftstation/AHDYv ++@@ -58490,7 +60723,8 @@ somalisk/OQY ++ somaliska/EAGY ++ somatiker/EAJY ++ somatisk/OY ++-somlig/OY +++somliga/AJY +++somligt/Y ++ sommar/ADIYX ++ sommaradress/HDY ++ sommaraktig/OY ++@@ -58545,6 +60779,7 @@ sommarn ++ sommarolympiad/AHDY ++ sommarprat/ABY ++ sommarpratare/EAJY +++sommarprogram/FCAY ++ sommarpsalm/AHDY ++ sommarrea/EAGY ++ sommarregn/ABDY ++@@ -58599,10 +60834,9 @@ sonlig/OY ++ sonson/ADY ++ sonsöner/AJY ++ Sony/AX ++-sop/XZ ++-sopa/NEAPDGY ++-sopar/EDY ++-sopare/AJY +++sop/ADGX +++sopa/NEMAPDGY +++sopare/EAJY ++ sopberg/ABY ++ sopbil/ADGYv ++ sopbilsförare/EAJY ++@@ -58614,13 +60848,16 @@ sophink/ADGY ++ sophämtare/EAJY ++ sophämtning/ADY ++ sophög/ADGY +++sopig/OPQY ++ sopkvast/ADGY +++sopkärl/ABDY ++ sopmaja/EAGY ++ sopnedkast/ABDY ++ sopning/ADGY ++ sopp/ADGYX ++ soppa/EAGY ++ soppig/OY +++soppkök/ABDY ++ soppsked/ADGY ++ soppskål/ADGY ++ soppslev/ADGY ++@@ -58636,8 +60873,8 @@ sops ++ soptipp/ADGY ++ soptunna/EAGY ++ sorbet/ADY ++-sorbisk/OY ++-sorbitisk/OY +++sorbisk/O +++sorbitisk/O ++ sordin/AHDY ++ sordindämpad/NQY ++ sordinera/NMAPDY ++@@ -58674,7 +60911,7 @@ sorgsenhet/ADY ++ sorgtyngd/OY ++ sork/ADGYX ++ sorkstam/FAIY ++-sorkår/ABDY +++sorkår/ABD ++ sorl/ABY ++ sorla/NMADY ++ Sorsele/AX ++@@ -58687,6 +60924,7 @@ sorti/EAHY ++ sortiment/ABDYv ++ sortireplik/AHDY ++ sortren/OY +++SOS ++ sosse/EAGY ++ sot/B ++ sota/NMAPD ++@@ -58701,6 +60939,7 @@ soth ++ sotig/OPQY ++ sotlucka/EAGY ++ sotning/ADGYv +++sotsvart/OY ++ sotsvärtad/NQY ++ sotvingad/NQY ++ SoU ++@@ -58710,6 +60949,7 @@ soulagera/MY ++ soulband/ABDY ++ soulmusik/ADY ++ soulsångare/EAJY +++sound/ABY ++ sousafon/AHDY ++ souterräng/AHDYX ++ souvenir/AHDYX ++@@ -58723,6 +60963,7 @@ sovjetrysk/OQY ++ Sovjetunionen/A ++ sovjetvänlig/OPQY ++ sovkupé/AEHY +++sovloft/ABDY ++ sovmorgon/ADIY ++ sovplats/HDY ++ sovra/NMPDY ++@@ -58732,6 +60973,8 @@ sovringsverk/ABDY ++ sovrum/FECAYv ++ sovrumsfönster/FCAJY ++ sovsal/ADGY +++sovstad/ADY +++sovstäder/AJY ++ sovsäck/ADGY ++ sovvagn/ADGY ++ spa ++@@ -58770,14 +61013,20 @@ spagettis ++ spaghetti/EAYX ++ spaghettisås/HDY ++ spak/ADGY +++spakare +++spakast/Q ++ spakmanövrerad/NQY +++spakt ++ spaljé/AEHYX ++ spaljera/MY ++ spalt/ADYX ++ spalta/NMAHY ++ spaltbar/OY +++spaltbredd/AHDY ++ spaltmeter/EAJY ++ spaltmil/ADY +++spam/FCAX +++spamma/NMAPDY ++ spammare/EAJY ++ spana/NMADY ++ Spanair/A ++@@ -58798,7 +61047,7 @@ spanskt ++ spansktalande/Y ++ spant/ABDY ++ spantbyggd/OY ++-spantfri/OY +++spantfri/O ++ spantlös/OY ++ spara/NMAJPBYz ++ sparare/EAJYzg ++@@ -58810,6 +61059,7 @@ sparbelopp/ABDY ++ sparbeting/ABDY ++ sparbössa/EAGY ++ sparfinansiera/MY +++sparform/AHDY ++ spargris/DGY ++ spark/ADGYX ++ sparka/NAPBY ++@@ -58818,8 +61068,10 @@ sparkbr ++ sparkdräkt/AHDY ++ sparkonto/FECAY ++ sparkopplad/NQY +++sparkrav/ABDY ++ sparkstötting/ADGY ++ sparlåga/EAY +++sparmål/ABDY ++ sparnit/ABY ++ sparpaket/ABDY ++ sparra/NMARY ++@@ -58834,6 +61086,7 @@ sparsamhetssk ++ sparsamt/Y ++ sparsmakad/NQY ++ spartansk/OY +++spartid/AHDY ++ spartips/BDY ++ sparv/ADGY ++ sparvhök/ADGY ++@@ -58843,7 +61096,7 @@ spasmodisk/OY ++ spasmolytisk/OY ++ spastiker/EAJYX ++ spastisk/OY ++-spastund/AHDY +++spastund/AHD ++ spatel/EAIY ++ spatelformad/NQY ++ spatial/OY ++@@ -58906,8 +61159,9 @@ spediera/MY ++ spedition/AHDYv ++ speditionsfirma/EAGY ++ speditör/AHDY +++speeda/NMAPDY ++ speedig/OY ++-speedway/YX +++speedway/ADYX ++ speedwaytävling/ADGY ++ spefull/OY ++ spefullhet/ADY ++@@ -58941,8 +61195,10 @@ spelautomat/AHDY ++ spelbar/OQY ++ spelbarhet/ADY ++ spelberoende/Y +++spelbolag/ABDY ++ spelbord/ABDY ++ spelbricka/EAGY +++speldag/ADGY ++ speldosa/EAGY ++ speleologisk/OY ++ spelevink/ADGY ++@@ -58950,6 +61206,8 @@ spelfilm/AHDY ++ spelföretag/ABDY ++ spelföring/ADY ++ spelglad/OQY +++spelhus/BDY +++spelklar/OQY ++ spelklubb/ADGY ++ spelkort/ABDY ++ spelledare/EAJY ++@@ -58957,23 +61215,28 @@ spelledig/OY ++ spellista/EAGY ++ spelman/AFYv ++ spelmansvisa/EAGY +++spelmål/ABDY ++ spelmän/AFY ++ spelmässig/OY ++ spelning/ADGYv ++ spelpjäs/HDY ++ spelplan/AHDY +++spelplats/HDY ++ spelprogram/FCAY ++ spelregel/EAJY ++ spelrum/FCAY ++ spelskicklig/OY +++spelstil/ADGY ++ spelsystem/ABDY ++ spelsätt/ABDY ++-spelt/ADY ++ spelteori/EAY +++speltid/AHDY ++ speltvete/CAY +++spelyta/EAGY ++ spelår/ABDY ++ spenat/ADYX ++-spendera/NMAPY +++spendera/NMAPDY +++spenderbyxorna ++ spendersam/MY ++ spendersamt/Y ++ spene/EAGY ++@@ -58985,6 +61248,7 @@ sperma/EAYX ++ spermafläck/ADGY ++ spermie/EAIYX ++ spermiedödande/Y +++speta/EAGY ++ spetig/OY ++ spets/DYX ++ spetsa/NAPIY ++@@ -59016,6 +61280,7 @@ spet ++ spetälska/EAY ++ spex/BDY ++ spexa/NMAY +++spexare/EAJY ++ spexartad/NQY ++ spexig/OY ++ SPF/r ++@@ -59025,6 +61290,7 @@ spika/NAPY ++ spikfabrik/AHDY ++ spikformad/NQY ++ spikformig/OY +++spikhål/ABDY ++ spikig/OY ++ spikindustri/EAHY ++ spikmatta/EAGY ++@@ -59067,8 +61333,10 @@ spinnmal/ADGY ++ spinnrock/ADGYv ++ spinnrulle/EAGY ++ spinnsida/EAGY +++spin-off ++ spin-off-effekt/AHDY ++ spion/AHDYX +++spionaffär/AHDY ++ spionage/CAYX ++ spiondömd/OQY ++ spionera/NMADY ++@@ -59117,7 +61385,6 @@ spjutspets/DGYX ++ spjuver/EAIY ++ spjuveraktig/OY ++ spjäla/NEMAPGY ++-spjälig/OY ++ spjälka/NMAPY ++ spjälkbar/OY ++ spjäll/ABDY ++@@ -59150,7 +61417,7 @@ spolvatten/CAY ++ spondeisk/OY ++ sponsor/AEHYXv ++ sponsorskap/ABY ++-sponsra/NMAPY +++sponsra/NMAPDY ++ sponsring/ADGYv ++ spontad/NQY ++ spontan/OPQYX ++@@ -59168,7 +61435,9 @@ sporra/NAPDIRY ++ sporre/EY ++ sporrsträck/Y ++ sport/AHDYXU +++Sport1/r ++ sporta/NMADY +++sportavdelnings/XZ ++ sportbar/AHDY ++ sportbils/XZ ++ sportdans/HDY ++@@ -59180,6 +61449,7 @@ sportlovs/XZ ++ sportlovsvecka/EAGY ++ Sports ++ sportslig/OY +++sportslighet/ADY ++ sportsmässig/OY ++ sportvarufabrik/AHDY ++ sportvaruindustri/EAHY ++@@ -59189,7 +61459,8 @@ spotmarknad/AHDY ++ spotsk/OY ++ spotskhet/ADYv ++ spott/ABY ++-spotta/NEMAPDGY +++spotta/NMAPDY +++spottkobra/EAGY ++ spottkopp/ADGY ++ spottkörtel/EAIY ++ spottloska/EAGY ++@@ -59273,8 +61544,8 @@ sprungit/AY ++ sprut/ABDYX ++ spruta/NEMAPDGY ++ sprutaluminera/MY ++-sprutbar/OY ++-sprutbytes/XZ +++sprutbar/O +++sprutbyte/FECAYv ++ sprute/UZ ++ sprutlackera/MY ++ sprutmåla/NMAPY ++@@ -59306,6 +61577,7 @@ Spr ++ språkrör/ABDYv ++ språksam/Y ++ språksamt/Y +++språktest/ABHDY ++ språkvetare/EAJY ++ språkvetenskaplig/OY ++ språkvidrig/OY ++@@ -59358,6 +61630,7 @@ spurta/NMADY ++ spurtseger/EAIY ++ spurtslagen/MY ++ spurtslå/NMAY +++spurtstrid/AHDY ++ spy/NKMLA ++ spya/EAGY ++ spydig/OPQY ++@@ -59381,10 +61654,8 @@ sp ++ spånbildning/ADY ++ spåndeformation/AHDY ++ spång/ADGY ++-spångul/OY ++ spånhantering/ADY ++-spånig/OY ++-spånlös/OY +++spånig/O ++ spånskiva/EAGY ++ spånskiveindustri/EAHY ++ spåntad/NQY ++@@ -59395,13 +61666,13 @@ sp ++ spårbarhet/ADY ++ spårbunden/MY ++ spårburen/MY ++-spårfri/OY ++ spårförsedd/OY ++ spårhund/ADGY ++ spårig/OY ++ spårljus/BDY ++ spårlös/OY ++ spårning/ADGYvf +++spårsnö/EAY ++ spårvagn/ADGY ++ spårvagnsräls/DGY ++ spårväg/ADGYv ++@@ -59430,16 +61701,16 @@ sp ++ spänne/FECY ++ spänning/ADGYvf ++ spännvidd/AHDY ++-spänst/AHDY +++spänst/ADY ++ spänstig/OPQY ++ spärr/ADYX ++ spärra/NAPIYf ++ spärrbom/FAIY ++ spärrgrenig/OY ++-spärrig/OY ++ spärrkonto/FECAY ++ spärrton/AHDY ++ spärrvakt/AHDY +++spätta/EAGY ++ spö/ECB ++ spöa/NMLAPD ++ spöfiske/CAY ++@@ -59448,12 +61719,15 @@ sp ++ spökaktig/OY ++ spöke/FECAY ++ spökeri/ABHY ++-spökgrå/OY +++spökgrå/O ++ spökhistoria/EAHY ++ spökhistorien/AY +++spökhus/BDY ++ spöklik/OPY ++ spökrädda/JY ++ spökrädde/Y +++spökstad/ADY +++spökstäder/AJY ++ spökvit/OY ++ spöna/A ++ spöregna/MDY ++@@ -59484,17 +61758,18 @@ stabilisering/AYv ++ stabiliseringen/Y ++ stabiliseringspolitisk/OY ++ stabilitet/ADYvf +++stabschef/AHDY ++ stabsofficer/EAHDY ++ stabsofficerare/JY ++ staccato/FECAY ++ stack/ADYX ++ stacka/MIY ++-stackar/EYX ++-stackare/EAY +++stackare/EAYz ++ stackatera/MY ++ stackato/FECAY ++ stackatoartad/NQY ++-stackig/OY +++stackig/O +++stackmyra/EAGY ++ stad/ADYv ++ stadd/OY ++ stadfästa/KLAJY ++@@ -59520,7 +61795,9 @@ stadsdel/ADGYv ++ stadsdelsnämnd/AHDY ++ stadsgas/HDY ++ stadshus/BDYX +++stadsjeep/ADGY ++ stadsledning/ADY +++stadsliv/ABY ++ stadsmur/ADGY ++ stadsmässig/OY ++ stadsnära/Y ++@@ -59546,6 +61823,7 @@ staga/NMAPDY ++ stagflation/ADYv ++ stagnation/AHDYv ++ stagnera/MPDY +++stajla/NMAPDY ++ stajling/ADGY ++ stajlist/AHDY ++ staka/NAPDY ++@@ -59565,6 +61843,7 @@ stalledr ++ stalpig/OY ++ stam/FAYX ++ stamaktie/EAIY +++stambana/EAGY ++ stambane/XZ ++ stambokförd/OY ++ stamcell/AHDYv ++@@ -59578,10 +61857,13 @@ stamkund/AHDY ++ stamma/NAPBIY ++ stammare/EAY ++ stammis/DGY +++stamning/ADGY +++stamnät/ABDY ++ stamofficer/EAHDY ++ stamofficerare/AJY ++ stamort/AHDY ++-stampa/NMABY +++stampa/NMAPBY +++stampning/ADGY ++ stan/Y ++ standar/ABDY ++ standard/AHDYXU ++@@ -59589,9 +61871,10 @@ standarddans/HDY ++ standardisera/NMAPY ++ standardisering/ADGYv ++ standardvin/ABHY ++-standby/XZ +++stand-by +++standby/YX ++ stank/ADY ++-stankfri/OY +++stankfri/O ++ stanna/NMADY ++ stans/DY ++ stansa/NAPIY ++@@ -59602,6 +61885,7 @@ stapeldiagram/FCAY ++ stapla/NAPIY ++ staplingsbar/OY ++ stappla/MDY +++starbåt/ADGY ++ stare/EAG ++ stark/OPQRYX ++ starkaste/AY ++@@ -59610,8 +61894,8 @@ starktonig/OY ++ starktryckig/OY ++ starkvin/ABHYv ++ starköl/ABDY ++-starr/ADG ++-starrgrå/OY +++starr/AD +++starrgrå/O ++ starroperation/AHDY ++ starropererad/NQY ++ start/ADYX ++@@ -59619,9 +61903,11 @@ starta/NMAPBHYf ++ startavgift/AHDY ++ startbana/EAGY ++ startelva/EAGY +++startfält/ABDY ++ startplats/HDY ++ startpunkt/AHDY ++ startraket/AHDY +++startsida/EAGY ++ startskott/ABY ++ startsnabb/OY ++ startspärr/ADGY ++@@ -59629,11 +61915,11 @@ starttid/AHDY ++ startvev/ADGY ++ startvikt/AHDY ++ stass/DY ++-stassig/OY ++ stat/ATHDYv ++ statar/XZ ++ statare/EAJY ++ statera/MY +++statiner/AJ ++ station/AHDYvf ++ stationera/NMAPY ++ stationering/ADGYv ++@@ -59690,6 +61976,7 @@ statssekreterare/EAJY ++ statsskuld/AHDY ++ statssocialistisk/OY ++ statsstyrd/OY +++statsstöd/ABDY ++ statstjänsteman/AFY ++ statstjänstemanna/XZ ++ statstjänstemän/AFY ++@@ -59722,18 +62009,18 @@ stavning/ADGYvf ++ stavrim/FCAY ++ stavrimmad/NQY ++ stavtag/ABDY ++-stearin/ABYX +++stearin/ABDYX ++ stearinljus/BDY ++ Steen/A ++ Stefan/A ++ Stefano/A ++ steg/ABQDRGY ++-stega/NMYf +++stega/NPDYf ++ stegbil/ADGY ++ stegel/FCAY ++-stegfel/ABDY +++stegfel/ABD ++ stegfrekvens/HDY ++-stegfri/OY +++stegfri/O ++ steginställd/OY ++ stegisättning/ADGY ++ stegla/NMAPY ++@@ -59747,6 +62034,7 @@ stegra/NMAPDY ++ stegring/ADGYv ++ stegräknare/EAJY ++ stegräkning/ADY +++-stegs/XZU ++ stegvis ++ stegvisa/Y ++ stek/ADGYX ++@@ -59756,9 +62044,11 @@ stekel/EAIY ++ stekfat/ABDY ++ stekfärdig/OY ++ stekhet/OY +++stekhus/BDY ++ stekning/ADY ++-stekos/BDY +++stekos/BY ++ stekpanna/EAGY +++stekpanne/XZ ++ steksky/EAY ++ steksmör/ABY ++ stekspade/EAGY ++@@ -59771,13 +62061,14 @@ stekv ++ stekyta/EAGY ++ stel/QOP ++ stelbent/OQY +++stelbenthet/ADY ++ stelfrusen/MY ++ stelhet/ADYv ++ stelkramp/ADYv ++ Stellan/A ++ stellarastronomisk/OY ++ stellarisk/OY ++-stelna/MPY +++stelna/MPDY ++ stelning/ADYv ++ steloperera/MY ++ sten/ADGX ++@@ -59792,6 +62083,7 @@ stenbitsrom/FAY ++ stenblandad/NQY ++ stenblock/ABDY ++ stenbock/ADGY +++stenbro/EAGY ++ stenbrott/ABDY ++ stenbumling/ADGY ++ stencil/AHDY ++@@ -59807,6 +62099,7 @@ stenfylld/OY ++ stenget/AJDY ++ stengods/BYX ++ stengodslera/EAGY +++stengolv/ABDY ++ stengrund/ADY ++ Stenhammar/A ++ stenhjärta/ECAY ++@@ -59814,6 +62107,7 @@ stenhj ++ stenhuggar/XZ ++ stenhuggare/EAJY ++ stenhuggeri/ABHY +++stenhus/BDY ++ stenhård/OQY ++ stenhög/ADGY ++ stenig/OY ++@@ -59825,6 +62119,7 @@ stenkastar/XZ ++ stenkastare/EAJY ++ stenkastning/ADY ++ stenkol/ABYv +++stenkoll/ADY ++ stenkrus/BDY ++ stenlade/AY ++ stenlagd/OY ++@@ -59858,12 +62153,13 @@ stentuff/OPQY ++ stentvättad/NQY ++ stenull/ADY ++ Stenungsund/Av ++-stenur/ADGY +++stenur/ADY +++stenyxa/EAGY ++ stenålder/EAYv ++ stenåldersfynd/ABDY ++ stenåldersmänniska/EAGY ++ Stephen/A ++-stepp/ADG +++stepp/AD ++ steppa/MY ++ steppare/EAJY ++ steppdans/HDY ++@@ -59892,6 +62188,7 @@ STI/r ++ stia/EAG ++ stick/ABDYX ++ sticka/NEMAPBGY +++stickare/EAJY ++ stickelhårig/OY ++ sticker/Y ++ stickig/OY ++@@ -59948,6 +62245,7 @@ stilistik/ADY ++ stilkänsla/EAY ++ still ++ stilla/NMAPY +++Stillahavs/XZ ++ Stillahavskust/AHDY ++ Stillahavsnation/AHDY ++ Stillahavssida/EAGY ++@@ -59955,7 +62253,8 @@ stillaliggande/Y ++ stillasittande/Y ++ stillastående/Y ++ stillatigande/Y ++-stillbild/AHDY +++stillbild/AHDYv +++stillbildskamera/EAGY ++ stilleben/ABY ++ stillestånd/ABDYvf ++ stillfärdig/OY ++@@ -59967,6 +62266,7 @@ still ++ stilmässig/OY ++ stilren/OPY ++ stilriktig/OY +++stilsäker/KMY ++ stiltje/EAY ++ stilvidrig/OY ++ stim/FCAY ++@@ -60015,6 +62315,7 @@ stj ++ stjärnig/OY ++ stjärnkarta/EAGY ++ stjärnklar/OY +++stjärnkock/ADGY ++ stjärnkopplad/NQY ++ stjärnljus/OY ++ stjärnlös/OY ++@@ -60045,7 +62346,6 @@ stockm ++ stockning/ADGYvf ++ stocksåg/ADGY ++ stod/AHDY ++-stode ++ stoff/ABY ++ stoffera/MY ++ stofflig/OY ++@@ -60079,19 +62379,22 @@ stomatologisk/OY ++ stomi/EAY ++ stomipåse/EAGY ++ stomme/EAGY ++-stompera/MY +++stompera/M ++ stop/ABDY ++ stopp/ABDYX ++ stoppa/NMAPBY ++ stoppduk/ADGY ++ stoppfull/OY +++stopplag/ADGY ++ stopplikt/ADY ++ stoppmätt/OY ++ stoppning/ADGYvf ++ stoppnål/ADGY ++ stoppris/BHY +++stopptid/AHDY ++ stoppur/ABDY ++ stor/OQRX +++storaffär/AHDY ++ storartad/NQY ++ storasyskon/ABDY ++ storasyster/EAIY ++@@ -60102,9 +62405,12 @@ storbank/AHDY ++ storbilds/XZ ++ storbladig/OY ++ storblommig/OY +++storbolag/ABDY ++ storbom/FAIY +++storbrand/AJDY ++ Storbritannien/AX ++ storbritannisk/OY +++storbråk/ABDY ++ storbukig/OY ++ storbyk/ADGY ++ stordator/AEHY ++@@ -60114,7 +62420,10 @@ stord ++ storebroder/EAY ++ storebror/AYv ++ storebröder/AJY +++storfilm/AHDY +++storform/AHDY ++ storformatig/OY +++storfräsare/EAJY ++ storfurstlig/OY ++ storföretag/ABDY ++ Storgatan/A ++@@ -60134,6 +62443,8 @@ storkovan/Y ++ storkund/AHDYv ++ storkvistig/OY ++ storkök/ABDYv +++storköp/ABDY +++storlag/ABDY ++ storlek/ADGYvf ++ storleksmässig/OY ++ Storlien/AX ++@@ -60143,7 +62454,7 @@ storlom/FAIY ++ storlopp/ABDYv ++ storlän/ABDY ++ storm/ADYX ++-storma/NAPDIY +++storma/NAPBIY ++ stormakt/AHDYv ++ stormaktsallians/HDY ++ stormaktskonflikt/AHDY ++@@ -60169,6 +62480,7 @@ stormpiskad/NQY ++ stormrik/OQY ++ stormriven/MY ++ stormskadad/NQY +++stormsteg/ABDY ++ stormtrivas ++ stormtrivs/N ++ stormvind/ADGY ++@@ -60177,7 +62489,8 @@ storm ++ stormästar/XZ ++ stormönstrad/NQY ++ stormönstrig/OY ++-stornera/MY +++stormöte/FECAY +++stororder/EAJY ++ storordig/OY ++ storpipig/OY ++ storpolitisk/OY ++@@ -60185,6 +62498,8 @@ storporig/OY ++ storprickig/OY ++ storrutig/OY ++ storrysk/OY +++storsatsa/NMADY +++storseger/EAIY ++ storsinnad/NQY ++ storsint/OQY ++ storsinthet/ADYv ++@@ -60196,6 +62511,7 @@ storslagen/MY ++ storslagenhet/ADY ++ storslalom/ADY ++ storslam/FAIY +++storspel/ABDY ++ storspov/ADGY ++ storstad/ADYv ++ storstadsbo/EAIY ++@@ -60233,14 +62549,15 @@ storvulen/MY ++ storvuxen/KMY ++ storväxt/OQY ++ story/EAY +++storägare/EAJY ++ storätare/EAJY ++ storögd/OQY ++ Strachan/A ++ Stradivarius/X ++-straff/ABDYX ++-straffa/NMAPDY +++straff/ABDGYX +++straffa/NAPDY ++ straffarbete/CAY ++-straffare/EAJY +++straffare/EAY ++ straffavgift/AHDY ++ straffbar/OY ++ straffbarhet/ADY ++@@ -60261,7 +62578,7 @@ stramalj/AHDYX ++ stramaljbroderi/CABHY ++ stramhet/ADYv ++ strand/AJDYX ++-stranda/MPY +++stranda/NMAPDY ++ strandkant/AHDY ++ strandnära/Y ++ strandrev/ABDY ++@@ -60292,6 +62609,8 @@ Street/A ++ strejk/AHDYX ++ strejka/NMADY ++ strejkbrytare/EAJY +++strejkhot/ABDY +++strejkvakt/AHDY ++ streptokock/AHDYX ++ stress/DYX ++ stressa/NMAPBY ++@@ -60300,6 +62619,7 @@ stressfri/OY ++ stressig/OPY ++ stresstålig/OY ++ streta/MY +++stretch/ADY ++ stretcha/MY ++ stretchbar/OY ++ stretching/ADY ++@@ -60318,7 +62638,7 @@ stridsrop/ABDY ++ stridstupp/ADGY ++ stridsvagnsmina/EAGY ++ stridulera/MY ++-strierad/NQY +++strierad/NQ ++ strike/EAGY ++ strikt/OPQY ++ striktur/AHDY ++@@ -60335,7 +62655,8 @@ stringtrosa/EAGY ++ stripa/NEMAPGY ++ striphårig/OY ++ stripig/OY ++-strippa/NEMAPDGY +++stripp/ADY +++strippa/NEAPDIGY ++ strippklubb/ADGYv ++ stripskäggig/OY ++ striptease/EY ++@@ -60397,7 +62718,7 @@ strutformad/NQY ++ strutformig/OY ++ struts/DGYX ++ strutsägg/ABDY ++-strutta/MY +++strutta/MDY ++ struttig/OY ++ struva/EAGY ++ stryk/ABRY ++@@ -60435,7 +62756,7 @@ str ++ stråkföring/ADGY ++ stråktag/ABDY ++ strål/XZ ++-stråla/MDY +++stråla/NAPDY ++ strålbehandling/ADGY ++ stråldos/HDY ++ stråle/EAGY ++@@ -60499,7 +62820,7 @@ str ++ strävsamt/Y ++ strävskalig/OY ++ strö/NMA ++-ströbar/OY +++ströbar/O ++ ströbröd/ABY ++ strödd/OY ++ ströjobb/ABDY ++@@ -60540,7 +62861,7 @@ str ++ Stuart/A ++ stubb/AQDGY ++ stubba/MRY ++-stubbfri/OY +++stubbfri/O ++ stubbhaltig/OY ++ stubbhårig/OY ++ stubbig/OY ++@@ -60577,6 +62898,7 @@ studiopublik/AHDY ++ studium/AJY ++ studs/DY ++ studsa/NMADIY +++studsare/EAY ++ studsmatta/EAGY ++ stuff/AHDY ++ stug/XZ ++@@ -60586,7 +62908,7 @@ stugsittare/EAJY ++ stugu/XZ ++ stuk/ABDY ++ stuka/NMAP ++-stukbar/OY +++stukbar/O ++ stukmaskin/AHDY ++ stukning/ADGY ++ stulen/MY ++@@ -60652,6 +62974,7 @@ stygn/ABDY ++ styling/ADGY ++ stylist/AHDY ++ stylta/EMAGY +++styltig/OPY ++ stympa/NMAPY ++ stympare/EAJY ++ stympning/ADGY ++@@ -60681,13 +63004,14 @@ styrman/AFYv ++ styrmedel/FCAY ++ styrmän/AFY ++ styrning/ADGYvf +++styrränta/EAGY ++ styrsel/EAY ++ styrsellös/OY ++ styrsignal/AHDY ++ styrstav/ADGY ++ styrströmskänslig/OY ++ styrsystem/ABDY ++-styrtal/ABDY +++styrtal/ABD ++ styråra/EAGY ++ styv/OP ++ styvbarn/ABDY ++@@ -60706,6 +63030,7 @@ styvf ++ styvhet/ADYv ++ styvhetsgrad/AHDY ++ styvhårig/OY +++styvmamma/EAGY ++ styvmoder/EAY ++ styvmoderlig/OY ++ styvmor/AY ++@@ -60727,12 +63052,13 @@ st ++ ståhej/ABY ++ stål/ABDGYX ++ stålartad/NQY +++stålbad/ABDY ++ stålbalk/ADGY ++ stålbandad/NQY ++ stålbandsarmerad/NQY ++ stålblå/OY ++ stålborstad/NQY ++-stålbur/ADGY +++stålbur/ADG ++ stålbågad/NQY ++ ståldörr/ADGY ++ stålfärgad/NQY ++@@ -60743,8 +63069,11 @@ st ++ stålkantad/NQY ++ stålkapslad/NQY ++ stålklädd/OY +++stålman/AFY ++ stålmantlad/NQY ++-stålräls/DGY +++stålmän/AFY +++stålräls/DG +++stålrör/ABDY ++ stålsatt/OQY ++ stålskodd/OY ++ stålslipad/NQY ++@@ -60803,12 +63132,14 @@ st ++ ställningstagande/FEY ++ ställtid/AHDY ++ ställverk/ABDY +++ställvis ++ stäm/FNY ++ stämband/ABDYv ++ stämfördelning/ADGY ++ stämgaffel/EAIY ++ stämma/KELODIGY ++ stämmare/EAY +++-stämmig/OY ++ stämmobeslut/ABDY ++ stämmoombud/ABDY ++ stämmoprotokoll/ABDY ++@@ -60847,12 +63178,14 @@ st ++ stärkelseindustri/EAHY ++ stärkelserik/OY ++ stärkkrage/EAGY +++stärkning/ADY ++ stätta/EAGY ++ stäv/ADY ++ stäva/EMAIGY ++ stävja/NMAPY ++ stöd/BDYX ++ stöda/KLAYf +++stödben/ABDY ++ stödberättigad/NQY ++ stödd/OY ++ stöddig/OY ++@@ -60863,14 +63196,16 @@ st ++ stödjare/EAJY ++ stödjepunkt/AHDY ++ stödjer/Y ++-stödjs/Y +++stödköp/BDRY +++stödköpa/KQLDY +++stödlån/ABDY ++ stödmur/ADGY ++ stödord/ABDY ++ stödpaket/ABDY +++stödparti/ABHY ++ stödpelare/EAJY ++ stödperson/AHDY ++ stödsystem/ABDY ++-stödvals/DGY ++ stök/ABY ++ stöka/NMADY ++ stökig/OPQY ++@@ -60888,13 +63223,12 @@ st ++ stönande/FEY ++ stöp/BY ++ stöpa/KQLADY ++-stöpig/OY ++ stöpslev/ADGY ++ stör/ADGY ++ störa/KLAO ++ störande/Y ++ störfunktion/AHDY ++-störfält/ABDY +++störfält/ABD ++ störig/OY ++ störning/ADGYvf ++ större ++@@ -60924,12 +63258,12 @@ st ++ stötdämpare/EAJY ++ stötdämpning/ADY ++ stötesten/ADGY ++-stötfri/OY +++stötfri/O ++ stötfångar/XZ ++ stötfångare/EAJY ++ stötig/OY ++ stötkänslig/OY ++-stötlös/OY +++stötlös/O ++ stötta/NEMAPDGY ++ stöttepelar/XZ ++ stöttepelare/EAJY ++@@ -60974,7 +63308,7 @@ subsidi ++ subskribent/AHDY ++ subskribera/MPY ++ subskription/AHDY ++-subsolid/OY +++subsolid/O ++ subsonisk/OY ++ substans/HDYX ++ substanslös/OY ++@@ -61018,7 +63352,8 @@ sudda/NMA ++ suddet/A ++ suddgummi/FECAY ++ suddig/OPY ++-sudoku +++sudoku/AECY +++sudokuna/AY ++ Suez/X ++ suffigera/MY ++ suffix/BDY ++@@ -61030,14 +63365,16 @@ suffragett/AHDY ++ sufisk/OY ++ sufism/ADY ++ sug/ABX ++-suga/AI +++suga/A ++ sugande/CAY ++-sugar/XZ ++-sugare/EAJY +++sugar/A +++sugare/EAYWZ ++ sugarm/ADGY +++sugarna/AY ++ sugen/KMY ++ sugens ++ suger +++sugfisk/ADGY ++ sugfot/AJDY ++ sugga/EAGY ++ suggerera/NMAPDY ++@@ -61045,10 +63382,12 @@ suggestibel/MY ++ suggestion/AHDYv ++ suggestiv/OY ++ sugit/A +++sugkopp/ADGY ++ sugrör/ABDY +++suicidal/OQY ++ suicidprevention/ADY ++ sukralos ++-sukta/MY +++sukta/NMADY ++ sula/EAGY ++ sulade/AO ++ sulande ++@@ -61075,6 +63414,7 @@ summarisk/OY ++ summarum ++ summatecken/FCAY ++ summen/M +++summer/EAIY ++ summera/NMAPY ++ summering/ADGYv ++ summit ++@@ -61091,6 +63431,7 @@ Sundberg/A ++ Sundblad/A ++ Sundborn/A ++ Sundbyberg/Av +++sundhet/ADY ++ sundhetstecken/FCAY ++ sundhetsvådlig/OY ++ Sundström/A ++@@ -61109,6 +63450,7 @@ sup ++ super/XZ ++ supera/MY ++ superb/OY +++superbra ++ superdator/AEHY ++ superhemlig/OY ++ superhård/OY ++@@ -61116,7 +63458,7 @@ superintendent/AHDY ++ superkalandrera/MY ++ superkapabel/MY ++ superlativ/AOHDY ++-superlåt/ADGY +++superlåt/ADG ++ superläcker/KMY ++ supermakt/AHDYv ++ supermaktsrelation/AHDY ++@@ -61128,7 +63470,7 @@ supersonisk/OY ++ superstjärna/EAGY ++ supertung/OY ++ supig/OY ++-supinum/AJYX +++supinum/ABYX ++ supinumform/AHDY ++ suppleant/AHDYX ++ suppleantplats/HDY ++@@ -61145,23 +63487,31 @@ supraledning/ADYv ++ supraledningsförmåga/EAGY ++ suprematism/ADY ++ suprematistisk/OY +++suput/AHDY ++ sur/OPQ ++ sura/NMAD ++ Surahammar/Av ++ surdeg/ADGYv +++surf/ADY ++ surfa/NMABY ++ surfabonnemang/ABDY ++-surfare/EAJY +++surfare/EAJYz +++surfbräda/EAGY ++ surfdator/AEHY ++ surfhastighet/AHDY +++surfhistorik/AHDY +++surfindex/BDY ++ surfing/ADY +++surfkostnad/AHDY ++ surfning/ADY ++ surfplatta/EAGY ++-surfvana/EAGY ++-surfzon/AHDY +++surfplatte/XZ +++surfvana/EAG +++surfzon/AHD ++ surgjord/OY ++ surgubbe/EAGY ++ surhet/ADY +++surikat/AHDY ++ Surinam/AX ++ surinamesisk/OY ++ surkulla/EAGY ++@@ -61169,7 +63519,7 @@ surk ++ surmjölk/ADY ++ surmulen/KMY ++ surna/MPY ++-surr/ABDY +++surr/ABY ++ surra/NMAPDY ++ surrealism/ADY ++ surrealist/ATHDYX ++@@ -61177,13 +63527,14 @@ surrningsf ++ surrogat/ABDYX ++ surroundljud/ABY ++ surströmming/ADGYv ++-surtant/AHDY +++surtant/AHD ++ surögd/OY ++-sus/BD +++sus/B ++ susa/M ++ susande/CAY ++ Susanne/A ++ susceptibel/MY +++susen ++ sushi/EAYX ++ sushibar/AHDY ++ sushiris/BY ++@@ -61198,14 +63549,14 @@ suttit/Y ++ sutur/AHD ++ suturera/MY ++ Suu +++suv/ADG ++ suverän/AOHQDY ++ suveränitet/ADYvf ++ Suzanne/A ++ Suzuki/AX ++-svabbig/OY ++ svacka/EAGY ++ svackig/OY ++-svada/EAGY +++svada/EAY ++ svag/OPQR ++ svagdricka/EAY ++ svaghet/AHDYv ++@@ -61214,16 +63565,17 @@ svaghetssymtom/ABDY ++ svaglimmad/NQY ++ svagmotiverad/NQY ++ svagtonig/OY +++swahili/EAY ++ Svahn/A ++ svaj/ABY ++ svaja/MDY ++ svajig/OPY ++-sval/ODGY +++sval/DGY ++ svala/ELAGY ++ svalare ++ svalast/Q ++ Svalbard/Av ++-svalde/Y +++svald/OQY ++ svalg/ABDYX ++ svalgång/ADGY ++ svalka/EMADY ++@@ -61236,7 +63588,7 @@ svallv ++ svalna/MDY ++ svalört/AHDY ++ Svalöv/Av ++-svamla/MY +++svamla/NMADY ++ svamlig/OY ++ svammel/CAY ++ svamp/ADGYsf ++@@ -61250,6 +63602,7 @@ svan/DGY ++ Svanberg/A ++ svanesång/ADY ++ svang/Y +++svanhals/DGY ++ svanhalsad/NQY ++ svank/ADGY ++ svanka/NAPD ++@@ -61270,7 +63623,6 @@ Swanstr ++ svansviftare/EAJY ++ Svante/A ++ Svantesson/A ++-swap/ADGY ++ svar/ABDY ++ svara/NMAYv ++ svarande/FEAY ++@@ -61279,6 +63631,7 @@ svarom ++ svarsalternativ/ABDY ++ svarsbrev/ABDY ++ svarslös/OY +++svarsnot/AHDY ++ svarsporto/CAY ++ svarston/AHDY ++ svart/OPQYX ++@@ -61301,6 +63654,7 @@ svarthalsad/NQY ++ svarthuvad/NQY ++ svarthyad/NQY ++ svarthårig/OY +++svarting/ADGY ++ svartjobb/ABDYv ++ svartkantad/NQY ++ svartklädd/OQY ++@@ -61315,9 +63669,10 @@ svartlockig/OY ++ svartlut/ADY ++ svartmes/DGY ++ svartmuskig/OY +++svartmyra/EAGY ++ svartmåla/NMAPY ++ svartmålning/ADGY ++-svartna/MY +++svartna/MDY ++ svartnäbbad/NQY ++ svartpannad/NQY ++ svartprickig/OY ++@@ -61344,7 +63699,7 @@ svart ++ svarv/ADGYX ++ svarva/NAPDY ++ svarvare/EAY ++-svarvbar/OY +++svarvbar/O ++ svarvfräsning/ADGY ++ svarvning/ADGYv ++ svassig/OY ++@@ -61386,6 +63741,7 @@ svekl ++ Svemo/A ++ sven/AY ++ Sven/A +++svendom/ADY ++ Svenljunga/AX ++ svennen/AY ++ svenner/AJY ++@@ -61417,6 +63773,7 @@ svepning/ADGYv ++ svepskäl/ABDY ++ sverige/XZAYW ++ Sverige/AX +++sverigefinsk/OY ++ Sverker/A ++ Sverre/A ++ svets/DYX ++@@ -61428,7 +63785,7 @@ svetsning/ADGYvf ++ svetspåverkad/NQY ++ svetssträng/ADGY ++ svetsteknisk/OY ++-svett/HDYX +++svett/DYX ++ svettas/N ++ svettdroppe/EAGY ++ svettdrypande/Y ++@@ -61465,6 +63822,7 @@ svindyr/OQY ++ svineri/ABY ++ Svinesund/Av ++ sving/ADY +++swing/ADY ++ svinga/NAPDIY ++ swingpjatt/ADGY ++ svinhjord/ADGY ++@@ -61477,9 +63835,10 @@ svinm ++ svinpäls/DGY ++ svinstia/EAGY ++ svintur/ADY ++-svira/NMAPD +++svira/NMAD +++svirra/NMADY ++ svisch/ABY ++-svischa/MY +++svischa/NMADY ++ sviskon/ABDYX ++ sviskonkärna/EAGY ++ svit/AHDY ++@@ -61487,6 +63846,9 @@ svor/AY ++ svordom/ADGY ++ SvT/r ++ SVT/r +++SVT1/r +++SVT2/r +++SVT24/r ++ svullen/MY ++ svullnad/ANHQDY ++ svullnar/Y ++@@ -61501,7 +63863,6 @@ svurit/AY ++ svåger/EAIYX ++ svågerpolitik/ADY ++ svål/ADGY ++-svålig/OY ++ svångrem/FAIYv ++ svångremspolitik/ADY ++ svår/OPYX ++@@ -61590,7 +63951,7 @@ sv ++ svårutplånlig/OY ++ svårutrotad/NQY ++ svårutrotlig/OY ++-svåråkt/OY +++svåråkt/O ++ svåråtkomlig/OY ++ svåröverblickad/NQY ++ svåröverblickbar/OY ++@@ -61603,7 +63964,8 @@ sv ++ svårövertygad/NQY ++ svårövertygbar/OY ++ svägerska/EAGY ++-svälja/KAJY +++svälja/AJDY +++sväljer/Y ++ sväljning/ADGYv ++ sväljs/Y ++ svälla/KJDY ++@@ -61628,6 +63990,7 @@ sv ++ svängning/ADGYvf ++ svängningstal/ABDY ++ svängom/Y +++svängrum/CAY ++ svära/AJDY ++ svärd/ABDYvX ++ svärdformig/OY ++@@ -61663,7 +64026,7 @@ sy/NKMA ++ sybaritisk/OY ++ sybehör/ADYv ++ sybehörsaffär/AHDY ++-syd/ADX +++syd/X ++ Sydafrika/AX ++ sydafrikan/AHDY ++ sydafrikansk/OY ++@@ -61675,6 +64038,7 @@ sydeuropeisk/OY ++ sydgående/Y ++ sydjemenitisk/OY ++ Sydkorea/AX +++sydkust/AHDY ++ sydlig/OPY ++ sydländsk/OQY ++ sydmagnetisk/OY ++@@ -61685,22 +64049,23 @@ Sydostasien/AX ++ sydostlig/OY ++ Sydow/A ++ sydpol/AHDY ++-sydsame/EAIY +++sydsame/EAI ++ sydsida/EAY ++ Sydskandinavien/A ++ Sydskåne/A ++ sydslavisk/OY +++sydstat/AHDY ++ sydsudanes/HDY ++ Sydsverige/A ++ sydsydostlig/OY ++ sydsydvästlig/OY ++ sydsydöstlig/OY ++ sydvietnamesisk/OY ++-sydväst/ADGY +++sydväst/ADGYX ++ sydvästlig/OY ++ sydvästmonsun/AHDY ++ sydvästra/Y ++-sydände/EAGY +++sydände/EAG ++ sydöst ++ sydöstlig/OY ++ sydöstra/Y ++@@ -61708,7 +64073,8 @@ syfabrik/AHDY ++ syfilis/DY ++ syfilitisk/OY ++ syfta/NMAPDRY ++-syfte/FECY +++syfte/FECYv +++syftesparagraf/AHDY ++ syftning/ADGYv ++ syförening/ADGY ++ syjunta/EAGY ++@@ -61723,6 +64089,7 @@ syllogistisk/OY ++ sylt/AHDYX ++ sylta/NEMAPDGY ++ syltburk/ADGY +++syltlök/ADGY ++ sylvass/OPQY ++ Sylvia/A ++ sylört/AHDY ++@@ -61764,6 +64131,7 @@ syn/AHQDY ++ syna/NMAPR ++ synagog/XZ ++ synagoga/EAGY +++synaps/HDY ++ synartetisk/OY ++ synbar/OY ++ synbarhet/ADY ++@@ -61800,7 +64168,8 @@ synh ++ syning/ADGY ++ syninstruktör/AHDY ++ synintryck/ABDY ++-synka/NMAPDY +++synk/ADGY +++synka/NAPDY ++ synkning/ADGY ++ synkontroll/AHDY ++ synkop/ATHDY ++@@ -61854,7 +64223,6 @@ syntetisera/NMAPDY ++ syntetisering/ADYv ++ syntetisk/OY ++ syntetmaterial/ABDY ++-synth/Y ++ syntlegendar/AHDY ++ syntmusik/ADY ++ synupplevelse/EAIY ++@@ -61865,7 +64233,6 @@ syokonsulent/AHDY ++ syra/EAPGYX ++ syrabeständig/OY ++ syraetsad/NQY ++-syrafri/OY ++ syrahaltig/OY ++ syrahärdig/OY ++ syrakatalyserad/NQY ++@@ -61878,7 +64245,6 @@ syreatom/AHDY ++ syrebehållare/EAJY ++ syrebrist/ADYX ++ syrefattig/OY ++-syrefri/OY ++ syrehaltig/OY ++ syremättad/NQY ++ syren/AHDX ++@@ -61900,11 +64266,11 @@ syrlighet/ADYv ++ syrning/ADYv ++ syrra/EAGY ++ syrsa/EAGY ++-syrsalt/Y ++ syrtut/AHDY ++ syskon/ABDYX ++ syskonbarn/ABDY ++ syskonlig/OY +++syskonskap/ABY ++ syslöjd/ADY ++ sysselsatta/LJY ++ sysselsatte/Y ++@@ -61934,7 +64300,7 @@ systerson/ADY ++ systersöner/AJY ++ systolisk/OY ++ sytråd/ADGY ++-syvende +++syvende/Y ++ så/NELG ++ såbar/OY ++ sådan/O ++@@ -61942,15 +64308,17 @@ s ++ sådda ++ sådde ++ såddfinansiering/ADY ++-sådig/OY ++ sådär ++ såframt ++-såg/DGX ++-såga/NMAPY +++såg/ADGYX +++såga/NAPY ++ sågbar/OY +++sågblad/ABDY ++ sågfil/ADGY +++sågfisk/ADGY ++ sågning/ADGYv ++ sågningsavgift/AHDY +++sågspån/ABDY ++ sågtag/ABDY ++ sågtak/ABDY ++ sågtandad/NQY ++@@ -61974,8 +64342,12 @@ s ++ sångare/EAJY ++ sångbar/OY ++ sångbegåvad/NQY +++sångbok/ADY +++sångböcker/AJY ++ sångerska/EAGY ++ sånggudinna/EAGY +++sångkör/AHDY +++sånglek/ADGY ++ sånglig/OY ++ sånglärka/EAGY ++ sångmö/EAIY ++@@ -62001,11 +64373,14 @@ s ++ sårande/Y ++ sårbar/OPQY ++ sårbarhet/AHDYv +++sårbehandling/ADGY +++sårfeber/EAY ++ sårig/OY ++ sårinfektion/AHDYv ++ såromläggning/ADGY ++ sårskada/EAGY ++ sårskorpa/EAGY +++sårsprit/ADY ++ sårvätska/EAY ++ sås/HD ++ såsa/NMAD ++@@ -62014,9 +64389,7 @@ s ++ såsom ++ såssked/ADGY ++ såsskål/ADGY ++-såsslev/ADGY ++-såta/M ++-såte/EAGY +++såsslev/ADG ++ såtillvida ++ sått ++ såvida ++@@ -62078,6 +64451,7 @@ s ++ säll/M ++ sälla/MIRY ++ sällan +++sällanköps/XZ ++ sällanköpsvara/EAGY ++ sällanköpsvaru/XZ ++ sälle/EY ++@@ -62093,14 +64467,14 @@ s ++ sällsynt/OPY ++ sällsynthet/AHDY ++ sälpäls/DGY ++-sälskinn/ABDY +++sälskinn/ABDYv ++ sälstam/FAIY ++ sälta/EAY ++ sälunge/EAGY ++ sämja/EAY ++ sämre/Y ++ sämskfärgad/NQY ++-sämskgul/OY +++sämskgul/O ++ sämskskinn/ABDY ++ sämst/OQY ++ sända/KLAJD ++@@ -62115,6 +64489,7 @@ s ++ säng/ADGYX ++ sängbotten/FAIY ++ sängfösare/EAJY +++sänghalm/ADY ++ sängkammar/XZ ++ sängvärmare/EAJY ++ sängvätare/EAJY ++@@ -62148,6 +64523,8 @@ s ++ särdeles ++ särdrag/ABDY ++ säregen/KMLY +++säregenhet/AHDY +++särfall/ABDY ++ särintresse/FECAY ++ särk/ADG ++ särklass/Y ++@@ -62209,8 +64586,7 @@ s ++ säv/AD ++ sävlig/OPQY ++ Sävsjö/AX ++-söcknig/OY ++-söder/EAY +++söder/EAYX ++ Söderberg/A ++ södergående/Y ++ Söderhamn/Av ++@@ -62238,15 +64614,22 @@ s ++ sökare/EAJY ++ sökbar/OY ++ sökfunktion/AHDY +++sökhund/ADGY +++sökljus/BDY ++ sökmotor/AEHY ++ sökmotorjätte/EAGY ++ sökning/ADGYvf ++ sökord/ABDYv ++ sökregister/FCAY +++sökruta/EAGY +++söktjänst/AHDY +++söktryck/ABDY ++ sökverktyg/ABDY +++sökväg/ADGY ++ söla/NMA ++ sölaktig/OY ++ sölig/OY +++sölkorv/ADGY ++ Sölve/A ++ Sölvesborg/Av ++ Sölvesborgsbo/EAIY ++@@ -62324,7 +64707,7 @@ s ++ söndring/ADGYv ++ söner/AJ ++ Sören/A ++-sörja/KLAJOBRY +++sörja/KELAJOBRY ++ sörjig/OY ++ sörlänning/ADGY ++ Sörman/A ++@@ -62335,10 +64718,6 @@ s ++ söt/OPQ ++ söta/NMAPD ++ sötaktig/OY ++-sötleif/Y ++-sötleifar/Y ++-sötleifarna/Y ++-sötleifen/Y ++ sötma/EAY ++ sötmandel/EAIY ++ sötning/ADYv ++@@ -62354,6 +64733,7 @@ s ++ söva/KLAJOR ++ sövande/Y ++ t-/XZ +++tabasco/EAY ++ tabb/A ++ tabbe/EAGY ++ tabbstopp/ABDY ++@@ -62419,9 +64799,8 @@ tacksamt/Y ++ tacksägelse/EAIYX ++ tacksägelsebön/AHDY ++ tacktal/ABDY ++-tackvärd/OY ++-taco/Y ++-tacos/DY +++taco/XZ +++tacos/D ++ tadel/CAY ++ tadelfri/OY ++ tadellös/OY ++@@ -62451,11 +64830,19 @@ tagelskjorta/EAGY ++ tagen/MY ++ tagens ++ tager ++-tagg/ADY ++-tagga/NAPDIY +++tagg/ADG +++tagga/NMAPDY +++-taggare/EAJY +++taggbuske/EAGY ++ taggfenig/OY +++taggfening/ADGY +++tagghuding/ADGY ++ taggig/OY ++ taggighet/ADY +++taggmakrill/ADGY +++taggning/ADGY +++taggningsmaskin/AHDY +++taggsnår/ABD ++ taggsvamp/ADGY ++ taggtråd/ADGYv ++ tagit/A ++@@ -62474,7 +64861,7 @@ tajga/EAY ++ tajma/NMAPDY ++ tajming/ADY ++ tajmning/ADY ++-tajt/OPQ +++tajt/OP ++ tak/ABD ++ takantenn/AHDY ++ takarbete/FECAY ++@@ -62487,7 +64874,7 @@ takeaway ++ takfläkt/ADGY ++ takformig/OY ++ takfot/ADY ++-takfärg/AHDY +++takfärg/AHD ++ takfäste/FECAY ++ takfönster/FCAJY ++ takhöjd/AHDY ++@@ -62506,20 +64893,21 @@ takl ++ taklös/OY ++ takmontera/NMAPY ++ takmålning/ADGY ++-taknivå/EAHY +++taknivå/EAH ++ taknock/ADGY ++ takpanel/AHDY ++ takpanna/EAGY ++ takpapp/ADY ++ takplatta/EAGY ++ takplåt/ADGY ++-takpris/BHY +++takpris/BH ++ takras/BDY ++ takregel/EAJY ++ takräcke/FECAY ++ takränna/EAGY ++ takstol/ADGY ++ takt/ATHDYX +++-taktare/EAJY ++ taktart/AHDY ++ taktdel/ADGY ++ taktera/MY ++@@ -62539,9 +64927,9 @@ taktpinne/EAGY ++ taktäckning/ADGYv ++ takvåning/ADGY ++ takås/DGY ++--tal/ABDv +++-tal/ABDYvf ++ tal/ABDyu ++-tala/NEMABY +++tala/NEMAPBY ++ talakt/AHDY ++ talang/AHDYX ++ talangfull/OPQY ++@@ -62551,8 +64939,8 @@ talangscout/AHDY ++ talanordning/ADGY ++ talapparat/AHDY ++ talare/EAJYz ++-talarna/JY ++ talarstol/ADGY +++talartid/AHDY ++ talbok/ADYv ++ talböcker/AJY ++ talcentrum/ABY ++@@ -62576,9 +64964,9 @@ talg ++ taliban/AHDYX ++ talibangrupp/AHDY ++ talibansk/OQY ++--talism/D +++-talism/DY ++ talisman/AHDY ++--talist/ATHDX +++-talist/ATHDYXU ++ talja/EAGY ++ talk/ADY ++ talka/NMAPY ++@@ -62592,8 +64980,9 @@ tallbarr/ABDYv ++ tallbestånd/ABDY ++ tallbevuxen/MY ++ talldunge/EAGY ++-tallfrö/EABHY ++-tallfröna/AY +++tallfrö/ABHY +++tallfröna/AJ +++tallfröns ++ tallgren/ADGY ++ tallharts/BHYX ++ tallhed/ADGY ++@@ -62621,20 +65010,25 @@ talpedagog/AHDY ++ talpjäs/HDY ++ talrik/OPY ++ talroll/AHDY ++--talsaktig/O +++-talsaktig/OY ++ talscen/AHDY ++-talserie/EAIY +++talserie/EAI +++-talshak/ABDY +++-talshit/AY ++ talskadad/NQY ++ talskrivar/XZ ++ talskrivare/EAJY ++--talskåk/ADG ++--talslåt/DG +++-talskåk/ADGY +++-talslåt/DGY ++ talsmålning/ADGY ++-talspole/EAGY +++talspole/EAG +++-talspop/ADY +++-talspoppen/AY ++ talspråk/ABDYv ++ talspråklig/OY ++ talstreck/ABDY ++-talstyrd/OY +++talstyrd/O +++-talsvis/Y ++ talsvårighet/AHDY ++ talsyntes/DY ++ talsystem/ABDY ++@@ -62645,7 +65039,7 @@ taltj ++ taltrast/ADGYX ++ talträngd/OY ++ talvård/ADY ++-tam/O +++tam/OP ++ tamarisk/OY ++ tamboskap/ADY ++ tambur/AHDYX ++@@ -62655,7 +65049,7 @@ tamdjur/ABDYv ++ tamdjursart/AHDY ++ tamduva/EAGY ++ tamfågel/EAIY ++-tamil/ATHDY +++tamil/AHDY ++ tamilsk/OY ++ tamkatt/AHDY ++ Tammerfors ++@@ -62670,8 +65064,11 @@ tandborst/XZ ++ tandborste/EAGY ++ tandborstning/ADY ++ tandem/ABDY +++tandemalj/AHDY ++ tandemcykel/EAIY +++tandempar/ABDY ++ tandhygienist/XZ +++tandhälsa/EAY ++ tandkräm/AHDYv ++ tandkrämstub/AHDY ++ tandkött/ABYv ++@@ -62700,7 +65097,7 @@ tangorabatt/AHDY ++ tanig/OY ++ tank/QDRGYX ++ tanka/NPDYy ++-tankbar/OY +++tankbar/O ++ tankbil/ADGYv ++ tankbåt/ADGYv ++ tankebana/EAGY ++@@ -62714,8 +65111,10 @@ tankelek/ADGY ++ tankemässig/OY ++ tankemöda/EAGY ++ tankenöt/AJDY +++tankepaus/HDY ++ tanker/EAIY ++ tankeställare/EAJY +++tankesätt/ABDY ++ tanketom/MY ++ tanketomt/Y ++ tankfull/OY ++@@ -62739,6 +65138,7 @@ Tanzania/AX ++ tanzanisk/OY ++ taoism/ADY ++ taoist/ATHDYX +++tapas/D ++ tape/ECAIY ++ tapet/HDYX ++ tapetbård/AHDY ++@@ -62753,11 +65153,10 @@ tapetsk ++ tapetskärare/EAJY ++ tapetuppsättning/ADGY ++ tapetvåd/AHDY ++-tapetväv/ADGY ++ tapetvävnad/AHDY ++ tapetvävning/ADGY ++ tapir/AHDY ++-tapp/ADY +++tapp/ABDY ++ tappa/NAPDIY ++ tappborr/ABDY ++ tapper/KMLY ++@@ -62770,19 +65169,20 @@ tappt ++ tapto/FECAY ++ tar ++ Tarantino/A ++-tarera/MY ++ tariff/AHDYX ++ tariffenlig/OY ++ tariffera/MY ++-tariffär/OY +++tariffär/O ++ tarm/ADGX ++ tarmgas/HDY +++tarmkanal/AHDY ++ tarmkäx/BDY ++ tarmvred/ABDY ++ tarot +++tarotkort/ABDY ++ tarotlek/ADGY ++ tartanmönstrad/NQY ++-tarv/ABD +++tarv/AB ++ tarva/NMAY ++ tarvlig/OY ++ tarvlighet/AHDY ++@@ -62829,10 +65229,11 @@ taxerings ++ taxfree/YX ++ taxi/EAYX ++ taxibil/ADGY +++taxibåt/ADGY ++ taxichaufför/AHDY ++ taxikö/EAHY ++ taxiresa/EAGY ++-taxning/ADGY +++taxning/ADG ++ taxonomi/EAY ++ taxonomisk/OY ++ Taylor/A ++@@ -62852,7 +65253,7 @@ teateraktig/OY ++ teaterapa/EAGY ++ teaterbov/ADGY ++ teatermässig/OY ++-teaterår/ABDY +++teaterår/ABD ++ teatral/OTY ++ teatralitet/ADY ++ Tebbutt/A ++@@ -62862,6 +65263,8 @@ tebricka/EAGY ++ tebröd/ABDY ++ tebuske/EAGY ++ teceremoni/EAHY +++techno/EAY +++technomusik/ADY ++ tecken/FCAYX ++ teckenanpassad/NQY ++ teckenkodad/NQY ++@@ -62886,6 +65289,7 @@ tegel/FCAYX ++ tegelbeklädd/OY ++ tegelbruk/ABDY ++ tegelfärgad/NQY +++tegelhus/BDY ++ tegellagd/OY ++ tegelmur/ADGY ++ tegelprydd/OY ++@@ -62897,9 +65301,10 @@ tegelstensv ++ tegeltak/ABDY ++ tegelvaruindustri/EAHY ++ Tegnér/A ++-tegplöjd/OY +++tegplöjd/O ++ Tegucigalpa/AX ++ Teheran/AX +++tehus/BDY ++ tehuva/EAGY ++ TEI/r ++ tein/AB ++@@ -62927,12 +65332,12 @@ tekniskvetenskaplig/OY ++ teknokrat/ATHDY ++ teknolog/ATHDYX ++ teknologi/EAHYX ++-teko/EAY ++ tekopp/ADGYv ++ tektoniserad/NQY ++ tektonisk/OY ++ tel ++ Tel +++Tele2/r ++ teleabonnemang/ABDY ++ teleabonnent/AHDY ++ teleanläggning/ADGY ++@@ -63013,7 +65418,7 @@ televisera/NMAPY ++ television/ADYv ++ televäxel/EAIY ++ telex/BDY ++-telexera/MY +++telexera/M ++ teleövervakning/ADY ++ Telia/AX ++ Teliasonera/AX ++@@ -63022,10 +65427,12 @@ tellurhaltig/OY ++ telmatisk/OY ++ telning/ADGYv ++ tema/ECAYX +++temadag/ADGY ++ temakonfirmation/AHDY ++ temana/AY ++ temat/TY ++ tematik/ADY +++tematisera/NMAPDY ++ temp/ADY ++ tempel/FCAYX ++ tempelsal/ADGY ++@@ -63046,6 +65453,7 @@ temperatur ++ temperera/MPY ++ tempo/FECAYX ++ tempofattig/OY +++tempolopp/ABDY ++ temporär/OY ++ tempus/YX ++ tempusböjning/ADGY ++@@ -63074,7 +65482,6 @@ tennsten/ADY ++ tenor/AHDYX ++ tenorklav/AHDY ++ tensid/AHDY ++-tensor/AEHY ++ Tensta/AX ++ tenta/EAGYX ++ tentakel/EAJY ++@@ -63096,6 +65503,7 @@ teokrati/EAHDY ++ teokratisk/OY ++ teolog/ATHDY ++ teologi/EQADYX +++teorb/AHD ++ teorem/ABDY ++ teoretiker/EAJY ++ teoretisera/NMAPDY ++@@ -63107,20 +65515,21 @@ teosof/ATHDY ++ teosofi/EAY ++ teparty/ECAX ++ tepartyna/A ++-tepig/OY ++ teplantage/EAIY ++ tepåse/EAGY +++tequila/EAY ++ terabyte/Y ++ terapeut/ATHDYXU ++ terapi/EAHYX ++ terawatt/ADX ++ terawattimma/EAIY ++ terawattimme/EAY ++--terawatts/XZ +++-terawatts/XZU ++ terbium/ABY ++ Teresia/A ++ Terje/A ++ term/TAHDY +++termik/ADY ++ termin/AHDYvf ++ terminal/AHDYX ++ terminalfönster/FCAJY ++@@ -63132,7 +65541,7 @@ terminsvis ++ termionisk/OY ++ termistor/AEHY ++ termit/AHD ++-termitbo/FEABDY +++termitbo/FEABY ++ termitstack/ADGY ++ termobyxor/AJY ++ termodynamik/ADY ++@@ -63222,6 +65631,7 @@ testamentlig/OY ++ testaments/XZ ++ testamentsexekutor/AEHY ++ testare/EAYz +++testbil/ADGY ++ testbild/AHDY ++ testhårig/OY ++ testig/OY ++@@ -63239,11 +65649,27 @@ tetraedrisk/OY ++ teutonisk/OY ++ tevagn/ADGY ++ tevatten/CAY ++-teve/EAG +++teve/EA ++ teveapparat/AHDY ++ tevear/AJ ++ teveavgift/AHDY +++tevebolag/ABDY +++tevedebatt/AHDY +++teveintervju/AEHY +++tevekamera/EAGY +++tevekanal/AHDY +++tevereklam/ADY +++teverum/FCAY +++teveruta/EAGY +++teveserie/EAIY +++teveskärm/ADGY +++tevesoffa/EAGY +++tevespel/ABDY +++tevestudio/EAIY ++ tevesändning/ADGYv +++teveteam/ABDY +++tevetittande/CAY +++tevetittare/EAJY ++ t.ex. ++ tex ++ Texas/X ++@@ -63273,6 +65699,7 @@ textkritisk/OY ++ textlig/OY ++ textning/ADGY ++ textnumerisk/OY +++textrad/AHDY ++ textstorlek/ADGY ++ textur/AHDY ++ texturera/MY ++@@ -63308,6 +65735,7 @@ tibetanska/EAGY ++ Tibro/AX ++ tick/ABDY ++ ticka/EMADGY +++tics/Y ++ tid/AHDYXv ++ Tidaholm/Av ++ tidelag/ABDY ++@@ -63322,9 +65750,9 @@ tidigarelagt/AY ++ tidigarelägga/AJDRY ++ tidigarelägger/Y ++ tidigareläggs/Y ++-tidkonto/FECAY ++-tidlig/OY ++-tidlös/OY +++tidkonto/FECA +++tidlås/BDY +++tidlös/OQY ++ tidlöshet/ADYv ++ tidning/ADGYvf ++ tidningsartikel/EAIY ++@@ -63352,6 +65780,7 @@ tidsfr ++ tidsfönster/FCAJY ++ tidsfördriv/ABDY ++ tidsförlust/AHDY +++tidsgräns/HDY ++ tidshistorisk/OY ++ tidshorisont/AHDY ++ tidskrift/AHDYv ++@@ -63368,9 +65797,11 @@ tidspecificerad/NQY ++ tidsperiod/AHDY ++ tidsplan/AHDY ++ tidsplanera/NMAPY +++tidspress/DY ++ tidsproportionell/OY ++ tidsram/ADGY ++ tidsreglerad/NQY +++tidsresa/EAGY ++ tidsriktig/OY ++ tidsschema/ECAY ++ tidsschemana/AY ++@@ -63403,6 +65834,7 @@ tidvis ++ tie-break/ABDY ++ tiebreak/ABDY ++ Tierp/Av +++tifo/FECAX ++ tiga/AJ ++ tigande/CAY ++ tiger/EAIYX ++@@ -63415,14 +65847,14 @@ tiggar/XZ ++ tiggare/EAJY ++ tiggeri/ABHY ++ tiggerska/EAGY +++tight/OPY ++ tigit/A ++ tigrerad/NQY ++ tigs ++ tik/ADG ++ tilde/EAY ++ tilja/EAGY ++-till/A ++-till- +++till/Ab ++ tillade/AY ++ tillaga/NMAOPY ++ tillagning/ADGYv ++@@ -63459,6 +65891,7 @@ tillbeder/Y ++ tillbedes/Y ++ tillbedja/EDY ++ tillbedjansvärd/OY +++tillbedjare/EAJY ++ tillbehör/ABDYv ++ tillblandad/NQY ++ tillblivelse/EAY ++@@ -63555,7 +65988,8 @@ tillg ++ tillhanda ++ tillhandagå/NMLAY ++ tillhandagången/MY ++-tillhandahålla/KLAJBRY +++tillhandahålla/KLAJDRY +++tillhandahållande/XCA ++ tillhandahållar/XZ ++ tillhandahållare/EAJY ++ tillhandahållen/MY ++@@ -63567,6 +66001,8 @@ tillhutad/NQY ++ tillhyfsad/NQY ++ tillhygge/FECAY ++ tillhåll/ABDY +++tillhålla/Y +++tillhåller/Y ++ tillhöftad/NQY ++ tillhöra/KJDY ++ tillhörig/OY ++@@ -63622,6 +66058,7 @@ tillproppad/NQY ++ tillra/MDY ++ tillreda/KLAJY ++ tillredd/OY +++tillredning/ADGY ++ tillresande/Y ++ tillrest/OY ++ tillrop/ABDY ++@@ -63687,9 +66124,10 @@ tillspillo ++ tillspillogiven/MY ++ tillspänd/OY ++ tillspökad/NQY ++-tillstadde/Y +++tillstadda/JY +++tillstadde/AY ++ tillstampad/NQY ++-tillstatt/Y +++tillstatt/AY ++ tillstramad/NQY ++ tillströmning/ADY ++ tillstukad/NQY ++@@ -63701,8 +66139,10 @@ tillst ++ tillstånd/ABDYvf ++ tillståndsgivande/FECAY ++ tillståndshavare/EAJY ++-tillstädes ++-tillstädja/Y +++tillstäd/AY +++tillstäder/Y +++tillstädes/Y +++tillstädja/ADY ++ tillstädjer/Y ++ tillställa/KLAJODRY ++ tillställning/ADGYv ++@@ -63778,6 +66218,7 @@ tillverka/NMAPBY ++ tillverkare/EAJYzg ++ tillverkning/ADGYvf ++ tillverkningsår/ABDY +++tillvida ++ tillvitelse/EAIY ++ tillvrängd/OY ++ tillvuxit/Y ++@@ -63790,7 +66231,6 @@ tillv ++ tillväxtort/AHDY ++ tillväxttakt/ADY ++ tillväxttal/ABDY ++-tillyrd/OY ++ tillyxad/NQY ++ tillåta/KLAJDRY ++ tillåtelse/EAIYX ++@@ -63815,6 +66255,7 @@ till ++ tillökning/ADGYv ++ tillönska/NMAY ++ tillövers +++tilta/EAGY ++ tim/XZ ++ tim. ++ Tim/A ++@@ -63840,8 +66281,8 @@ timkostnad/AHDY ++ timlig/OY ++ timlön/AHDY ++ timma/EAY ++--timmars/XZ ++--timmarstur/HD +++-timmars/XZU +++-timmarstur/HDY ++ timme/EAGY ++ timmer/FCAYX ++ timmerfora/EAGY ++@@ -63850,11 +66291,18 @@ timmerk ++ timmerman/AFY ++ timmermän/AFY ++ timmersåg/ADGY +++timotej/ADY +++timpeng/ADY +++timplan/AHDY +++timpris/BHY ++ timra/MY ++ Timrå/AX +++timslag/ABDY ++ timslång/OY ++ timtal/Y ++ timtals +++timtaxa/EAGY +++timvis ++ timvisar/XZ ++ timvisare/EAJY ++ tina/NMAPD ++@@ -63864,7 +66312,6 @@ tindra/MDY ++ ting/ABDY ++ tinga/NMAPDYv ++ tingeltangel/CAY ++-tingera/MY ++ tingest/ADGY ++ tinglig/OY ++ tingshus/BDY ++@@ -63883,7 +66330,7 @@ Tintin/A ++ tio ++ tiodubbel/MY ++ tiodubbla/NMAPY ++-tiodubbling/ADY +++tiodubbling/ADGY ++ tiofaldig/OQY ++ tiofalt ++ tiogradig/OY ++@@ -63898,7 +66345,7 @@ tiokronorssedel/EAIY ++ tioliters/XZ ++ tiometers/XZ ++ tiominuters/XZ ++-tiomånaders/XZ +++tiomånaders/X ++ tionde/FECAY ++ tiondel/ADGY ++ tiondeplats/HDY ++@@ -63939,6 +66386,7 @@ tips/BDYX ++ tipsa/NMAPY ++ tipsare/EAJYz ++ tipspromenad/AHDY +++tipsrad/AHDY ++ tirad/AHDY ++ tis. ++ tisdag/ADGYv ++@@ -63950,6 +66398,8 @@ titanhaltig/OY ++ Titanic/AX ++ titel/EAIYX ++ titellåt/ADGY +++titelmatch/AHDY +++titelroll/AHDY ++ titoistisk/OY ++ titrera/MY ++ titrerbar/OY ++@@ -63961,13 +66411,14 @@ titth ++ titthålskirurgi/EAY ++ titthålsoperation/AHDY ++ tittut/Y +++tittöga/CAY +++tittögon/ADY ++ titulera/NMAPY ++ tivoli/FECAY ++ tixotrop/OY ++ tja ++ tjabb/ABY ++ tjabba/MY ++-tjabbel/CAY ++ tjabbig/OY ++ tjack/ABY ++ tjacka/MY ++@@ -63994,8 +66445,9 @@ tjeckiske/Y ++ Tjeckoslovakien/AX ++ tjeckoslovakisk/OY ++ tjej/AHDYX +++tjejig/OY +++tjejlag/ABDY ++ tjejmodell/AHDY ++-tjena ++ tjenare ++ tjerkessisk/OY ++ Tjernobyl/AX ++@@ -64003,6 +66455,9 @@ tjetjen/AHDY ++ Tjetjenien/AX ++ tjetjensk/OQY ++ tji +++tjim +++tjing +++tjo/AB ++ tjoa/NMAD ++ tjock/OPQYX ++ tjocka/EAY ++@@ -64032,7 +66487,7 @@ tjockv ++ tjog/ABDY ++ tjogtal/ABY ++ tjogvis ++-tjolahopp +++tjohej ++ tjonga/NMAY ++ tjorvig/OY ++ tjudra/NMAPY ++@@ -64058,7 +66513,7 @@ tjugohundratal/ABY ++ tjugokronorssedel/EAIY ++ tjugolapp/ADGY ++ tjugominuters/XZ ++-tjugomånaders/XZ +++tjugomånaders/X ++ tjugondag/ADY ++ tjugonde ++ tjugondedag/ADGY ++@@ -64070,7 +66525,7 @@ tjugosidig/OY ++ tjugosju ++ tjugosjunde ++ tjugosjätte ++-tjugotal/ABYv +++tjugotal/ABDYv ++ tjugotalist/AHDYX ++ tjugotalsstil/ADY ++ tjugotimmars/XZ ++@@ -64091,10 +66546,11 @@ tjura/MIY ++ tjurfäktar/XZ ++ tjurfäktare/EAJY ++ tjurfäktning/ADGYv ++-tjurhaj/ADGY +++tjurhaj/ADG ++ tjurig/OY ++ tjurighet/ADYv ++ tjurkalv/ADGY +++tjurrusning/ADY ++ tjurskalle/EAGY ++ tjurskallig/OY ++ tjusa/NMAPDY ++@@ -64155,7 +66611,6 @@ Tj ++ tjäderspel/ABDY ++ tjädertupp/ADGY ++ tjäl/XZ ++-tjäldjup/ABDY ++ tjäle/EAY ++ tjälfarlig/OY ++ tjälfri/OY ++@@ -64182,6 +66637,7 @@ tj ++ tjänstehäst/ADGY ++ tjänsteintegrerad/NQY ++ tjänstekvinna/EAGY +++tjänsteledig/OQ% ++ tjänsteman/AFY ++ tjänstemanna/XZ ++ tjänstemannakår/AHDY ++@@ -64203,10 +66659,12 @@ tj ++ tjärig/OY ++ tjärimpregnerad/NQY ++ tjärn/ADGY +++tjärsand/ADY ++ Tjörn/AX ++ tkr ++ toa/EA ++ toabesök/ABDY +++toadörr/ADGY ++ toalett/AHDYX ++ toalettlock/ABDY ++ toapapper/CABYv ++@@ -64215,6 +66673,7 @@ toapappersrulleh ++ toapappersrullehållare/EAJY ++ toarulle/EAGY ++ toast/ADY +++toastol/ADGY ++ Tobago/AX ++ tobak/ADYv ++ tobaksaffär/AHDY ++@@ -64239,15 +66698,17 @@ tofsprydd/OY ++ tofsskivling/ADGY ++ tofsvipa/EAGY ++ tofu/AEY ++-tog/AQ +++tog/A ++ toga/EAGY ++ togaklädd/OY ++ togolesisk/OY ++ tok/ADG ++ toka/EAGY ++-tokdåre/EAGY +++tokdåre/EAG ++ toker/EA ++ tokeri/ABHY +++tokfeminism/ADY +++tokfeminist/AHDY ++ tokig/OPQY ++ tokighet/AHDYv ++ tokrolig/OQY ++@@ -64255,7 +66716,6 @@ tokskalle/EAGY ++ tokskratta/NMADY ++ tokstolle/EAGY ++ tokstollig/OY ++-toktant/AHDY ++ tokvänster/EAY ++ Tokyo/AX ++ tolerabel/MY ++@@ -64294,7 +66754,7 @@ tolvgradig/OY ++ tolvhundra ++ tolvhundratal/ABY ++ tolvliters/XZ ++-tolvmånaders/XZ +++tolvmånaders/X ++ tolvpunkts/XZ ++ tolvslag/ABDY ++ tolvtiden/Y ++@@ -64311,6 +66771,7 @@ tom/KML ++ Tom/A ++ Tomas ++ tomat/AHDYX +++tomatpuré/AEHY ++ tomatröd/OY ++ tomatsmör/ABY ++ tomatsås/HDY ++@@ -64322,6 +66783,7 @@ tomfat/ABDY ++ tomflaska/EAGY ++ tomglas/BDY ++ tomgång/ADY +++tomgångskörning/ADY ++ tomhet/ADYv ++ tomhylsa/EAGY ++ tomhänt/OY ++@@ -64335,7 +66797,6 @@ tomografisk/OY ++ tomrum/FCAY ++ tomsäck/ADGY ++ tomt/AHQDGYXy ++-tomtarm/ADGY ++ tomtebloss/BDY ++ tomtedans/HDY ++ tomtenisse/EAGY ++@@ -64358,15 +66819,16 @@ tomtspekulation/AHDY ++ tomtvärde/FECAY ++ tomtyta/EAGY ++ tomvagn/ADGY ++-tomvikt/AHDY +++tomvikt/AHD ++ ton/AFTCYX ++-tona/NMAH +++tona/NMAPH ++ tonal/O ++ tonanalys/HDY ++ tonande/Y ++ tonarm/ADGY ++ tonart/AHDY ++ tonbildning/ADGY +++tondikt/AHDY ++ tondöv/OQY ++ tonen/A ++ toner/E ++@@ -64375,16 +66837,19 @@ tonfisk/ADGYX ++ tonfärgad/NQY ++ tongivande/Y ++ tongång/ADGY +++tonhöjd/AHDY ++ Toni/A ++ tonlig/OY +++tonläge/FECAY ++ tonlös/OY ++ tonmodulerad/NQY ++ tonnage/CAYX ++--tonnare/EAJ ++--tons/XZ +++-tonnare/EAJY +++-tons/XZU ++ tonsatt/AOQY ++ tonsattes/Y ++-tonsiller/AJY +++tonsill/AHDY +++tonsteg/ABDY ++ tonsur/AHDY ++ tonsätt/AORY ++ tonsättar/XZ ++@@ -64394,7 +66859,7 @@ tonvalstelefon/AHDY ++ tonvikt/ADY ++ tonvis ++ Tony/A ++-tonår/ABDYv +++tonår/ADYv ++ tonårig/OQY ++ tonåring/ADGYv ++ tonårsflicka/EAGY ++@@ -64476,6 +66941,7 @@ toppnummer/FCAY ++ toppolitik/AHDY ++ toppolitiker/EY ++ topposition/AHDY +++toppost/AHDY ++ topprankad/NQY ++ topprestation/AHDY ++ topprida/KLAJDRY ++@@ -64486,11 +66952,12 @@ toppskick/Y ++ toppskikt/ABDY ++ toppstyra/KLAJOY ++ toppstyrning/ADY +++topptid/AHDY ++ topptjänst/AHDY ++ topptrim/Y ++ topptrimmad/NQY ++-toppvin/ABHY ++-toppår/ABDY +++toppvin/ABH +++toppår/ABD ++ toppända/EAY ++ toppände/EAGY ++ tops/D ++@@ -64533,15 +67000,15 @@ torklina/EAGY ++ torkning/ADGYv ++ torkperiod/AHDY ++ torkrum/FCAY ++-torksal/ADGY ++ torkskåp/ABDY ++ torkställ/ABDY ++ torktumla/NMAPDY ++ torktumlare/EAJYz ++ torktålig/OY +++torkugn/ADGY ++ torn/ABDY ++ torna/MY ++-tornado/EAY +++tornado/EAIY ++ Torne/A ++ tornedaling/ADGY ++ tornedalsfinsk/OY ++@@ -64595,7 +67062,7 @@ torrsaltad/NQY ++ torrsim/CAY ++ torrskodd/OY ++ torrsprutad/NQY ++-torrsteka/KQLAJY +++torrsteka/KQLA ++ torrsågad/NQY ++ torrögd/OQY ++ tors. ++@@ -64620,6 +67087,7 @@ Torsten/A ++ Torstensson/A ++ Torsås/X ++ tortera/NMAPDY +++torterare/EAJY ++ torts ++ tortyr/AHDYX ++ tortyrkammar/XZ ++@@ -64664,20 +67132,24 @@ totemism/ADY ++ totemistisk/OY ++ totempåle/EAGY ++ totipotent/OY ++-toucha/NMAPDRY ++-touche/EY +++touch/AQDRY +++toucha/NMPDY ++ touchknapp/ADGY ++ touchkontroll/AHDY ++ toupé/AEHY ++ toupera/MY +++tour/AHDYX +++tourkort/ABDY ++ tournedos/HDY +++tourseger/EAIY +++tourtävling/ADGY ++ tova/EAGY ++ tovade/O ++ tovande ++ tovar ++ tovas/N ++ Towe/A ++-tovhårig/OY +++tovhårig/O ++ tovig/OPQY ++ toxicitet/ADY ++ toxikolog/ATHDY ++@@ -64708,6 +67180,7 @@ trafikera/NMAPDY ++ trafikerbar/OY ++ trafikering/ADGYv ++ trafikeringsrätt/ADY +++trafikfyr/ADGY ++ trafikhets/DY ++ trafikkö/AHY ++ trafikled/AHDYv ++@@ -64728,7 +67201,7 @@ tragikomisk/OQY ++ tragisk/OQY ++ tragöd/AHDY ++ trailer/EAIY ++-trainee/EAYX +++trainee/EAIYX ++ trakassera/NMAPDY ++ trakasseri/ABHY ++ traké/AEHY ++@@ -64827,6 +67300,7 @@ transmodern/OY ++ transmutation/AHDYv ++ transmutera/NMAPDY ++ transnationell/OY +++transocean/OY ++ transparang/AHDY ++ transparens/DYX ++ transparent/OY ++@@ -64850,6 +67324,7 @@ transsexuell/OQY ++ transsibirisk/OY ++ transsubstantiation/AHDY ++ transträck/ABDY +++Tranströmer/A ++ transumera/NMAPDY ++ transumt/ABDY ++ transuran/AHDY ++@@ -64922,13 +67397,12 @@ travh ++ travkusk/ADGY ++ travträning/ADGv ++ travträningsanläggning/ADGY ++-tre ++-tre- +++tre/b ++ trea/EAGY ++ treaktare/EAJY ++ trearmad/NQY ++ treatomig/OY ++-treaxig/OY +++treaxig/O ++ treaxlad/NQY ++ treaxlig/OY ++ trebarns/XZ ++@@ -64939,11 +67413,11 @@ trebasisk/OY ++ trebent/OQY ++ trebilskrock/ADGY ++ trebladig/OY ++-trebågig/OY +++trebågig/O ++ trecylindrig/OY ++ tredagars/XZ ++ tredelad/NQY ++-tredelig/OY +++tredelig/O ++ tredelning/ADGY ++ tredimensionell/OY ++ tredje/A ++@@ -64980,6 +67454,7 @@ tredskodom/ADGY ++ tredskoskrivning/ADY ++ tredubbel/KMY ++ tredubbla/NMAPDY +++tredubbling/ADGY ++ tredäckad/NQY ++ treenig/OQY ++ treenighet/ADYv ++@@ -65013,12 +67488,15 @@ trehundra ++ trehörnig/OY ++ trehörning/ADGY ++ trehövdad/NQY +++trekammarbrunn/ADGY +++trekamp/AHDY +++trekanals/XZ ++ trekant/AHDY ++ trekantig/OY ++ trekilos/XZ ++ treklang/AHDY ++ treklassig/OY ++-trekloig/OY +++trekloig/O ++ treklöver/EAY ++ trekvart/AY ++ trekvartslång/OY ++@@ -65033,13 +67511,14 @@ tremannaf ++ tremastad/NQY ++ tremastare/EAJY ++ tremeters/XZ +++tremil/ADGY ++ tremilsgräns/HDY ++ tremolo/FECAY ++ tremotorig/OY ++ tremulant/AHDY ++ tremulera/NMAPDY ++ tremåls/XZ ++-tremånaders/XZ +++tremånaders/X ++ tremänning/ADGY ++ trench/ADGY ++ trenchcoat/ADGY ++@@ -65057,6 +67536,7 @@ treparti/XZ ++ trepartig/OY ++ treparts/XZ ++ trepass/BDY +++treplans/XZ ++ trepolig/OY ++ trepoängare/EAJY ++ trepoängs/XZ ++@@ -65067,7 +67547,7 @@ trerading/ADGY ++ trerummar/XZ ++ trerummare/EAJY ++ trerumslägenhet/AHDYv ++-trerätters/XZ +++trerätters/X ++ tresetare/EAJY ++ tresetsmatch/AHDY ++ tresidig/OY ++@@ -65083,6 +67563,7 @@ tresnibb/ADGY ++ tresnåret/Y ++ trespaltig/OY ++ trespann/ABDY +++trespår ++ trestavig/OY ++ tresteg/ABYv ++ trestegig/OY ++@@ -65097,7 +67578,7 @@ tretaggig/OY ++ tretakt/ADY ++ tretaktig/OY ++ tretal/ABDY ++-tretalig/OY +++tretalig/O ++ tretiden/Y ++ tretimmars/XZ ++ tretrummig/OY ++@@ -65116,7 +67597,7 @@ trettionio ++ trettioprocentig/OY ++ trettiosex ++ trettiosju ++-trettiotal/ABYv +++trettiotal/ABDYv ++ trettiotalist/AHDYX ++ trettiotalsstil/ADY ++ trettiotre ++@@ -65175,6 +67656,7 @@ triangelkopplad/NQY ++ triangelreflex/HDY ++ triangulering/ADGY ++ triangulär/OQY +++triathlon/AY ++ tribad/ATHDY ++ tribun/AHDY ++ tribunal/AHDY ++@@ -65187,7 +67669,6 @@ trickfilm/AHDY ++ tricksa/NMADY ++ triennal/AHDY ++ Trier/A ++-triera/MY ++ triftong/ATHDY ++ triförgiftad/NQY ++ trigga/NMAPDY ++@@ -65219,6 +67700,7 @@ trim/FCAY ++ trimaran/AHDY ++ trimeter/EAIY ++ trimma/NMAPBY +++trimmer/EAIY ++ trimning/ADGYv ++ trimtank/ADGY ++ trind/OPQY ++@@ -65227,7 +67709,7 @@ trindskallig/OY ++ trindsnö/EAY ++ trindsäd/ADY ++ trindyxa/EAGY ++-trindögd/OY +++trindögd/O ++ Trinidad/AX ++ trinidadier/EAJY ++ trinidadisk/OY ++@@ -65248,7 +67730,6 @@ tripping/ADGY ++ trippmätare/EAJY ++ TRIPS/r ++ triptyk/AHDY ++-trirolig/OY ++ triss/DY ++ trissa/NEMAGY ++ trissformig/OY ++@@ -65262,7 +67743,7 @@ triumfera/NMADY ++ triumvir/AHDY ++ triumvirat/ABDY ++ trivas ++-trivia/EAY +++trivia/AY ++ trivial/OPY ++ trivialisera/NMAPDY ++ trivialitet/AHDY ++@@ -65272,13 +67753,14 @@ trivsam/KMLY ++ trivsamhet/ADY ++ trivsamt/Y ++ trivsel/EAYX +++trix/BY ++ trixa/NMADY ++ tro/NKEMA ++ troende/Y ++ trofast/OPQY ++ trofasthet/ADYv ++ trofé/AEHYX ++-trofisk/OY +++trofisk/O ++ trogen/KMLY ++ troglodyt/ATHDY ++ trohet/ADYvf ++@@ -65456,6 +67938,7 @@ trumpetare/EAJY ++ trumpetist/AHDY ++ trumpna/MDY ++ trumpolera/MY +++trumset/ABDY ++ trumslag/ABDY ++ trumslagar/XZ ++ trumslagare/EAJY ++@@ -65589,15 +68072,19 @@ tr ++ trångsynt/OPQY ++ trångsynthet/ADY ++ trånsjuk/OQY ++-trä/NKMABX ++-trä- +++trä/NKMABbX ++ träaktig/OY ++-träartad/NQY +++träartad/NQ ++ träaska/EAY ++ träbearbetningsmaskin/AHDY ++ träbearbetningsmaskinindustri/EAHY ++ träben/ABDY +++träbit/ADGY +++träbock/ADGY +++träbord/ABDY +++träbro/EAGY ++ träbåts/XZ +++träbänk/ADGY ++ träck/ADY ++ träd/ANBDYX ++ träda/EAGY ++@@ -65611,6 +68098,7 @@ tr ++ Trädgårdsgatan/A ++ trädgårdsland/ABDY ++ trädgårdsmur/ADGY +++trädgårdsmyra/EAY ++ trädgårdsmästare/EAJY ++ trädgårdsodling/ADGY ++ trädkramar/XZ ++@@ -65620,6 +68108,9 @@ tr ++ trädlös/OY ++ trädning/ADY ++ trädnål/ADGY +++trädrot/AJDY +++trädäck/ABDY +++trädörr/ADGY ++ träfat/ABDY ++ träff/ADGYX ++ träffa/NAPDY ++@@ -65631,20 +68122,25 @@ tr ++ träfiberplatta/EAGY ++ träfibrer/AJY ++ träfil/ADGY +++träflis/DY ++ träflisa/EAGY ++ träfri/OY ++ träfärgad/NQY ++ träförpackning/ADGY ++ trägen/KMLY +++trägolv/ABDY ++ trägubbe/EAGY ++ trähaltig/OY ++ trähus/BDYX +++trähäst/ADGY ++ träig/OPQY ++ träkar/ABDY ++ träkarl/ADYv ++ träkarlsbridge/EAY ++ träkemisk/OY ++ träkol/ABY +++träkors/BDY +++träkula/EAGY ++ träkåk/ADGY ++ träl/ADG ++ träla/NMADY ++@@ -65660,10 +68156,11 @@ tr ++ trälig/OPY ++ trälim/CAY ++ trälisk/OY ++-trälsam/MY ++-trälsamt/Y +++trälist/AHDY +++trälock/ABDY ++ trälåda/EAGY ++ trälår/ADGY +++trämask/ADGY ++ trän ++ träna/NMAPDY ++ tränarduo/EAIY ++@@ -65685,19 +68182,28 @@ tr ++ träningsåk/ABDY ++ träns/DGY ++ tränsa/NAPDY +++träpall/ADGY +++träpanel/AHDY +++träport/ADGY ++ träpåk/ADGY +++träpåle/EAGY ++ träram/ADGY ++-träsits/DGY +++träsits/DG ++ träsk/ABDYX ++ träskallig/OY ++ träskartad/NQY +++träsked/ADGY ++ träskig/OY ++ träskmark/AHDY ++ träsko/EAIY ++ träskodans/HDY +++träskål/ADGY ++ träslag/ABDY +++träslev/ADGY ++ träslöjd/ADY +++träsmak/ADY ++ träsnidare/EAJY +++trästol/ADGY ++ träsvarv/ADGY ++ träta/KELADRGY ++ träteknisk/OY ++@@ -65714,6 +68220,7 @@ tr ++ trävaru/XZ ++ trävaruindustri/EAHY ++ trävit/OY +++trävägg/ADGY ++ trög/OPQ ++ trögbedd/OY ++ trögdjur/ABDY ++@@ -65781,7 +68288,7 @@ tubkikare/EAJY ++ tudelad/NQY ++ tudelning/ADGYv ++ tuff/PQ ++-tuffa/MY +++tuffa/MDY ++ tuffhet/ADY ++ tuffing/ADGY ++ tufft ++@@ -65813,7 +68320,7 @@ tull/ADGX ++ tulla/NMAPDY ++ tullare/EAJY ++ tullavgift/AHDY ++-tullbar/OY +++tullbar/O ++ tullbelagd/OY ++ tulldeklaration/AHDY ++ tullfri/OY ++@@ -65830,7 +68337,7 @@ Tullverket/A ++ tulpan/AHDYX ++ tulpanlök/ADGY ++ tulta/MDY ++--tum/v +++-tum/Y ++ tum/EA ++ tumavtryck/ABDY ++ tumfraktur/AHDY ++@@ -65840,16 +68347,17 @@ tumla/NMAPDY ++ tumlare/EAJYz ++ tumling/ADY ++ tumma/NAPDY ++--tummare/EAJ +++-tummare/EAJY ++ tumme/EAGY ++ tummel/CA ++ tummelplats/HDY ++ tummetott/ADGY ++ tumnagel/EAIY ++ tumregel/EAJY +++-tums/XZU ++ tumsbred/OY ++--tumsduk/DG ++--tumsfälg/DG +++-tumsduk/DGY +++-tumsfälg/DGY ++ tumshög/OY ++ tumskada/EAGY ++ tumskruv/ADGY ++@@ -65950,6 +68458,7 @@ turban/AHDY ++ turbanklädd/OY ++ turbin/AHDYX ++ turbo/EA +++turbodiesel/EAIY ++ turboelektrisk/OY ++ turbojetmotor/AEHY ++ turbokompressor/AEHY ++@@ -65960,7 +68469,6 @@ turbulens/DY ++ turbulent/OPQY ++ Ture/A ++ Turesson/A ++-turig/OY ++ Turing/A ++ turingmaskin/AHDY ++ turism/ADYX ++@@ -65972,6 +68480,7 @@ turista/NMADY ++ turistbåt/ADGY ++ turistgrupp/AHDY ++ turistisk/QY +++turistmål/ABDY ++ turistort/AHDY ++ turistråd/ABDY ++ turisttät/OY ++@@ -65984,6 +68493,7 @@ Turkiet/AX ++ turkinna/EAGY ++ turkiska/EAGY ++ turkiske/Y +++turkiskflaggad/NQY ++ turkmen/TAHDY ++ turkmeniska/EAGY ++ turkmeniske/Y ++@@ -66032,8 +68542,9 @@ tusen ++ tusenårsrike/FECAY ++ tusenårsskifte/FECAY ++ tuss/DY ++-tussa/NAPDIY +++tussa/NMADIY ++ tussilago/EAIY +++tut ++ tuta/EAGY ++ tutade/A ++ tutande ++@@ -66042,21 +68553,30 @@ tutat/A ++ tutning/ADGYv ++ tutsi/EAH ++ tutt/QDRG ++-tutta/NLPD +++tutta/NMLD +++tutti/FECAY +++tutu/AEHY ++ tuva/EAGY ++ tuvad/NQ ++ tuvaluan/AHDY ++ tuvar ++-tuvfri/OY ++ tuvig/OP ++ tuvtåtel/EAY ++ Tux ++ -tv/YWZ ++ t.v. ++ tv/r ++-tvaga ++-tvagade ++-tvagat +++TV1/r +++TV10/r +++TV1000/r +++TV11/r +++TV2/r +++TV3/r +++TV4/r +++TV5/r +++TV6/r +++TV7/r +++TV8/r ++ tvagning/ADGY ++ tvang/AY ++ twar/r ++@@ -66068,6 +68588,7 @@ tweedkjol/ADGY ++ tweedkostym/AHDY ++ tweedrock/ADGY ++ tveeggad/NQY +++Tweet ++ tvefaldig/OY ++ tvegifte/FECAY ++ tvehågsen/KMY ++@@ -66082,7 +68603,7 @@ tveksamt/Y ++ tvekönad/NQY ++ tvenne ++ tvestjärt/ADGY ++-tvetalig/OY +++tvetalig/O ++ tvetungad/NQY ++ tvetydig/OPQY ++ tvetydighet/AHDYv ++@@ -66096,7 +68617,6 @@ tvillingpar/ABDY ++ tvina/MY ++ tving/ADY ++ tvinga/NAPDIY ++-tvinig/OY ++ tvinna/NMAPDY ++ tvinningsfri/OY ++ tvinsjuk/OQY ++@@ -66129,13 +68649,12 @@ tvivlare/EAJYz ++ tv-spels/XZ ++ tvungen/MY ++ tvungit/AY ++-två/NKMLA ++-två- +++två/NKMLAb ++ tvåa/EAGY ++-tvåarmad/NQY +++tvåarmad/NQ ++ tvåatomig/OY ++-tvåaxlad/NQY ++-tvåaxlig/OY +++tvåaxlad/NQ +++tvåaxlig/O ++ tvåbalkig/OY ++ tvåbarns/XZ ++ tvåbarnsfader/EAY ++@@ -66156,12 +68675,12 @@ tv ++ tvådimensionell/OY ++ tvådäckad/NQY ++ tvåeggad/NQY ++-tvåfaldig/OY +++tvåfaldig/OQY ++ tvåfamiljshus/BDY ++-tvåfasig/OY +++tvåfasig/O ++ tvåfilig/OY ++ tvåfrontskrig/ABDY ++-tvåfröig/OY +++tvåfröig/O ++ tvåfälts/XZ ++ tvåfärgad/NQY ++ tvåglasfönster/FCAY ++@@ -66179,6 +68698,7 @@ tv ++ tvåhundraliters/XZ ++ tvåhundraårig/OY ++ tvåhövdad/NQY +++tvåkanals/XZ ++ tvåkilos/XZ ++ tvåkrona/EAGY ++ tvåkärnig/OY ++@@ -66187,10 +68707,10 @@ tv ++ tvål/ADGYX ++ tvåla/NMADY ++ tvålartad/NQY ++-tvåledad/NQY +++tvåledad/NQ ++ tvålfager/KMY ++ tvålig/OY ++-tvålinig/OY +++tvålinig/O ++ tvåliters/XZ ++ tvålopera/EAGY ++ tvålågig/OY ++@@ -66201,7 +68721,7 @@ tv ++ tvåmeters/XZ ++ tvåmotorig/OY ++ tvåmåls/XZ ++-tvåmånaders/XZ +++tvåmånaders/X ++ tvång/ABYv ++ tvångsansluta/KLAJY ++ tvångsansluten/KMY ++@@ -66221,8 +68741,9 @@ tv ++ tvångsvis ++ tvåparti/XZ ++ tvåparts/XZ ++-tvåpipig/OY ++-tvåpolig/OY +++tvåpipig/O +++tvåplans/XZ +++tvåpolig/O ++ tvåpotens/HDY ++ tvåpoängare/EAJY ++ tvåpoängs/XZ ++@@ -66261,6 +68782,7 @@ tv ++ tvåstatslösning/ADGY ++ tvåstavig/OY ++ tvåstavighetsaccent/AHDY +++tvåstegs/XZ ++ tvåstjärnig/OY ++ tvåstruken/MY ++ tvåställig/OY ++@@ -66293,7 +68815,6 @@ tv ++ tvåårsålder/EAY ++ tvåäggig/OY ++ tvåäggstvilling/ADGY ++-tvåögd/OY ++ tvåöring/ADGY ++ tvär/AOPQ ++ tvärarg/OQY ++@@ -66318,6 +68839,7 @@ tv ++ tvärkraftsdiagram/FCAY ++ tvärkulturell/OY ++ tvärmätt/OY +++tvärnej/ABDY ++ tvärnit/ADY ++ tvärnita/NMADY ++ tvärpolitisk/OQY ++@@ -66403,6 +68925,8 @@ tygblomma/EAGY ++ tygel/EAY ++ tygellös/OQY ++ tygla/NAPDIY +++tygpåse/EAGY +++tygsjok/ABDY ++ tygteknisk/OY ++ tyll/ABDYX ++ tyllbroderi/CABHY ++@@ -66425,7 +68949,6 @@ typgodk ++ typifiera/NMAPDY ++ typisera/MY ++ typiske/Y ++-typkod/AHDY ++ typograf/ATHDY ++ typografi/EAY ++ typolitografisk/OY ++@@ -66433,11 +68956,7 @@ typologi/EAY ++ typologisera/MY ++ typologisering/ADYv ++ typologisk/OY ++-typsatt/AOQY ++-typsattes/Y ++ typsnitt/ABDY ++-typsätt/AORY ++-typsätter/Y ++ typsättning/ADY ++ typsättningsprogram/FCAY ++ typsättningssystem/ABDY ++@@ -66477,7 +68996,7 @@ tystnadsl ++ tystnadsplikt/ADY ++ tyvärr ++ tå/EI ++-tåa/ML +++tåa/NMLAD ++ tåg/ABDYX ++ tåga/EAY ++ tågade ++@@ -66487,19 +69006,26 @@ t ++ tågbiljett/AHDY ++ tågbyte/FECAY ++ tågdödad/NQY ++-tågig/OY +++tågkrock/ADGY ++ tågkupé/AEHY +++tåglinje/EAIY ++ tågluffa/MY ++ tågluffare/EAJY ++ tågluffarkort/ABDY +++tågluffning/ADY ++ tågolycka/EAGY ++ tågombyte/FECAY ++ tågresa/EAGY ++ tågresenär/AHDY ++ tågrån/ABDY ++-tågräls/DGY +++tågräls/DG +++tågset/ABDY +++tågstopp/ABDY +++tågsätt/ABDY ++ tågtidtabell/AHDY ++ tågtrafik/ADY +++tågvagn/ADGY +++tågvärd/ADGY ++ tåhätta/EAGY ++ tåhävning/ADGY ++ tåjärn/ABDY ++@@ -66513,10 +69039,7 @@ t ++ tålmodig/OPQY ++ tålmodighet/ADY ++ tåls/Y ++-tålsam/MY ++-tålsamt/Y ++ tålt/A ++-tålös/OY ++ tånagel/EAIY ++ tång/AQDGY ++ tångbad/ABDY ++@@ -66536,7 +69059,7 @@ t ++ tårfylld/OY ++ tårgas/DYX ++ tårgaspistol/AHDY ++-tårhöljd/OY +++tårhöljd/O ++ tårig/OY ++ tårkanal/AHDY ++ tårkörtel/EAIY ++@@ -66549,7 +69072,7 @@ t ++ tårtbit/ADGY ++ tårtspade/EAGY ++ tårögd/OQY ++-tåskada/EAGY +++tåskada/EAG ++ tåspets/DGY ++ tåt/DG ++ Täby/AX ++@@ -66582,6 +69105,7 @@ t ++ tälta/NMADY ++ tältare/EAJYz ++ tältduk/ADGY +++tältläger/FCAY ++ tältpinne/EAGY ++ tältplats/HDY ++ tälttak/ABDY ++@@ -66600,7 +69124,7 @@ t ++ tändkulemotor/AEHY ++ tändladdning/ADGYv ++ tändladdningsrör/ABDY ++-tändlås/BDY +++tändlås/BD ++ tändmedel/FCAY ++ tändning/ADGYv ++ tändningslås/BDY ++@@ -66653,6 +69177,7 @@ t ++ tätfibrig/OY ++ tätgrenig/OY ++ täthet/AHDYv +++tätklunga/EAGY ++ tätkänning/ADY ++ tätlindad/NQY ++ tätmaskig/OY ++@@ -66681,7 +69206,7 @@ t ++ tävlingsdans/HDY ++ tävlingsskjuta/KY ++ tö/B ++-töa/NMAPD +++töa/NMAD ++ töcken/FCAY ++ töckengrå/OY ++ töckenhöljd/OY ++@@ -66744,6 +69269,8 @@ t ++ tövan/AY ++ töväder/CAY ++ u/r +++U21/r +++u.a. ++ Ubuntu/AX ++ ubåt/ADGYvf ++ u-båts/XZ ++@@ -66771,7 +69298,8 @@ uddl ++ uddrim/FCAY ++ uddvass/OY ++ Uefa/r ++-Uefacup/AHDY +++Uefacup/XZ +++Uefacupen/A ++ ufo/FECA ++ U-formig/OY ++ Uganda/AX ++@@ -66785,6 +69313,7 @@ ugglel ++ ugn/ADGYv ++ ugnsbaka/NQMAPDY ++ ugnsbakt/Y +++ugnsfast/OY ++ ugnsfönster/FCAY ++ ugnsgjutning/ADGY ++ ugnskolning/ADYv ++@@ -66822,11 +69351,12 @@ ullh ++ ullhårig/OY ++ ullig/OPY ++ ullighet/ADY ++-ulliv/ABDY +++ullkappa/EAG ++ ullkarda/EAGY ++ ullkardning/ADY ++ ullkvalitet/AHDY ++ ullmatta/EAGY +++ullrock/ADG ++ ullsax/DGY ++ ullsortering/ADGY ++ ullspinneri/ABHY ++@@ -66881,7 +69411,7 @@ umb ++ umbärlig/OQY ++ umbärlighet/ADY ++ Umeå/AX ++-umeåbo/EAIY +++umeåbo/EAI ++ Umeälven/A ++ umgicks ++ umgås ++@@ -66898,7 +69428,7 @@ umg ++ umgängesvänner/AJY ++ umgängsam/MY ++ umgängsamt/Y ++-UMTS/r +++umts/r ++ undan ++ undanbe/NKMAY ++ undanbeder/Y ++@@ -67101,7 +69631,7 @@ underl ++ underlätta/NMAPBY ++ undermedveten/MY ++ undermedvetnas/Y ++-underminera/NMAPY +++underminera/NMAPDY ++ undermålig/OPQY ++ undermålighet/ADYv ++ undermänsklig/OY ++@@ -67290,6 +69820,7 @@ ungrar/XZ ++ ungrare/EAJY ++ ungskog/ADGYv ++ ungt +++ungtjur/ADGY ++ ungtupp/ADGY ++ UNHCR ++ Unicef ++@@ -67335,14 +69866,14 @@ universitetsort/AHDY ++ universitetsråd/ABDY ++ universum/ABDY ++ Unix/X ++-unken/KMLY +++unken/MLY ++ unkenhet/ADYv ++ unkna/MDY ++ unna/NMAP ++ Uno/A ++ uns/BD ++-upp/Q ++-upp- +++unt +++upp/Qb ++ uppackad/NQY ++ uppackning/ADYv ++ uppallad/NQY ++@@ -67445,7 +69976,8 @@ uppeh ++ uppehållstillstånd/ABDY ++ uppehållsväder/CAY ++ uppehälle/CAY ++-uppelda/NMAPDY +++uppelda/NMAD +++uppeldad/NQY ++ uppeldning/ADY ++ uppemot ++ uppenbar/OPQY ++@@ -67574,7 +70106,7 @@ upphittare/EAJY ++ upphopp/ABDY ++ upphostning/ADGY ++ upphottad/NQY ++-upphov/ABDYv +++upphov/ABYv ++ upphovsman/AFY ++ upphovsmanna/XZ ++ upphovsmannarätt/ADY ++@@ -67598,7 +70130,6 @@ upph ++ upphöjelse/EAIYX ++ upphöjning/ADGYv ++ upphöra/KJBY ++-uppi ++ uppiffad/NQY ++ uppiffning/ADY ++ uppifrån ++@@ -67697,7 +70228,8 @@ upplovning/ADY ++ uppluckra/NMAPDY ++ uppluckring/ADGY ++ upplupen/MY ++-upplyfta/KLAJDY +++upplyft/OY +++upplyfta/KLAD ++ upplyftning/ADY ++ upplysa/KQLAJDRY ++ upplysare/EAJY ++@@ -67827,8 +70359,9 @@ upprivande/Y ++ uppriven/KMY ++ upprivenhet/ADY ++ upprivning/ADY ++-upprop/ABDY ++-uppropa/MPYv +++upprop/ABDYv +++uppropa/M +++uppropad/NQY ++ uppror/ATBDYv ++ upproriske/Y ++ upproriskhet/ADY ++@@ -67895,7 +70428,8 @@ uppsikt/ADY ++ uppsittning/ADGY ++ uppsjungning/ADGY ++ uppsjö/Y ++-uppskaka/MPDY +++uppskakad/NQY +++uppskakande/Y ++ uppskakning/ADGYv ++ uppskalad/NQY ++ uppskalning/ADGY ++@@ -68020,7 +70554,7 @@ uppstyckad/NQY ++ uppstyckning/ADGY ++ uppstyltad/NQY ++ uppstyltning/ADY ++-uppstyra/KLAJODY +++uppstyrd/OY ++ uppstyrning/ADGY ++ uppstå/MLY ++ uppståndelse/EAYX ++@@ -68202,18 +70736,17 @@ uraktl ++ uraktlåten/MY ++ uraktlåtenhet/ADYv ++ uralisk/OY ++-uran/AB +++uran/ATB ++ urananrikning/ADGY ++ uranbrytning/ADYv ++ uranbränsle/FECAY ++ urandebatt/D ++-uranfri/OY +++uranfri/O ++ uranfrågan/A ++ uranfyndighet/AHDY ++ urangruva/EAGY ++ uranhalt/AHDY ++ uranhaltig/OY ++-uranisk/OY ++ uranisotop/AHDY ++ urankärna/EAGY ++ uranmalm/AHDY ++@@ -68226,6 +70759,7 @@ urantillg ++ Uranus/X ++ urarta/MPDY ++ urartning/ADYv +++urarva/Y ++ urban/OQY ++ Urban/A ++ urbanisera/NMAPY ++@@ -68259,14 +70793,13 @@ uremi/EAY ++ urenkel/MY ++ uretan/AHD ++ uretanklubba/EAGY ++-urfabrik/AHDY +++urfabrik/AHD ++ urfader/EAY ++ urfattig/OY ++ urfjäder/EAIY ++ urflott/OY ++ urfolk/ABDYv ++ urform/AHDY ++-urfrisk/OY ++ urfräsning/ADY ++ urfräst/OY ++ urfågel/EAIY ++@@ -68285,9 +70818,12 @@ urgermanskt/Y ++ urgestaltning/ADGY ++ urgrund/AHDY ++ urgrävd/OY ++-urgröpa/KQLAJY +++urgröpa/LAJ +++urgröper ++ urgröpning/ADGY ++-urgullig/OY +++urgröpt/OY +++urgröpte +++urgullig/O ++ urhem/FCAY ++ urhistoria/AY ++ urhistorien/AY ++@@ -68304,6 +70840,7 @@ urinf ++ urinnevånare/EAJY ++ urinoar/AHDY ++ urinprov/ABHDY +++urinrör/ABDY ++ urinstinkt/AHDY ++ urinvånare/EAJY ++ urinväg/ADGYv ++@@ -68379,21 +70916,21 @@ urreligion/AHDY ++ urringad/NQY ++ urringning/ADGYv ++ urrivning/ADGY ++-urscen/AHDY +++urscen/AHD ++ urschaktad/NQY ++ urschaktning/ADGY ++ ursinne/CAY ++ ursinnig/OPQY ++ urskicklig/OY ++-urskilde/Y ++-urskilja/KLAJOBRY +++urskilde/AOY +++urskilja/KLAJBRY ++ urskiljbar/OY +++urskiljda/Y ++ urskiljning/ADYv ++ urskillning/ADYv ++ urskillningsförmåga/EAY ++ urskillningslös/OY ++-urskils/NY ++-urskilt/Y +++urskilts/Y ++ urskog/ADGYv ++ urskogsområde/FECAY ++ urskrift/AHDY ++@@ -68482,6 +71019,7 @@ US ++ USA/r ++ usb/r ++ usch +++uschiamej ++ uschlig/OPY ++ usel/KML ++ uselhet/AHDYv ++@@ -68490,11 +71028,12 @@ usling/ADGY ++ usurpation/ADY ++ usurpator/AEHY ++ usurpera/NMAPDY ++-ut/Q ++-ut- +++ut/Qb ++ utackordera/NMAPDY ++ utackordering/ADGY ++-utagera/MPDY +++utagera/M +++utagerad/NQY +++utagerande/Y ++ utan ++ utanbrytning/ADY ++ utandas/N ++@@ -68613,7 +71152,7 @@ utb ++ utbörding/ADGY ++ utcheckning/ADY ++ utdaning/ADY ++-utdata/EAY +++utdata/AY ++ utdaterad/NQY ++ utdebatterad/NQY ++ utdebitera/NMAPDY ++@@ -68647,23 +71186,24 @@ utd ++ utdöma/KLOBY ++ utearbetare/EAJY ++ utearbete/FECAY ++-utebana/EAGY +++utebana/EAG ++ utebli/MY ++ utebliva/KJBY ++ utebliven/MY +++utebruk/Y ++ utedass/BDY ++-utefest/AHDY +++utefest/AHD ++ uteffekt/AHDY ++ utefter ++ utegrill/ADGY ++ utegång/ADY ++ utegångsförbud/ABDY ++ utegård/ADGY ++-utehak/ABY +++utehak/AB ++ utekatt/AHDY ++ utekläder/AJY ++ utekväll/ADGY ++-utelampa/EAGY +++utelampa/EAG ++ uteliggar/XZ ++ uteliggare/EAJY ++ uteliv/ABY ++@@ -68673,9 +71213,9 @@ utel ++ utelämningstecken/FCAY ++ utemiljö/EAHY ++ utemöbel/EAJY ++-utenhet/AHDYv +++utenhet/AHD ++ utensilier/AJY ++-uteplagg/ABDY +++uteplagg/ABD ++ uteplats/HDY ++ uterestaurang/AHDY ++ uterum/FCAY ++@@ -68692,7 +71232,7 @@ utesovare/EAJY ++ utespelare/EAJY ++ utestå/MLY ++ uteställe/FECAY ++-utestänga/KLAJOY +++utestänga/KLAJODY ++ utestängdhet/ADY ++ utestängning/ADY ++ utesyssla/EAGY ++@@ -68792,7 +71332,7 @@ utf ++ utförsäljning/ADGYv ++ utförsäljs/Y ++ utg. ++-utgallra/NMAPY +++utgallrad/NQY ++ utgallring/ADGYv ++ utgamla/Y ++ utgamle/Y ++@@ -68859,6 +71399,7 @@ uth ++ uthämta/NMAPDY ++ uthämtning/ADGYv ++ uthängd/OQY +++uthängning/ADGY ++ uthärda/NMAPY ++ uthärdbar/OY ++ uthärdlig/OPQY ++@@ -68914,7 +71455,7 @@ utkontraktering/ADGY ++ utkora/NMAPDY ++ utkorelse/EAYX ++ utkorg/ADGY ++-utkragad/NQY +++utkragad/NQ ++ utkragning/ADGY ++ utkramad/NQY ++ utkratsad/NQY ++@@ -68934,7 +71475,6 @@ utk ++ utkörd/OQY ++ utkörning/ADGY ++ utkörsport/ADGY ++-utla/Y ++ utlade/AY ++ utlagd/OY ++ utlagt/AY ++@@ -68949,13 +71489,11 @@ utlastning/ADY ++ utled/OY ++ utledsen/MY ++ utless/OY ++-utleta/NMAY ++ utlevad/NQY ++ utlevande/Y ++ utlevelse/EAY ++ utleverera/NMAPY ++ utleverering/ADGY ++-utlista/MY ++ utljud/ABDY ++ utloggad/NQY ++ utloggning/ADGYv ++@@ -68965,7 +71503,7 @@ utlopp/ABDY ++ utlotta/NMAPY ++ utlottning/ADGYv ++ utlova/NMAPY ++-utluftad/NQY +++utluftad/NQ ++ utluftning/ADY ++ utlysa/KQLAJBRY ++ utlysning/ADGY ++@@ -69128,7 +71666,7 @@ utpressare/EAJYz ++ utpressning/ADGYv ++ utpressningshot/ABDY ++ utpricka/NMAPY ++-utpris/BY +++utpris/B ++ utprova/NMAPY ++ utprovning/ADGYv ++ utprånglare/EAJY ++@@ -69172,14 +71710,16 @@ utrikessamtal/ABDY ++ utrikisk/OY ++ utrinning/ADY ++ utritad/NQY +++utriven/MY ++ utrop/ABDY ++ utropa/NMAPBYv ++ utropare/EAJYz ++ utropning/ADGY +++utropsord/ABDY ++ utropspris/BHY ++ utropstecken/FCAY ++ utrota/NMAPDY ++-utrotbar/OY +++utrotbar/O ++ utrotning/ADYv ++ utrotningshotad/NQY ++ utrucklad/NQY ++@@ -69199,7 +71739,8 @@ utrymmessn ++ utrymning/ADYvf ++ uträckning/ADY ++ uträckt/Y ++-uträkna/NMAPY +++uträkna/NMA +++uträknad/NQY ++ uträkning/ADGYvf ++ uträta/NMAPDY ++ uträtning/ADGY ++@@ -69225,7 +71766,7 @@ utseendem ++ utsegling/ADY ++ utsida/EAGY ++ utsides ++-utsignal/AHDY +++utsignal/AHD ++ utsikt/AHDYv ++ utsiktslös/OY ++ utsiktslöshet/ADY ++@@ -69361,7 +71902,8 @@ utstr ++ utstrålningsförlust/AHDY ++ utsträcka/KQLAJDRY ++ utsträckning/ADGYv ++-utströ/NKMAY +++utströ/NMA +++utströdd/OY ++ utströende/CAY ++ utströmma/MDY ++ utströmning/ADY ++@@ -69387,7 +71929,7 @@ utst ++ utsuddad/NQY ++ utsuddning/ADY ++ utsug/ABDRY ++-utsuga/Y +++utsuga/DY ++ utsugare/EAJY ++ utsugen/MY ++ utsuger/Y ++@@ -69456,7 +71998,7 @@ uttas ++ uttaxera/NMAPDY ++ uttaxering/ADGY ++ utter/EAIYX ++-uttestad/NQY +++uttestad/NQ ++ uttestning/ADYv ++ uttittad/NQY ++ uttjatad/NQY ++@@ -69466,7 +72008,8 @@ uttog/A ++ uttolka/NMAPDY ++ uttolkare/EAJYz ++ uttolkning/ADGYv ++-uttorka/NMAPY +++uttorka/NMAD +++uttorkad/NQY ++ uttorkning/ADYv ++ uttrampad/NQY ++ uttransport/AHDY ++@@ -69482,12 +72025,14 @@ uttrycksfullhet/ADY ++ uttryckslös/OY ++ uttryckslöshet/ADY ++ uttryckssätt/ABDY ++-uttråka/MPY +++uttråka/M +++uttråkad/NQY ++ uttråkning/ADGY ++ utträda/KJDRY ++ utträdd/OY ++ utträde/FECYv ++-uttränga/KLAJODY +++uttränga/KLAJD +++utträngd/OY ++ utträngning/ADGYv ++ uttröskad/NQY ++ uttröskning/ADYv ++@@ -69507,7 +72052,7 @@ utt ++ uttänjbar/OY ++ uttänjd/OY ++ uttänjning/ADY ++-uttänka/KQLAJY +++uttänkt/OY ++ uttöjd/OY ++ uttöjning/ADGY ++ uttömma/KLAJODRY ++@@ -69586,7 +72131,7 @@ ut ++ utåtvänd/OQY ++ utåtvändhet/ADY ++ utöka/NMAPBY ++-utökare/EAJYz +++utökare/EAJ ++ utökning/ADGYv ++ utökningsbar/OY ++ utösa/KQLAJRY ++@@ -69607,7 +72152,10 @@ uzbekistansk/OQY ++ uzbekistanska/EAGY ++ v/QDr ++ w/r ++-va +++V6/r +++V75/r +++V8/r +++va/r ++ VA/r ++ VAB/r ++ vabba/MY ++@@ -69634,7 +72182,6 @@ vadhelst ++ vadhållar/XZ ++ vadhållare/EAJY ++ vadhållning/ADGYv ++-wadi/EAH ++ vadmal/ABDYv ++ vadmuskel/EAJY ++ vadning/ADGY ++@@ -69700,6 +72247,7 @@ vaksamt/Y ++ vakt/AHDYX ++ vakta/NMAPBY ++ vaktare/EAJYzg +++vaktbolag/ABDY ++ vaktchef/AHDY ++ vaktel/EAIX ++ vaktellår/ABDY ++@@ -69709,6 +72257,7 @@ vakth ++ vaktkur/ADGY ++ vaktmästare/EAJY ++ vaktmästeri/ABHY +++vaktparad/AHDY ++ vaktpost/AHDY ++ vakttorn/ABDY ++ vakuol/AHDY ++@@ -69725,6 +72274,7 @@ vakuumsug/ADGY ++ vakuumtorka/NMAPDY ++ val/BDYX ++ valack/AHDY +++valanalys/HDY ++ valbar/OQY ++ valbarhet/ADYv ++ valberedning/ADGY ++@@ -69744,6 +72294,7 @@ valborgsn ++ valbås/BDY ++ vald/OQY ++ valdag/ADGYv +++valdebatt/AHDY ++ valdeltagande/CAY ++ Valdemar/A ++ Valdemarsvik/Av ++@@ -69759,13 +72310,15 @@ vale/G ++ valenselektron/AHDY ++ walesar/XZ ++ walesare/EAJY ++-walesarn/AY ++ walesisk/OY ++ walesiska/EAGY ++ valfri/OY ++ valfrihet/ADYv +++valfråga/EAGY +++valfusk/ABY ++ valfångst/ADYX ++ valförlust/AHDY +++valhaj/ADG ++ valhänt/OY ++ valhänthet/ADY ++ valida/JY ++@@ -69773,12 +72326,14 @@ validera/NMAPDY ++ validering/ADYv ++ validitet/ADY ++ valium/ABDY +++valjakt/AHDY ++ valk/ADGY ++ valka/NAPY +++valkamp/AHDY ++ valkare/EAY ++ valkbeständig/OY ++ valkeri/ABHY ++-valkfri/OY +++valkfri/O ++ walkie-talkie/EAIYX ++ valkig/OPY ++ valkning/ADY ++@@ -69791,6 +72346,7 @@ valkrets/DGYX ++ valkretsvis ++ valkyria/EAGY ++ valkyrieartad/NQY +++valkött/ABY ++ vall/ADGY ++ Wall ++ valla/NEAPGY ++@@ -69808,6 +72364,7 @@ vallf ++ vallgrav/ADGY ++ vallgång/ADY ++ vallhund/ADGY +++vallista/EAGY ++ Wallmark/A ++ vallmo/EAIYX ++ vallmofrö/EABY ++@@ -69827,10 +72384,12 @@ Wallstr ++ vallvisa/EAGY ++ vallväxt/AHDY ++ vallåt/ADGY +++vallöfte/FECAY ++ vallört/AHDY ++ valmad/NQY ++ valmanskår/AHDY ++ valmöjlighet/AHDYv +++valmöte/FECAY ++ valnatt/ADv ++ valnöt/AJDYv ++ valnötsolja/EAGY ++@@ -69838,6 +72397,7 @@ valn ++ valnötsstor/OY ++ valnötsträ/ABY ++ valobservationsgrupp/AHDY +++valomgång/ADGY ++ valp/ADY ++ valpa/MIY ++ valpaktig/OY ++@@ -69848,25 +72408,32 @@ valpr ++ valpsjuka/EAY ++ valresultat/ABDY ++ valross/DGYX +++valrörelse/EAIY ++ vals/NHDGYX ++ valsa/NAPY ++ valsbar/OY ++ valscylinderformig/OY ++ valsedel/EAIYv +++valseger/EAIY ++ valsformig/OY ++ valsituation/AHDYv ++ valskraft/AHDY ++ valsning/ADGYv ++ valspråk/ABDY +++valspurt/AHDY ++ valsteknisk/OY ++ valsverk/ABDYv +++valsystem/ABDY ++ valtaktisk/OY ++ valtal/ABDY +++valtala/NMADY ++ valteknisk/OY ++ Valter/A ++ Walter/A ++ valthorn/ABDYv ++ valthornist/AHDY +++valtid/AHDY +++valurna/EAGY ++ valuta/EAGYX ++ valutafond/ADY ++ valutakod/AHDY ++@@ -69919,6 +72486,7 @@ vanebildande/Y ++ vanemässig/OY ++ vanesak/Y ++ vanföreställning/ADGYv +++vang/AHDY ++ vanheder/EAY ++ vanhederlig/OY ++ vanhedra/NMAPDY ++@@ -70034,6 +72602,7 @@ vardagsaktig/OY ++ vardagsgrå/OY ++ vardagsklädd/OY ++ vardagslag/Y +++vardagsmat/ADY ++ vardagsmys/BY ++ vardagsnära/Y ++ vardagsprat/ABY ++@@ -70055,9 +72624,11 @@ vargavinter/EAIY ++ vargaväder/CAY ++ vargbiten/KMY ++ varginna/EAGY +++vargjakt/AHDY ++ vargstam/FAIY ++-vargtik/ADGY +++vargtik/ADG ++ vargtät/OPY +++vargvalp/ADGY ++ varhelst ++ Warhol/AX ++ vari ++@@ -70095,8 +72666,10 @@ varmed ++ varmfodrad/NQY ++ varmgalvanisera/MY ++ varmhjärtad/NQY +++varmkorv/ADGY ++ varmlaminera/MY ++ varmluft/ADYv +++varmrätt/AHDY ++ varmrökt/OY ++ varmvalsning/ADGY ++ varmvattenkrus/BD ++@@ -70146,12 +72719,13 @@ varth ++ vartill ++ vartåt ++ varu/XZ +++varubil/ADGY ++ varubud/ABDY ++ varudeklaration/AHDY ++ varudeklarera/MPY ++ varuhus/BDYX ++ varuhuskedja/EAGY ++-varulager/FCAJY +++varulager/FCAY ++ varuleverantör/AHDY ++ varulv/ADGY ++ varumottagare/EAJY ++@@ -70173,6 +72747,7 @@ Varvsgatan/A ++ varvsindustri/EAHY ++ varvskris/HDY ++ varvtal/ABDYv +++varvtid/AHDY ++ varvvis ++ varöver ++ vas/HD ++@@ -70211,6 +72786,7 @@ Vatikanen/A ++ vatikansk/OY ++ Watson/A ++ watt/ADY +++-wattare/EAJY ++ vattblå/OY ++ vatten/FCAYXU ++ vattenavstötande/Y ++@@ -70236,6 +72812,7 @@ vattenf ++ vattengenomsläpplig/OY ++ vattenhaltig/OY ++ vattenho/EAGY +++vattenhål/ABDY ++ vattenkanna/EAGY ++ vattenkoppor/AJY ++ vattenkraft/ADY ++@@ -70282,6 +72859,7 @@ vattnig/OY ++ vattning/ADY ++ vattrad/NQY ++ vattrig/OY +++-watts/XZU ++ vattuman/AFY ++ vattumän/AFY ++ vattusiktig/OY ++@@ -70322,8 +72900,9 @@ vaxtavla/EAGY ++ vaxtändsticka/EAGY ++ vaxvit/OY ++ wc/r +++w-cdma/r ++ -vd/YWZ ++-vd/ADGr +++vd/r ++ VDN/r ++ webb/ADYX ++ webbaserad/NQY ++@@ -70332,6 +72911,7 @@ webbl ++ webbläsare/EAJY ++ webbmejl/XZ ++ webbplats/HDY +++webbsajt/AHDY ++ webbserver/EAIY ++ webbsida/EAGY ++ webbsända/KLAJDY ++@@ -70392,7 +72972,6 @@ vedertagen/MY ++ vedervilja/EAY ++ vedervärdig/OPQY ++ vedervärdighet/AHDYv ++-vedfri/OY ++ vedhaltig/OY ++ vedhuggning/ADY ++ vedhög/ADGY ++@@ -70438,7 +73017,6 @@ velar ++ velat/Y ++ velig/OPQY ++ velighet/ADY ++-wellad/NQY ++ Vellinge/AX ++ wellpapp/ADYX ++ wellpappkartong/AHDY ++@@ -70477,10 +73055,10 @@ venezuelansk/OQY ++ venezuelanska/EAGY ++ Wennerström/A ++ Wennlund/A ++-venol/AHDY ++ ventil/AHDYX ++ ventilarm/ADGY ++ ventilation/AHDYv +++ventilationstub/AHDY ++ ventilator/AEHY ++ ventilera/NMAPY ++ ventilerbar/OY ++@@ -70496,13 +73074,11 @@ ven ++ vepa/EAG ++ veranda/EAGYX ++ verb/ABDYX ++-verba/NMAPDY ++ verbal/OPQY ++ verbalisera/NMAPDY ++ verbalisering/ADGY ++ verbböjning/ADGY ++ verbform/AHDY ++-verbfras/HDY ++ Verde/A ++ verifiera/NMAPY ++ verifierbar/OY ++@@ -70566,6 +73142,7 @@ versifikat ++ version/AHDYv ++ versionsnummer/FCAY ++ versmått/ABDY +++versrad/AHDY ++ versteknisk/OY ++ vertebrat/AHDY ++ Wertheim/A ++@@ -70573,7 +73150,7 @@ vertikal/OYX ++ vertikalaxel/EAIY ++ vertikalplan/ABY ++ verts ++-vesikel/EAJY +++vesikel/EAJ ++ vesir/AHDY ++ vespa/EAGY ++ vesper/EAIY ++@@ -70616,8 +73193,9 @@ veteran/AHDYX ++ veteranbil/ADGY ++ veterinär/AOHDYXU ++ veterinärråd/ABDY ++-veterlig/OY ++ veterligen +++veterligt +++veteöl/ABDY ++ vetgirig/OPQY ++ vetgirighet/ADY ++ Vetlanda/AX ++@@ -70639,12 +73217,16 @@ vettskr ++ vettvillig/OQY ++ vettvilling/ADGY ++ vev/ADG ++-veva/NAPD +++veva/EAY +++vevade/AO +++vevande ++ vevarm/ADGY +++vevats ++ vevaxel/EAIY +++vevgrammofon/AHDY ++ vevhandtag/ABDY ++ vevhus/BDY ++-vevlager/FCAJY +++vevlager/FCAY ++ vevling/ADGY ++ vevning/ADY ++ vevstake/EAGY ++@@ -70656,17 +73238,17 @@ v.g. ++ VG/r ++ VGA/r ++ v.g.v. +++VH-1 ++ vhd-fil/AD ++ VHF-band/B ++ whiplashskada/EAGY ++ whippet/ADGY ++-whiskey/EAY ++ whisky/EAYXU ++ whist/ADYX ++ Whittaker/A ++ WHO/r ++ vhs/r ++-via/JO +++vi/EO ++ viadukt/AHDYX ++ Viasat/A ++ vibb/ADGY ++@@ -70680,16 +73262,17 @@ vibrera/MDY ++ vibrering/ADGY ++ vice/YX ++ viceamiral/AHDY +++vicechef/AHDY ++ vicevärd/ADGY ++ Vichyregimen/A ++ vichyvatten/CAY ++ vicka/NMADY ++-vickbar/OY +++vickbar/O ++ vickig/OY ++ vickning/ADGY ++ Wickström/A ++ Victoria/A ++-vid- +++vid/Ob ++ Vidar/A ++ vidare/YX ++ vidarebefordrande/CAY ++@@ -70699,7 +73282,7 @@ vidast/Q ++ vidbränd/OY ++ vidbrättad/NQY ++ vidbrättig/OY ++-vidbyggd/OY +++vidbyggd/O ++ vidd/AHDY ++ vide/FECAY ++ videbuske/EAGY ++@@ -70707,6 +73290,7 @@ Widegren/A ++ videknopp/ADGY ++ video/EAIYX ++ videokedja/EAGY +++videoklipp/ABDY ++ vidga/NMAPBY ++ vidginge/Y ++ vidgning/ADGY ++@@ -70735,11 +73319,7 @@ vidk ++ vidkänts ++ vidlyftig/OPQY ++ vidlyftighet/AHDY ++-vidlåda/KAJY ++-vidlådde/AY ++-vidlåde/Y ++-vidlåden/Y ++-vidlådits/Y +++vidlåda/KLAJDY ++ vidmakthålla/KLAJDRY ++ vidmakthållare/EAJY ++ vidmakthållen/MY ++@@ -70759,7 +73339,7 @@ vidstickad/NQY ++ vidsträckt/OPY ++ vidsträckthet/ADY ++ vidstående/Y ++-vidsydd/OY +++vidsydd/O ++ vidsyn/ADY ++ vidsynt/OPQY ++ vidsynthet/ADY ++@@ -70795,8 +73375,7 @@ Vietnam/AX ++ vietnames/THDY ++ vietnamesiska/EAGY ++ wifi/r ++-vift/ADY ++-vifta/NMABY +++vifta/NMAJBY ++ viftning/ADGYv ++ vig/P ++ viga/KLAO ++@@ -70838,7 +73417,7 @@ vikbarhet/ADY ++ vikdörr/ADGY ++ viken/M ++ viker ++-wiki/EAY +++wiki/EA ++ Wikileaks/r ++ viking/ADGY ++ vikinga/XZ ++@@ -70878,9 +73457,11 @@ vild/OPDGYX ++ vildand/AJDY ++ vildapel/EAIY ++ vildavästern/XZ +++wildcard/ABDY ++ vilddjur/ABDYv ++ vilde/AY ++ vildfångad/NQY +++vildget/AJD ++ vildgås/DY ++ vildgäss/DY ++ vildhet/ADY ++@@ -70891,6 +73472,8 @@ vildmarksliv/ABY ++ vildmink/ADGY ++ vildpersilja/EAGY ++ vildren/ADGY +++vildros/DY +++vildrosor/AJY ++ vildsint/OPQY ++ vildsinthet/ADY ++ vildsintt/Y ++@@ -70947,7 +73530,7 @@ villsamt/Y ++ Willy/A ++ vilo/XZ ++ vilodag/ADGY ++-vilofas/HDY +++vilofas/HD ++ vilohem/FCAY ++ viloläge/FECAY ++ vilopaus/HDY ++@@ -70956,6 +73539,7 @@ viloplats/HDY ++ vilopunkt/AHDY ++ vilorum/FCAY ++ vilostad/ADY +++vilotid/AHDY ++ viloår/ABDY ++ Wilroth/A ++ vilrum/FCAY ++@@ -70993,7 +73577,7 @@ vimplad/NQY ++ vimsa/MY ++ vimsig/OPQY ++ vimsighet/AHDY ++-vin/AOBHX +++vin/OBHX ++ vinande/CAY ++ vinbar/AHDY ++ vinberedning/ADGY ++@@ -71072,6 +73656,7 @@ vinfabrik/AHDY ++ vinfat/ABDY ++ vinflaska/EAGY ++ vinfläck/ADGY +++vinfält/ABDY ++ vinfärgad/NQY ++ ving/XZ ++ vingad/NQY ++@@ -71091,16 +73676,16 @@ vingprydd/OY ++ vingsus/BY ++ vingud/ADGY ++ vingummi/FECAY ++-vingyta/EAGY ++ Vingåker/Av ++ vingård/ADGv +++vinhus/BDY ++ vinindustri/EAHY ++ vinit ++ vinjett/AHDYX ++ vinjettbild/AHDY ++ vinjäst/ADY ++ vink/ADY ++-vinka/NAPDIY +++vinka/NMADIY ++ vinkel/EAYX ++ vinkelarm/ADGY ++ vinkelben/ABDY ++@@ -71121,6 +73706,7 @@ vinkork/ADGY ++ vinkylare/EAJY ++ vinkällare/EAJY ++ vinkännare/EAJY +++vinland/AJBY ++ vinlista/EAGY ++ vinmakare/EAJY ++ vinna/AJDY ++@@ -71156,6 +73742,7 @@ vinsort/AHDY ++ vinst/AHDYXU ++ vinstras/BDY ++ vinstrik/OPY +++vinsyra/EAGY ++ vinter/EAIYX ++ vinterbadare/EAJY ++ vinterbona/NMAPY ++@@ -71170,7 +73757,7 @@ vinterlig/OY ++ vinterliggare/EAJY ++ vinterlik/OY ++ vintermonsun/AHDY ++-vintersolstånd/ABY +++vintersolstånd/ABDY ++ vintersport/AHDY ++ vintersportort/AHDY ++ vintertid/ADY ++@@ -71195,6 +73782,7 @@ viol/ADYX ++ viola/EAHGY ++ Viola/A ++ violblå/OY +++violdoft/ADY ++ violett/OY ++ violettblind/OY ++ violin/AHDYX ++@@ -71203,10 +73791,10 @@ violinklav/AHDY ++ violoncell/AHDYX ++ violoncellist/AHDY ++ vip-/XZ ++-vippa/EMADGY +++vipp/ADY +++vippa/EMADIGY ++ vippanordning/ADGY ++ vipparm/ADGY ++-vippen/Y ++ vippformig/OY ++ vippig/OY ++ vippning/ADGY ++@@ -71217,13 +73805,13 @@ vippstr ++ vips ++ vira/NMAP ++ virak/ADY ++-viral/OY ++-wire/EAGYX +++viral/O +++wire/EAGX ++ wirelås/BDY ++ viril/OPQY ++ virilitet/ADY ++ virka/NMAPY ++-virke/FECAYv +++virke/CAYv ++ virkesmätning/ADGY ++ virkning/ADGY ++ virknål/ADGY ++@@ -71288,6 +73876,7 @@ visitator/AEHY ++ visitera/NMAPY ++ visitering/ADGY ++ visitkort/ABDY +++visitkortsmall/ADGY ++ viska/NEMAPBGY ++ viskare/EAJY ++ viskning/ADGYv ++@@ -71336,7 +73925,7 @@ visuell/OY ++ visum/EABDYX ++ visumavgift/AHDY ++ visumrestriktion/AHDY ++-vit/OPX +++vit/PX ++ vita/EAG ++ vitaktig/OY ++ vital/OPQY ++@@ -71353,23 +73942,23 @@ vitaminisera/MY ++ vitaminpiller/FCAJY ++ vitaminrik/OPY ++ vitamintablett/AHDY ++-vitaxig/OY ++ vitblommig/OY ++ vitblond/OY ++ vitblå/OY ++ vitbok/ADGY ++ vitbroderi/CABHY ++ vitbrokig/OY ++-vitbukig/OY +++vitböcker/AJY ++ vite/FECAYv ++ vitemaljerad/NQY ++ vitesföreläggande/FECAY +++vitfisk/ADGY ++ vitfläckig/OY ++ vitglödgad/NQY ++ vitgrå/OY ++ vitgul/OY ++ vitgumpad/NQY ++-vithaj/ADGY +++vithaj/ADG ++ vithet/ADY ++ vithyllt/OY ++ vithårig/OY ++@@ -71394,6 +73983,7 @@ vitm ++ vitna/MPDY ++ vitnackad/NQY ++ vitnäbbad/NQY +++vitpeppar/AEY ++ vitpolerad/NQY ++ vitpudrad/NQY ++ vitrandig/OY ++@@ -71448,13 +74038,15 @@ vittring/ADGYvf ++ vittutgrenad/NQY ++ vittvätt/ADGY ++ vitval/ADGY +++vitvaror/AJY ++ vitvaru/XZ ++ vitvaruaffär/AHDY ++ vitvin/ABHY ++ vitvingad/NQY ++ vitvinssås/HDY ++ vitvinsvinäger/EAY ++-vitögd/OY +++vitögat/Y +++vitögd/O ++ Vivaldi/AX ++ Viveca/A ++ vivisektion/AHDY ++@@ -71501,16 +74093,19 @@ volont ++ volt/AHDY ++ volta/NMAPDY ++ Voltaire/AX +++voltige/EAYX +++voltigelag/ABDY ++ voltigera/MY ++ voltmeter/EAIY ++ voltmätar/XZ ++ voltmätare/EAJY +++-volts/XZU ++ voltstart/AHDY ++ volumetrisk/OY ++ voluminös/OPQY ++ voluntaristisk/OY ++ volutformad/NQY ++-Volvo/AX +++Volvo/EAX ++ Volvokombi/EAY ++ volym/AHDYX ++ volymetrisk/OY ++@@ -71518,8 +74113,9 @@ volymf ++ volymminskning/ADGY ++ volymmässig/OY ++ volymprocentig/OY ++-volymtak/ABDY +++volymtak/ABD ++ volymökning/ADGY +++vom/FAI ++ vomera/MY ++ von ++ voodoo/EAYX ++@@ -71527,10 +74123,13 @@ voodoodocka/EAGY ++ Woods ++ Woolwich ++ vorden/MY +++Wordfeud/A ++ vore ++ workshop/ADGY +++World ++ votera/MY ++ votering/ADGYv +++voteringsknapp/ADGY ++ vovve/EAGY ++ voyeur/AHDY ++ voyeurism/ADY ++@@ -71617,11 +74216,10 @@ vulkanisering/ADYv ++ vulkanism/ADY ++ vulkanutbrott/ABDY ++ vulkanö/EAGY ++-vulkbar/OY +++vulkbar/O ++ vulstformad/NQY ++ vulstig/OY ++ vulva/EAGY ++-vunne/Y ++ vunnen/MY ++ vunnit/AY ++ Vuollerim/A ++@@ -71638,6 +74236,7 @@ vuxendans/HDY ++ vuxendop/ABDY ++ vuxendöv/OQY ++ vuxenhet/ADY +++vuxenliv/ABY ++ vuxenprat/ABY ++ vuxenutbildning/ADGY ++ vuxenutbildningsavgift/AHDY ++@@ -71649,6 +74248,7 @@ VVS/r ++ www ++ vy/EAH ++ vykort/ABDYv +++vyssanlull ++ vyssja/NMADY ++ vyssjning/ADY ++ vyssning/ADY ++@@ -71675,7 +74275,7 @@ v ++ vågfibrig/OY ++ vågformad/NQY ++ vågformig/OY ++-vågfri/OY +++vågfri/O ++ våghals/DGY ++ våghalsig/OPQY ++ våghalsighet/ADY ++@@ -71728,6 +74328,7 @@ v ++ vålla/NMAPBY ++ vållandebrott/ABDY ++ vålnad/AHDY +++våm/FAI ++ Våmhus ++ vånda/EAGY ++ våndas/N ++@@ -71741,6 +74342,7 @@ v ++ våras/Y ++ vårbal/AHDY ++ vårblomma/EAGY +++vårbruk/ABY ++ vårbudget/ADGY ++ vård/ADGYX ++ vårda/NAPDYf ++@@ -71749,8 +74351,11 @@ v ++ vårdare/EAYzg ++ vårdarinna/EAGY ++ vårdavdelning/ADGY +++vårdbehov/ABDY ++ vårdbiträde/FECAY +++vårdbolag/ABDY ++ vårdcentral/AHDY +++vårddag/ADGY ++ vårddagsavgift/AHDY ++ vårdgivare/EAJY ++ vårdhem/FCAY ++@@ -71758,6 +74363,7 @@ v ++ vårdkases/Y ++ vårdkrävande/Y ++ vårdkö/EAHY +++vårdlag/ABDY ++ vårdnad/ADYv ++ vårdnadsbidrag/ABDY ++ vårdnadshavar/XZ ++@@ -71765,37 +74371,53 @@ v ++ vårdnadstvist/AHDYX ++ vårdslös/OPQY ++ vårdslöshet/ADYv +++vårdtid/AHDY ++ vårdval/ABDYv ++ vårdvetenskap/AHDY +++vårfest/AHDY ++ vårflod/AHDY ++ vårfrisk/OY ++ vårfrudag/ADGY +++vårgrön/OY ++ Vårgårda/AX ++ våris/DGY +++vårkanten/Y ++ vårkappa/EAGY ++ vårlig/OY ++ vårlik/OY +++vårljus/BY +++vårluft/ADY +++vårlök/ADGY +++vårmode/FECAY +++vårnatt/ADY +++vårnätter/AJY +++vårregn/ABDY ++ vårrus/BY ++ vårsol/ADY +++vårsådd/AHDY +++vårsång/AHDY ++ vårta/EAGY ++ vårtal/ABDY ++ vårtbitare/EAJY ++ vårtbjörk/ADGY +++vårtecken/FCAY ++ vårtformig/OY ++ vårtig/OY ++ vårtrötthet/ADY ++ vårtsporig/OY ++ vårtsvin/ABDY ++-vårvin/ABHY +++vårvin/ABH ++ vårvind/ADGY ++ våryra/EAY ++ våt/OPQX ++ våtapplicera/MY +++våtdräkt/AHDY ++ våtlim/CAY ++ våtmark/AHDYv ++ våtmekanisk/OY ++ våtrum/FCAYv ++ våtrumstapet/AHDY +++våtvarm/OY ++ Våxtorp/Av ++ Vä/A ++ väcka/KEQLAJBGY ++@@ -71835,24 +74457,36 @@ v ++ väg/ADGYX ++ väga/KLAO ++ vägande/Y ++-vägar/EDY ++ vägarbete/FECAY ++-vägare/AY +++vägare/EAY ++ vägavgift/AHDY +++vägbana/EAGY +++vägbank/ADGY ++ vägbar/OY ++ vägbom/FAIY +++vägbro/EAGY +++vägbula/EAGY +++vägbygge/FECAY +++vägdamm/ABY +++vägdike/FECAY ++ vägg/ADGYX ++ vägglus/DY ++ vägglöss/DY ++ väggmålning/ADGY ++ väggpelare/EAJY ++ väggprydnad/AHDY +++väggrus/BY ++ väggur/ABDY ++ vägguttag/ABDY +++väggyta/EAGY ++ väghållning/ADY +++vägkant/AHDY ++ vägkarta/EAGY ++ vägknut/ADGY +++vägkors/BDY ++ vägkorsning/ADGY +++vägkrog/ADGY +++vägkrök/ADGY ++ väglag/ABDY ++ väglagsenlig/OY ++ vägleda/KLAJDRY ++@@ -71862,16 +74496,24 @@ v ++ väglös/OY ++ vägnar/Y ++ vägning/ADGYv +++vägnät/ABDY +++vägplan/AHDY +++vägport/ADGY ++ vägra/NEMAPBY ++ vägrare/EAJY ++ vägren/ADGY ++ vägröjare/EAJY +++vägsalt/ABHY +++vägskylt/ADGY ++ vägskäl/ABDY +++vägspärr/ADGY ++ vägsystem/ABDY ++ vägteknisk/OY ++ vägtrafik/ADY ++ vägtull/ADGY ++ vägunderhåll/ABY +++vägval/ABDY +++vägverk/ABY ++ vägvisar/XZ ++ vägvisare/EAJY ++ vägvisning/ADGY ++@@ -71882,7 +74524,6 @@ v ++ väktare/EAJY ++ väl ++ välaktad/NQY ++-välan ++ välanpassad/NQY ++ välansad/NQY ++ välanvänd/OY ++@@ -71996,7 +74637,7 @@ v ++ vällevnad/ADYv ++ vällevnadsman/AFY ++ vällevnadsmän/AFY ++-vällfri/OY +++vällfri/O ++ välling/ADGYX ++ välljud/ABY ++ välljudande/Y ++@@ -72019,7 +74660,7 @@ v ++ välmotiverad/NQY ++ välmående/CAY ++ välmåga/EAY ++-välmålad/NQY +++välmålad/NQ ++ välmöblerad/NQY ++ välnärd/OQY ++ väloljad/NQY ++@@ -72072,6 +74713,7 @@ v ++ välsvarvad/NQY ++ välsydd/OY ++ välta/KLAJY +++vältajmad/NQY ++ vältalare/EAJY ++ vältalig/OPQY ++ vältalighet/ADYv ++@@ -72110,10 +74752,11 @@ v ++ vämjes ++ vämjs/N ++ vän/AFOP +++vänbok/ADY +++vänböcker/AJY ++ vända/KELAJDGYz ++ vändar/XZU ++ vändare/EAJY ++-vändarn/AY ++ vändbar/OY ++ vändbarhet/ADYv ++ vändkrets/DGY ++@@ -72136,9 +74779,9 @@ v ++ vängåva/EAGY ++ vänhet/ADYv ++ väninna/EAGY ++-vänj/ARY ++-vänja/KY ++-vänjdes/Y +++vänja/AJRY +++vänjer/Y +++vänjs/Y ++ vänkrets/DGY ++ vänlig/OPQY ++ vänligen ++@@ -72197,9 +74840,8 @@ v ++ väntkur/AHDY ++ väntrum/FCAY ++ väntsal/ADGY ++-väpna/NAPDY ++-väpnar/EYX ++-väpnare/EAJY +++väpna/NMAPDY +++väpnare/EAJYz ++ väppling/ADGY ++ värd/AGYX ++ värda ++@@ -72232,8 +74874,9 @@ v ++ värdesak/AHDY ++ värdesystem/ABDY ++ värdetransportrån/ABDY ++-värdeår/ABDY +++värdeår/ABD ++ värdfamilj/AHDY +++värdfolk/ABDY ++ värdig/OPQY ++ värdigas/N ++ värdighet/AHDYvf ++@@ -72241,6 +74884,7 @@ v ++ värdinneskap/ABY ++ värdland/AJBY ++ värdnation/AHDY +++värdpar/ABDY ++ värdshus/BDYX ++ värdshusvärd/ADGY ++ värdskap/ABYv ++@@ -72266,6 +74910,7 @@ v ++ världsarvsmärka/KQLAJDY ++ världsatlas/HDY ++ världsberömd/OQY +++världsbild/AHDY ++ världsbäst/OY ++ världscup/AHDYX ++ världscupsprint/ADGY ++@@ -72335,7 +74980,6 @@ v ++ värmetålig/OY ++ värmeverk/ABDY ++ värmeväxlare/EAJY ++-värmeyta/EAGY ++ värmeöverföring/ADGY ++ Värmland/Av ++ värmländsk/OQY ++@@ -72404,6 +75048,7 @@ V ++ Västerhavet/AY ++ Västerhavs/XZ ++ västerifrån +++västerlandet/A ++ västerled/Y ++ västerläge/FECAY ++ västerländsk/OY ++@@ -72433,6 +75078,7 @@ v ++ västkust/AHDYX ++ västkustsallad/AHDY ++ västkustsk/OQY +++västland/AJBY ++ västlig/OPY ++ västmakt/AHDY ++ Västmanland/Av ++@@ -72454,7 +75100,6 @@ v ++ Västtyskland/Av ++ vät/A ++ väta/EARY ++-vätbar/OY ++ väte/CYX ++ väteatom/AHDY ++ vätebindning/ADGY ++@@ -72482,24 +75127,22 @@ v ++ Vättern/AX ++ väv/ADGYX ++ väva/KLAOD ++-vävar/EYX ++-vävare/EAY ++-vävbar/OY +++vävare/EAYz ++ vävbom/FAIY ++ vävburen/MY ++ väveri/CABHY ++ väverska/EAGY ++-vävklädd/OY ++ vävnad/AHDYvf ++ vävnadsdel/ADGY ++ vävning/ADGYvf ++-vävsal/ADGY ++ vävstol/ADGY ++ vävtapet/AHDY ++ växa/J ++ växande/CAY ++ växel/EAIYX ++ växelgäldenär/AHDY +++växelkassa/EAGY +++växelkontor/ABDY ++ växelkredit/AHDY ++ växelkurs/HDYX ++ växelkursmekanism/AHDY ++@@ -72541,9 +75184,12 @@ v ++ växthusgasutsläpp/ABDY ++ växtlig/OY ++ växtlighet/ADY +++växtliv/ABY ++ växtnäring/ADGY ++ växtnäringsexpert/AHDY ++ växtplankton/ABY +++växtvärk/ADY +++växtzon/AHDY ++ växtätare/EAJY ++ vörda/NMAPY ++ vördig/OPQY ++@@ -72556,11 +75202,14 @@ v ++ vördsam/KMLY ++ vördsamhet/ADYv ++ vördsamt/Y +++vört/AY ++ vörtbröd/ABDYv +++vörten/Y ++ x/r +++X2000/r ++ xenofob/ATHDY ++ xenofobi/EAY ++-xenogami/EADY +++xenogami/EAD ++ xenomorf/OY ++ xenon/ABY ++ xerografisk/OY ++@@ -72584,6 +75233,7 @@ xylofonist/AHDYX ++ xylograf/ATHDY ++ xylografera/MY ++ xylografi/EAY +++xylos/DY ++ y/Dr ++ yacht/AHDY ++ Yahoo/AX ++@@ -72598,7 +75248,7 @@ yen/D ++ yenkurs/DY ++ Ygeman/A ++ yl/ABD ++-yla/NMAP +++yla/NMA ++ ylande/FECAY ++ ylle/CAYX ++ yllebyxor/AJY ++@@ -72662,7 +75312,7 @@ yrkesfiskar/XZ ++ yrkesmässig/OY ++ yrkesråd/ABDY ++ yrkesvux ++-yrsel/EAIY +++yrsel/EAY ++ yrselanfall/ABDY ++ yrselkänsla/EAGY ++ yrsnö/EAY ++@@ -72682,33 +75332,32 @@ ytaktiv/OY ++ ytaktivitet/ADY ++ ytansamling/ADGY ++ ytanslutning/ADYv ++-ytantenn/AHDY +++ytantenn/AHD ++ ytbehandla/NMAPY ++ ytbehandlare/EAJY ++ ytbehandling/ADGYv ++-ytbelagd/OY +++ytbelagd/O ++ ytbeläggning/ADGY ++ ytbärgare/EAJY ++ ytcentrerad/NQY ++ ytenhet/AHDYv ++-ytfanera/MY ++-ytfinhet/AHDY ++-ytgrusig/OY ++-ythård/OY +++ytfanera/M +++ytfinhet/AHD +++ytgrusig/O ++ ytimpregnera/MY ++-ytkemisk/OY +++ytkemisk/O ++ ytlager/FCAY ++ ytlig/OPQY ++ ytlighet/AHDYv ++ ytläge/CAY ++-ytmontör/AHDY +++ytmontör/AHD ++ ytmått/ABDY ++ ytmässig/OY ++-ytriktig/OY +++ytriktig/O ++ ytskikt/ABDY ++ ytslipning/ADGY ++ ytspänning/ADGY ++-ytstrid/AHDYv +++ytstrid/AHDv ++ ytstridsfartyg/ABDY ++ ytstruktur/AHDY ++ ytter/EAIYX ++@@ -72761,7 +75410,7 @@ yxhuvud/ABDY ++ yxhuvudena/AY ++ yxman/AFY ++ yxmän/AFY ++-yxmörda/NMAPY +++yxmörda/NMAP ++ yxne/CAY ++ yxskaft/ABDY ++ z/r ++@@ -72779,9 +75428,15 @@ zebra/EAGYX ++ zebrarandig/OY ++ Zeeland/A ++ zelot/ATHDY +++zen/X +++Zen/A ++ zenbuddism/ADY ++ zenbuddistisk/OY ++-zenit/Y +++zenit/AX +++zenital/OY +++zenitpunkt/AHDY +++zeolit/AHDX +++zeolitfilter/FCAY ++ zeolitisk/OY ++ zeppelinare/EAJY ++ Zetterberg/A ++@@ -72793,7 +75448,6 @@ zigenar/XZ ++ zigenare/EAJY ++ zigenerska/EAGY ++ zigensk/OQY ++-zillmera/MY ++ Zimbabwe/AX ++ zimbabwier/EAJY ++ zimbabwisk/OPQY ++@@ -72801,9 +75455,14 @@ zimbabwiska/EAGY ++ zink/ADYX ++ zinkgrå/OY ++ zinkplatta/EAGY ++-zinkvit/OY +++zinkplåt/ADGY +++zinkvitt/Y +++zinnia/EAGY +++zippa/NMAP ++ zirkonium/ABY ++ Zlatan/A +++zloty/EAY +++zlotyna/AY ++ Zoéga/A ++ zombie/EAIYX ++ zon/AHDYX ++@@ -72811,8 +75470,11 @@ zonal/OY ++ zonavgift/AHDY ++ zonerad/NQY ++ zonering/ADY +++zongräns/HDY +++zonrör/BDY +++zonspel/ABY ++ zontaxa/EAGY ++-zoo/FECA +++zoo/A ++ zooekologi/EAY ++ zooekologisk/OY ++ zoofysiologi/EAY ++@@ -72822,6 +75484,8 @@ zoom/ADYX ++ zooma/NMAPY ++ zoomning/ADGY ++ zoomobjektiv/ABDY +++zoonos/HDX +++zootomi/EAY ++ zootomisk/OY ++ Zorn/AX ++ zucchini/EAHY ++@@ -72873,7 +75537,6 @@ zymologisk/OY ++ ådöm/Y ++ ådöma/KLAOY ++ ågren/Y ++-åh ++ åhej ++ Åhléns/X ++ åhoj ++@@ -72886,14 +75549,15 @@ zymologisk/OY ++ åhörarplats/HDY ++ åja ++ åjo ++-åk/AOBD +++åk/BD +++åka/LA ++ åkalla/NEMAPBY ++ åkallelse/EAIY ++ åkande/CAY ++ åkarbrasa/EAGY ++ åkare/EAJY ++ åkarkamp/ADGY ++-åkarkusk/ADGY +++åkarkusk/ADG ++ Åkarp/Av ++ åkattraktion/AHDY ++ åkbar/OY ++@@ -72904,6 +75568,7 @@ zymologisk/OY ++ åkerbinda/EAGY ++ åkerbruk/ABDYv ++ åkerbrukssystem/ABDY +++åkerbär/ABDY ++ åkeri/ABHYX ++ åkeriägare/EAJY ++ åkerjord/ADGY ++@@ -72921,6 +75586,7 @@ zymologisk/OY ++ åklageri/ABY ++ åkning/ADGYvf ++ åkomma/EAGY +++åkpåse/EAGY ++ åkriktning/ADGY ++ åksjuk/OQY ++ åksjuka/EAY ++@@ -72937,7 +75603,6 @@ zymologisk/OY ++ ålagille/FECAY ++ ålagt/AY ++ Åland/Av ++-ålart/AHDY ++ ålat ++ ålbestånd/ABDY ++ Ålborg/Av ++@@ -72991,7 +75656,7 @@ zymologisk/OY ++ Åmotsfors/X ++ åmynning/ADGYv ++ Åmål/Av ++-åmålsbo/EAIY +++åmålsbo/EAI ++ ånej ++ ång/XZ ++ ånga/EAGY ++@@ -73000,6 +75665,7 @@ zymologisk/OY ++ ångar/JQD ++ ångares ++ ångat +++ångbad/ABDY ++ ångbeständig/OY ++ ångbildning/ADGY ++ ångbåt/ADGYv ++@@ -73047,7 +75713,7 @@ zymologisk/OY ++ ångturbin/AHDYX ++ ånguppvärmd/OY ++ ångvält/ADGY ++-ångvärmd/OY +++ångvärmd/O ++ ånyo ++ år/ABD ++ åra/EAG ++@@ -73061,14 +75727,15 @@ zymologisk/OY ++ årgångsvin/ABHY ++ århundrade/FECAY ++ Århus/X ++--årig/OQ ++--åring/ADG +++-årig/OQY +++-åring/ADGY +++åring/ADGY ++ Årjäng/Av ++ årklyka/EAGY ++ årlig/OY ++ årligen ++ årpar/ABDY ++--års/XZ +++-års/XZU ++ årsabonnemang/ABDY ++ årsabonnent/AHDY ++ årsackord/ABDY ++@@ -73108,14 +75775,14 @@ zymologisk/OY ++ årsgammal/MY ++ årsgenomsnitt/ABDY ++ årsgrupp/AHDY ++-årsgräns/HDY ++-årshygge/FECAY +++årsgräns/HD +++årshygge/FECA ++ årshyra/EAGY ++ årshögst/Oz ++ årshögtid/AHDY ++-årsindex/BDY +++årsindex/BD ++ årsinkomst/AHDY ++-årskaft/ABDY +++årskaft/ABD ++ årskalv/ADGY ++ årskapacitet/AHDY ++ årsklass/HDY ++@@ -73128,7 +75795,7 @@ zymologisk/OY ++ årskrönika/EAGY ++ årskull/ADGY ++ årskurs/HDY ++-årskvot/AHDY +++årskvot/AHD ++ årslång/OY ++ årslön/AHDY ++ årsmedeltal/ABDY ++@@ -73139,7 +75806,7 @@ zymologisk/OY ++ årsmötesordförande/FEAY ++ årsnederbörd/ADY ++ årsomsättning/ADGY ++-årsplats/HDY +++årsplats/HD ++ årspremie/EAIY ++ årsprenumeration/AHDY ++ årsproduktion/AHDY ++@@ -73214,6 +75881,7 @@ zymologisk/OY ++ åskrädda/JY ++ åskrädde/Y ++ åskrön/ABDY +++åskskur/ADGY ++ åskskydd/ABDY ++ åskskyddsmaterial/ABDY ++ åskvigg/ADGY ++@@ -73256,7 +75924,7 @@ zymologisk/OY ++ Åström/A ++ åstunda/EMY ++ åsyfta/NMAPDY ++-åsyn/AHDY +++åsyn/ADY ++ åsynavittne/FECAY ++ åsätta/LAJDY ++ åsätter/Y ++@@ -73278,7 +75946,6 @@ zymologisk/OY ++ åtbörd/AHDY ++ åtdragen/MY ++ åtdragning/ADGY ++-åte ++ åtel/EAI ++ åteljakt/AHDY ++ åter ++@@ -73296,6 +75963,7 @@ zymologisk/OY ++ återanvändbarhet/ADY ++ återanvändning/ADGYv ++ återbar/AY +++återbekräfta/NMAPDY ++ återberätta/NMAPDY ++ återberättelse/EAIYX ++ återbesatta/LJY ++@@ -73531,7 +76199,7 @@ zymologisk/OY ++ återsända/KLAJBY ++ återsändande/FEY ++ återsändning/ADGY ++-återsöka/KQLAJDY +++återsöka/KQLAJD ++ återsökning/ADGY ++ återta/AY ++ återtag/ABDRY ++@@ -73703,7 +76371,7 @@ zymologisk/OY ++ åtskils/NY ++ åtskruva/NMAPDY ++ åtskruvning/ADGY ++-åtsmetad/NQY +++åtsmetad/NQ ++ åtsmitande/Y ++ åtsnörd/OY ++ åtsnörning/ADGY ++@@ -73734,7 +76402,7 @@ zymologisk/OY ++ åttakärnig/OY ++ åttaliters/XZ ++ åttametersbåt/ADGY ++-åttamånaders/XZ +++åttamånaders/X ++ åttasidig/OY ++ åttasiffrig/OY ++ åttatiden/Y ++@@ -73762,7 +76430,7 @@ zymologisk/OY ++ åttioprocentig/OY ++ åttiosex ++ åttiosju ++-åttiotal/ABYv +++åttiotal/ABDYv ++ åttiotalist/AHDYX ++ åttiotalsstil/ADY ++ åttiotre ++@@ -73828,15 +76496,16 @@ zymologisk/OY ++ äggkopp/ADGY ++ äggledare/EAJY ++ äggläggningsrör/ABDY ++-äggnudel/EAIY +++äggnudel/EAI ++ äggoljetempera/EAY ++ äggost/ADGY ++ äggrund/OY ++ äggrätt/AHDY +++äggröra/EAY ++ äggskal/ABDY ++ äggskivare/EAJY ++ äggstanning/ADGY ++-äggstekt/OY +++äggstekt/O ++ äggstock/ADGYv ++ äggstocksinflammation/AHDY ++ äggstor/OY ++@@ -73858,7 +76527,8 @@ zymologisk/OY ++ ägoskifte/FECAY ++ ägoslag/ABDY ++ ägotvist/AHDY ++-äh +++ägrett/AHDX +++ägretthäger/EAIY ++ äkta/NMAP ++ äktare ++ äktast/Q ++@@ -73880,13 +76550,24 @@ zymologisk/OY ++ älg/ADGX ++ älgfärs/HDYX ++ älgfärsbiff/ADGY +++älggräs/BDY +++älghorn/ABDY +++älghund/ADGY ++ älgjakt/AHDY +++älgjägare/EAJY +++älgkalv/ADGY ++ älgko/EAIY ++ älgkramar/XZ ++ älgkramare/EAJY ++ älgkramarn/AY ++ älgkött/ABY +++älgpass/BDY +++älgstam/FAIY +++älgstek/ADGY ++ älgstudsare/EAJY +++älgtest/ABHDY +++älgtjur/ADGY +++älgört/AHDY ++ älling/ADGY ++ Älmhult/Av ++ älska/NMAPBY ++@@ -73961,7 +76642,7 @@ zymologisk/OY ++ ändhållplats/HDY ++ ändlig/OY ++ ändlighet/ADYv ++-ändläge/FECAY +++ändläge/FECA ++ ändlös/OY ++ ändlöshet/ADY ++ ändock ++@@ -73979,7 +76660,7 @@ zymologisk/OY ++ ängelholmsbo/EAIY ++ ängla/XZ ++ änglabarn/ABDY ++-änglagod/OY +++änglagod/O ++ änglakör/AHDY ++ änglalik/OQY ++ änglamakerska/EAGY ++@@ -74008,11 +76689,9 @@ zymologisk/OY ++ änkeår/ABDY ++ änkling/ADGYv ++ änklingspension/AHDY ++-ännig/OPQY ++ ännu ++ änterbila/EAGY ++ änterhake/EAGY ++-äntlig/OY ++ äntligen ++ äntra/NMAPY ++ äntring/ADGYv ++@@ -74135,9 +76814,9 @@ zymologisk/OY ++ ätstörning/ADGY ++ ätt/AHD ++ ättartavla/EAGY ++-ättefader/EAY ++-ättefar/AY ++-ättefäder/AJY +++ättefader/EA +++ättefar/A +++ättefäder/AJ ++ ättehög/ADGY ++ ätteled/ABDY ++ ättelägg/ADGY ++@@ -74185,6 +76864,9 @@ zymologisk/OY ++ öda/KR ++ öde/YX ++ ödeby/EAGY +++ödebygd/AHDY +++ödegård/ADGY +++ödehus/BDY ++ ödekyrka/EAGY ++ ödelade/AY ++ ödelagd/OY ++@@ -74236,10 +76918,8 @@ zymologisk/OY ++ ögla/EAGY ++ ögle/XZ ++ öglebindning/ADGY ++-öglebult/ADGY ++ öglemaskin/AHDY ++ öglemutter/EAIY ++-öglig/OY ++ ögna/NMA ++ ögon/ADYX ++ ögonaböj ++@@ -74272,7 +76952,6 @@ zymologisk/OY ++ ögonvittnesskildring/ADGY ++ ögonvrå/EAIY ++ ögrupp/AHDY ++-öh ++ Öhman/A ++ ö.h.t. ++ öht ++@@ -74299,6 +76978,7 @@ zymologisk/OY ++ ölbryggning/ADY ++ ölburk/ADGY ++ ölbutelj/AHDY +++ölbägare/EAJ ++ öldrickande/CAY ++ öldrickare/EAJY ++ ölfat/ABDY ++@@ -74311,12 +76991,13 @@ zymologisk/OY ++ ölhävning/ADYv ++ öljett/AHDY ++ ölkonsumtion/ADY +++ölkrus/BDY ++ ölmagad/NQY ++ ölmage/EAGY ++ ölmärke/FECAY ++ ölprovare/EAJY ++ ölpub/ADGY ++-ölreklam/AHDY +++ölreklam/AHD ++ ölsejdel/EAIY ++ ölservering/ADGY ++ ölsinne/CAY ++@@ -74329,6 +77010,7 @@ zymologisk/OY ++ öltransport/AHDY ++ öltunna/EAGY ++ öltält/ABDY +++öluffning/ADY ++ ölutkörare/EAJY ++ ölutskänkning/ADGY ++ öländsk/OQY ++@@ -74352,7 +77034,6 @@ zymologisk/OY ++ ömklig/OPQY ++ ömkligen ++ ömklighet/AHDYv ++-ömkyld/OY ++ ömma/M ++ ömmande/Y ++ ömsa/NMAP ++@@ -74408,6 +77089,7 @@ zymologisk/OY ++ örestal/ABDY ++ Öresund/Av ++ öresutjämning/ADYv +++öresvin/ABDY ++ örfil/ADY ++ örfila/NAPIY ++ Örgryte/AX ++@@ -74417,10 +77099,8 @@ zymologisk/OY ++ öringsfiske/FECAY ++ Örjan/A ++ Örkelljunga/AX ++-örlig/OY ++-örlog/v ++-örloggsbas/HDY ++-örloggskapten/AHDY +++örlogs/XZ +++örlogsbas/HDY ++ örlogsfartyg/ABDY ++ örlogskapten/AHDY ++ örn/ADG ++@@ -74429,6 +77109,7 @@ zymologisk/OY ++ örnfjäder/EAIY ++ örngott/ABDYv ++ örngottsband/ABDY +++örnkoll/ADY ++ örnnäbb/ADGY ++ örnnäsa/EAGY ++ örnnäste/FECAY ++@@ -74450,13 +77131,13 @@ zymologisk/OY ++ örta/XZ ++ örtagård/ADGY ++ örtagårdsmästare/EAJY ++-örtartad/NQY ++-örtbeska/EAY +++örtartad/NQ +++örtbeska/EA ++ örtesäng/ADGY ++ örtkrydda/EAGY ++ örtsalt/ABHY ++-örtsmör/ABY ++-örtstekt/OY +++örtsmör/AB +++örtstekt/O ++ örtsås/HDY ++ örtte/ABHY ++ ös/BR ++@@ -74518,6 +77199,7 @@ zymologisk/OY ++ Östhammar/Av ++ östkust/AHDY ++ östkustsk/OQY +++östland/AJBY ++ östlig/OPY ++ Östman/A ++ östnordisk/OY ++@@ -74543,6 +77225,7 @@ zymologisk/OY ++ över/KX ++ överadjutant/AHDY ++ överaktiv/OQY +++överallt ++ överambitiös/OQY ++ överanstränga/KLAJOY ++ överansträngning/ADGY ++@@ -74627,7 +77310,8 @@ zymologisk/OY ++ överfarit/AY ++ överfart/AHDYvf ++ överfet/OQY ++-överfiska/NMAPDY +++överfiska/NMAPDRY +++överfiske/CY ++ överfixerad/NQY ++ överflygla/NMAPDY ++ överflygling/ADGY ++@@ -74653,7 +77337,7 @@ zymologisk/OY ++ överförmyndare/EAJY ++ överförsäkrad/NQY ++ överge/NMAY ++-övergiva/AJRY +++övergiva/AJDRY ++ övergiven/KMY ++ övergivenhet/ADY ++ övergiver/Y ++@@ -74699,7 +77383,7 @@ zymologisk/OY ++ överhölja/KLAJOY ++ överhöra/KLAJODRY ++ överidealisera/MY ++-överila/NMAPY +++överila/MPDY ++ överingenjör/AHDY ++ överinseende/CAY ++ överintelligent/OQY ++@@ -74774,8 +77458,8 @@ zymologisk/OY ++ överliggar/XZ ++ överliggare/EAJY ++ överlista/NMAPY ++-överljud/ABDYv ++ överljudd/OY +++överljuds/XZ ++ överljudsflygplan/ABDY ++ överljudsplan/ABDY ++ överloppsgärning/ADGYv ++@@ -74947,7 +77631,7 @@ zymologisk/OY ++ överste/EAGYX ++ översteg/AY ++ överstegrad/ANHQDY ++-översteka/KQLAJY +++översteka/KQLAJ ++ överstelöjtnant/AHDY ++ översten/DGY ++ överstepräst/AHDY ++@@ -75027,7 +77711,7 @@ zymologisk/OY ++ övertryckskabin/AHDY ++ övertrycksturbin/AHDY ++ övertrycksventil/AHDY ++-övertråd/ADGY +++övertråd/ADG ++ överträda/KLAJDRY ++ överträdar/XZ ++ överträdare/EAJY ++@@ -75108,7 +77792,7 @@ zymologisk/OY ++ överväxel/EAIY ++ överväxellåda/EAGY ++ överväxt/OY ++-överyta/EAGY +++överyta/EAG ++ överåklagar/XZ ++ överåklagare/EAJY ++ överårig/OQY ++@@ -75120,7 +77804,6 @@ zymologisk/OY ++ övning/ADGYvf ++ övningsmina/EAGY ++ övningsskjuta/KLAJRY ++-övningsskjuten/MY ++ övrig/OQY ++ övrigas ++ övärld/ADGY ++-- ++1.7.5.4 ++ ++ ++From 81252dd483c84f06072b041e0dd384bd10cb5ac4 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= ++Date: Mon, 12 Dec 2011 13:28:36 +0000 ++Subject: [libs-extern-sys 3/7] Resolves: CVE-2011-4599 ++ ++--- ++ icu/CVE-2011-4599.patch | 20 ++++++++++++++++++++ ++ icu/makefile.mk | 3 ++- ++ 2 files changed, 22 insertions(+), 1 deletions(-) ++ create mode 100644 icu/CVE-2011-4599.patch ++ ++diff --git a/icu/CVE-2011-4599.patch b/icu/CVE-2011-4599.patch ++new file mode 100644 ++index 0000000..fd8b121 ++--- /dev/null +++++ icu/CVE-2011-4599.patch ++@@ -0,0 +1,20 @@ +++--- misc/icu/source/source/common/uloc.c ++++++ misc/build/icu/source/common/uloc.c +++@@ -1797,7 +1797,7 @@ +++ int32_t variantLen = _deleteVariant(variant, uprv_min(variantSize, (nameCapacity-len)), variantToCompare, n); +++ len -= variantLen; +++ if (variantLen > 0) { +++- if (name[len-1] == '_') { /* delete trailing '_' */ ++++ if (len > 0 && name[len-1] == '_') { /* delete trailing '_' */ +++ --len; +++ } +++ addKeyword = VARIANT_MAP[j].keyword; +++@@ -1805,7 +1805,7 @@ +++ break; +++ } +++ } +++- if (name[len-1] == '_') { /* delete trailing '_' */ ++++ if (len > 0 && len <= nameCapacity && name[len-1] == '_') { /* delete trailing '_' */ +++ --len; +++ } +++ } ++diff --git a/icu/makefile.mk b/icu/makefile.mk ++index dbbd4c0..6078896 100644 ++--- icu/makefile.mk +++++ icu/makefile.mk ++@@ -51,7 +51,8 @@ PATCH_FILES=\ ++ icu4c-aix.patch \ ++ icu4c-4_4_2-wchar_t.patch \ ++ icu4c-warnings.patch \ ++- icu4c-escapespace.patch +++ icu4c-escapespace.patch \ +++ CVE-2011-4599.patch ++ ++ .IF "$(GUI)"=="UNX" ++ ++-- ++1.7.5.4 ++ ++ ++From 4b046fd4cb4fed8535cc530219101c1132ddada4 Mon Sep 17 00:00:00 2001 ++From: Andras Timar ++Date: Tue, 13 Dec 2011 13:26:22 +0100 ++Subject: [libs-extern-sys 4/7] use latest versions of DejaVu and Liberation ++ fonts ++ ++Signed-off-by: Michael Meeks ++--- ++ more_fonts/fonts/ttf_dejavu/makefile.mk | 6 +++--- ++ more_fonts/fonts/ttf_liberation/makefile.mk | 4 ++-- ++ more_fonts/prj/d.lst | 8 ++++---- ++ 3 files changed, 9 insertions(+), 9 deletions(-) ++ ++diff --git a/more_fonts/fonts/ttf_dejavu/makefile.mk b/more_fonts/fonts/ttf_dejavu/makefile.mk ++index 090661b..499086b 100644 ++--- more_fonts/fonts/ttf_dejavu/makefile.mk +++++ more_fonts/fonts/ttf_dejavu/makefile.mk ++@@ -36,9 +36,9 @@ TARGET=ttf_dejavu ++ ++ # --- Files -------------------------------------------------------- ++ ++-TARFILE_NAME=dejavu-fonts-ttf-2.32 ++-TARFILE_MD5=37282537d0ed1a087b1c8f050dc812d9 ++-TARFILE_ROOTDIR=dejavu-fonts-ttf-2.32 +++TARFILE_NAME=dejavu-fonts-ttf-2.33 +++TARFILE_MD5=f872f4ac066433d8ff92f5e316b36ff9 +++TARFILE_ROOTDIR=dejavu-fonts-ttf-2.33 ++ ++ PATCH_FILES= ++ ++diff --git a/more_fonts/fonts/ttf_liberation/makefile.mk b/more_fonts/fonts/ttf_liberation/makefile.mk ++index a49c568..66e552e 100644 ++--- more_fonts/fonts/ttf_liberation/makefile.mk +++++ more_fonts/fonts/ttf_liberation/makefile.mk ++@@ -36,8 +36,8 @@ TARGET=ttf_liberation ++ ++ # --- Files -------------------------------------------------------- ++ ++-TARFILE_NAME=liberation-fonts-ttf-1.06.0.20100721 ++-TARFILE_MD5=ca4870d899fd7e943ffc310a5421ad4d +++TARFILE_NAME=liberation-fonts-ttf-1.07.1 +++TARFILE_MD5=0be45d54cc5e1c2e3102e32b8c190346 ++ TARFILE_ROOTDIR=. ++ ++ PATCH_FILES= ++diff --git a/more_fonts/prj/d.lst b/more_fonts/prj/d.lst ++index 229521e..0394cca 100644 ++--- more_fonts/prj/d.lst +++++ more_fonts/prj/d.lst ++@@ -1,10 +1,10 @@ ++ mkdir: %COMMON_DEST%\pck%_EXT% ++ ..\fonts\fc_local.conf %COMMON_DEST%\pck%_EXT%\fc_local.conf ++ # TODO: replace explicit versions by wildcard when the build system learns to handle them ++-..\%__SRC%\misc\build\dejavu-fonts-ttf-2.32\ttf\*.ttf %COMMON_DEST%\pck%_EXT%\*.ttf ++-..\%__SRC%\misc\build\dejavu-fonts-ttf-2.32\LICENSE %COMMON_DEST%\pck%_EXT%\LICENSE_dejavu ++-..\%__SRC%\misc\build\liberation-fonts-ttf-1.06.0.20100721/Liberation*.ttf %COMMON_DEST%\pck%_EXT%\*.ttf ++-..\%__SRC%\misc\build\liberation-fonts-ttf-1.06.0.20100721/License.txt %COMMON_DEST%\pck%_EXT%\LICENSE_liberation +++..\%__SRC%\misc\build\dejavu-fonts-ttf-2.33\ttf\*.ttf %COMMON_DEST%\pck%_EXT%\*.ttf +++..\%__SRC%\misc\build\dejavu-fonts-ttf-2.33\LICENSE %COMMON_DEST%\pck%_EXT%\LICENSE_dejavu +++..\%__SRC%\misc\build\liberation-fonts-ttf-1.07.1/Liberation*.ttf %COMMON_DEST%\pck%_EXT%\*.ttf +++..\%__SRC%\misc\build\liberation-fonts-ttf-1.07.1/License.txt %COMMON_DEST%\pck%_EXT%\LICENSE_liberation ++ ..\%__SRC%\misc\build\gentiumbasic-fonts-1.10\*.ttf %COMMON_DEST%\pck%_EXT%\*.ttf ++ ..\%__SRC%\misc\build\gentiumbasic-fonts-1.10\OFL.txt %COMMON_DEST%\pck%_EXT%\LICENSE_gentium ++ ..\%__SRC%\misc\build\LinLibertineG\*.ttf %COMMON_DEST%\pck%_EXT%\*.ttf ++-- ++1.7.5.4 ++ ++reverting on repository libs-gui from libreoffice-3.4.4.2 to merge-base 63980c2658d69cbad8756b54ef6119536a009f62 ++diff --git a/svtools/inc/svtools/borderhelper.hxx b/svtools/inc/svtools/borderhelper.hxx ++index 486eaef..de24369 100644 ++--- svtools/inc/svtools/borderhelper.hxx +++++ svtools/inc/svtools/borderhelper.hxx ++@@ -42,9 +42,6 @@ namespace svtools ++ SVT_DLLPUBLIC basegfx::B2DPolyPolygon ApplyLineDashing( const basegfx::B2DPolygon& rPolygon, ++ sal_uInt16 nDashing, MapUnit eUnit ); ++ ++- SVT_DLLPUBLIC basegfx::B2DPolyPolygon ApplyLineDashing( const basegfx::B2DPolygon& rPolygon, ++- sal_uInt16 nDashing, MapUnit eUnit, double fScale ); ++- ++ SVT_DLLPUBLIC void DrawLine( OutputDevice& rDev, const basegfx::B2DPoint& rBeg, ++ const basegfx::B2DPoint& rEnd, sal_uInt32 nWidth, sal_uInt16 nDashing ); ++ ++diff --git a/svtools/source/control/ctrlbox.cxx b/svtools/source/control/ctrlbox.cxx ++index 70a040e..9305e18 100644 ++--- svtools/source/control/ctrlbox.cxx +++++ svtools/source/control/ctrlbox.cxx ++@@ -579,24 +579,6 @@ namespace svtools ++ return aPolygons; ++ } ++ ++- basegfx::B2DPolyPolygon ApplyLineDashing( const basegfx::B2DPolygon& rPolygon, sal_uInt16 nDashing, MapUnit eUnit, double fScale ) ++- { ++- std::vector< double > aPattern = GetDashing( nDashing, eUnit ); ++- std::vector< double >::iterator i = aPattern.begin(); ++- while( i != aPattern.end() ) { ++- (*i) *= fScale; ++- ++i; ++- } ++- ++- basegfx::B2DPolyPolygon aPolygons; ++- if ( ! aPattern.empty() ) ++- basegfx::tools::applyLineDashing( rPolygon, aPattern, &aPolygons ); ++- else ++- aPolygons.append( rPolygon ); ++- ++- return aPolygons; ++- } ++- ++ void DrawLine( OutputDevice& rDev, const Point& rP1, const Point& rP2, ++ sal_uInt32 nWidth, sal_uInt16 nDashing ) ++ { ++diff --git a/vcl/unx/kde4/KDEXLib.cxx b/vcl/unx/kde4/KDEXLib.cxx ++index 5e03033..ca435c8 100644 ++--- vcl/unx/kde4/KDEXLib.cxx +++++ vcl/unx/kde4/KDEXLib.cxx ++@@ -57,7 +57,7 @@ ++ ++ #include ++ ++-#if QT_VERSION >= QT_VERSION_CHECK( 4, 8, 1 ) +++#if QT_VERSION >= QT_VERSION_CHECK( 4, 8, 0 ) ++ #define QT_UNIX_EVENT_LOOP_SUPPORT ++ #ifdef KDE_HAVE_GLIB ++ #define GLIB_EVENT_LOOP_SUPPORT ++commits on repository libs-gui merge-base 63980c2658d69cbad8756b54ef6119536a009f62 to libreoffice-3.4.5.2 ++From d3728312e7655a3580113470461f5fcf04b9c7a2 Mon Sep 17 00:00:00 2001 ++From: Tomofumi Yagi ++Date: Wed, 26 Oct 2011 11:37:10 -0400 ++Subject: [libs-gui 01/10] fdo#37129: Fix the drawing of dotted and dashed ++ borders in Calc. ++ ++Signed-off-by: Kohei Yoshida ++--- ++ svtools/inc/svtools/borderhelper.hxx | 3 +++ ++ svtools/source/control/ctrlbox.cxx | 18 ++++++++++++++++++ ++ 2 files changed, 21 insertions(+), 0 deletions(-) ++ ++diff --git a/svtools/inc/svtools/borderhelper.hxx b/svtools/inc/svtools/borderhelper.hxx ++index de24369..486eaef 100644 ++--- svtools/inc/svtools/borderhelper.hxx +++++ svtools/inc/svtools/borderhelper.hxx ++@@ -42,6 +42,9 @@ namespace svtools ++ SVT_DLLPUBLIC basegfx::B2DPolyPolygon ApplyLineDashing( const basegfx::B2DPolygon& rPolygon, ++ sal_uInt16 nDashing, MapUnit eUnit ); ++ +++ SVT_DLLPUBLIC basegfx::B2DPolyPolygon ApplyLineDashing( const basegfx::B2DPolygon& rPolygon, +++ sal_uInt16 nDashing, MapUnit eUnit, double fScale ); +++ ++ SVT_DLLPUBLIC void DrawLine( OutputDevice& rDev, const basegfx::B2DPoint& rBeg, ++ const basegfx::B2DPoint& rEnd, sal_uInt32 nWidth, sal_uInt16 nDashing ); ++ ++diff --git a/svtools/source/control/ctrlbox.cxx b/svtools/source/control/ctrlbox.cxx ++index 9305e18..70a040e 100644 ++--- svtools/source/control/ctrlbox.cxx +++++ svtools/source/control/ctrlbox.cxx ++@@ -579,6 +579,24 @@ namespace svtools ++ return aPolygons; ++ } ++ +++ basegfx::B2DPolyPolygon ApplyLineDashing( const basegfx::B2DPolygon& rPolygon, sal_uInt16 nDashing, MapUnit eUnit, double fScale ) +++ { +++ std::vector< double > aPattern = GetDashing( nDashing, eUnit ); +++ std::vector< double >::iterator i = aPattern.begin(); +++ while( i != aPattern.end() ) { +++ (*i) *= fScale; +++ ++i; +++ } +++ +++ basegfx::B2DPolyPolygon aPolygons; +++ if ( ! aPattern.empty() ) +++ basegfx::tools::applyLineDashing( rPolygon, aPattern, &aPolygons ); +++ else +++ aPolygons.append( rPolygon ); +++ +++ return aPolygons; +++ } +++ ++ void DrawLine( OutputDevice& rDev, const Point& rP1, const Point& rP2, ++ sal_uInt32 nWidth, sal_uInt16 nDashing ) ++ { ++-- ++1.7.5.4 ++ ++ ++From 2de499d6cf758ae2172a4c13ee05da83f1695c08 Mon Sep 17 00:00:00 2001 ++From: David Tardon ++Date: Fri, 22 Jul 2011 08:04:07 +0200 ++Subject: [libs-gui 02/10] this is definitely not present in Qt 4.8.0 beta1 ++ ++Signed-off-by: Thorsten Behrens ++--- ++ vcl/unx/kde4/KDEXLib.cxx | 2 +- ++ 1 files changed, 1 insertions(+), 1 deletions(-) ++ ++diff --git a/vcl/unx/kde4/KDEXLib.cxx b/vcl/unx/kde4/KDEXLib.cxx ++index ca435c8..5e03033 100644 ++--- vcl/unx/kde4/KDEXLib.cxx +++++ vcl/unx/kde4/KDEXLib.cxx ++@@ -57,7 +57,7 @@ ++ ++ #include ++ ++-#if QT_VERSION >= QT_VERSION_CHECK( 4, 8, 0 ) +++#if QT_VERSION >= QT_VERSION_CHECK( 4, 8, 1 ) ++ #define QT_UNIX_EVENT_LOOP_SUPPORT ++ #ifdef KDE_HAVE_GLIB ++ #define GLIB_EVENT_LOOP_SUPPORT ++-- ++1.7.5.4 ++ ++ ++From 082ecb53a9077b6ae01ce66237f48d88bcb0cc00 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= ++Date: Thu, 20 Oct 2011 19:05:13 +0200 ++Subject: [libs-gui 03/10] fix horizontal scrollbars with KDE oxygen style ++ (bnc#722918) ++ ++Apparently there are two style flags for detecting the widget ++is horizontal. ++--- ++ vcl/unx/kde4/KDESalGraphics.cxx | 19 +++++++++++++------ ++ 1 files changed, 13 insertions(+), 6 deletions(-) ++ ++diff --git a/vcl/unx/kde4/KDESalGraphics.cxx b/vcl/unx/kde4/KDESalGraphics.cxx ++index 749fbf0..b09fe53 100644 ++--- vcl/unx/kde4/KDESalGraphics.cxx +++++ vcl/unx/kde4/KDESalGraphics.cxx ++@@ -493,10 +493,9 @@ sal_Bool KDESalGraphics::drawNativeControl( ControlType type, ControlPart part, ++ if (sbVal->mnVisibleSize < sbVal->mnMax) ++ option.state = QStyle::State_MouseOver; ++ ++- //horizontal or vertical ++- if (part == PART_DRAW_BACKGROUND_VERT) ++- option.orientation = Qt::Vertical; ++- else +++ bool horizontal = ( part == PART_DRAW_BACKGROUND_HORZ ); //horizontal or vertical +++ option.orientation = horizontal ? Qt::Horizontal : Qt::Vertical; +++ if( horizontal ) ++ option.state |= QStyle::State_Horizontal; ++ ++ //setup parameters from the OO values ++@@ -592,7 +591,10 @@ sal_Bool KDESalGraphics::drawNativeControl( ControlType type, ControlPart part, ++ option.maximum = slVal->mnMax; ++ option.minimum = slVal->mnMin; ++ option.sliderPosition = option.sliderValue = slVal->mnCur; ++- option.orientation = (part == PART_TRACK_HORZ_AREA) ? Qt::Horizontal : Qt::Vertical; +++ bool horizontal = ( part == PART_TRACK_HORZ_AREA ); //horizontal or vertical +++ option.orientation = horizontal ? Qt::Horizontal : Qt::Vertical; +++ if( horizontal ) +++ option.state |= QStyle::State_Horizontal; ++ ++ draw( QStyle::CC_Slider, &option, m_image, vclStateValue2StateFlag(nControlState, value) ); ++ } ++@@ -903,7 +905,10 @@ sal_Bool KDESalGraphics::getNativeControlRegion( ControlType type, ControlPart p ++ QStyleOptionSlider option; ++ OSL_ASSERT( val.getType() == CTRL_SCROLLBAR ); ++ const ScrollbarValue* sbVal = static_cast(&val); ++- option.orientation = ( part == PART_TRACK_HORZ_AREA ) ? Qt::Horizontal : Qt::Vertical; +++ bool horizontal = ( part == PART_TRACK_HORZ_AREA ); //horizontal or vertical +++ option.orientation = horizontal ? Qt::Horizontal : Qt::Vertical; +++ if( horizontal ) +++ option.state |= QStyle::State_Horizontal; ++ option.minimum = sbVal->mnMin; ++ option.maximum = sbVal->mnMax; ++ option.sliderValue = sbVal->mnCur; ++@@ -971,6 +976,8 @@ sal_Bool KDESalGraphics::hitTestNativeControl( ControlType nType, ControlPart nP ++ rect.moveTo( 0, 0 ); ++ QStyleOptionSlider options; ++ options.orientation = bHorizontal ? Qt::Horizontal : Qt::Vertical; +++ if( bHorizontal ) +++ options.state |= QStyle::State_Horizontal; ++ options.rect = rect; ++ // some random sensible values, since we call this code only for scrollbar buttons, ++ // the slider position does not exactly matter ++-- ++1.7.5.4 ++ ++ ++From 1b20ed98b65a9101162058a54c2d62eea8664b11 Mon Sep 17 00:00:00 2001 ++From: Noel Power ++Date: Mon, 14 Nov 2011 11:17:07 +0000 ++Subject: [libs-gui 04/10] fix crash at exit ( access of deleted GtkSalDisplay ++ instance ) bnc#728603 ++ ++Signed-off-by: Michael Meeks ++--- ++ vcl/unx/gtk/app/gtkdata.cxx | 44 ++++++++++++++++++++++++++++-------------- ++ 1 files changed, 29 insertions(+), 15 deletions(-) ++ ++diff --git a/vcl/unx/gtk/app/gtkdata.cxx b/vcl/unx/gtk/app/gtkdata.cxx ++index 6a61098..a1c8b2f 100644 ++--- vcl/unx/gtk/app/gtkdata.cxx +++++ vcl/unx/gtk/app/gtkdata.cxx ++@@ -576,6 +576,14 @@ GtkXLib::~GtkXLib() ++ #endif ++ Yield( true, true ); ++ StopTimer(); +++ +++ if (m_pUserEvent) +++ { +++ g_source_destroy (m_pUserEvent); +++ g_source_unref (m_pUserEvent); +++ m_pUserEvent = NULL; +++ } +++ ++ // sanity check: at this point nobody should be yielding, but wake them ++ // up anyway before the condition they're waiting on gets destroyed. ++ osl_setCondition( m_aDispatchCondition ); ++@@ -792,30 +800,36 @@ extern "C" ++ ++ gboolean GtkXLib::userEventFn(gpointer data) ++ { ++- gboolean bContinue; +++ +++ gboolean bContinue = FALSE; ++ GtkXLib *pThis = (GtkXLib *) data; ++- SalData *pSalData = GetSalData(); ++ ++- pSalData->m_pInstance->GetYieldMutex()->acquire(); ++- pThis->m_pGtkSalDisplay->EventGuardAcquire(); +++ GtkData *pGtkData = static_cast(GetSalData()); +++ +++ pGtkData->m_pInstance->GetYieldMutex()->acquire(); ++ ++- if( !pThis->m_pGtkSalDisplay->HasMoreEvents() ) +++ if ( pGtkData->GetDisplay() ) ++ { ++- if( pThis->m_pUserEvent ) +++ pThis->m_pGtkSalDisplay->EventGuardAcquire(); +++ +++ if( !pThis->m_pGtkSalDisplay->HasMoreEvents() ) ++ { ++- g_source_unref (pThis->m_pUserEvent); ++- pThis->m_pUserEvent = NULL; +++ if( pThis->m_pUserEvent ) +++ { +++ g_source_unref (pThis->m_pUserEvent); +++ pThis->m_pUserEvent = NULL; +++ } +++ bContinue = FALSE; ++ } ++- bContinue = FALSE; ++- } ++- else ++- bContinue = TRUE; +++ else +++ bContinue = TRUE; ++ ++- pThis->m_pGtkSalDisplay->EventGuardRelease(); +++ pThis->m_pGtkSalDisplay->EventGuardRelease(); ++ ++- pThis->m_pGtkSalDisplay->DispatchInternalEvent(); +++ pThis->m_pGtkSalDisplay->DispatchInternalEvent(); ++ ++- pSalData->m_pInstance->GetYieldMutex()->release(); +++ pGtkData->m_pInstance->GetYieldMutex()->release(); +++ } ++ ++ return bContinue; ++ } ++-- ++1.7.5.4 ++ ++ ++From d87712a52d33ade9fd2821b91caf92d11ef31a93 Mon Sep 17 00:00:00 2001 ++From: Stephan Bergmann ++Date: Wed, 9 Nov 2011 08:38:58 +0100 ++Subject: [libs-gui 05/10] Backport reading AES-encrypted ODF 1.2 documents ++ (as genereated by LibO 3.5). ++ ++This backports the reading half of CWS mav60 plus "Produce ++correct sha256 uri, consume correct uri and original spec typo." It spans the ++repos components, libs-core, libs-gui, and ure. ++--- ++ comphelper/inc/comphelper/storagehelper.hxx | 1 + ++ comphelper/source/misc/storagehelper.cxx | 37 +++++++++++++++++++++++--- ++ 2 files changed, 33 insertions(+), 5 deletions(-) ++ ++diff --git a/comphelper/inc/comphelper/storagehelper.hxx b/comphelper/inc/comphelper/storagehelper.hxx ++index 2f83331..807c6dd 100644 ++--- comphelper/inc/comphelper/storagehelper.hxx +++++ comphelper/inc/comphelper/storagehelper.hxx ++@@ -45,6 +45,7 @@ ++ #define ZIP_STORAGE_FORMAT_STRING ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ZipFormat" ) ) ++ #define OFOPXML_STORAGE_FORMAT_STRING ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "OFOPXMLFormat" ) ) ++ +++#define PACKAGE_ENCRYPTIONDATA_SHA256UTF8 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PackageSHA256UTF8EncryptionKey" ) ) ++ #define PACKAGE_ENCRYPTIONDATA_SHA1UTF8 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PackageSHA1UTF8EncryptionKey" ) ) ++ #define PACKAGE_ENCRYPTIONDATA_SHA1MS1252 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PackageSHA1MS1252EncryptionKey" ) ) ++ ++diff --git a/comphelper/source/misc/storagehelper.cxx b/comphelper/source/misc/storagehelper.cxx ++index f703cd3..112ddf1 100644 ++--- comphelper/source/misc/storagehelper.cxx +++++ comphelper/source/misc/storagehelper.cxx ++@@ -35,6 +35,9 @@ ++ #include ++ #include ++ #include +++#include +++#include +++#include ++ ++ #include ++ ++@@ -427,14 +430,38 @@ uno::Sequence< beans::NamedValue > OStorageHelper::CreatePackageEncryptionData( ++ { ++ // TODO/LATER: Should not the method be part of DocPasswordHelper? ++ uno::Sequence< beans::NamedValue > aEncryptionData; +++ sal_Int32 nSha1Ind = 0; ++ if ( aPassword.getLength() ) ++ { +++ // generate SHA256 start key +++ try +++ { +++ uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); +++ if ( !xFactory.is() ) +++ throw uno::RuntimeException(); +++ +++ uno::Reference< xml::crypto::XDigestContextSupplier > xDigestContextSupplier( xFactory->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.xml.crypto.NSSInitializer" ) ) ), uno::UNO_QUERY_THROW ); +++ uno::Reference< xml::crypto::XDigestContext > xDigestContext( xDigestContextSupplier->getDigestContext( xml::crypto::DigestID::SHA256, uno::Sequence< beans::NamedValue >() ), uno::UNO_SET_THROW ); +++ +++ ::rtl::OString aUTF8Password( ::rtl::OUStringToOString( aPassword, RTL_TEXTENCODING_UTF8 ) ); +++ xDigestContext->updateDigest( uno::Sequence< sal_Int8 >( reinterpret_cast< const sal_Int8* >( aUTF8Password.getStr() ), aUTF8Password.getLength() ) ); +++ uno::Sequence< sal_Int8 > aDigest = xDigestContext->finalizeDigestAndDispose(); +++ +++ aEncryptionData.realloc( ++nSha1Ind ); +++ aEncryptionData[0].Name = PACKAGE_ENCRYPTIONDATA_SHA256UTF8; +++ aEncryptionData[0].Value <<= aDigest; +++ } +++ catch ( uno::Exception& ) +++ { +++ OSL_ENSURE( false, "Can not create SHA256 digest!" ); +++ } +++ ++ // MS_1252 encoding was used for SO60 document format password encoding, ++ // this encoding supports only a minor subset of nonascii characters, ++ // but for compatibility reasons it has to be used for old document formats ++- aEncryptionData.realloc( 2 ); ++- aEncryptionData[0].Name = PACKAGE_ENCRYPTIONDATA_SHA1UTF8; ++- aEncryptionData[1].Name = PACKAGE_ENCRYPTIONDATA_SHA1MS1252; +++ aEncryptionData.realloc( nSha1Ind + 2 ); +++ aEncryptionData[nSha1Ind].Name = PACKAGE_ENCRYPTIONDATA_SHA1UTF8; +++ aEncryptionData[nSha1Ind + 1].Name = PACKAGE_ENCRYPTIONDATA_SHA1MS1252; ++ ++ rtl_TextEncoding pEncoding[2] = { RTL_TEXTENCODING_UTF8, RTL_TEXTENCODING_MS_1252 }; ++ ++@@ -450,11 +477,11 @@ uno::Sequence< beans::NamedValue > OStorageHelper::CreatePackageEncryptionData( ++ ++ if ( nError != rtl_Digest_E_None ) ++ { ++- aEncryptionData.realloc( 0 ); +++ aEncryptionData.realloc( nSha1Ind ); ++ break; ++ } ++ ++- aEncryptionData[nInd].Value <<= uno::Sequence< sal_Int8 >( (sal_Int8*)pBuffer, RTL_DIGEST_LENGTH_SHA1 ); +++ aEncryptionData[nSha1Ind+nInd].Value <<= uno::Sequence< sal_Int8 >( (sal_Int8*)pBuffer, RTL_DIGEST_LENGTH_SHA1 ); ++ } ++ } ++ ++-- ++1.7.5.4 ++ ++ ++From b5b7699c6a42f6cca7da6d91eac0dada9e48ee35 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= ++Date: Mon, 21 Nov 2011 15:05:53 +0100 ++Subject: [libs-gui 06/10] Resolves fdo#41295 tmp name reuse in mass pdf ++ export ++ ++Cherry-picked from http://cgit.freedesktop.org/libreoffice/core/commit/?id=c6560c6f07f7f71842d7314157feaca2fa4a03c9 ++Signed-off-by: Stephan Bergmann ++--- ++ unotools/source/ucbhelper/tempfile.cxx | 4 ++-- ++ 1 files changed, 2 insertions(+), 2 deletions(-) ++ ++diff --git a/unotools/source/ucbhelper/tempfile.cxx b/unotools/source/ucbhelper/tempfile.cxx ++index 95c63cc..9d49bce 100644 ++--- unotools/source/ucbhelper/tempfile.cxx +++++ unotools/source/ucbhelper/tempfile.cxx ++@@ -206,8 +206,8 @@ void CreateTempName_Impl( String& rName, sal_Bool bKeep, sal_Bool bDir = sal_Tru ++ aName += String::CreateFromAscii( "lu" ); ++ ++ rName.Erase(); ++- unsigned long nSeed = Time::GetSystemTicks() % nMax; ++- for ( unsigned long u = nSeed; ++u != nSeed; ) +++ static unsigned long u = Time::GetSystemTicks() % nMax; +++ for ( unsigned long nSeed = u; ++u != nSeed; ) ++ { ++ u %= nMax; ++ String aTmp( aName ); ++-- ++1.7.5.4 ++ ++ ++From 93947e85ae1434940aaad516edb60f259b15e950 Mon Sep 17 00:00:00 2001 ++From: Michael Meeks ++Date: Wed, 14 Dec 2011 10:07:01 +0000 ++Subject: [libs-gui 07/10] Cleanup jpeg bitmap creation & loading code ++ ++Signed-off-by: Caolan McNamara ++--- ++ svtools/source/filter.vcl/jpeg/jpeg.cxx | 37 +++++++++++++++++------------- ++ 1 files changed, 21 insertions(+), 16 deletions(-) ++ ++diff --git a/svtools/source/filter.vcl/jpeg/jpeg.cxx b/svtools/source/filter.vcl/jpeg/jpeg.cxx ++index cdbd53e..2d9b993 100644 ++--- svtools/source/filter.vcl/jpeg/jpeg.cxx +++++ svtools/source/filter.vcl/jpeg/jpeg.cxx ++@@ -334,17 +334,26 @@ JPEGReader::~JPEGReader() ++ ++ // ------------------------------------------------------------------------ ++ ++-void* JPEGReader::CreateBitmap( void* pParam ) +++void* JPEGReader::CreateBitmap( void* _pParam ) ++ { ++- Size aSize( ((JPEGCreateBitmapParam*)pParam)->nWidth, ++- ((JPEGCreateBitmapParam*)pParam)->nHeight ); ++- sal_Bool bGray = ((JPEGCreateBitmapParam*)pParam)->bGray != 0; +++ JPEGCreateBitmapParam *pParam = (JPEGCreateBitmapParam *) _pParam; +++ +++ if (pParam->nWidth > SAL_MAX_INT32/8 || pParam->nHeight > SAL_MAX_INT32/8) +++ return NULL; // avoid overflows later +++ +++ Size aSize( pParam->nWidth, pParam->nHeight ); +++ sal_Bool bGray = pParam->bGray != 0; ++ ++ void* pBmpBuf = NULL; ++ ++ if( pAcc ) ++ aBmp.ReleaseAccess( pAcc ); ++ +++ sal_uInt64 nSize = aSize.Width(); +++ nSize *= aSize.Height(); +++ if (nSize > SAL_MAX_INT32 / 24) +++ return NULL; +++ ++ if( bGray ) ++ { ++ BitmapPalette aGrayPal( 256 ); ++@@ -365,12 +374,11 @@ void* JPEGReader::CreateBitmap( void* pParam ) ++ unsigned long nUnit = ((JPEGCreateBitmapParam*)pParam)->density_unit; ++ ++ if( ( ( 1 == nUnit ) || ( 2 == nUnit ) ) && ++- ( (JPEGCreateBitmapParam*) pParam )->X_density && ++- ( (JPEGCreateBitmapParam*) pParam )->Y_density ) +++ pParam->X_density && pParam->Y_density ) ++ { ++ Point aEmptyPoint; ++- Fraction aFractX( 1, ((JPEGCreateBitmapParam*)pParam)->X_density ); ++- Fraction aFractY( 1, ((JPEGCreateBitmapParam*)pParam)->Y_density ); +++ Fraction aFractX( 1, pParam->X_density ); +++ Fraction aFractY( 1, pParam->Y_density ); ++ MapMode aMapMode( nUnit == 1 ? MAP_INCH : MAP_CM, aEmptyPoint, aFractX, aFractY ); ++ Size aPrefSize = OutputDevice::LogicToLogic( aSize, aMapMode, MAP_100TH_MM ); ++ ++@@ -383,8 +391,6 @@ void* JPEGReader::CreateBitmap( void* pParam ) ++ ++ if( pAcc ) ++ { ++- long nAlignedWidth; ++- ++ const sal_uLong nFormat = pAcc->GetScanlineFormat(); ++ ++ if( ++@@ -393,16 +399,15 @@ void* JPEGReader::CreateBitmap( void* pParam ) ++ ) ++ { ++ pBmpBuf = pAcc->GetBuffer(); ++- nAlignedWidth = pAcc->GetScanlineSize(); ++- ((JPEGCreateBitmapParam*)pParam)->bTopDown = pAcc->IsTopDown(); +++ pParam->nAlignedWidth = pAcc->GetScanlineSize(); +++ pParam->bTopDown = pAcc->IsTopDown(); ++ } ++ else ++ { ++- nAlignedWidth = AlignedWidth4Bytes( aSize.Width() * ( bGray ? 8 : 24 ) ); ++- ((JPEGCreateBitmapParam*)pParam)->bTopDown = sal_True; ++- pBmpBuf = pBuffer = rtl_allocateMemory( nAlignedWidth * aSize.Height() ); +++ pParam->nAlignedWidth = AlignedWidth4Bytes( aSize.Width() * ( bGray ? 8 : 24 ) ); +++ pParam->bTopDown = sal_True; +++ pBmpBuf = pBuffer = rtl_allocateMemory( pParam->nAlignedWidth * aSize.Height() ); ++ } ++- ((JPEGCreateBitmapParam*)pParam)->nAlignedWidth = nAlignedWidth; ++ } ++ ++ return pBmpBuf; ++-- ++1.7.5.4 ++ ++reverting on repository postprocess from libreoffice-3.4.4.2 to merge-base fc108e4d647f53ccb22b7f1f0511a5c4b5585708 ++commits on repository postprocess merge-base fc108e4d647f53ccb22b7f1f0511a5c4b5585708 to libreoffice-3.4.5.2 ++From 978f106a5e6851dc6e833ab33c437ad7baa2bb38 Mon Sep 17 00:00:00 2001 ++From: Radek Doulik ++Date: Mon, 7 Nov 2011 17:20:29 +0100 ++Subject: [postprocess 1/4] make the 3D transitions work again ++ ++Fix for n#728559. ++ ++Signed-off-by: Thorsten Behrens ++--- ++ postprocess/packcomponents/makefile.mk | 2 +- ++ 1 files changed, 1 insertions(+), 1 deletions(-) ++ ++diff --git a/postprocess/packcomponents/makefile.mk b/postprocess/packcomponents/makefile.mk ++index 4c8109b..bed9a27 100644 ++--- postprocess/packcomponents/makefile.mk +++++ postprocess/packcomponents/makefile.mk ++@@ -242,7 +242,7 @@ my_components += kdebe1 ++ my_components += kde4be1 ++ .END ++ ++-.IF "$(ENABLE_OGL)" == "TRUE" +++.IF "$(ENABLE_OPENGL)" == "TRUE" ++ my_components += ogltrans ++ .END ++ ++-- ++1.7.5.4 ++ ++reverting on repository sdk from libreoffice-3.4.4.2 to merge-base e0e013afbb6b5862bc9fb556493aa1c8c27ee177 ++commits on repository sdk merge-base e0e013afbb6b5862bc9fb556493aa1c8c27ee177 to libreoffice-3.4.5.2 ++reverting on repository testing from libreoffice-3.4.4.2 to merge-base 5712035d6674800df3045345a784f70fd4fddc91 ++commits on repository testing merge-base 5712035d6674800df3045345a784f70fd4fddc91 to libreoffice-3.4.5.2 ++reverting on repository ure from libreoffice-3.4.4.2 to merge-base ab8a9944c70baf122e97ae4a98d25175785c9043 ++commits on repository ure merge-base ab8a9944c70baf122e97ae4a98d25175785c9043 to libreoffice-3.4.5.2 ++From bc9b86940a707e9e2e1076f2954f38075398b5d7 Mon Sep 17 00:00:00 2001 ++From: Francois Tigeot ++Date: Wed, 11 May 2011 13:48:17 +0200 ++Subject: [ure 1/7] Remove the ::osl::Security getHomeDir() check ++ ++It serves no useful purpose and breaks the build under some packaging ++systems such as pkgsrc. ++ ++(Cherry-picked from .) ++ ++Signed-off-by: Stephan Bergmann ++--- ++ sal/qa/osl/security/osl_Security.cxx | 30 +----------------------------- ++ 1 files changed, 1 insertions(+), 29 deletions(-) ++ ++diff --git a/sal/qa/osl/security/osl_Security.cxx b/sal/qa/osl/security/osl_Security.cxx ++index 93fa96a..a90d2f0 100644 ++--- sal/qa/osl/security/osl_Security.cxx +++++ sal/qa/osl/security/osl_Security.cxx ++@@ -197,30 +197,6 @@ namespace osl_Security ++ }; // class getUserName ++ ++ ++- ++- /** testing the method: ++- inline sal_Bool SAL_CALL getHomeDir( ::rtl::OUString& strDirectory) const; ++- */ ++- class getHomeDir : public CppUnit::TestFixture ++- { ++- public: ++- sal_Bool bRes, bRes1; ++- ++- void getHomeDir_001( ) ++- { ++- ::osl::Security aSec; ++- ::rtl::OUString strHome; ++- bRes = aSec.getHomeDir( strHome ); ++- ++- CPPUNIT_ASSERT_MESSAGE( "#test comment#: getHomeDir and compare it with the info we get at the beginning.", ++- ( sal_True == strHomeDirectory.equals( strHome ) ) && ( sal_True == bRes ) ); ++- } ++- ++- CPPUNIT_TEST_SUITE( getHomeDir ); ++- CPPUNIT_TEST( getHomeDir_001 ); ++- CPPUNIT_TEST_SUITE_END( ); ++- }; // class getHomeDir ++- ++ /** testing the method: ++ inline sal_Bool Security::getConfigDir( rtl::OUString& strDirectory ) const ++ */ ++@@ -341,7 +317,6 @@ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::ctors); ++ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::logonUser); ++ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getUserIdent); ++ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getUserName); ++-CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getHomeDir); ++ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getConfigDir); ++ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::isAdministrator); ++ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getHandle); ++@@ -393,11 +368,8 @@ void MyTestPlugInImpl::initialize( CPPUNIT_NS::TestFactoryRegistry *, ++ strUserName = ::rtl::OUString::createFromAscii( pw->pw_name ); ++ ++ /// get home directory; ++- char *pw_dir = pw->pw_dir; ++- if( getenv( "FAKEROOTKEY" ) ) ++- pw_dir = getenv("HOME"); ++ CPPUNIT_ASSERT_MESSAGE( "#Convert from system path to URL failed.", ++- ::osl::File::E_None == ::osl::File::getFileURLFromSystemPath( ::rtl::OUString::createFromAscii( pw_dir ), strHomeDirectory ) ); +++ ::osl::File::E_None == ::osl::File::getFileURLFromSystemPath( ::rtl::OUString::createFromAscii( pw->pw_dir ), strHomeDirectory ) ); ++ ++ /// get config directory; ++ strConfigDirectory = strHomeDirectory.copy(0); ++-- ++1.7.5.4 ++ ++ ++From d53922c3511a70567f43d17480514d77e81c168c Mon Sep 17 00:00:00 2001 ++From: Stephan Bergmann ++Date: Wed, 9 Nov 2011 08:35:42 +0100 ++Subject: [ure 2/7] Backport reading AES-encrypted ODF 1.2 documents (as ++ genereated by LibO 3.5). ++ ++This backports the reading half of CWS mav60 plus "Produce ++correct sha256 uri, consume correct uri and original spec typo." It spans the ++repos components, libs-core, libs-gui, and ure. ++--- ++ .../sun/star/embed/XEncryptionProtectedStorage.idl | 118 ++++++++++++++++++++ ++ offapi/com/sun/star/embed/makefile.mk | 1 + ++ offapi/com/sun/star/xml/crypto/CipherID.idl | 59 ++++++++++ ++ offapi/com/sun/star/xml/crypto/DigestID.idl | 71 ++++++++++++ ++ offapi/com/sun/star/xml/crypto/SEInitializer.idl | 4 + ++ offapi/com/sun/star/xml/crypto/XCipherContext.idl | 88 +++++++++++++++ ++ .../sun/star/xml/crypto/XCipherContextSupplier.idl | 91 +++++++++++++++ ++ offapi/com/sun/star/xml/crypto/XDigestContext.idl | 73 ++++++++++++ ++ .../sun/star/xml/crypto/XDigestContextSupplier.idl | 82 ++++++++++++++ ++ offapi/com/sun/star/xml/crypto/makefile.mk | 6 + ++ 10 files changed, 593 insertions(+), 0 deletions(-) ++ create mode 100644 offapi/com/sun/star/embed/XEncryptionProtectedStorage.idl ++ create mode 100644 offapi/com/sun/star/xml/crypto/CipherID.idl ++ create mode 100644 offapi/com/sun/star/xml/crypto/DigestID.idl ++ create mode 100644 offapi/com/sun/star/xml/crypto/XCipherContext.idl ++ create mode 100644 offapi/com/sun/star/xml/crypto/XCipherContextSupplier.idl ++ create mode 100644 offapi/com/sun/star/xml/crypto/XDigestContext.idl ++ create mode 100644 offapi/com/sun/star/xml/crypto/XDigestContextSupplier.idl ++ ++diff --git a/offapi/com/sun/star/embed/XEncryptionProtectedStorage.idl b/offapi/com/sun/star/embed/XEncryptionProtectedStorage.idl ++new file mode 100644 ++index 0000000..91f1199 ++--- /dev/null +++++ offapi/com/sun/star/embed/XEncryptionProtectedStorage.idl ++@@ -0,0 +1,118 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++#ifndef __com_sun_star_embed_XEncryptionProtectedStorage_idl__ +++#define __com_sun_star_embed_XEncryptionProtectedStorage_idl__ +++ +++#ifndef __com_sun_star_embed_XEncryptionProtectedSource2_idl__ +++#include +++#endif +++ +++#ifndef __com_sun_star_beans_NamedValue_idl__ +++#include +++#endif +++ +++#ifndef __com_sun_star_lang_IllegalArgumentException_idl__ +++#include +++#endif +++ +++#ifndef __com_sun_star_xml_crypto_DigestID_idl__ +++#include +++#endif +++ +++#ifndef __com_sun_star_xml_crypto_CipherID_idl__ +++#include +++#endif +++ +++//============================================================================ +++ +++module com { module sun { module star { module embed { +++ +++//============================================================================ +++/** This interface allows to set a password for an object. +++ +++ This unpublished interface was introduced into a micro update of +++ LibreOffice 3.4; it is unclear in what exact form it will be included in +++ LibreOffice 3.5. A corresponding OOo interface (which is also unpublished) +++ is scheduled for inclusion into OOo 3.4 and contains an additional +++ getEncryptionAlgorithms method. +++ */ +++interface XEncryptionProtectedStorage: XEncryptionProtectedSource2 +++{ +++ // ----------------------------------------------------------------------- +++ /** allows to set the encryption algorithms for the object. +++

+++ The algorithms will of course be used only for streams that have been +++ marked to be encrypted. If no stream in the storage is marked to be +++ encrypted, the algorithms-related information may have no effect to +++ the result package. +++

+++ +++

+++ The following values could be part of the provided sequence: +++

+++
+++
StartKeyGenerationAlgorithm
+++
+++ specifies the algorithm that was used to generate +++ the EncryptionKey from the original password; in case +++ the contents should be decrypted, the algorithm might +++ be already known by the object; if a different one is +++ set an exception should be thrown to indicate the +++ error; it should take values from +++ DigestID. +++
+++
EncryptionAlgorithm
+++
+++ specifies the algorithm that should be used to +++ encrypt/decrypt the contents; in case the contents +++ should be decrypted, the algorithm might be already +++ known by the object; if a different one is set +++ an exception should be thrown to indicate the error; +++ it should take values from +++ CipherID. +++
+++
ChecksumAlgorithm
+++
+++ specifies the algorithm that was used to generate +++ the checksum of the encrypted data; in case +++ the contents should be decrypted, the algorithm might +++ be already known by the object; if a different one is +++ set an exception should be thrown to indicate the +++ error; it should take values from +++ DigestID. +++
+++
+++ */ +++ void setEncryptionAlgorithms( [in] sequence< ::com::sun::star::beans::NamedValue > aAlgorithms ) +++ raises( ::com::sun::star::lang::IllegalArgumentException ); +++}; +++ +++//============================================================================ +++ +++}; }; }; }; +++ +++#endif ++diff --git a/offapi/com/sun/star/embed/makefile.mk b/offapi/com/sun/star/embed/makefile.mk ++index 8ee156a..c142086 100644 ++--- offapi/com/sun/star/embed/makefile.mk +++++ offapi/com/sun/star/embed/makefile.mk ++@@ -78,6 +78,7 @@ IDLFILES=\ ++ XLinkFactory.idl\ ++ XEncryptionProtectedSource.idl\ ++ XEncryptionProtectedSource2.idl\ +++ XEncryptionProtectedStorage.idl\ ++ XInplaceClient.idl\ ++ XInsertObjectDialog.idl\ ++ XWindowSupplier.idl\ ++diff --git a/offapi/com/sun/star/xml/crypto/CipherID.idl b/offapi/com/sun/star/xml/crypto/CipherID.idl ++new file mode 100644 ++index 0000000..a59c034 ++--- /dev/null +++++ offapi/com/sun/star/xml/crypto/CipherID.idl ++@@ -0,0 +1,59 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++#ifndef __com_sun_star_xml_crypto_CipherID_idl__ +++#define __com_sun_star_xml_crypto_CipherID_idl__ +++ +++ +++//============================================================================ +++ +++module com { module sun { module star { module xml { module crypto { +++ +++//============================================================================ +++/** The constant set contains identifiers of supported cipher-creation +++ algorithms. +++ +++ @see XCipherContextSupplier +++ @since OOo 3.4 +++*/ +++constants CipherID +++{ +++ //------------------------------------------------------------------------ +++ /** identifier of AES algorithm in CBC mode with W3C padding +++ */ +++ const long AES_CBC_W3C_PADDING = 1; +++ +++ //------------------------------------------------------------------------ +++ /** identifier of the Blowfish algorithm in 8-bit CFB mode +++ */ +++ const long BLOWFISH_CFB_8 = 2; +++}; +++ +++//============================================================================ +++ +++}; }; }; }; }; +++ +++#endif ++diff --git a/offapi/com/sun/star/xml/crypto/DigestID.idl b/offapi/com/sun/star/xml/crypto/DigestID.idl ++new file mode 100644 ++index 0000000..bd2c61c ++--- /dev/null +++++ offapi/com/sun/star/xml/crypto/DigestID.idl ++@@ -0,0 +1,71 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++#ifndef __com_sun_star_xml_crypto_DigestID_idl__ +++#define __com_sun_star_xml_crypto_DigestID_idl__ +++ +++ +++//============================================================================ +++ +++module com { module sun { module star { module xml { module crypto { +++ +++//============================================================================ +++/** The constant set contains identifiers of supported digest-creation +++ algorithms. +++ +++ @see XDigestContextSupplier +++ @since OOo 3.4 +++*/ +++constants DigestID +++{ +++ //------------------------------------------------------------------------ +++ /** identifier of SHA-1 algorithm +++ */ +++ const long SHA1 = 1; +++ +++ //------------------------------------------------------------------------ +++ /** identifier of SHA-256 algorithm +++ */ +++ const long SHA256 = 2; +++ +++ //------------------------------------------------------------------------ +++ /** identifier of SHA-1 algorithm that is applied to the first kilobyte +++ of data. +++ */ +++ const long SHA1_1K = 3; +++ +++ //------------------------------------------------------------------------ +++ /** identifier of SHA-256 algorithm that is applied to the first kilobyte +++ of data. +++ */ +++ const long SHA256_1K = 4; +++}; +++ +++//============================================================================ +++ +++}; }; }; }; }; +++ +++#endif ++diff --git a/offapi/com/sun/star/xml/crypto/SEInitializer.idl b/offapi/com/sun/star/xml/crypto/SEInitializer.idl ++index beec5ef..5a9ff7d 100644 ++--- offapi/com/sun/star/xml/crypto/SEInitializer.idl +++++ offapi/com/sun/star/xml/crypto/SEInitializer.idl ++@@ -36,6 +36,8 @@ ++ #include ++ ++ #include +++#include +++#include ++ ++ #include ++ ++@@ -46,6 +48,8 @@ module com { module sun { module star { module xml { module crypto { ++ */ ++ service SEInitializer { ++ interface com::sun::star::xml::crypto::XSEInitializer ; +++ interface ::com::sun::star::xml::crypto::XDigestContextSupplier; +++ interface ::com::sun::star::xml::crypto::XCipherContextSupplier; ++ interface com::sun::star::lang::XServiceInfo ; ++ }; ++ ++diff --git a/offapi/com/sun/star/xml/crypto/XCipherContext.idl b/offapi/com/sun/star/xml/crypto/XCipherContext.idl ++new file mode 100644 ++index 0000000..fb84139 ++--- /dev/null +++++ offapi/com/sun/star/xml/crypto/XCipherContext.idl ++@@ -0,0 +1,88 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++#ifndef __com_sun_star_xml_crypto_xciphercontext_idl_ +++#define __com_sun_star_xml_crypto_xciphercontext_idl_ +++ +++#ifndef __com_sun_star_uno_XInterface_idl__ +++#include +++#endif +++ +++#ifndef __com_sun_star_lang_IllegalArgumentException_idl__ +++#include +++#endif +++ +++#ifndef __com_sun_star_lang_DisposedException_idl__ +++#include +++#endif +++ +++//============================================================================ +++ +++ module com { module sun { module star { module xml { module crypto { +++ +++//============================================================================ +++/** This interface allows to encrypt/decrypt data using the cipher context. +++

+++ The algorithm as well as encryption data are specified on object creation. +++

+++ +++ @see XCipherContextSupplier +++ @since OOo 3.4 +++ */ +++interface XCipherContext : com::sun::star::uno::XInterface +++{ +++ //------------------------------------------------------------------------ +++ /** encrypts/decrypts the data using the cipher. +++

+++ Please have in mind, the cipher object state might depend from the +++ already encrypted/decrypted data ( it depends from the used +++ algorithm ). +++

+++ +++

+++ Whether the object does encryption or decryption is specified by +++ creation of the object. +++

+++ +++ @param aData +++ data that should be encrypted/decrypted +++ */ +++ sequence convertWithCipherContext( [in] sequence< byte > aData ) +++ raises( ::com::sun::star::lang::IllegalArgumentException, +++ ::com::sun::star::lang::DisposedException ); +++ +++ //------------------------------------------------------------------------ +++ /** finalizes cipher and disposes context. +++ */ +++ sequence finalizeCipherContextAndDispose() +++ raises( ::com::sun::star::lang::DisposedException ); +++}; +++ +++//============================================================================ +++ +++}; }; }; }; }; +++ +++#endif ++diff --git a/offapi/com/sun/star/xml/crypto/XCipherContextSupplier.idl b/offapi/com/sun/star/xml/crypto/XCipherContextSupplier.idl ++new file mode 100644 ++index 0000000..115cf7b ++--- /dev/null +++++ offapi/com/sun/star/xml/crypto/XCipherContextSupplier.idl ++@@ -0,0 +1,91 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++#ifndef __com_sun_star_xml_crypto_xciphercontextsupplier_idl_ +++#define __com_sun_star_xml_crypto_xciphercontextsupplier_idl_ +++ +++#ifndef __com_sun_star_uno_XInterface_idl__ +++#include +++#endif +++ +++#ifndef __com_sun_star_beans_NamedValue_idl__ +++#include +++#endif +++ +++#ifndef __com_sun_star_xml_crypto_XCipherContext_idl__ +++#include +++#endif +++ +++#ifndef __com_sun_star_lang_IllegalArgumentException_idl__ +++#include +++#endif +++ +++//============================================================================ +++ +++ module com { module sun { module star { module xml { module crypto { +++ +++//============================================================================ +++/** This interface allows to get an object that allows to encrypt/decrypt data +++ using the specified algorithm. +++ +++ @since OOo 3.4 +++ */ +++interface XCipherContextSupplier : com::sun::star::uno::XInterface +++{ +++ //------------------------------------------------------------------------ +++ /** returns an object that allows to encrypt/decrypt data. +++ +++ @param nCipherID +++ the internal ID specifying the algorithm, +++ should take value from CipherID +++ +++ @param aKey +++ the key that should be used for the encryption +++ +++ @param aInitializationVector +++ the initialization vector that should be used for the encryption +++ +++ @param bEncryption +++ whether an encryption or decryption cipher should be created +++ - Encryption +++ - Decryption +++ +++ @param aParams +++ optional parameters that could be used to initialize the cipher, +++ +++ @throws ::com::sun::star::lang::IllegalArgumentException +++ one of provided arguments is illegal +++ */ +++ +++ XCipherContext getCipherContext( [in] long nCipherID, [in] sequence< byte > aKey, [in] sequence< byte > aInitializationVector, [in] boolean bEncryption, [in] sequence< ::com::sun::star::beans::NamedValue > aParams ) +++ raises( ::com::sun::star::lang::IllegalArgumentException ); +++}; +++ +++//============================================================================ +++ +++}; }; }; }; }; +++ +++#endif ++diff --git a/offapi/com/sun/star/xml/crypto/XDigestContext.idl b/offapi/com/sun/star/xml/crypto/XDigestContext.idl ++new file mode 100644 ++index 0000000..36c1d99 ++--- /dev/null +++++ offapi/com/sun/star/xml/crypto/XDigestContext.idl ++@@ -0,0 +1,73 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++#ifndef __com_sun_star_xml_crypto_xdigestcontext_idl_ +++#define __com_sun_star_xml_crypto_xdigestcontext_idl_ +++ +++#ifndef __com_sun_star_uno_XInterface_idl__ +++#include +++#endif +++ +++#ifndef __com_sun_star_lang_DisposedException_idl__ +++#include +++#endif +++ +++//============================================================================ +++ +++ module com { module sun { module star { module xml { module crypto { +++ +++//============================================================================ +++/** This interface allows to generate the digest. +++

+++ The algorithm to generate the digest is specified on object creation. +++

+++ +++ @see XDigestContextSupplier +++ @since OOo 3.4 +++ */ +++interface XDigestContext : com::sun::star::uno::XInterface +++{ +++ //------------------------------------------------------------------------ +++ /** update the digest with the given data. +++ +++ @param aData +++ data that should be used to update the digest +++ */ +++ void updateDigest( [in] sequence< byte > aData ) +++ raises( ::com::sun::star::lang::DisposedException ); +++ +++ //------------------------------------------------------------------------ +++ /** finalizes digest and disposes context. +++ */ +++ sequence finalizeDigestAndDispose() +++ raises( ::com::sun::star::lang::DisposedException ); +++}; +++ +++//============================================================================ +++ +++}; }; }; }; }; +++ +++#endif ++diff --git a/offapi/com/sun/star/xml/crypto/XDigestContextSupplier.idl b/offapi/com/sun/star/xml/crypto/XDigestContextSupplier.idl ++new file mode 100644 ++index 0000000..edb77a5 ++--- /dev/null +++++ offapi/com/sun/star/xml/crypto/XDigestContextSupplier.idl ++@@ -0,0 +1,82 @@ +++/************************************************************************* +++ * +++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +++ * +++ * Copyright 2000, 2010 Oracle and/or its affiliates. +++ * +++ * OpenOffice.org - a multi-platform office productivity suite +++ * +++ * This file is part of OpenOffice.org. +++ * +++ * OpenOffice.org is free software: you can redistribute it and/or modify +++ * it under the terms of the GNU Lesser General Public License version 3 +++ * only, as published by the Free Software Foundation. +++ * +++ * OpenOffice.org is distributed in the hope that it will be useful, +++ * but WITHOUT ANY WARRANTY; without even the implied warranty of +++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +++ * GNU Lesser General Public License version 3 for more details +++ * (a copy is included in the LICENSE file that accompanied this code). +++ * +++ * You should have received a copy of the GNU Lesser General Public License +++ * version 3 along with OpenOffice.org. If not, see +++ * +++ * for a copy of the LGPLv3 License. +++ * +++ ************************************************************************/ +++#ifndef __com_sun_star_xml_crypto_xdigestcontextsupplier_idl_ +++#define __com_sun_star_xml_crypto_xdigestcontextsupplier_idl_ +++ +++#ifndef __com_sun_star_uno_XInterface_idl__ +++#include +++#endif +++ +++#ifndef __com_sun_star_beans_NamedValue_idl__ +++#include +++#endif +++ +++#ifndef __com_sun_star_xml_crypto_XDigestContext_idl__ +++#include +++#endif +++ +++#ifndef __com_sun_star_lang_IllegalArgumentException_idl__ +++#include +++#endif +++ +++//============================================================================ +++ +++ module com { module sun { module star { module xml { module crypto { +++ +++//============================================================================ +++/** This interface allows to get an object to generate a digest of a specified +++ format. +++ +++ @since OOo 3.4 +++ */ +++interface XDigestContextSupplier : com::sun::star::uno::XInterface +++{ +++ //------------------------------------------------------------------------ +++ /** returns an object that allows to generate the specified digest. +++ +++ @param nDigestID +++ the internal ID specifying the algorithm, +++ should take value from DigestID +++ +++ @param aParams +++ optional parameters that could be used to initialize the digest, +++ for example, it could contain a key and etc. +++ +++ @throws ::com::sun::star::lang::IllegalArgumentException +++ one of provided arguments is illegal +++ */ +++ XDigestContext getDigestContext( +++ [in] long nDigestID, +++ [in] sequence< ::com::sun::star::beans::NamedValue > aParams ) +++ raises( ::com::sun::star::lang::IllegalArgumentException ); +++}; +++ +++//============================================================================ +++ +++}; }; }; }; }; +++ +++#endif ++diff --git a/offapi/com/sun/star/xml/crypto/makefile.mk b/offapi/com/sun/star/xml/crypto/makefile.mk ++index 4aa3957..c03b2a7 100644 ++--- offapi/com/sun/star/xml/crypto/makefile.mk +++++ offapi/com/sun/star/xml/crypto/makefile.mk ++@@ -58,6 +58,12 @@ IDLFILES=\ ++ XMLSignatureException.idl \ ++ XMLEncryptionException.idl \ ++ XUriBinding.idl \ +++ CipherID.idl \ +++ DigestID.idl \ +++ XCipherContext.idl \ +++ XCipherContextSupplier.idl \ +++ XDigestContext.idl \ +++ XDigestContextSupplier.idl \ ++ SecurityOperationStatus.idl ++ ++ # ------------------------------------------------------------------ ++-- ++1.7.5.4 ++ ++ ++From 25ff8db963820a82b9fba31d35d16cc15062ba6e Mon Sep 17 00:00:00 2001 ++From: Hanno Meyer-Thurow ++Date: Tue, 13 Sep 2011 13:23:28 +0100 ++Subject: [ure 3/7] add Oracle Java 1.7.0 recognition ++ ++Cherry-picked from . ++--- ++ .../OpenOfficeorg/javavendors_linux.xml | 4 ++++ ++ jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx | 2 ++ ++ jvmfwk/plugins/sunmajor/pluginlib/vendorlist.cxx | 1 + ++ 3 files changed, 7 insertions(+), 0 deletions(-) ++ ++diff --git a/jvmfwk/distributions/OpenOfficeorg/javavendors_linux.xml b/jvmfwk/distributions/OpenOfficeorg/javavendors_linux.xml ++index 2422195..874ca64 100644 ++--- jvmfwk/distributions/OpenOfficeorg/javavendors_linux.xml +++++ jvmfwk/distributions/OpenOfficeorg/javavendors_linux.xml ++@@ -9,6 +9,9 @@ ++ ++ 1.5.0 ++ +++ +++ 1.7.0 +++ ++ ++ 1.5.0 ++ ++@@ -25,6 +28,7 @@ ++ ++ ++ vnd.sun.star.expand:$URE_INTERNAL_LIB_DIR/sunjavaplugin.so +++ vnd.sun.star.expand:$URE_INTERNAL_LIB_DIR/sunjavaplugin.so ++ vnd.sun.star.expand:$URE_INTERNAL_LIB_DIR/sunjavaplugin.so ++ vnd.sun.star.expand:$URE_INTERNAL_LIB_DIR/sunjavaplugin.so ++ vnd.sun.star.expand:$URE_INTERNAL_LIB_DIR/sunjavaplugin.so ++diff --git a/jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx b/jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx ++index 9feee72..4d617c4 100644 ++--- jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx +++++ jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx ++@@ -112,6 +112,7 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) ++ ++ //Only do something if the sunjavaplugin created this JavaInfo ++ rtl::OUString sVendor1(RTL_CONSTASCII_USTRINGPARAM("Sun Microsystems Inc.")); +++ rtl::OUString sVendor9(RTL_CONSTASCII_USTRINGPARAM("Oracle Corporation")); ++ rtl::OUString sVendor2(RTL_CONSTASCII_USTRINGPARAM("IBM Corporation")); ++ rtl::OUString sVendor3(RTL_CONSTASCII_USTRINGPARAM("Blackdown Java-Linux Team")); ++ rtl::OUString sVendor4(RTL_CONSTASCII_USTRINGPARAM("Apple Inc.")); ++@@ -121,6 +122,7 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) ++ rtl::OUString sVendor8(RTL_CONSTASCII_USTRINGPARAM("The FreeBSD Foundation")); ++ if ( ! (sVendor1.equals(pInfo->sVendor) == sal_True ++ || sVendor2.equals(pInfo->sVendor) == sal_True +++ || sVendor9.equals(pInfo->sVendor) == sal_True ++ || sVendor3.equals(pInfo->sVendor) == sal_True ++ || sVendor4.equals(pInfo->sVendor) == sal_True ++ || sVendor5.equals(pInfo->sVendor) == sal_True ++diff --git a/jvmfwk/plugins/sunmajor/pluginlib/vendorlist.cxx b/jvmfwk/plugins/sunmajor/pluginlib/vendorlist.cxx ++index 059d8a0..3f4c734 100644 ++--- jvmfwk/plugins/sunmajor/pluginlib/vendorlist.cxx +++++ jvmfwk/plugins/sunmajor/pluginlib/vendorlist.cxx ++@@ -52,6 +52,7 @@ namespace jfw_plugin ++ */ ++ BEGIN_VENDOR_MAP() ++ VENDOR_MAP_ENTRY("Sun Microsystems Inc.", SunInfo) +++ VENDOR_MAP_ENTRY("Oracle Corporation", SunInfo) ++ VENDOR_MAP_ENTRY("IBM Corporation", OtherInfo) ++ VENDOR_MAP_ENTRY("Blackdown Java-Linux Team", OtherInfo) ++ VENDOR_MAP_ENTRY("Apple Inc.", OtherInfo) ++-- ++1.7.5.4 ++ ++ ++From e363458ffa31184dc2d2c58283457e0036ad506f Mon Sep 17 00:00:00 2001 ++From: Stephan Bergmann ++Date: Fri, 25 Nov 2011 11:01:18 +0100 ++Subject: [ure 4/7] duplicate "add Oracle Java 1.7.0 recognition" from ++ javavendors_linux -> wnt ++ ++Cherry-picked from . ++--- ++ .../OpenOfficeorg/javavendors_wnt.xml | 4 ++++ ++ 1 files changed, 4 insertions(+), 0 deletions(-) ++ ++diff --git a/jvmfwk/distributions/OpenOfficeorg/javavendors_wnt.xml b/jvmfwk/distributions/OpenOfficeorg/javavendors_wnt.xml ++index 267f02f..180a136 100644 ++--- jvmfwk/distributions/OpenOfficeorg/javavendors_wnt.xml +++++ jvmfwk/distributions/OpenOfficeorg/javavendors_wnt.xml ++@@ -9,6 +9,9 @@ ++ ++ 1.5.0 ++ +++ +++ 1.7.0 +++ ++ ++ 1.5.0 ++ ++@@ -16,6 +19,7 @@ ++ ++ ++ vnd.sun.star.expand:$URE_INTERNAL_LIB_DIR/sunjavaplugin.dll +++ vnd.sun.star.expand:$URE_INTERNAL_LIB_DIR/sunjavaplugin.dll ++ vnd.sun.star.expand:$URE_INTERNAL_LIB_DIR/sunjavaplugin.dll ++ ++ ++-- ++1.7.5.4 ++ ++reverting on repository writer from libreoffice-3.4.4.2 to merge-base 97513a3e07fee5b85a2256457d696a1825af2011 ++diff --git a/sw/source/core/graphic/ndgrf.cxx b/sw/source/core/graphic/ndgrf.cxx ++index 62a9a4b..0a11a93 100644 ++--- sw/source/core/graphic/ndgrf.cxx +++++ sw/source/core/graphic/ndgrf.cxx ++@@ -394,11 +394,12 @@ Size SwGrfNode::GetTwipSize() const ++ sal_Bool SwGrfNode::ImportGraphic( SvStream& rStrm ) ++ { ++ Graphic aGraphic; ++- const String aGraphicURL( aGrfObj.GetUserData() ); ++- if( !GraphicFilter::GetGraphicFilter()->ImportGraphic( aGraphic, aGraphicURL, rStrm ) ) +++ if( !GraphicFilter::GetGraphicFilter()->ImportGraphic( aGraphic, String(), rStrm ) ) ++ { +++ const String aUserData( aGrfObj.GetUserData() ); +++ ++ aGrfObj.SetGraphic( aGraphic ); ++- aGrfObj.SetUserData( aGraphicURL ); +++ aGrfObj.SetUserData( aUserData ); ++ return sal_True; ++ } ++ ++@@ -892,8 +893,7 @@ SwCntntNode* SwGrfNode::MakeCopy( SwDoc* pDoc, const SwNodeIndex& rIdx ) const ++ SvStream* pStrm = _GetStreamForEmbedGrf( refPics, aStrmName ); ++ if ( pStrm ) ++ { ++- const String aGraphicURL( aGrfObj.GetUserData() ); ++- GraphicFilter::GetGraphicFilter()->ImportGraphic( aTmpGrf, aGraphicURL, *pStrm ); +++ GraphicFilter::GetGraphicFilter()->ImportGraphic( aTmpGrf, String(), *pStrm ); ++ delete pStrm; ++ } ++ // <-- ++commits on repository writer merge-base 97513a3e07fee5b85a2256457d696a1825af2011 to libreoffice-3.4.5.2 ++From 1a6c6a66b72ca64641cb16b3c49c40aba06602f1 Mon Sep 17 00:00:00 2001 ++From: Thorsten Behrens ++Date: Tue, 25 Oct 2011 20:54:01 +0200 ++Subject: [writer 01/11] Fix fdo#41995 fallout - recognize .svg in odt ++ container ++ ++Seems the graphic load code is stupid and not using the path name / ++file extension to guess file type, but only "magic byte" detection. ++Giving filter framework the path now, so that .svg actually loads. ++ ++This parrots 050350f326629c6edffcdb2cf288893027f264e6, but for ++Writer, which sadly sports its own Graphic implementation. ++ ++Signed-off-by: Noel Power ++--- ++ sw/source/core/graphic/ndgrf.cxx | 10 +++++----- ++ 1 files changed, 5 insertions(+), 5 deletions(-) ++ mode change 100644 => 100755 sw/source/core/graphic/ndgrf.cxx ++ ++diff --git a/sw/source/core/graphic/ndgrf.cxx b/sw/source/core/graphic/ndgrf.cxx ++old mode 100644 ++new mode 100755 ++index 0a11a93..62a9a4b ++--- sw/source/core/graphic/ndgrf.cxx +++++ sw/source/core/graphic/ndgrf.cxx ++@@ -394,12 +394,11 @@ Size SwGrfNode::GetTwipSize() const ++ sal_Bool SwGrfNode::ImportGraphic( SvStream& rStrm ) ++ { ++ Graphic aGraphic; ++- if( !GraphicFilter::GetGraphicFilter()->ImportGraphic( aGraphic, String(), rStrm ) ) +++ const String aGraphicURL( aGrfObj.GetUserData() ); +++ if( !GraphicFilter::GetGraphicFilter()->ImportGraphic( aGraphic, aGraphicURL, rStrm ) ) ++ { ++- const String aUserData( aGrfObj.GetUserData() ); ++- ++ aGrfObj.SetGraphic( aGraphic ); ++- aGrfObj.SetUserData( aUserData ); +++ aGrfObj.SetUserData( aGraphicURL ); ++ return sal_True; ++ } ++ ++@@ -893,7 +892,8 @@ SwCntntNode* SwGrfNode::MakeCopy( SwDoc* pDoc, const SwNodeIndex& rIdx ) const ++ SvStream* pStrm = _GetStreamForEmbedGrf( refPics, aStrmName ); ++ if ( pStrm ) ++ { ++- GraphicFilter::GetGraphicFilter()->ImportGraphic( aTmpGrf, String(), *pStrm ); +++ const String aGraphicURL( aGrfObj.GetUserData() ); +++ GraphicFilter::GetGraphicFilter()->ImportGraphic( aTmpGrf, aGraphicURL, *pStrm ); ++ delete pStrm; ++ } ++ // <-- ++-- ++1.7.5.4 ++ ++ ++From e13ff3e8d415241a680c32e3993c5b23701ef2aa Mon Sep 17 00:00:00 2001 ++From: Noel Power ++Date: Tue, 8 Nov 2011 13:47:59 +0000 ++Subject: [writer 02/11] NO_STYLE default for borderlines mso import, fixes ++ image size issue bnc#718971 ++ ++Signed-off-by: Michael Meeks ++--- ++ sw/source/filter/ww8/ww8graf.cxx | 2 +- ++ 1 files changed, 1 insertions(+), 1 deletions(-) ++ ++diff --git a/sw/source/filter/ww8/ww8graf.cxx b/sw/source/filter/ww8/ww8graf.cxx ++index 3ee02ae..e26def2 100644 ++--- sw/source/filter/ww8/ww8graf.cxx +++++ sw/source/filter/ww8/ww8graf.cxx ++@@ -1479,7 +1479,7 @@ sal_Int32 SwWW8ImplReader::MatchSdrBoxIntoFlyBoxItem(const Color& rLineColor, ++ if( !rLineThick ) ++ return nOutsideThick; ++ ++- ::editeng::SvxBorderStyle nIdx = ::editeng::SOLID; +++ ::editeng::SvxBorderStyle nIdx = ::editeng::NO_STYLE; ++ ++ sal_Int32 nLineThick=rLineThick; ++ nOutsideThick = SwMSDffManager::GetEscherLineMatch(eLineStyle, ++-- ++1.7.5.4 ++ ++ ++From 4c7dc58e47796ff502bbdc5fb93c648c30fc4daf Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= ++Date: Wed, 7 Dec 2011 17:23:47 +0100 ++Subject: [writer 03/11] =?UTF-8?q?backport=20of=203524727db0f3cfecf3a4704679?= ++ =?UTF-8?q?5c527808c10c3e=20commit=203524727db0f3cfecf3a47046795c527808c10c3?= ++ =?UTF-8?q?e=20Author:=20Caol=C3=A1n=20McNamara=20=20Dat?= ++ =?UTF-8?q?e:=20=20=20Thu=20Jun=2023=2015:14:00=202011=20+0100?= ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++ Related: #i58612# don't crash anyway ++--- ++ sw/source/core/text/frmform.cxx | 11 ++++++----- ++ sw/source/core/text/inftxt.cxx | 3 ++- ++ sw/source/core/text/txtfly.cxx | 6 ++++-- ++ sw/source/core/text/txtfrm.cxx | 7 +++++-- ++ 4 files changed, 17 insertions(+), 10 deletions(-) ++ ++diff --git a/sw/source/core/text/frmform.cxx b/sw/source/core/text/frmform.cxx ++index 80c8c76..c383c7e 100644 ++--- sw/source/core/text/frmform.cxx +++++ sw/source/core/text/frmform.cxx ++@@ -1445,10 +1445,11 @@ void SwTxtFrm::_Format( SwTxtFormatter &rLine, SwTxtFormatInfo &rInf, ++ ++ if( IsFollow() && IsFieldFollow() && rLine.GetStart() == GetOfst() ) ++ { ++- const SwLineLayout* pLine; +++ SwTxtFrm *pMaster = FindMaster(); +++ OSL_ENSURE( pMaster, "SwTxtFrm::Format: homeless follow" ); +++ const SwLineLayout* pLine=NULL; +++ if (pMaster) ++ { ++- SwTxtFrm *pMaster = FindMaster(); ++- OSL_ENSURE( pMaster, "SwTxtFrm::Format: homeless follow" ); ++ if( !pMaster->HasPara() ) ++ pMaster->GetFormatted(); ++ SwTxtSizeInfo aInf( pMaster ); ++@@ -1456,8 +1457,8 @@ void SwTxtFrm::_Format( SwTxtFormatter &rLine, SwTxtFormatInfo &rInf, ++ aMasterLine.Bottom(); ++ pLine = aMasterLine.GetCurr(); ++ } ++- SwLinePortion* pRest = ++- rLine.MakeRestPortion( pLine, GetOfst() ); +++ SwLinePortion* pRest = pLine ? +++ rLine.MakeRestPortion(pLine, GetOfst()) : NULL; ++ if( pRest ) ++ rInf.SetRest( pRest ); ++ else ++diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx ++index ee9f9b9..87a81cd 100644 ++--- sw/source/core/text/inftxt.cxx +++++ sw/source/core/text/inftxt.cxx ++@@ -1469,7 +1469,8 @@ void SwTxtFormatInfo::Init() ++ if ( GetTxtFrm()->IsFollow() ) ++ { ++ const SwTxtFrm* pMaster = GetTxtFrm()->FindMaster(); ++- const SwLinePortion* pTmpPara = pMaster->GetPara(); +++ OSL_ENSURE(pMaster, "pTxtFrm without Master"); +++ const SwLinePortion* pTmpPara = pMaster ? pMaster->GetPara() : NULL; ++ ++ // there is a master for this follow and the master does not have ++ // any contents (especially it does not have a number portion) ++diff --git a/sw/source/core/text/txtfly.cxx b/sw/source/core/text/txtfly.cxx ++index 78f7021..e2d734d 100644 ++--- sw/source/core/text/txtfly.cxx +++++ sw/source/core/text/txtfly.cxx ++@@ -895,7 +895,7 @@ sal_Bool SwTxtFly::IsAnyObj( const SwRect &rRect ) const ++ const SwCntntFrm* SwTxtFly::_GetMaster() ++ { ++ pMaster = pCurrFrm; ++- while( pMaster->IsFollow() ) +++ while( pMaster && pMaster->IsFollow() ) ++ pMaster = (SwCntntFrm*)pMaster->FindMaster(); ++ return pMaster; ++ } ++@@ -1614,7 +1614,9 @@ SwAnchoredObjList* SwTxtFly::InitAnchoredObjList() ++ SwTwips SwTxtFly::CalcMinBottom() const ++ { ++ SwTwips nRet = 0; ++- const SwSortedObjs *pDrawObj = GetMaster()->GetDrawObjs(); +++ const SwCntntFrm *pLclMaster = GetMaster(); +++ OSL_ENSURE(pLclMaster, "SwTxtFly without master"); +++ const SwSortedObjs *pDrawObj = pLclMaster ? pLclMaster->GetDrawObjs() : NULL; ++ const sal_uInt32 nCount = pDrawObj ? pDrawObj->Count() : 0; ++ if( nCount ) ++ { ++diff --git a/sw/source/core/text/txtfrm.cxx b/sw/source/core/text/txtfrm.cxx ++index d90794b..77343ab 100644 ++--- sw/source/core/text/txtfrm.cxx +++++ sw/source/core/text/txtfrm.cxx ++@@ -650,9 +650,12 @@ void SwTxtFrm::HideAndShowObjects() ++ } ++ } ++ ++- if ( IsFollow() ) +++ if (IsFollow()) ++ { ++- FindMaster()->HideAndShowObjects(); +++ SwTxtFrm *pMaster = FindMaster(); +++ OSL_ENSURE(pMaster, "SwTxtFrm without master"); +++ if (pMaster) +++ pMaster->HideAndShowObjects(); ++ } ++ } ++ ++-- ++1.7.5.4 ++ ++ ++From f4fb39640571fd588299ecd603733eaf94e61605 Mon Sep 17 00:00:00 2001 ++From: Michael Stahl ++Date: Fri, 18 Nov 2011 14:07:11 +0100 ++Subject: [writer 04/11] i#102333: SwDoc::ReplaceRangeImpl: ++ ++The fix for this (230fcf4a456636bb466f72834cd57238621d206d) was not ++quite right; there are 2 different join modes, and moving the cursor ++backward is required in one of them, but not the other. ++ ++This can be seen when doing replace all ^$ with several consecutive ++empty lines. ++ ++Signed-off-by: Michael Meeks ++--- ++ sw/source/core/doc/docedt.cxx | 7 +++++-- ++ 1 files changed, 5 insertions(+), 2 deletions(-) ++ ++diff --git a/sw/source/core/doc/docedt.cxx b/sw/source/core/doc/docedt.cxx ++index 297c42f..b6eadc3 100644 ++--- sw/source/core/doc/docedt.cxx +++++ sw/source/core/doc/docedt.cxx ++@@ -2482,8 +2482,11 @@ SetRedlineMode( eOld ); ++ rPam.GetMark()->nNode = aPtNd; ++ rPam.GetMark()->nContent.Assign( aPtNd.GetNode().GetCntntNode(), ++ nPtCnt ); ++- if( bJoinTxt ) ++- rPam.Move( fnMoveBackward ); +++ +++ if (bJoinTxt && !bJoinPrev) +++ { +++ rPam.Move(fnMoveBackward); +++ } ++ ++ if( pUndoRpl ) ++ { ++-- ++1.7.5.4 ++ ++ ++From 4eec19b1d634b66580423eb995621f87b422a46a Mon Sep 17 00:00:00 2001 ++From: Michael Stahl ++Date: Fri, 18 Nov 2011 14:12:42 +0100 ++Subject: [writer 05/11] fdo#40831: SwView::ExecSearch: ++ ++Replace may delete nodes, so the current cursor position must be stored ++in a way so that it is corrected when nodes are removed. ++ ++Signed-off-by: Michael Meeks ++--- ++ sw/source/ui/uiview/viewsrch.cxx | 17 +++++++++++++++-- ++ 1 files changed, 15 insertions(+), 2 deletions(-) ++ ++diff --git a/sw/source/ui/uiview/viewsrch.cxx b/sw/source/ui/uiview/viewsrch.cxx ++index b3e8d6e..cf4e14a 100644 ++--- sw/source/ui/uiview/viewsrch.cxx +++++ sw/source/ui/uiview/viewsrch.cxx ++@@ -30,6 +30,9 @@ ++ #include "precompiled_sw.hxx" ++ ++ #include +++ +++#include +++ ++ #include ++ #include ++ #include ++@@ -57,6 +60,8 @@ ++ #include ++ #include ++ #include +++#include +++#include ++ ++ #include ++ #include ++@@ -283,7 +288,14 @@ void SwView::ExecSearch(SfxRequest& rReq, sal_Bool bNoMessage) ++ case SVX_SEARCHCMD_REPLACE_ALL: ++ { ++ SwSearchOptions aOpts( pWrtShell, pSrchItem->GetBackward() ); ++- SwCrsrSaveState aSaveCursor( *pWrtShell->GetSwCrsr()); +++ +++ // Fix for i#8288: "Replace all" should leave the cursor at the place it was +++ // before executing the command, rather than at the site of the final replacement. +++ // To do this take note of the current cursor position before replace all begins: +++ // note: must be stored so that it is corrected by PamCorr* +++ ::boost::scoped_ptr const pTmpCursor( +++ pWrtShell->GetDoc()->CreateUnoCrsr( +++ *pWrtShell->GetSwCrsr()->GetPoint())); ++ ++ if( !pSrchItem->GetSelection() ) ++ { ++@@ -304,7 +316,8 @@ void SwView::ExecSearch(SfxRequest& rReq, sal_Bool bNoMessage) ++ pWrtShell->StartAllAction(); ++ nFound = FUNC_Search( aOpts ); ++ // #i8288# Now that everything has been replaced, restore the original cursor position. ++- pWrtShell->GetSwCrsr()->RestoreSavePos(); // (position saved by SwCrsrSaveState above) +++ *(pWrtShell->GetSwCrsr()->GetPoint()) = +++ *pTmpCursor->GetPoint(); ++ pWrtShell->EndAllAction(); ++ } ++ ++-- ++1.7.5.4 ++ ++ ++From 7529f2499558d08d76f02a5de200ac29fdeb3ea3 Mon Sep 17 00:00:00 2001 ++From: Michael Meeks ++Date: Tue, 13 Dec 2011 09:29:32 +0000 ++Subject: [writer 06/11] docx: Back-port Lubos' comment export work ++ ++Signed-off-by: Michael Stahl ++--- ++ sw/inc/docufld.hxx | 1 + ++ sw/source/filter/ww8/attributeoutputbase.hxx | 3 + ++ sw/source/filter/ww8/docxattributeoutput.cxx | 50 +++++++++++++++-- ++ sw/source/filter/ww8/docxattributeoutput.hxx | 8 +++ ++ sw/source/filter/ww8/docxexport.cxx | 76 +++++++++++++++++++++++++- ++ sw/source/filter/ww8/docxexport.hxx | 5 ++ ++ sw/source/filter/ww8/wrtw8nds.cxx | 2 + ++ 7 files changed, 138 insertions(+), 7 deletions(-) ++ ++diff --git a/sw/inc/docufld.hxx b/sw/inc/docufld.hxx ++index 1818bec..3240aa2 100644 ++--- sw/inc/docufld.hxx +++++ sw/inc/docufld.hxx ++@@ -532,6 +532,7 @@ public: ++ virtual String Expand() const; ++ virtual SwField* Copy() const; ++ +++ inline const DateTime GetDateTime() const { return aDateTime; } ++ inline const Date GetDate() const { return aDateTime.GetDate(); } ++ inline const Time GetTime() const { return aDateTime.GetTime(); } ++ ++diff --git a/sw/source/filter/ww8/attributeoutputbase.hxx b/sw/source/filter/ww8/attributeoutputbase.hxx ++index 84e58f7..92385fd 100644 ++--- sw/source/filter/ww8/attributeoutputbase.hxx +++++ sw/source/filter/ww8/attributeoutputbase.hxx ++@@ -173,6 +173,9 @@ public: ++ /// docx requires footnoteRef/endnoteRef tag at the beginning of each of them ++ virtual void FootnoteEndnoteRefTag() {}; ++ +++ /// for docx w:commentReference +++ virtual void WritePostitFieldReference() {}; +++ ++ /// Output text (inside a run). ++ virtual void RunText( const String& rText, rtl_TextEncoding eCharSet ) = 0; ++ ++diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx ++index 693549c..5dfb281 100644 ++--- sw/source/filter/ww8/docxattributeoutput.cxx +++++ sw/source/filter/ww8/docxattributeoutput.cxx ++@@ -548,7 +548,7 @@ void DocxAttributeOutput::EndRun() ++ } ++ ++ // Write the hyperlink and toc fields starts ++- for ( std::vector::iterator pIt = m_Fields.begin(); pIt != m_Fields.end(); ++pIt ) +++ for ( std::vector::iterator pIt = m_Fields.begin(); pIt != m_Fields.end(); ) ++ { ++ // Add the fields starts for hyperlinks, TOCs and index marks ++ if ( pIt->bOpen && !pIt->pField ) ++@@ -557,10 +557,11 @@ void DocxAttributeOutput::EndRun() ++ ++ // Remove the field if no end needs to be written ++ if ( !pIt->bClose ) { ++- m_Fields.erase( pIt ); ++- --pIt; +++ pIt = m_Fields.erase( pIt ); +++ continue; ++ } ++ } +++ ++pIt; ++ } ++ ++ DoWriteBookmarks( ); ++@@ -3212,9 +3213,40 @@ void DocxAttributeOutput::HiddenField( const SwField& /*rFld*/ ) ++ OSL_TRACE( "TODO DocxAttributeOutput::HiddenField()\n" ); ++ } ++ ++-void DocxAttributeOutput::PostitField( const SwField* /* pFld*/ ) +++void DocxAttributeOutput::PostitField( const SwField* pFld ) ++ { ++- OSL_TRACE( "TODO DocxAttributeOutput::PostitField()\n" ); +++ assert( dynamic_cast< const SwPostItField* >( pFld )); +++ m_postitFields.push_back( static_cast< const SwPostItField* >( pFld )); +++} +++ +++void DocxAttributeOutput::WritePostitFieldReference() +++{ +++ while( m_postitFieldsMaxId < m_postitFields.size()) +++ { +++ OString idstr = OString::valueOf( sal_Int32( m_postitFieldsMaxId )); +++ m_pSerializer->singleElementNS( XML_w, XML_commentReference, FSNS( XML_w, XML_id ), idstr.getStr(), FSEND ); +++ ++m_postitFieldsMaxId; +++ } +++} +++ +++void DocxAttributeOutput::WritePostitFields() +++{ +++ for( unsigned int i = 0; +++ i < m_postitFields.size(); +++ ++i ) +++ { +++ OString idstr = OString::valueOf( sal_Int32( i )); +++ const SwPostItField* f = m_postitFields[ i ]; +++ m_pSerializer->startElementNS( XML_w, XML_comment, FSNS( XML_w, XML_id ), idstr.getStr(), +++ FSNS( XML_w, XML_author ), rtl::OUStringToOString( f->GetPar1(), RTL_TEXTENCODING_UTF8 ).getStr(), +++ FSNS( XML_w, XML_date ), impl_DateTimeToOString(f->GetDateTime()).getStr(), FSEND ); +++ // Check for the text object existing, it seems that it can be NULL when saving a newly created +++ // comment without giving focus back to the main document. As GetTxt() is empty in that case as well, +++ // that is probably a bug in the Writer core. +++ if( f->GetTextObject() != NULL ) +++ GetExport().WriteOutliner( *f->GetTextObject(), TXT_ATN ); +++ m_pSerializer->endElementNS( XML_w, XML_comment ); +++ } ++ } ++ ++ bool DocxAttributeOutput::DropdownField( const SwField* pFld ) ++@@ -4118,7 +4150,8 @@ DocxAttributeOutput::DocxAttributeOutput( DocxExport &rExport, FSHelperPtr pSeri ++ m_nTableDepth( 0 ), ++ m_bParagraphOpened( false ), ++ m_nColBreakStatus( COLBRK_NONE ), ++- m_pParentFrame( NULL ) +++ m_pParentFrame( NULL ), +++ m_postitFieldsMaxId( 0 ) ++ { ++ } ++ ++@@ -4154,4 +4187,9 @@ bool DocxAttributeOutput::HasEndnotes() ++ return !m_pEndnotesList->isEmpty(); ++ } ++ +++bool DocxAttributeOutput::HasPostitFields() const +++{ +++ return !m_postitFields.empty(); +++} +++ ++ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ++diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx ++index 0875b46..3c80b8f 100644 ++--- sw/source/filter/ww8/docxattributeoutput.hxx +++++ sw/source/filter/ww8/docxattributeoutput.hxx ++@@ -102,6 +102,8 @@ public: ++ ++ virtual void FootnoteEndnoteRefTag(); ++ +++ virtual void WritePostitFieldReference(); +++ ++ /// Output text (inside a run). ++ virtual void RunText( const String& rText, rtl_TextEncoding eCharSet = RTL_TEXTENCODING_UTF8 ); ++ ++@@ -579,6 +581,9 @@ private: ++ ++ const sw::Frame *m_pParentFrame; ++ +++ std::vector< const SwPostItField* > m_postitFields; +++ unsigned int m_postitFieldsMaxId; +++ ++ public: ++ DocxAttributeOutput( DocxExport &rExport, ::sax_fastparser::FSHelperPtr pSerializer, oox::drawingml::DrawingML* pDrawingML ); ++ ++@@ -602,6 +607,9 @@ public: ++ ++ /// Output the content of the footnotes.xml resp. endnotes.xml ++ void FootnotesEndnotes( bool bFootnotes ); +++ +++ bool HasPostitFields() const; +++ void WritePostitFields(); ++ }; ++ ++ #endif // _DOCXATTRIBUTEOUTPUT_HXX_ ++diff --git a/sw/source/filter/ww8/docxexport.cxx b/sw/source/filter/ww8/docxexport.cxx ++index 33312da..0b29aea 100644 ++--- sw/source/filter/ww8/docxexport.cxx +++++ sw/source/filter/ww8/docxexport.cxx ++@@ -53,6 +53,9 @@ ++ #include ++ #include ++ +++#include +++#include +++ ++ #include ++ #include ++ #include ++@@ -337,7 +340,9 @@ void DocxExport::ExportDocument_Impl() ++ WriteMainText(); ++ ++ WriteFootnotesEndnotes(); ++- +++ +++ WritePostitFields(); +++ ++ WriteNumbering(); ++ ++ WriteFonts(); ++@@ -515,6 +520,26 @@ void DocxExport::WriteFootnotesEndnotes() ++ } ++ } ++ +++void DocxExport::WritePostitFields() +++{ +++ if ( m_pAttrOutput->HasPostitFields() ) +++ { +++ m_pFilter->addRelation( m_pDocumentFS->getOutputStream(), +++ S( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments" ), +++ S( "comments.xml" ) ); +++ +++ ::sax_fastparser::FSHelperPtr pPostitFS = +++ m_pFilter->openFragmentStreamWithSerializer( S( "word/comments.xml" ), +++ S( "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml" ) ); +++ +++ pPostitFS->startElementNS( XML_w, XML_comments, MainXmlNamespaces( pPostitFS )); +++ m_pAttrOutput->SetSerializer( pPostitFS ); +++ m_pAttrOutput->WritePostitFields(); +++ m_pAttrOutput->SetSerializer( m_pDocumentFS ); +++ pPostitFS->endElementNS( XML_w, XML_comments ); +++ } +++} +++ ++ void DocxExport::WriteNumbering() ++ { ++ if ( !pUsedNumTbl ) ++@@ -716,6 +741,55 @@ bool DocxExport::ignoreAttributeForStyles( sal_uInt16 nWhich ) const ++ return MSWordExportBase::ignoreAttributeForStyles( nWhich ); ++ } ++ +++void DocxExport::WriteOutliner(const OutlinerParaObject& rParaObj, sal_uInt8 nTyp) +++{ +++ const EditTextObject& rEditObj = rParaObj.GetTextObject(); +++ MSWord_SdrAttrIter aAttrIter( *this, rEditObj, nTyp ); +++ +++ sal_uInt16 nPara = rEditObj.GetParagraphCount(); +++ for( sal_uInt16 n = 0; n < nPara; ++n ) +++ { +++ if( n ) +++ aAttrIter.NextPara( n ); +++ +++ AttrOutput().StartParagraph( ww8::WW8TableNodeInfo::Pointer_t()); +++ rtl_TextEncoding eChrSet = aAttrIter.GetNodeCharSet(); +++ String aStr( rEditObj.GetText( n )); +++ xub_StrLen nAktPos = 0; +++ xub_StrLen nEnd = aStr.Len(); +++ do { +++ AttrOutput().StartRun( NULL ); +++ xub_StrLen nNextAttr = aAttrIter.WhereNext(); +++ rtl_TextEncoding eNextChrSet = aAttrIter.GetNextCharSet(); +++ +++ if( nNextAttr > nEnd ) +++ nNextAttr = nEnd; +++ +++ bool bTxtAtr = aAttrIter.IsTxtAttr( nAktPos ); +++ if( !bTxtAtr ) +++ { +++ if( nAktPos == 0 && nNextAttr - nAktPos == aStr.Len()) +++ AttrOutput().RunText( aStr, eChrSet ); +++ else +++ { +++ String tmp( aStr.Copy( nAktPos, nNextAttr - nAktPos )); +++ AttrOutput().RunText( tmp, eChrSet ); +++ } +++ } +++ AttrOutput().StartRunProperties(); +++ aAttrIter.OutAttr( nAktPos ); +++ AttrOutput().EndRunProperties( NULL ); +++ +++ nAktPos = nNextAttr; +++ eChrSet = eNextChrSet; +++ aAttrIter.NextPos(); +++ AttrOutput().EndRun(); +++ } while( nAktPos < nEnd ); +++// aAttrIter.OutParaAttr(false); +++ AttrOutput().EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t()); +++ } +++} +++ ++ DocxExport::DocxExport( DocxExportFilter *pFilter, SwDoc *pDocument, SwPaM *pCurrentPam, SwPaM *pOriginalPam ) ++ : MSWordExportBase( pDocument, pCurrentPam, pOriginalPam ), ++ m_pFilter( pFilter ), ++diff --git a/sw/source/filter/ww8/docxexport.hxx b/sw/source/filter/ww8/docxexport.hxx ++index ee84dcd..3eaec51 100644 ++--- sw/source/filter/ww8/docxexport.hxx +++++ sw/source/filter/ww8/docxexport.hxx ++@@ -152,6 +152,8 @@ public: ++ /// Returns the relationd id ++ rtl::OString OutputChart( com::sun::star::uno::Reference< com::sun::star::frame::XModel >& xModel, sal_Int32 nCount ); ++ +++ void WriteOutliner(const OutlinerParaObject& rOutliner, sal_uInt8 nTyp); +++ ++ protected: ++ /// Format-dependant part of the actual export. ++ virtual void ExportDocument_Impl(); ++@@ -190,6 +192,9 @@ private: ++ /// Write footnotes.xml and endnotes.xml. ++ void WriteFootnotesEndnotes(); ++ +++ /// Write comments.xml +++ void WritePostitFields(); +++ ++ /// Write the numbering table. ++ virtual void WriteNumbering(); ++ ++diff --git a/sw/source/filter/ww8/wrtw8nds.cxx b/sw/source/filter/ww8/wrtw8nds.cxx ++index 02659bf..fae1dbc 100644 ++--- sw/source/filter/ww8/wrtw8nds.cxx +++++ sw/source/filter/ww8/wrtw8nds.cxx ++@@ -2020,6 +2020,8 @@ void MSWordExportBase::OutputTextNode( const SwTxtNode& rNode ) ++ } ++ } ++ +++ AttrOutput().WritePostitFieldReference(); +++ ++ AttrOutput().EndRun(); ++ ++ nAktPos = nNextAttr; ++-- ++1.7.5.4 ++ ++ ++From 2e183bde347bff8f617a275beff12eb257aac719 Mon Sep 17 00:00:00 2001 ++From: Michael Stahl ++Date: Wed, 21 Dec 2011 16:39:22 +0100 ++Subject: [writer 09/11] sw: fdo#39159 fdo#40482: temp selection print doc: ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++Ensure that the printing temp selection document is not destroyed ++prematurely by SwXTextView::NotifySelChanged, called via ++ViewOptionAdjustStop, by retaining the temp doc object shell not ++at the View but in SwRenderData. ++ ++Not restoring the view options for selections does not actually work, ++because having a selection surprisingly does not imply printing a ++temp document: the preview also uses a selection. ++(view option regression from cd690d2e72be410058376c416a40ff5d918fb0f7) ++ ++backport of 89d2733e16ae6233deea6bef3193bd45c89b854c ++ ++Signed-off-by: Caolán McNamara ++Signed-off-by: Cedric Bosdonnat ++Signed-off-by: Petr Mladek ++--- ++ sw/inc/printdata.hxx | 11 +++++++++-- ++ sw/inc/unotxdoc.hxx | 3 +-- ++ sw/source/core/view/printdata.cxx | 13 +++++++++++-- ++ sw/source/ui/inc/view.hxx | 3 +-- ++ sw/source/ui/uiview/view.cxx | 18 ++++-------------- ++ sw/source/ui/uno/unotxdoc.cxx | 33 +++++++++++++++++++++------------ ++ sw/source/ui/uno/unotxvw.cxx | 8 -------- ++ 7 files changed, 47 insertions(+), 42 deletions(-) ++ ++diff --git a/sw/inc/printdata.hxx b/sw/inc/printdata.hxx ++index 99c5cb4..e90508f 100644 ++--- sw/inc/printdata.hxx +++++ sw/inc/printdata.hxx ++@@ -28,10 +28,10 @@ ++ #ifndef SW_PRINTDATA_HXX ++ #define SW_PRINTDATA_HXX ++ ++- ++ #include ++ #include ++ #include +++#include ++ ++ #include ++ #include ++@@ -246,6 +246,10 @@ class SwRenderData ++ ++ rtl::OUString m_aPageRange; ++ +++ // temp print document -- must live longer than m_pViewOptionAdjust! +++ // also this is a Lock and not a Ref because Ref does not delete the doc +++ SfxObjectShellLock m_xTempDocShell; +++ ++ // the view options to be applied for printing ++ SwViewOptionAdjust_Impl * m_pViewOptionAdjust; ++ ++@@ -267,9 +271,12 @@ public: ++ void CreatePostItData( SwDoc *pDoc, const SwViewOption *pViewOpt, OutputDevice *pOutDev ); ++ void DeletePostItData(); ++ +++ SfxObjectShellLock const& GetTempDocShell() const; +++ void SetTempDocShell(SfxObjectShellLock const&); +++ ++ bool IsViewOptionAdjust() const { return m_pViewOptionAdjust != 0; } ++ bool NeedNewViewOptionAdjust( const ViewShell& ) const; ++- void ViewOptionAdjustStart( ViewShell &rSh, const SwViewOption &rViewOptions, bool bIsTmpSelection ); +++ void ViewOptionAdjustStart( ViewShell &rSh, const SwViewOption &rViewOptions); ++ void ViewOptionAdjust( SwPrintData const* const pPrtOptions ); ++ void ViewOptionAdjustStop(); ++ ++diff --git a/sw/inc/unotxdoc.hxx b/sw/inc/unotxdoc.hxx ++index ab8ae52..ca8ee42 100644 ++--- sw/inc/unotxdoc.hxx +++++ sw/inc/unotxdoc.hxx ++@@ -588,10 +588,9 @@ class SwViewOptionAdjust_Impl ++ { ++ ViewShell & m_rShell; ++ SwViewOption m_aOldViewOptions; ++- bool m_bIsTmpSelection; ++ ++ public: ++- SwViewOptionAdjust_Impl( ViewShell& rSh, const SwViewOption &rViewOptions, bool bIsTmpSelection ); +++ SwViewOptionAdjust_Impl( ViewShell& rSh, const SwViewOption &rViewOptions ); ++ ~SwViewOptionAdjust_Impl(); ++ void AdjustViewOptions( SwPrintData const* const pPrtOptions ); ++ bool checkShell( const ViewShell& rCompare ) const ++diff --git a/sw/source/core/view/printdata.cxx b/sw/source/core/view/printdata.cxx ++index a60bd67..c904738 100644 ++--- sw/source/core/view/printdata.cxx +++++ sw/source/core/view/printdata.cxx ++@@ -108,19 +108,28 @@ void SwRenderData::DeletePostItData() ++ } ++ } ++ +++SfxObjectShellLock const& SwRenderData::GetTempDocShell() const +++{ +++ return m_xTempDocShell; +++} +++void SwRenderData::SetTempDocShell(SfxObjectShellLock const& xShell) +++{ +++ m_xTempDocShell = xShell; +++} +++ ++ bool SwRenderData::NeedNewViewOptionAdjust( const ViewShell& rCompare ) const ++ { ++ return m_pViewOptionAdjust ? ! m_pViewOptionAdjust->checkShell( rCompare ) : true; ++ } ++ ++ ++-void SwRenderData::ViewOptionAdjustStart( ViewShell &rSh, const SwViewOption &rViewOptions, bool bIsTmpSelection ) +++void SwRenderData::ViewOptionAdjustStart( ViewShell &rSh, const SwViewOption &rViewOptions ) ++ { ++ if (m_pViewOptionAdjust) ++ { ++ DBG_ASSERT( 0, "error: there should be no ViewOptionAdjust active when calling this function" ); ++ } ++- m_pViewOptionAdjust = new SwViewOptionAdjust_Impl( rSh, rViewOptions, bIsTmpSelection ); +++ m_pViewOptionAdjust = new SwViewOptionAdjust_Impl( rSh, rViewOptions ); ++ } ++ ++ ++diff --git a/sw/source/ui/inc/view.hxx b/sw/source/ui/inc/view.hxx ++index 57ca1c9..cf39873 100644 ++--- sw/source/ui/inc/view.hxx +++++ sw/source/ui/inc/view.hxx ++@@ -647,8 +647,7 @@ public: ++ ++ void NotifyDBChanged(); ++ ++- SfxObjectShellLock & GetTmpSelectionDoc(); ++- SfxObjectShellLock & GetOrCreateTmpSelectionDoc(); +++ SfxObjectShellLock CreateTmpSelectionDoc(); ++ ++ void AddTransferable(SwTransferable& rTransferable); ++ ++diff --git a/sw/source/ui/uiview/view.cxx b/sw/source/ui/uiview/view.cxx ++index c0eb7f4..f6912af 100644 ++--- sw/source/ui/uiview/view.cxx +++++ sw/source/ui/uiview/view.cxx ++@@ -1800,22 +1800,12 @@ void SwView::NotifyDBChanged() ++ } ++ ++ /*-------------------------------------------------------------------- ++- Beschreibung: Drucken +++ Printing ++ --------------------------------------------------------------------*/ ++-SfxObjectShellLock & SwView::GetTmpSelectionDoc() +++SfxObjectShellLock SwView::CreateTmpSelectionDoc() ++ { ++- return GetViewImpl()->GetTmpSelectionDoc(); ++-} ++- ++-SfxObjectShellLock & SwView::GetOrCreateTmpSelectionDoc() ++-{ ++- SfxObjectShellLock &rxTmpDoc = GetViewImpl()->GetTmpSelectionDoc(); ++- if (!rxTmpDoc.Is()) ++- { ++- SwXTextView *pImpl = GetViewImpl()->GetUNOObject_Impl(); ++- rxTmpDoc = pImpl->BuildTmpSelectionDoc(); ++- } ++- return rxTmpDoc; +++ SwXTextView *const pImpl = GetViewImpl()->GetUNOObject_Impl(); +++ return pImpl->BuildTmpSelectionDoc(); ++ } ++ ++ void SwView::AddTransferable(SwTransferable& rTransferable) ++diff --git a/sw/source/ui/uno/unotxdoc.cxx b/sw/source/ui/uno/unotxdoc.cxx ++index 8fad3d7..490dec8 100644 ++--- sw/source/ui/uno/unotxdoc.cxx +++++ sw/source/ui/uno/unotxdoc.cxx ++@@ -2420,7 +2420,18 @@ SwDoc * SwXTextDocument::GetRenderDoc( ++ const TypeId aSwViewTypeId = TYPE(SwView); ++ if (rpView && rpView->IsA(aSwViewTypeId)) ++ { ++- SfxObjectShellLock xDocSh(((SwView*)rpView)->GetOrCreateTmpSelectionDoc()); +++ if (!m_pRenderData) +++ { +++ OSL_FAIL("GetRenderDoc: no renderdata"); +++ return 0; +++ } +++ SwView *const pSwView(static_cast(rpView)); +++ SfxObjectShellLock xDocSh(m_pRenderData->GetTempDocShell()); +++ if (!xDocSh.Is()) +++ { +++ xDocSh = pSwView->CreateTmpSelectionDoc(); +++ m_pRenderData->SetTempDocShell(xDocSh); +++ } ++ if (xDocSh.Is()) ++ { ++ pDoc = ((SwDocShell*)&xDocSh)->GetDoc(); ++@@ -2547,7 +2558,10 @@ sal_Int32 SAL_CALL SwXTextDocument::getRendererCount( ++ if (m_pRenderData && m_pRenderData->NeedNewViewOptionAdjust( *pViewShell ) ) ++ m_pRenderData->ViewOptionAdjustStop(); ++ if (m_pRenderData && !m_pRenderData->IsViewOptionAdjust()) ++- m_pRenderData->ViewOptionAdjustStart( *pViewShell, *pViewShell->GetViewOptions(), rSelection.hasValue() ); +++ { +++ m_pRenderData->ViewOptionAdjustStart( +++ *pViewShell, *pViewShell->GetViewOptions() ); +++ } ++ } ++ ++ m_pRenderData->SetSwPrtOptions( new SwPrintData ); ++@@ -3834,21 +3848,16 @@ void SwXDocumentPropertyHelper::onChange() ++ m_pDoc->SetModified(); ++ } ++ ++-SwViewOptionAdjust_Impl::SwViewOptionAdjust_Impl( ViewShell& rSh, const SwViewOption &rViewOptions, bool bIsTmpSelection ) : ++- m_rShell( rSh ), ++- m_aOldViewOptions( rViewOptions ), ++- m_bIsTmpSelection( bIsTmpSelection ) +++SwViewOptionAdjust_Impl::SwViewOptionAdjust_Impl( +++ ViewShell& rSh, const SwViewOption &rViewOptions) +++ : m_rShell( rSh ) +++ , m_aOldViewOptions( rViewOptions ) ++ { ++ } ++ ++ SwViewOptionAdjust_Impl::~SwViewOptionAdjust_Impl() ++ { ++- //fdo#39159 don't restore original view options on a temporary document ++- //selection, it triggers throwing away the current view. Presumably we can ++- //forget about it in the temporary document case as unimportant to restore ++- //the original view settings ++- if (!m_bIsTmpSelection) ++- m_rShell.ApplyViewOptions( m_aOldViewOptions ); +++ m_rShell.ApplyViewOptions( m_aOldViewOptions ); ++ } ++ ++ void ++diff --git a/sw/source/ui/uno/unotxvw.cxx b/sw/source/ui/uno/unotxvw.cxx ++index 1c1fca6..3d6c36a 100644 ++--- sw/source/ui/uno/unotxvw.cxx +++++ sw/source/ui/uno/unotxvw.cxx ++@@ -886,14 +886,6 @@ void SwXTextView::NotifySelChanged() ++ { ++ OSL_ENSURE( m_pView, "view is missing" ); ++ ++- // destroy temporary document with selected text that is used ++- // in PDF export of (multi-)selections. ++- if (m_pView && m_pView->GetTmpSelectionDoc().Is()) ++- { ++- m_pView->GetTmpSelectionDoc()->DoClose(); ++- m_pView->GetTmpSelectionDoc() = 0; ++- } ++- ++ uno::Reference< uno::XInterface > xInt = (cppu::OWeakObject*)(SfxBaseController*)this; ++ ++ lang::EventObject aEvent(xInt); ++-- ++1.7.5.4 ++ ++ ++From 7f978af6476d73246d7cf6c29b48e88a7465f44e Mon Sep 17 00:00:00 2001 ++From: Winfried Donkers ++Date: Fri, 9 Dec 2011 17:44:20 +0100 ++Subject: [writer 10/11] fdo#36874: Label PRINTING misplaced on paper sheet ++ ++Signed-off-by: Petr Mladek ++Signed-off-by: Bjoern Michaelsen ++Signed-off-by: Lubos Lunak ++--- ++ sw/source/ui/app/applab.cxx | 10 +++++++--- ++ 1 files changed, 7 insertions(+), 3 deletions(-) ++ ++diff --git a/sw/source/ui/app/applab.cxx b/sw/source/ui/app/applab.cxx ++index 00809fe..f1f8536 100644 ++--- sw/source/ui/app/applab.cxx +++++ sw/source/ui/app/applab.cxx ++@@ -266,10 +266,14 @@ void SwModule::InsertLab(SfxRequest& rReq, sal_Bool bLabel) ++ ++ aDesc.SetUseOn(nsUseOnPage::PD_ALL); // Site numbering ++ +++ // fix (fdo36874) revised page size calculation ++ // Set page size ++- rFmt.SetFmtAttr(SwFmtFrmSize(ATT_FIX_SIZE, ++- rItem.lLeft + rItem.nCols * rItem.lHDist + MINLAY, ++- rItem.lUpper + rItem.nRows * rItem.lVDist + MINLAY)); +++ long lPgWidth, lPgHeight; +++ lPgWidth = (((rItem.lLeft + (rItem.nCols - 1) * rItem.lHDist + rItem.lWidth + rItem.lLeft) > MINLAY) ? +++ (rItem.lLeft + (rItem.nCols - 1) * rItem.lHDist + rItem.lWidth + rItem.lLeft) : MINLAY); +++ lPgHeight = (((rItem.lUpper + (rItem.nRows - 1) * rItem.lVDist + rItem.lHeight + rItem.lUpper) > MINLAY) ? +++ (rItem.lUpper + (rItem.nRows - 1) * rItem.lVDist + rItem.lHeight + rItem.lUpper) : MINLAY); +++ rFmt.SetFmtAttr( SwFmtFrmSize( ATT_FIX_SIZE, lPgWidth, lPgHeight )); ++ ++ // Numbering type ++ SvxNumberType aType; ++-- ++1.7.5.4 ++