[Libreoffice-commits] core.git: 0001-drawingML-export-transparency-of-solid-filled-shape.patch include/oox oox/source sw/qa
Zolnai Tamás
tamas.zolnai at collabora.com
Thu Jan 30 00:43:14 PST 2014
0001-drawingML-export-transparency-of-solid-filled-shape.patch | 469 ++++++++++
include/oox/export/drawingml.hxx | 6
oox/source/export/drawingml.cxx | 55 -
sw/qa/extras/ooxmlexport/data/dml-solidfill-alpha.docx |binary
sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 11
5 files changed, 526 insertions(+), 15 deletions(-)
New commits:
commit 4fa88a5a636e133a6d3fa4269db2c7f52d89bc75
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date: Mon Jan 27 12:07:59 2014 +0100
drawingML export: transparency of solid filled shape
Change-Id: I97968dd5f5233e17870bdfdf2864ae8ce9179080
diff --git a/0001-drawingML-export-transparency-of-solid-filled-shape.patch b/0001-drawingML-export-transparency-of-solid-filled-shape.patch
new file mode 100644
index 0000000..0d057eb
--- /dev/null
+++ b/0001-drawingML-export-transparency-of-solid-filled-shape.patch
@@ -0,0 +1,469 @@
+From b619805c7d21ddd22c7d30b52047b6e98edf160c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zolnai=20Tam=C3=A1s?= <tamas.zolnai at collabora.com>
+Date: Mon, 27 Jan 2014 12:07:59 +0100
+Subject: [PATCH] drawingML export: transparency of solid filled shape
+
+Change-Id: I97968dd5f5233e17870bdfdf2864ae8ce9179080
+---
+ helpcontent2 | 2 +-
+ include/oox/export/drawingml.hxx | 6 +--
+ oox/source/export/drawingml.cxx | 55 ++++++++++++++++-----
+ .../ooxmlexport/data/dml-solidfill-alpha.docx | Bin 0 -> 17049 bytes
+ sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 13 +++++
+ 5 files changed, 60 insertions(+), 16 deletions(-)
+ create mode 100644 sw/qa/extras/ooxmlexport/data/dml-solidfill-alpha.docx
+
+diff --git a/helpcontent2 b/helpcontent2
+index d1b5923..63d3d0a 160000
+--- a/helpcontent2
++++ b/helpcontent2
+@@ -1 +1 @@
+-Subproject commit d1b5923e46b6bca00d9e2875bc94d904be894e78
++Subproject commit 63d3d0a24085e9bbad5518be9d13284e0b1bfa06
+diff --git a/include/oox/export/drawingml.hxx b/include/oox/export/drawingml.hxx
+index 31c6f20..42dd305 100644
+--- a/include/oox/export/drawingml.hxx
++++ b/include/oox/export/drawingml.hxx
+@@ -114,13 +114,13 @@ public:
+
+ OUString WriteImage( const Graphic &rGraphic );
+
+- void WriteColor( sal_uInt32 nColor );
++ void WriteColor( sal_uInt32 nColor, sal_Int32 nAlpha = 0 );
+ void WriteGradientStop( sal_uInt16 nStop, sal_uInt32 nColor );
+ void WriteLineArrow( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet, sal_Bool bLineStart );
+ void WriteConnectorConnections( EscherConnectorListEntry& rConnectorEntry, sal_Int32 nStartID, sal_Int32 nEndID );
+
+- void WriteSolidFill( sal_uInt32 nColor );
+- void WriteSolidFill( OUString sSchemeName );
++ void WriteSolidFill( sal_uInt32 nColor, sal_Int32 nAlpha = 0 );
++ void WriteSolidFill( OUString sSchemeName, sal_Int32 nAlpha = 0 );
+ void WriteSolidFill( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet );
+ void WriteGradientFill( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet );
+ void WriteBlipFill( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet, OUString sURLPropName, sal_Int32 nXmlNamespace );
+diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
+index db05030..f8d1bdc 100644
+--- a/oox/source/export/drawingml.cxx
++++ b/oox/source/export/drawingml.cxx
+@@ -21,6 +21,7 @@
+ #include "oox/export/drawingml.hxx"
+ #include "oox/export/utils.hxx"
+ #include <oox/token/tokens.hxx>
++#include <oox/drawingml/drawingmltypes.hxx>
+
+ #include <cstdio>
+ #include <com/sun/star/awt/CharSet.hpp>
+@@ -148,7 +149,7 @@ bool DrawingML::GetPropertyAndState( Reference< XPropertySet > rXPropSet, Refere
+ return bRetValue;
+ }
+
+-void DrawingML::WriteColor( sal_uInt32 nColor )
++void DrawingML::WriteColor( sal_uInt32 nColor, sal_Int32 nAlpha )
+ {
+ OString sColor = OString::number( nColor, 16 );
+ if( sColor.getLength() < 6 ) {
+@@ -164,22 +165,43 @@ void DrawingML::WriteColor( sal_uInt32 nColor )
+
+ sColor = sBuf.getStr();
+ }
+- mpFS->singleElementNS( XML_a, XML_srgbClr, XML_val, sColor.getStr(), FSEND );
++ if( nAlpha )
++ {
++ mpFS->startElementNS( XML_a, XML_srgbClr, XML_val, sColor.getStr(), FSEND );
++ mpFS->singleElementNS( XML_a, XML_alpha, XML_val, OString::number(nAlpha), FSEND );
++ mpFS->endElementNS( XML_a, XML_srgbClr );
++
++ }
++ else
++ {
++ mpFS->singleElementNS( XML_a, XML_srgbClr, XML_val, sColor.getStr(), FSEND );
++ }
+ }
+
+-void DrawingML::WriteSolidFill( sal_uInt32 nColor )
++void DrawingML::WriteSolidFill( sal_uInt32 nColor, sal_Int32 nAlpha )
+ {
+ mpFS->startElementNS( XML_a, XML_solidFill, FSEND );
+- WriteColor( nColor );
++ WriteColor( nColor, nAlpha );
+ mpFS->endElementNS( XML_a, XML_solidFill );
+ }
+
+-void DrawingML::WriteSolidFill( OUString sSchemeName )
++void DrawingML::WriteSolidFill( OUString sSchemeName, sal_Int32 nAlpha )
+ {
+ mpFS->startElementNS( XML_a, XML_solidFill, FSEND );
+- mpFS->singleElementNS( XML_a, XML_schemeClr, XML_val,
+- OUStringToOString( sSchemeName, RTL_TEXTENCODING_ASCII_US ).getStr(),
+- FSEND );
++ if( nAlpha )
++ {
++ mpFS->startElementNS( XML_a, XML_schemeClr, XML_val,
++ OUStringToOString( sSchemeName, RTL_TEXTENCODING_ASCII_US ).getStr(),
++ FSEND );
++ mpFS->singleElementNS( XML_a, XML_alpha, XML_val, OString::number(nAlpha), FSEND );
++ mpFS->endElementNS( XML_a, XML_schemeClr );
++ }
++ else
++ {
++ mpFS->singleElementNS( XML_a, XML_schemeClr, XML_val,
++ OUStringToOString( sSchemeName, RTL_TEXTENCODING_ASCII_US ).getStr(),
++ FSEND );
++ }
+ mpFS->endElementNS( XML_a, XML_solidFill );
+ }
+
+@@ -208,13 +230,22 @@ void DrawingML::WriteSolidFill( Reference< XPropertySet > rXPropSet )
+ aGrabBag[i].Value >>= aStyleProperties;
+ }
+
++ sal_Int32 nAlpha = 0;
++ if( GetProperty( rXPropSet, "FillTransparence" ) )
++ {
++ sal_Int32 nTransparency;
++ rXPropSet->getPropertyValue( "FillTransparence" ) >>= nTransparency;
++ // Calculate alpha value (see oox/source/drawingml/color.cxx : getTransparency())
++ nAlpha = (MAX_PERCENT - ( PER_PERCENT * nTransparency ) );
++ }
++
+ // write XML
+ if ( nFillColor != nOriginalColor )
+ // the user has set a different color for the shape
+- WriteSolidFill( nFillColor & 0xffffff );
++ WriteSolidFill( nFillColor & 0xffffff, nAlpha );
+ else if ( !sColorFillScheme.isEmpty() )
+ // the shape had a scheme color and the user didn't change it
+- WriteSolidFill( sColorFillScheme );
++ WriteSolidFill( sColorFillScheme, nAlpha );
+ else if ( aStyleProperties.hasElements() )
+ {
+ sal_uInt32 nThemeColor = 0;
+@@ -226,13 +257,13 @@ void DrawingML::WriteSolidFill( Reference< XPropertySet > rXPropSet )
+ }
+ if ( nFillColor != nThemeColor )
+ // the shape contains a theme but it wasn't being used
+- WriteSolidFill( nFillColor & 0xffffff );
++ WriteSolidFill( nFillColor & 0xffffff, nAlpha );
+ // in case the shape used the style color and the user didn't change it,
+ // we must not write a <a: solidFill> tag.
+ }
+ else
+ // the shape had a custom color and the user didn't change it
+- WriteSolidFill( nFillColor & 0xffffff );
++ WriteSolidFill( nFillColor & 0xffffff, nAlpha );
+ }
+
+ void DrawingML::WriteGradientStop( sal_uInt16 nStop, sal_uInt32 nColor )
+diff --git a/sw/qa/extras/ooxmlexport/data/dml-solidfill-alpha.docx b/sw/qa/extras/ooxmlexport/data/dml-solidfill-alpha.docx
+new file mode 100644
+index 0000000000000000000000000000000000000000..9f2c46d2e827207787caeacfd79af742e09c140a
+GIT binary patch
+literal 17049
+zcmeIZ1$P`tvNqgeW at ct)vdCg)mL*xt%*<dhGcz+;%*<dhqb+9EE6?tJvom+j_XqB+
+zK3$c4IwLCTsf>)sj0kxt5KvSAH~<m=01yG7NJISnfB=9fFaQ7r012!mWMl1UWbLS{
+z>}G4^@P*#h%91b-6qqsx0Q}Ma|BnB~2s9+f$OQ->2A`9^LDZ>%thzG}Cfw!RmdI3G
+zw$lqO4|^M$Jl~$<NlKOF7HW3HbTgknkHfG8%t$8B0Dq#kP+XLArv)alDjKIXs-7Eq
+zND{#e91%8yE3kwc7VR4g?{Pc at kd(2f)DeTa3~`MDH+1)NGdjj;Rg2_k@$bqGBQSw@
+zum4)NHIo6L?8uwdY;OVCGcgFU>dfq>^$Ug3ey`T8Xjdf9ph-ma6MyVA+|=Hw6#AT)
+z?ouNUUkw>>sT%TgucoKzEH&?vI>40J(-k?5 at nQBU!bEkF?KTEC*=)PPt%{WOHZkp5
+z6`0tlYOH{3=5s3EyC6L5FXW4JD)V)e(@kZ{K{xm~K4%wv?A@~Cf~KYNQ|ACg$^s?n
+z&NqKMwWAi5Ghy}K=dmt at lQ0+mJyvX`OPyY*uy at 7?(eEh4)9oOe+Rr8qmWELpvxd^`
+zPU6pf?|G-|{v~Aw*jx~Nl%}e}tD$UB4IYzc2xX^9f{Qy79IK8GPyoRDI|xAjFPe)V
+zi`{(vF&t$-6cgq{b9L>FEFBo=f1m$PWB(Vc>3=<XMBJ(*h#+k6IoRgcVK0tVXyV!B
+z4e?wT;$I+vsV6`#@Z$w5ogMjv-{n_z4sH&|<QCHd(&u at KKY>?&)mX?`O4k$Hv~aa*
+z4u_D}7}iSjH-QtItTD5;S!DPWn~?h{f~h=jr#@Jal#ke$r6ylHXt-1Pdkn4wlu~r;
+zIL>WE`S;GD8#R!$)S?v)I5U%TfyN<qcHKqzFC5t3(8lLWV_|5+5MOPU>Gi2CB?j#y
+z&8co_u`L;=$TDN~E1=o8%<>j)h2M3<qk?Fma-qVeu05SHKs0p_9GCOlhN^i8h%{)?
+zy*!?U0_qt|`95se|I`sro at 6fKkAGT0003M7B#?`Zy&=QD6vfcSz{%>v(EYY>|4|yC
+z4>R}C`+xUQ5icVb$oQ{mezpx&^-JV(9R}NSdDZ0_oswx_lH(x4TL)S_^k^Ogy^L{M
+z=hU1;n`YO7$_+4nWW9f(T`zIX=>8zOKd+^Y9KA*$sTDnqiC_(SOlAFU{sNwITrUx=
+zOn`!TEv34|ytZ9bS)iu=33km_F&<qh=t2fpl7)C$Uxqlt5ikA#qkwVKc$fo at N2>59
+zE0kd$6Q0UQe~aQQiyBt{ElA;QV@&2k24B!smz}MVhnC(Q-_KSFE=Q~bqYE$bZ-O0|
+zIuRs|Xj}QYSE3g3^F!}zX;<P1t`QNB1o=n99fFRxsNP%@S-miRHtuRy)-uJolZTGe
+zle4O4Wm!XN7Lq%bvSDgV>+kM~9S1sr2z=Ui at c%T%U~5TZ!;k?0AzA<c>0{{pF~<IT
+zbe(8EM(>Cxy?GVB639n2q#=Dd1;Md2t`lV+gjn(ga)?wV*}V6<{$Ue1GCulq^k-%k
+zex+(#5NQ8xr|ad;fJ6V`!<cRxCpMe2!jsw6OW<n+U*t)@G#$TPc6I~Fdzd?RVq%uM
+zdjk30wUSM;oX_ja`TJe6vvr{{-l_x}FroyP4a at c8NO_rM6k*}<a;?rA?z3 at hQmN9b
+zWf4;xca+VFcse?|e?BI6K^-yMX&vY*-A%#FSTRP+gH{7;J<4=)JbJB8B7bpEc)vT+
+z;xdJA)^VcEL#*yC04KAvw_r-nDRx{J_35Sv5jB+`)&0>Uk+KtO0OFO8v=svemX|mP
+z4+w9z;O6CIjPXr_l~MRyrSRYf_)PzdMH_oxsLhiH&J{m1gm!MT9(5<c8|2=PsUk!k
+zm-hs4ct2M0hKwZSW5vk80!*~w_#meI at O?^6Mt at yyL+_1iuAPHk9jR-mD~PzVp2Lax
+z{XSPh;vpCe<G^MbHWQxa{B?SC6ZB$Yme<wYm_JhAfxcBj^GFnw)tpHml=teG1rlA<
+z{Puz$r_lk?vf}j`<y#(SZNX*n58_GZ8}71=1%WXAhh;b)iSIPC^MZN`1r+o#4Yzgr
+zlDZHeCH!G4C?!I^h?WTRU-L%kkvr-z%oP39*-+`*QTuaeHYP2)YI>%%YIKP9!bt)Q
+z+3(|r<xXPvlNXRoZ&(YKniF1<{7L*~m)FkpFi7e_{7|#yIiU*1 at r}h3z_Ci$P4_vQ
+zH0TJd@`1qNAI(645k&Llhh4pUC4jvW0e;SE5uU#u&8}D_Z!njf5eT~<NIY2G{Ma}m
+z<&RPi(>;OGPN1jL`CJG at 7?{wokADGPH>(f6!gU1f+(;5E44mI=g!Bn`_(F)K@*?X&
+zhFHquq9+qVJ)dR}2fq`tM)(@}x%o;!%pFbdbeUW4g}bUIB<dAkLXu}?L+c4JT0Cjn
+z?A7_p=1=LSckeJqdWPTUn+~H^)rNjk$nSgXm5(?is8cvNj-G|OI1r at rRpLuSNIAES
+zVaUf;R3TVK<dwW at 0x80Pg(uJp2}yii%(YJIuB;JDEY`Zq7rXL`zHoyf3+96m2tE0b
+zyG9qFqs1qnQ%eBuYK9;}pz}ly%Zm$p@*{AQG&rlr-UB7d3lW76IJCP&$KAUj!~#S1
+zwU3n%Y8Tx0jo7OqmYKzkKspCj^;MR^R|v!hu$pWR<DEfim7P7CJU=%q75*%?U&E^o
+zm4hCLUn7u}J=(qqgV;?>1+?uu2npP+Dilm;!a0n3ZV_?MCV|JGxP^haL}_#o6L?yF
+z#CD8o<_V6#3VsJ&cGC~)#m}Fra+#)~Oo&j{y*Su_Wh~Br$7*ly`&>4(CkVmoY|=5T
+z)7}CMqZi*vUu2W<ID<YZ7RT(A$o;l;tb6jLfBqE=c*rXZ-8Kv%>L!jrvjbE(<qeqv
+z2~nS5#u2ij9bY8aI#`cuie(dYrYW^Ah`qn+p2#A>e;*EHWs~P<z=wee6+)}&>xLlb
+zUFB%{Tz&RP#Z$e>bCueJnfWlA_ha2yI>N~Cn}c>y_7<%-cEMqEDXt{RYAK%)JENK6
+z1pn6 at 5=+YJ*^~SoS~{;5pJ!0xp)Qb+`TSOEUodU8XdOP&i{sj3i<8#l;{o5dMd<IT
+zHr^O}jZZM3o?9=f1L<<p5PZCz=J?M^Xh8h3hgEYLde}Yq-Wv9_<;)dh;;;|mKY?A&
+z-+=4{joS=+&XJO`XJiaWpCLUn<1rhX#|Gn2s+m<oI?5(EgNz>EAB2WpQbj at PoeHic
+z(<hY&Ba42pxeH*FQr2wOYK?K^l0^Ie0Nq2!nC^RPmpC7ekTn0!))u1{7|AnX!IoU?
+zVGIzKy5hctsVhAS?Ng;2lQ>n?s2q at v_|V{LJSo_xGenHHp4N?_6(X+lDwZN=_BiXx
+z;!*oTN7i^d at liP6)g$$SAeSBz?_;sr)`9!QB4~8Op-ac6lIYh&BZ<CjY-)wOWAmL^
+z6SUKwc-hXjy%kOEyhdEsgVa0<kS)R0gJkyBc<pU+{YGx*RYj*Hi(}4R{j(gpo2tyy
+z>%cUHdM&JTw3R`*%SmGn;Y{6h1E(yoNP?Cd at MDN>6}MU$F0t#&)bv4AM*a}O%3e<%
+z4Ol;1VbFm1M#XKzk*zUp^73KCL{VAQ8Gvc%Dx>m4dk4!mwdmG^@2fl*f;K$-oKL#|
+zv@~hj)^Y-xC#;UU7NsrdT7$#_Mph67Gvd#<{Ysv+oBXVwBwSl7i&jP(2RX7G at WhHv
+zVxk`cW-_K($&v<p+hFjvr+YV;Z55SA%ag^zRSEMyPnz|01+BaNI{X2II8^;sJAHXk
+zHm at G2Ld_wFWPl;Ja`#=3C&C`i-;fqf*~rj0;Zrz)f==e?%wCH|7I_bAA)ZzT2Gs$A
+z?<z|GlIJH?D!jQ;rq%h-AoXv4)m4V4=df}Dz0^eG+S7<_DTc;#^qnS$K=O)Mbe!tS
+zd;USh3ZH7O(XpS&tIn9KZo$9XRPjn+9(I1Bs|AN>vR2;v=}7C|Gh=A{1?*Q^+w-qP
+zJivW1xY3!Zf_oV*{UlDMPSAv5S!~@<)}R#)3;PsJtoV9dOv5DGw{j5}d@%O}tr^Kg
+zO<aUCd;Bp}Vg%o-rNu$$@&*<(sq58<ns}7DRdQb5RmV{vey{_5B8eaCEp<_<rLv1w
+z-%(6Eg`N_Ps=k~m7aWo~^nO0ARs2>MfY1A^&Yme-ua-$xeFckjnfSx7jgFz3fe&fM
+zLIdp{=VyfbNaSi(RL3X2jL048m}1cz&^9M}J$@cjS04N2&+WDm)tG7GEZz9HUb8`D
+ze3^}3vlgT<+U$$x)U$tLxsmlb45o=#97RRg7HnfaGsRcmstYL at 0Wyfk?OfE2?wz6~
+z(jy&lNl+<v?*bJPI9YirhNDaDKSN8<CqEjYXDzP#bAmVTVyUAo2kW<2YHuZ_l)?Kh
+z_a{~|4QV{sH%U)%$8S1QXjDO?wa&0RP*T|0F|)5=Sr*i`Q at 30zkYl&~+|6ho%hSO-
+zn`E-2JVTrT$w4F5VAQCX>TS{qiB-$#<{E5%{hIqtX%_BsV%rn$d^U+~caD5!bQ%(*
+z2Pvo?*)g!1ijHBepa984$`0UIDANlb>tR6#biAe=e)7da7nf;{i_&*<Hc2Mq*6mQT
+ztcI)9ARm?zTEfe#qbR+uT^o~G>Z!X}79>Zh4qSs8cdn7I?iNZg)|4qOlDunsyLZg+
+zkT27|{uqq_Vn(K}W0_mjT+7zUIc%+!1}+P7&cPD-u?H6r56Yn^ik|;-&FRp)3<a%n
+zd8`rZhUO-;z?z^&m5<zcy-_RvF|p;bp0<Uh49WUbX{YXXl!2{!WAxG)a3edBiMnpY
+z*a2h7T${dIroy9yN at i^AlGP at WHs*yQd#A(Kht<fr4EDVTvR0xWw*pe+=$e~5pvFSF
+z3<%LF54`FNs4GlgJ at Z@{cAqvDA`qr=ts!X_ezPN#!>4 at znrZ)pn)8V)_{cDofYRQO
+z;?25EIN$qiq!#r_`Do+IIz}h3WZ};gc_6!&uv7VZznr<iY1qyfrD at B#nP?@q_uCuJ
+z4uK);s_HS|qiBpj0fOU*hJL2;G6m;W%Hi(_ca$o=QLknG+9xKfI?G~U$Q at tikaa3L
+zg`bf7f!2&}?Jubx0tsj1l|0v3>%rM%7>aTk$2L}nA2Q(7+f+ZoM9ln4e(q^Oq^7Ya
+z_6w2Lz&<_bcR#23{#4dbjnrR(qhVwIMRuR^UGU8ju)k5Fe8X8*sB$6JgVgDv&_--t
+znNgvK2<V(!{Uw}~**#7d%z*qeG*ZTNnj^hjaiIO=6S#o-W5+2(#q(1iHnr at JB-=7N
+zeAgdAk<zeWI$?=hRF9A~5z+p~2B5)yQ(}V#Ext*(d$24>^`KpSuze at 1V%CCOa`(*+
+zF3BGD5AS at 09!nMEuUI<}bQgrdt|0C*!xwg!wwdB#$Ax}00ZDx^L{}V|^aXiTF5sYg
+zDkWrV0MFOl9HqBj0*LM&DnFt6pH49VEq}6lC4n>&-^%SnH&aM>l&u?+BBW2|FF^R3
+zco1hb;j9h1Qg-?~(laxgHB^!>hZaUWmMuLRtN{>v#+<@Yv(g+ujnG)%uta!34t;a4
+zhniR<ClK*>@zY<o122|d`*wShS%Aj9#)bsy4v3gDuytAqZ9zYqIgehf at qb28$*#>7
+z>tiy#8EU at 1&)!l1%MirpZAX*<-xKMiF6FD=8r}i6r>{NOMDr65SQeei=cRc;dWL$2
+zq8Q<Sy(vfD(#T4{;?yKJMgTQAQmgdCj(L3O8V!Tn+YApE->Tryu!Zp)ozeTu5|Of+
+zq}#JYRjX%*nhj*~Ot3vYY{SKBe{pE}79jNOTlb=7XG-887LzgEHElZYB0*;h??bld
+zjcC?oxbtyls91StAchO9BM at FG{`evgpF+gmb%l$!eF at MyE#ES1Q1r<Z-+j!q)uonY
+z7mbYy&rsSd_)_ at gfy`&(YJaT9&aM5vH%Lc3)@`ouAdf^={H{&tV8zh(?x at e%m^hP-
+z#reJ$`Lq6PnOf(p2&zouYvR}?A4Nnh-DWXJPNR0EXW>wEoISAgw4_Q&xGO>WO=?NK
+zc at K7J5-n(|g|Gt)Pqn;xS{05njcbU^>Opx2P70Z8st?!lf)xOEFv~X2g~on4L)+7`
+zmbcZEBhqsM!M+AltUrqXo{tl%45c$qcAnF0XxTEKqE7s-=d6woIU!uS#c34}LV$18
+zx-n6MIw(T!i}qYal);i~^Ox3N5u53x>CJYEH*QJcf{5o%3Fkc?ah5akZ6$eQ8q=q6
+zR`J5^_ggrW&L$GBd8k1 at la9PO@=5ELr^XHWMZbK_6iVCLnpRu<wj-nuzO2EFUPQ7g
+zBe>BLK at uSRqyANOE)W8W^_JnlwMzh9j9j|}h4x_Bz=xH7cB6$=v;Lq at L@-1nX^nox
+zyj^ptK9M7-0Y_rwbLJV0<>39Kf-wbY053V%+>Z_cr19_E1-^wzi7c)lIM*r$bOp8!
+z9S+nO4LSzMPffFG2Y9JEiK<~Xiv1Ajgr6B8NuDeHA7a at 7ap~o!cj)>CXOcG at ua$Z{
+zQ7ntrpHJrp?jS>1_z6{{v`&*a*3!3djqaKHT$CgoMwNPg#EGnTEVz2O*Q9Hi+ng*y
+z<c=hter*(kvXj;#{hV0T!XJ1^Ux1Q`?2>LgL7$oGfOiNl`X!0GwE4hG)S68UF at I&p
+z6P5!U4g=L?a$w)uBmI&zTrXL=@w`GY<Zx`|-sW<#bHO4EA7jZ&1Ke}$OW+x?HU)8X
+zsIXn0OqGe+(kbTph&w=9+$QfXF-1JikD-)4i|Em at jh&Q$u2vTE*`3+?SMW08-cpJ6
+zhC-LR at fjJInTXS_^#;lw$kvbQsFaskZDdb9E!GEieF&%!2*FMpTHI-><X_$1xMYS7
+zw297Cc<BM5-`sV1EmNB2ln4~v*(VlPgKC78yvVo2x5BG}Ec)$sWCp;%b#P+_%m%qQ
+zNMb77sW-y|250B&sV>TY7A)YnXypV1I~&lSM>KMiK4~bWgna>vl~a{eJy at Mn9Ry|P
+z1<|3KQ8Z3BN0pe8^$(O at bi_QdfR$fSv|Y;3w71w;0YVgUrG@>j+WWJSlP4*m^C*UJ
+z{Y;9U<*p-i55tN*v#70mCF4GAH`fA+AbUoFW<={aLVF}9{!9dOMd7iAsHut0X+H#>
+zr7hCTo{KLQBbpOgpP2B5ez|cv4zjnQ!re3(2CF^PRZdm4^m8DbVHT$iAaHLQ8QSaO
+z at yz4Xuz#n)UJj+}t{|*0L5IN;w1=SIvN4`Oc#^T4pnC&rEdmh1<wgF*I~yTTi8?zg
+zN?|LW+JsI{fSUQQWKDQ%U={wGj%tBsXuUZd0Wf!c-)4g(1l=Xa?y9s4({jEI?mAeP
+z5HKZ-S at -e$3yawZTgveoQJ?g!^P}3$p3GQIKc#o~GgzG}Ng-F1EBRv)Fih45W4twT
+z)5GYo&psH6;&yPPLt3jw`W=m)^7>sN;bnZgx(ZqhmRh%ucy#x60nI#Q1ZqCn{Q(hc
+zHb!UNZS=M>;P!bwhWRURRwsCGOde|fFz{Q!(3qDDRgG}-SspC`)V6eBATDj)Xd%vL
+zem4ne^3lh`+9DynTe85E6g60uirq8_x^<$ODrPTa2<L2`BW~<1$e^4XSkP5Jn;a-)
+zdJ>zPE40*v?(C8+;oF-*BLNg<{#u6epyRK$iE5OdM~D~jy_40_Is1lBEz_WB2tv57
+zb3?p*-P-<AW__odQ}1NI_cQ<J-YDa`5LF2{08oGf0HFP6-^$U{$jXS}k2BNnozW8w
+zIh$2>)GmZ27eYrH0}5ws2&ZpLwdr&+IQ`Zk_-0{AOY(UFvl3o7E4#ixec!)^pe<R2
+zeAV(pUn+cNUFNpLo35 at AQ;Zu>*NJ0a`c}zDiu}0y{EkmhTK?l~2o?{Sh)Qln=hc2f
+zi1gA;Aim~w9siD@(oLK?12p9_u%Ux0cB3)!ezWb{4;5j3e?2eaA9kzZ36ejOlL`>}
+z)O8N1B=oGuMIzAJzu8hDK0qD~TAH=0YJK^}B=ad at 3v+k_JGxYET0Z`U-F}A`ygDq-
+zz1u`TM*_tps0SRvDKbWB*$5a<fAP*&t~)w-uk#AAPq9aMwLCSuxxvl}s at fzxMYE=<
+zp~}X4`Maf{ZH=YtH(O=K%6ptj8Z9s{5IuAJAHQzDceo2q0cy?zid2)BCq#WJH%82o
+z1n%szoSPRb*t9*v-bORVD`ku4ERE{a^S})Wa2y^QSIi9 at mV0nw1~?8cA}5WT+kS4r
+z4ezKOUcAy&E(C{j<b=-b>A_dxt(=?8!wjd?pGrPpcmFWQ@(lJjrOcD6$GjG%`__oL
+zxtoUofHPE|0WCF?99#;aJlk<4rCfx);O;5J;@KN(C7OVd(4AIp>_AY0#bV08|M_ at d
+zoy9LQgph^D|8V at U-M0(Dulaeh%qk;rUxlIT^<-*@AfG?W`}%4IW5HEp at cpTeqU+_w
+zjSX?ugnTlbA^YX-WF)+r at Ab7!4DCY3Pt52cW>7dUeGl^V8WWX8)sBpU#I6&q4|4A6
+z+XQI>XHS|G*lX4|+?xq1<5U-1F7E!uEj*z8d}voM`za(>#IUeDv<#QLC7?6=Np5Xr
+z&97qD)TwTq620aJ`ig_62A=8zZQ&?GT^$n8PAmvgVwcv!xJ>t$vZ(M9pHXKWUVLMq
+zPtO#8E;%JX`AhMs9?^^7Nz=$M7m!e-8HYES!Fs2v9>cylTh at C(IB}NGx`*R_7axWm
+zrw$}QK1jLb&Z5Lsi^bhZNrdwTDKC*6?ooa)(w3vXa1_TB>+luVXgo*)cuC1__Q=;#
+zuXm0W)rO;f!&jbZ_v2z9X?_so=(W=f!kZ?gHsFteK+MBDwNnAx+_w%sa=8GJMgRT`
+zPZrfCR}J25b`;7AgUHK*gx1+E+k(;+K!szVFA0b0RIED0`q<VxL8)v#w!H(*kuZv(
+z%U>1qY(=-6UgM#%KYkbXxdYOr?vqO^<k6~bX7dH<GD!^Lwbp#w&Px at i$NS?>J7qRQ
+zC+SofBdY0o_>$;q!}?`!m4`GIP6-tWM}b*8*$J;80r)Mq!w%^H6>a2}f(bLDt!-|%
+zF&whCm#_+Js4cXN$NHS`=hRquGRfA!zC5g|g38P32O5ug%b!A_mAJ^|U+|Z<(Reem
+z*`S$4%cgNn9Ykr;x;0WOwMRnzt*iSgs)D##n!h7Wpo)ZO<<_y+awP<ez%1z1)R42X
+zL244!Tv2B{vRQDR=!pVbx%|psqZ@?5I3~v0_BG_2b)R}JvCc>s8qFZqM8JW4+H(E2
+zAi1WQc7kKe6COW$f(^5 at zu|$xu#fcV8d;tvHHwysf<kIqVfAB&CmsLFZsl&!RyKHu
+z6RcWlT}&Un*C at U^5bjwie%bJGJiStzi394V?d{i7zTz4s2t}d=^rTogIF`g9fD|hQ
+z&AUCyxVr+hvT}aCL~R{-&qcKakh9|#sX>FC^16B{k`?DWHkv}uyiiQx9whAAu%)3b
+zZ at jV`IRP?lmy~Zgx?9$=TC38n16)$yuOd@=mhHx8Ax-vGi%qje(5;~ri2~ec!XUn@
+zj9Mq~bWxM<Gl(bJW4=!*&pbn|@l}AXfbeO<!9+L~HSp3a_vb<vBHca%V?!wM5Nd9D
+zV-yjUZ27OeVC>1iH*=Yor8EQ!6|58!A*0 at rph11U%b`s@;t5jcU2UV4NJ3&pQbATL
+zQawT9BDE~B*ecst<wX at NNjHy61Pb86@;UQJ63mz9;M(_epw_6pU%`DS<{?NQ&q>e<
+zkr9et?Lw?IMKEqF`(l%H=wYLQ#LHw+kL{)ksGn7x9-Vz-6X85mwV+wd7#y3>=DgTx
+zA7oT#6{cDvB6@|m<EQpC?s7hYa~i(SZ6bbf%?%S=5>VEyi-ed3n}v_cv8xMUPhq99
+zSgCNDRUPB_1#{*I(@7CgNyZc2HDz{^$K|lh)#@5MI7xf5v=T+f%I11!_^o%ElYba<
+zC}qlUpFzXZ5dpUYY!jATS^`D-B2!ZDC>Mepf$)(|tln{#;U7(#5sj!q>PN`$*GG=a
+z{}+;RFmiM>vo>+~ZPpr8rEFF?5jz>C-}R2#qey?qqF7}RhyAh&chyopHnK at zZ3?{r
+zi>uptd%}y;pC{bNF`bDYc|3T96YF$+?p`)TSdphnlJJfrLqTk`ELoz9uXg!$tijBb
+z6dKG(rI(7^O=`oS`)W6X0bU`(#v+K(i`uS3UfEbCuB6o59mW+44eGB|%2n&S(3XJW
+zwOMLL*GinEnxNnzZld9w25Y^?eB3|@j-e!LK^M8EX`(oMnzYFHA`J6NVi&M4xrhhx
+z)vI3_qz|`%kxqr&eV6|ioRnpL{Hv7630JtgS5`*>SHh~)`X|j7ara39GmQWyaYU0`
+zZP^l6$M~siE_cgYs3vZ>TBSqiiR<y~!ErbbW1qm&?j5>H))_xzTtG5dbvObK5nCxH
+zyh`>|yi`VsjpCJrF6A^^T;OiYaNInQdc;~%lDfbWrQZ0I$%JoCedm%{uU%b|M2u at X
+zcvFGFU6gWRB6Q*%sDpQWCRp;RU?btD_xBw`F;6}%(01!E@<y;P)QScTI8+r$v_ILd
+z2+VA3zp=5q)m*Tg&ce-o3BLD3_qVNJ77t0?90u1u$Sj(|e(VzF1knY%8~fq<DW?Cv
+z!VE;6J75+cvx4a{&O3l+#`7ei at Zp>1epgJ76qKGW(-np1s|y5}1z}Sk`)iS2Rv25p
+zxlm)$Q-G<hvp1VMwuGbOj=iPyC(qbfQS3U)#<au3!(0qmE8)83m-WXJOnYxH_eLE&
+zp(^z7+vQs(!-#-XxW|j$%8aR}E8+~?5fpszz2FN;CFbRp!od9AaLG+wC8SGeTdKZ$
+z at nsdH3|SC8&aak{)r7!rY*%@?qLq5T*6ZMA+Gfska-$_LMZ7(4_H{Uqx*AWELl-Ub
+zfZdq1`LYq-N@|)D#9EKbm^GoaX*UHkP5Dk69a5rBk72?$N!}r?!<Iy%R;-`i%9TW_
+zQt8(@VAzGJJWom#Pp^!6kE$A5akRsm!Mnb^DV`dGuwP?t;2tm(I49=b+1f&HhidkH
+zP3VZK`;iaJ;V_*ZT_=)2C%SBwu-#nGV4LkX*ytMlixfZ8lLjlEm-Rf~HuV!q5P3=x
+zrGU=*V!vH-5C*Kpy!0K|r!CpwV9gh)9MirLkg6j~=bz&cR-*8A^>U7Q2MG%(#|1=5
+zIjzM%!<ZC9c;3wDy=DYt>~P0Gst3tlOvE!345Z{+sw?N!>vUs%+@^NB62{*DQI9cl
+z&}D%?0`e6fU)2A&s4hnOO8=$G5z{@AAWVqhTWwoBw5`p{iNtk|&4h}V#QskJGiPU<
+zal>9|^9nhel`=vd_c7Ac=v1H9Cjs3KknsHJQe&NRX#c{Vpi-r3hF{B(Wu&Q$m~uee
+zjSvduZ&&)MtFY-N;-xPMWt4)N4Vf!Ns9Kc+)<BWtRG%rMNtn`<C9_zuy;lcP$s)*G
+zBd_UCZ&kkNmfHkRDVXAB2JzJK1ja<YruAUN`dfZUAfU_6H`*a$)<C3s&f#}6)qXHa
+z8{mh`G(yInYp2bZLpcUfSxJ9#{aj7maN36&Ix(0G>QFE56&9^;f5i7y#&awIOr4-A
+z@;)IO|6D5f-Eht41C{^j)<=))#u0qXdsch^0QP?{b8vLCG;&Zgb2Jq(Ha0SF{MRI?
+zwW_$wiRiUi_6m`_NrZt}Cm)}xuV<WVPCpK6o{c6(L~S|t3&!vD$x5PWXQ_5Ql2 at +3
+zZoXJ+-Afbd=RJWg at TS{=9kC&&3&oJZkL_FvHDb?<HiUcKs5kpeQlsr}kIZ`x_lXo|
+zLkK=^m);(+1=W0VxQK}47^}nSZRxC$^rHFws~5gxLw*<fsl!h0CnI{KKP<K{XH*Bv
+zXB<Ca{gP9l<;^1Xbsp$7Nor|r$)T4K{RCRk7y*(*KE&*e3r6cbnnx0YU#m<T#4xKC
+z!^=n0Kirx=uq{$G9jhWv*UAXJ at AD1KZsHqAi}8NrO`UH at sVMHi8U&tUiluM^%Wmat
+zcfU;TtV24|l%MYSs%ZQib`~4fZosb;s~$8SKQ=oEb^{}Hu+C+O{mo3Za%75Kb_4rp
+zN+eZ?2<YdOAaWp-T(s+^N-7)rJ)!J}H=ZO7!-X(mezWH7_{755xSZt&X%n60hCtGs
+zr0?Ny;Vr*FHwI1(C=Hr!1oKb#<`s~Ry#ZzF66a~v8VAK;?h)rZFHAnOKAppiG8v~}
+zQlE&<{5}gv5(;ch7^OgBY}h6hB!}ri=vvQL1lY8b(n&m%s`lbh_3!b=JdVG#@?@fu
+zs7VHNFl7ft4=j=Me0QU?V0LkHy{VBGl8WJR(eP|&QSKF88Q-xPSu>q-b)78}9uF7?
+zVY1A$CnVBiBAdq;ZJWblOmllkES)gYpmso{19Xq-Z`aoCcFS}t!}Kj(Bvp4wo`+SV
+zQ?;kGVZ(qESfA??8RX2gdU#hcezolZu_IBXse%^fyF;|@|Mp(Ly)D$M)^?e#%gTF*
+z%$piSRpP at wr?5p)KE;3^jVj}R6hnpJqXy&K*NsPpTPaWOyprMvU55YC?3;l}fG at mk
+zTO^s5e`^Cat7_8WS2UVe2c$_a at gx3?SoS&G^@naC{D!v&)30hUT*D{#{(ey^>PuOf
+zLKFY$b_9w;I-+vb`MeSb5js<DwR!!5j|S;SgE+ at QWMVs$#{BJ6TfxEP7j(4QPMPRT
+z*an=k{$}|6p}7|gkc_+H7aj8q9`yR56cHRTw8gR&E5p{|Bq~`InPMA?F%fJjr?rzM
+zq>@Q$r_J$^>;Tg~WT4_J`kX8+pXw;S$<12dT?>eL9u!Zu^qZbNJ*c+p)FF;p-OHuc
+zLx#cpz}wBjddA`i*?sr#x8<&D1 at IZrDkG<$JQhng2bqjlUEhSy1ud8}*-~c7aQFM_
+zgIg at o-y*Ap(NVPmI3qK#_$XRhfpb+XH}jPC^W2 at CG;?u%nR*gnzC&s9efCk(KDtVb
+zW_n6jyb*nbe3jXD&-cV5IDI2ynP7XV*vXl-5S?77IUaM(d=!Cqob8Lq=s^cI0p<#;
+z^hA{yAI54I%bqMe?BU>$&WQ7>-BkdFUd96#p}^TduT!FK;2=^Lc9sXTknH|B)Cfw*
+zeEhaE_4yT2nhrdz at KmFoB~uRD86b)H6ZVxQ-s~RBeWlw?Jz*8mn_i+NK#0d|_!F%r
+zzFg4;lIL3W1(NTRiU6>Dm!depJT&@%CAu=qHRf#~)>ov+NNd1xDL2(k)YuqCm<9-B
+zL8kw)oX8{HAXkS2iP8{a;TJh@&`G8wUA+^EADjBRupXOoq%lDvSE4>@t96p!i3H&5
+z4C7uT06VxHNuV!=1Gt3W%_RU<Yy*;(nL}NcE}jEeTrSshp;^G_N)!;=+Eer8EnPw3
+zz9Hd`p&8_(f6z$|w;PH4 at P-+&4QNu<=deKNq(W}c#lJ8$#rz<K6WV~xdD~luW5#tO
+zsTp3=<7$-NfFxw*RnK8|Bk{dKh33E|waL8g%548b^bs7t&v&vx@~1>-ej*=Oj>T~R
+zOUdPe3PlwLr0dUr+ at R)9zF&uNfabH?+XRD2Y(UXdacGN^MsR?Hiy&Z>$!$OpQ*q$q
+znq>z!Wj7#E>jHl6MG6pk6n`#BIz&`AgixuW{Se5p{pO=*OxBeu;Wv>FBzp6H^JInn
+z5bY`6g=5%uFS481Az*+0x3I%EdVZrHun{}-30^I7U9J8W)>-}!$<LJ`7d}J{KgszM
+ziCMqp^bdgDM{#@|(G}KybEW+Q^4F0z97E14QN0gn?afm^`WU*`{2Ob*_4=UayrW;G
+z at xg@M8!VL8Y&k&1aI(F?2jFiz7WhJHMCYA&vnVw+F}_QP`06P95|4XZ^v>C=ppe*-
+zv|dEFiDznFQpNM3w#*jCq%H4u`)euSDJ$G~iq9N2IUXfz^aZQ&%Dae1shy(Jbtq^Y
+zV~MP$h>Bic++bqPpgMwrbJ{D#=v2M<7!^2F_WPdRo4Cr}U|);N^(S3Dy}Y>n?nqog
+zzMIB6k+s8_ZVOf`ha*3#xO(tN=mu7o&D-kgls8%|QYMU at Pn^rD8E<TyPN;S$If=E4
+zn0SS>JKf{*4m`9~<t#T}onH50`?Dl>n(+l7H0OTo5pFaat+l&<1qa>GwcC6jbS&4T
+z&Oa#S(=9$YHLS2O5SdpjDuqq^G4%AaWpOVC02xxpe4v0egG=!hoz^WwSJ(ztRYl1$
+zdd0gYO{)ej*LVHcc>NA}q$p~3AlOod>dUKhb)&TuxQr{mvfLNCk)J at o92Ylv2RAr!
+za{Sqcc(HCidDEA<?L00fbG5Nsg1S(w#D?QjI4}bAm|Bjc2Vq(%*`5ys|KwJD4e%C|
+z{BStjKC+FGJ~Amk65QnNZEPJF3~cO;{#_*i^ndA-06;|Cm~0;-qR74Yi_o5zKE*y3
+zSt)1<4K>jWbpK>saiz#hj8$4v^^n9$3@}X6u7}sb<kEm6#V=EsMW{;21aeT3oRovl
+zl~N7b<2yL0Tyki|jjHl_yqv6+lT*;f_C<7`G_1Paf#{)0_w9`(8!k8YFnOAQB)%Zy
+zQisx5k=^DtSXfee6kBv-5vi&B7iYMC)6%m9C*~&P!ihQPTg3Bafn^hy-`HlAxNQCr
+zka#u)lgVr^xqVMQ?ik8r?64Rf;BnZmXPHKBM*bxthJT>?dg#!4UcJOw4OU*oHi-ph
+z-a^akr>26!){H`1XBsy at Lb?vrmdkU`t(MsYdQ+ZPJ~hon3#`}o+9%`gd_>msA#Q4h
+z_~(!TSQRV at 2K~6f<y-%?1C2D4tHogM)=ltpggv5_uCQeOP%(i8GQL;Z1&n`O3%tMZ
+zaOFS%0G>Pm0K#AW+CNtG=~hY^;)p|=x(i+q-|meGSkKIi;+fMjR8#v68_#ZO$G<B9
+z8Aped+#gpLLm+<jvnHx`^gGs_a-8bY$n?J7W`fPoWtL5dN;*54n0GSVGt(8hm%2Z@
+zyYA7giZ39(63HQHb<F+<Xu7^15}f19#@|rIgn at wP?Xlh at ow3Wf6vs>KSQ$~qakx{E
+zw6xCHQ7S%QZpwW|dLMU&$bxqvR<S at UxiMqTmW^Itla{W{<G|S;fjKqGjZnnp4>JOw
+zJ0(~y&{I|L%2)6nEo~00#7h9j!-H5bpi)y$j7MPyf8HP9o=LxflQ!1pO~X`T^kg5{
+z?Co~?e17wjZ?;w)qQ(`Wp5&glBBQzkrWHvehWx<56XlTLTJB-DK5Dk#jT0 at bc%F`y
+z3KJ4->HDW}<oyrNG46&|LH~TB(#`xFk3oWFk&jxp6-7w;4J5rwxW at 7DdS|rta%-Sb
+zK=^*3(aPD at P3_k3c=Tw?+K9fg=WG`3vghYGX8IOucy{9PnT|9*UoH*Lwjg77#8Lrr
+z9I$;qCS1Zu&m-{FfcHaesuP+<nFAy?Kz)JMv!ar7587~Yl$>!bG2P<yHQ|jq2uBJ-
+z!}jv*C%GzjFzJ`?6coWw7;4PQ$)op$%M6c=ZKma(k5j6mE at 3y>)jsbLBiULvj_8G3
+zZ<oOJgyJu9(OGM$4PbMzj7V?h-~u}WoYc6EluA<@OE7HIIxo!vla{deicN|scxO59
+znS>cm?3k<^EM>BQ(>hOHT<aavmayhN8NDlbt?&U`27w<TqWuS=WHiTuGL0tj)!*Sm
+zDDbE(L|N-fT!cx?+{IY!3qBfT9}VW5kH%I93HIeF-VCJ4A*5W6?Lz$#qFO*ht&Iw{
+zI7_FJuQ5m=Jp<chWaxkwt+Un;>f-m+FZ!*ci&PUT33ETf_o*YD95>sD<ufN1y&B1V
+zpk1_LDP5(0YCJu57k07P at P7D{R~`yBR#$8XfehpxQcE&~pIR6E7z_?o`Bp-i2YnVM
+zM>~yfxH%Xre*E-K=Psv9TGLsw8_R314s7(PMAi<NoN!!YPUPDyz{GFfGitm1SS at L&
+z)52|A?JfP}A{l1`{l3&8EJiLovA)0qg8~>uwQSvz13E={X&wl&+3Zi*>7o;<Zjig!
+zM6Xg?8G1R2V$d?9-;yd9TG4^I+u;4-7sa6=f8wX(re5P>8<r#E*AXW5Od9*~>jLJ{
+zaq<&FXRE?h0$#WYo{{|0b`9#9<xOi%fMR?HmVxLAU_sph+#+R>S-^7UmB@$cnuE!j
+zNg$Dalg*>~`s*0902FbDkk6Fk$~!!-&CDn2eQJOHWYXE(8F(#c{KTZg_)3=uOavNF
+z*y$SRVE`OW5UjkEcSF~80$VIRmJTi!Z4+&>3hZ1|#W+k8b26b06lSS4@<x}YvyBHm
+z>o0P at UU>O>Yh=okqj_@;4GyS^nV;l-3yN$j2FeS{lLbpo_0ZItppY!sV(m~lcKzvq
+zKN{OR>j+qK?NGE$><MX_Xg0u*1lyhq41y|`<i1NQdJFXLzrD$6$@}D0r2ce)uMj0v
+z8=%lU+*Ug>dfOx!(j~Q$r6e_jNH)NxxE~~cZM3-F3k{;!0Ebt?6&8JDRRZ+KgrLg4
+zaR3EI+ctcycHOOdKi!eZsR5ZswE+&o%S_8jVkiYg=Mi92{kRJ{U#~=PM$pJa>OAL;
+zOv=p12 at pxL0XqG=0f%w!J?#1+L~Ud4{Ct@!ih!jX<-et_QERtjd2_xbmtO)h|Hk3h
+z8zn0vFO^ABvjkLDD|ty?!>9`${#%H4^#0V}Z2yb*hw6qzP<-563rA9>@<Y`Aq!47~
+z4_rbk;XDR#?uTtKev6t@<cjheY0$<G$;0t-u*(y;fh~R`z{mvgFW$g`ZJ{VdA3!ta
+z|A99B#%s)Fe|opRg-~hfAMjqu`<Hz at N^N6LMt#tA-rjC$eG+L-77L{;Ta4dz5}|_M
+zBdE`CWJK<W<XtvA79_3lFkw@{N8pm6@$GmT-kG3 at 6cVd&(QnqZ;2BEpSQ#4$9s at 5E
+zw0UzfQ)(43hZ#b3d$kAWh at kQjpXVK6h4;%oo`ctPb{-h9H-N(ql-5<-01l+HSDQvm
+zXueJ9DVl=7?=LEQVSd|WFWxzyjylAck}k%;5Mwdr_vhJyNwehMw(5aFa4+P}7>@2u
+zE{?w-^jt4Yy1qJEbf_2I*7ml3dpsTGyWhDnF5WEVBH7qx$s#(}=7k`ry|m^w{ZZ*Y
+z?bQ{6IPRpEKDCuxK1|EsfUxsEXPNRU_La!?T^qay!>`i3bfb|UdsxQ&e6mO#$D(MF
+zTgGXLk8d!4_h^I<BnDo^<V1`m?Cw)ooh_Zg(d$q3>*|$x)Ds1d)QUS)ODSr3weRcA
+z7&xVC+=I!?MmVxxZ#_CAJ1fChx4l?+og!rxr4c#(LIPHrHyyoij!Dl$$DdKq4no4t
+zX1 at regKA#nRD)uF#3A+~!EDjUe>;;n%_-hjZ$AHM%$oyP+y*|p$vjX1;G=ZnUo{iP
+zAC;%dU-d2ja3>4mWUN;i5rgi*+#&p)QxYl)!VtM2wQ-J$!ijkSGD_$QZ;-evWj33+
+zlvFSzCF_a+qK at rPc6{xJ$(y1k6vu*GTJfGe;^dXK9!3akkB?0q9;8^H*7w>xG#2(r
+z0y?VM{Ji%nyOzGN&veS7^969Z<&<DEl6_ydxy@>qIBi_J<$Q92pLK`MWI5+9bDSm1
+zZHvGR5DXhGf3&m|DSY;J+A%GF6XL&B%+If%E`uj;e#36wc=S5Vi~(@g&x}mj8kwZG
+zw=*(Jx<XVz!QciL;mnu at opRx9M3AQ<Ei?x>Wu3Fu{ko2;5Vh6N)v%V=cBpjLfeVV#
+zf?yt63Hy~+<8QUhdv-~+%zPFo3Nd4kz$^{Hkxt67M(LHMe1s-I?MNN!JS(?W?wYF%
+z?9|<h<Xl0H6I{MzEunaomO$BFWm4EJRhSrUl2q?M(i0BH*BAR at b|DDnHAs*CE}`T|
+zFWyc?Li9}kd=kR4<}Fa5hakR#?<UMVmLB at h<3i{P61(G+ML?mkOR0-LX7=VnEayWJ
+z=UGKjcL1K>!%v6=MT#6dY_<Hrft<Xow?BT6*&hQcJ^yZK01H*|_Kz<e5sZFe`QxSk
+z_=wCP{`V5%tF7(-tsp)i`}dKd)bla)VLK3(_%S;<zO^}9fQSyn=pTL60_nG!N|PSy
+zHI#@^&R_l!U5BH#?3^Zd9?N=rBi=J1RUHoGCBIlPW?oAR!#c}8dh%mm=ym_3jP^5X
+z5z-2_b}|I)KAg`xeA5Q^jlx&Tk|3yGb>TCWm at svHI)Pw?a7LQHJdnbkc<ZgoNjEef
+z*Yd+oJX>FeFUa!DYPcL6`s{zUVDG%MTUAIu^%{8DlBNhncFYkIzh~{4>Nx<+ae}H;
+zqT9dcJ&fzo++n(cSpr`edI`N?F9qt&K`|JTUc26Iqtrz7nH)C65yw@&q{nT5uMX~b
+zv*w7ugN#Y}N-yVn-cjQ}Agjx6movx5K*caJ-08HOsjQFdQ3MUbt!FfUh5)@o_vJw~
+zE7QsqXMnY1%ZXUT5PZ#R%}O3XKw^Asq=(o}WQ_HcGD5+sbtZDxDK9DI*eB=fZKoaj
+zNvt8>2r3JsWIHPmrsT8>wcS~mKIju#X<wTkEMZPg5pa#=<G8-G0p*a>XCevSFL
+z)NH1v!}|%&Sjk7Rc9n~0&X%6x`q2byX(mZe2!!{}1Ew2q`P7L!!FlMUmTU1PQyk}(
+zvqMSe3vJR(B#mRlOxh$u==(>O&A&G4fq>~g0vZ2Yd;g!;|DWqWRN~7^{guIAOMw4F
+z`1|_(L&yHBAo%Zuf31uBZ^DfaS^xj4B>&Fo at 6~UA^7{NywfsM7;r>qk_avl0$)7&b
+zlKvq7drH#ZS^PcN`zMP9;(xRF at 6hkx$^RZ>`jb49{NLn%i#YwA!`~w=e{z_i_>Tbp
+z6o2_UpTBOg{K*9XpkxF9{>O&P-^u^JK>m|KDf3^%_&wMDo%rtt`A=eJ?tc^i#XSF=
+n{;zZUpVR<=#i#$0{ogaaycF2SFarQ!KR!?&Bh{V%_pkp4bi}s>
+
+literal 0
+HcmV?d00001
+
+diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+index 90a6b9c..e3735e7 100644
+--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
++++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+@@ -2624,6 +2624,19 @@ DECLARE_OOXMLEXPORT_TEST(testFdo73556,"fdo73556.docx")
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3751), tableWidth);
+ }
+
++DECLARE_OOXMLEXPORT_TEST(testDMLSolidfillAlpha, "dml-solidfill-alpha.docx")
++{
++ // Problem was that the transparency was not exported (a:alpha).
++ // RGB color (a:srgbClr)
++ uno::Reference<beans::XPropertySet> xShape(getShape(1), uno::UNO_QUERY);
++ CPPUNIT_ASSERT_EQUAL(sal_Int32(0x000101FF), getProperty<sal_Int32>(xShape, "FillColor"));
++ CPPUNIT_ASSERT_EQUAL(sal_Int16(70), getProperty<sal_Int16>(xShape, "FillTransparence"));
++
++ // Theme color (a:schemeClr)
++ xShape.set(getShape(2), uno::UNO_QUERY);
++ CPPUNIT_ASSERT_EQUAL(sal_Int32(0x004F81BD), getProperty<sal_Int32>(xShape, "FillColor"));
++ CPPUNIT_ASSERT_EQUAL(sal_Int16(20), getProperty<sal_Int16>(xShape, "FillTransparence"));
++}
+ #endif
+
+ CPPUNIT_PLUGIN_IMPLEMENT();
+--
+1.8.4
+
diff --git a/include/oox/export/drawingml.hxx b/include/oox/export/drawingml.hxx
index 445e895..000cd4e 100644
--- a/include/oox/export/drawingml.hxx
+++ b/include/oox/export/drawingml.hxx
@@ -115,13 +115,13 @@ public:
OUString WriteImage( const Graphic &rGraphic );
- void WriteColor( sal_uInt32 nColor );
+ void WriteColor( sal_uInt32 nColor, sal_Int32 nAlpha = 0 );
void WriteGradientStop( sal_uInt16 nStop, sal_uInt32 nColor );
void WriteLineArrow( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet, sal_Bool bLineStart );
void WriteConnectorConnections( EscherConnectorListEntry& rConnectorEntry, sal_Int32 nStartID, sal_Int32 nEndID );
- void WriteSolidFill( sal_uInt32 nColor );
- void WriteSolidFill( OUString sSchemeName );
+ void WriteSolidFill( sal_uInt32 nColor, sal_Int32 nAlpha = 0 );
+ void WriteSolidFill( OUString sSchemeName, sal_Int32 nAlpha = 0 );
void WriteSolidFill( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet );
void WriteGradientFill( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet );
void WriteBlipFill( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet, OUString sURLPropName, sal_Int32 nXmlNamespace );
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 3b84ea0..c9eefec 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -22,6 +22,7 @@
#include "oox/export/utils.hxx"
#include <oox/drawingml/color.hxx>
#include <oox/token/tokens.hxx>
+#include <oox/drawingml/drawingmltypes.hxx>
#include <cstdio>
#include <com/sun/star/awt/CharSet.hpp>
@@ -149,7 +150,7 @@ bool DrawingML::GetPropertyAndState( Reference< XPropertySet > rXPropSet, Refere
return bRetValue;
}
-void DrawingML::WriteColor( sal_uInt32 nColor )
+void DrawingML::WriteColor( sal_uInt32 nColor, sal_Int32 nAlpha )
{
OString sColor = OString::number( nColor, 16 );
if( sColor.getLength() < 6 ) {
@@ -165,22 +166,43 @@ void DrawingML::WriteColor( sal_uInt32 nColor )
sColor = sBuf.getStr();
}
- mpFS->singleElementNS( XML_a, XML_srgbClr, XML_val, sColor.getStr(), FSEND );
+ if( nAlpha )
+ {
+ mpFS->startElementNS( XML_a, XML_srgbClr, XML_val, sColor.getStr(), FSEND );
+ mpFS->singleElementNS( XML_a, XML_alpha, XML_val, OString::number(nAlpha), FSEND );
+ mpFS->endElementNS( XML_a, XML_srgbClr );
+
+ }
+ else
+ {
+ mpFS->singleElementNS( XML_a, XML_srgbClr, XML_val, sColor.getStr(), FSEND );
+ }
}
-void DrawingML::WriteSolidFill( sal_uInt32 nColor )
+void DrawingML::WriteSolidFill( sal_uInt32 nColor, sal_Int32 nAlpha )
{
mpFS->startElementNS( XML_a, XML_solidFill, FSEND );
- WriteColor( nColor );
+ WriteColor( nColor, nAlpha );
mpFS->endElementNS( XML_a, XML_solidFill );
}
-void DrawingML::WriteSolidFill( OUString sSchemeName )
+void DrawingML::WriteSolidFill( OUString sSchemeName, sal_Int32 nAlpha )
{
mpFS->startElementNS( XML_a, XML_solidFill, FSEND );
- mpFS->singleElementNS( XML_a, XML_schemeClr, XML_val,
- OUStringToOString( sSchemeName, RTL_TEXTENCODING_ASCII_US ).getStr(),
- FSEND );
+ if( nAlpha )
+ {
+ mpFS->startElementNS( XML_a, XML_schemeClr, XML_val,
+ OUStringToOString( sSchemeName, RTL_TEXTENCODING_ASCII_US ).getStr(),
+ FSEND );
+ mpFS->singleElementNS( XML_a, XML_alpha, XML_val, OString::number(nAlpha), FSEND );
+ mpFS->endElementNS( XML_a, XML_schemeClr );
+ }
+ else
+ {
+ mpFS->singleElementNS( XML_a, XML_schemeClr, XML_val,
+ OUStringToOString( sSchemeName, RTL_TEXTENCODING_ASCII_US ).getStr(),
+ FSEND );
+ }
mpFS->endElementNS( XML_a, XML_solidFill );
}
@@ -209,13 +231,22 @@ void DrawingML::WriteSolidFill( Reference< XPropertySet > rXPropSet )
aGrabBag[i].Value >>= aStyleProperties;
}
+ sal_Int32 nAlpha = 0;
+ if( GetProperty( rXPropSet, "FillTransparence" ) )
+ {
+ sal_Int32 nTransparency;
+ rXPropSet->getPropertyValue( "FillTransparence" ) >>= nTransparency;
+ // Calculate alpha value (see oox/source/drawingml/color.cxx : getTransparency())
+ nAlpha = (MAX_PERCENT - ( PER_PERCENT * nTransparency ) );
+ }
+
// write XML
if ( nFillColor != nOriginalColor )
// the user has set a different color for the shape
- WriteSolidFill( nFillColor & 0xffffff );
+ WriteSolidFill( nFillColor & 0xffffff, nAlpha );
else if ( !sColorFillScheme.isEmpty() )
// the shape had a scheme color and the user didn't change it
- WriteSolidFill( sColorFillScheme );
+ WriteSolidFill( sColorFillScheme, nAlpha );
else if ( aStyleProperties.hasElements() )
{
sal_uInt32 nThemeColor = 0;
@@ -227,13 +258,13 @@ void DrawingML::WriteSolidFill( Reference< XPropertySet > rXPropSet )
}
if ( nFillColor != nThemeColor )
// the shape contains a theme but it wasn't being used
- WriteSolidFill( nFillColor & 0xffffff );
+ WriteSolidFill( nFillColor & 0xffffff, nAlpha );
// in case the shape used the style color and the user didn't change it,
// we must not write a <a: solidFill> tag.
}
else
// the shape had a custom color and the user didn't change it
- WriteSolidFill( nFillColor & 0xffffff );
+ WriteSolidFill( nFillColor & 0xffffff, nAlpha );
}
void DrawingML::WriteGradientStop( sal_uInt16 nStop, sal_uInt32 nColor )
diff --git a/sw/qa/extras/ooxmlexport/data/dml-solidfill-alpha.docx b/sw/qa/extras/ooxmlexport/data/dml-solidfill-alpha.docx
new file mode 100644
index 0000000..9f2c46d
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-solidfill-alpha.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index 746422e..315fb0b 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -2698,6 +2698,17 @@ DECLARE_OOXMLEXPORT_TEST(testLineStyle_DashType, "LineStyle_DashType.docx")
assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r[2]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:prstDash", "val", "dash");
}
+DECLARE_OOXMLEXPORT_TEST(testDMLSolidfillAlpha, "dml-solidfill-alpha.docx")
+{
+ // Problem was that the transparency was not exported (a:alpha).
+ // RGB color (a:srgbClr)
+ uno::Reference<beans::XPropertySet> xShape(getShape(1), uno::UNO_QUERY);;
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(70), getProperty<sal_Int16>(xShape, "FillTransparence"));
+
+ // Theme color (a:schemeClr)
+ xShape.set(getShape(2), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(20), getProperty<sal_Int16>(xShape, "FillTransparence"));
+}
#endif
CPPUNIT_PLUGIN_IMPLEMENT();
More information about the Libreoffice-commits
mailing list