<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:"Segoe UI";
panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-fareast-language:EN-US;}
h1
{mso-style-priority:9;
mso-style-link:"Otsikko 1 Char";
mso-margin-top-alt:auto;
margin-right:0cm;
mso-margin-bottom-alt:auto;
margin-left:0cm;
font-size:24.0pt;
font-family:"Calibri",sans-serif;
font-weight:bold;}
h2
{mso-style-priority:9;
mso-style-link:"Otsikko 2 Char";
mso-margin-top-alt:auto;
margin-right:0cm;
mso-margin-bottom-alt:auto;
margin-left:0cm;
font-size:18.0pt;
font-family:"Calibri",sans-serif;
font-weight:bold;}
h3
{mso-style-priority:9;
mso-style-link:"Otsikko 3 Char";
mso-margin-top-alt:auto;
margin-right:0cm;
mso-margin-bottom-alt:auto;
margin-left:0cm;
font-size:13.5pt;
font-family:"Calibri",sans-serif;
font-weight:bold;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
code
{mso-style-priority:99;
font-family:"Courier New";}
span.Shkpostityyli17
{mso-style-type:personal-compose;
font-family:"Calibri",sans-serif;
color:windowtext;}
span.Otsikko1Char
{mso-style-name:"Otsikko 1 Char";
mso-style-priority:9;
mso-style-link:"Otsikko 1";
font-family:"Calibri",sans-serif;
mso-fareast-language:FI;
font-weight:bold;}
span.Otsikko2Char
{mso-style-name:"Otsikko 2 Char";
mso-style-priority:9;
mso-style-link:"Otsikko 2";
font-family:"Calibri",sans-serif;
mso-fareast-language:FI;
font-weight:bold;}
span.Otsikko3Char
{mso-style-name:"Otsikko 3 Char";
mso-style-priority:9;
mso-style-link:"Otsikko 3";
font-family:"Calibri",sans-serif;
mso-fareast-language:FI;
font-weight:bold;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri",sans-serif;
mso-ligatures:none;
mso-fareast-language:EN-US;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:70.85pt 2.0cm 70.85pt 2.0cm;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:115298002;
mso-list-template-ids:549353590;}
@list l0:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l0:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:"Courier New";
mso-bidi-font-family:"Times New Roman";}
@list l0:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:108.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level4
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:144.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level5
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:180.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:216.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level7
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:252.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level8
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:288.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:324.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l1
{mso-list-id:171460670;
mso-list-template-ids:1404890722;}
@list l1:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:"Courier New";
mso-bidi-font-family:"Times New Roman";}
@list l1:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:108.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l1:level4
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:144.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l1:level5
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:180.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l1:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:216.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l1:level7
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:252.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l1:level8
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:288.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l1:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:324.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l2
{mso-list-id:217934411;
mso-list-template-ids:376980354;}
@list l2:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:"Courier New";
mso-bidi-font-family:"Times New Roman";}
@list l2:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:108.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l2:level4
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:144.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l2:level5
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:180.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l2:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:216.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l2:level7
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:252.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l2:level8
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:288.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l2:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:324.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l3
{mso-list-id:344524162;
mso-list-template-ids:-423471850;}
@list l3:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:"Courier New";
mso-bidi-font-family:"Times New Roman";}
@list l3:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:108.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l3:level4
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:144.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l3:level5
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:180.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l3:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:216.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l3:level7
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:252.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l3:level8
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:288.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l3:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:324.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l4
{mso-list-id:412051154;
mso-list-template-ids:-1321557844;}
@list l4:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l4:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:"Courier New";
mso-bidi-font-family:"Times New Roman";}
@list l4:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:108.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l4:level4
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:144.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l4:level5
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:180.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l4:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:216.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l4:level7
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:252.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l4:level8
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:288.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l4:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:324.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l5
{mso-list-id:866678178;
mso-list-template-ids:1457001952;}
@list l5:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l5:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:"Courier New";
mso-bidi-font-family:"Times New Roman";}
@list l5:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:108.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l5:level4
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:144.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l5:level5
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:180.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l5:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:216.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l5:level7
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:252.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l5:level8
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:288.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l5:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:324.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l6
{mso-list-id:950745256;
mso-list-template-ids:1984350884;}
@list l6:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l6:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:"Courier New";
mso-bidi-font-family:"Times New Roman";}
@list l6:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:108.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l6:level4
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:144.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l6:level5
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:180.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l6:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:216.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l6:level7
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:252.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l6:level8
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:288.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l6:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:324.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l7
{mso-list-id:1077939109;
mso-list-template-ids:-294346852;}
@list l7:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l7:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:"Courier New";
mso-bidi-font-family:"Times New Roman";}
@list l7:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:108.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l7:level4
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:144.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l7:level5
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:180.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l7:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:216.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l7:level7
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:252.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l7:level8
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:288.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l7:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:324.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l8
{mso-list-id:1446927822;
mso-list-template-ids:-1063860456;}
@list l8:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l8:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:"Courier New";
mso-bidi-font-family:"Times New Roman";}
@list l8:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:108.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l8:level4
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:144.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l8:level5
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:180.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l8:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:216.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l8:level7
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:252.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l8:level8
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:288.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l8:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:324.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l9
{mso-list-id:1540781648;
mso-list-template-ids:1986043108;}
@list l9:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l9:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:"Courier New";
mso-bidi-font-family:"Times New Roman";}
@list l9:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:108.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l9:level4
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:144.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l9:level5
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:180.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l9:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:216.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l9:level7
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:252.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l9:level8
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:288.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l9:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:324.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l10
{mso-list-id:1928614543;
mso-list-template-ids:-626853538;}
@list l10:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l10:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:"Courier New";
mso-bidi-font-family:"Times New Roman";}
@list l10:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:108.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l10:level4
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:144.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l10:level5
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:180.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l10:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:216.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l10:level7
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:252.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l10:level8
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:288.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l10:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:324.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="FI" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Segoe UI",sans-serif">Good news everyone,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Segoe UI",sans-serif"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Segoe UI",sans-serif">We have released a new version of Oskari: 2.13.0! It is now available on GitHub (<a href="https://github.com/oskariorg">https://github.com/oskariorg</a>) and Oskari.org Maven
repository. The sample application package has been updated on the download link in Oskari.org (<a href="https://oskari.org/download">https://oskari.org/download</a>) and
<a href="http://download.osgeo.org/oskari/">http://download.osgeo.org/oskari/</a>. As always you can take a peek at the latest release at
<a href="https://demo.oskari.org/">https://demo.oskari.org/</a>.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Segoe UI",sans-serif"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Segoe UI",sans-serif">We have continued improving the mobile support on geoportal views, but the biggest changes in this release are the full rewrite of the statistical data/thematic maps UI and removing
the requirement for the bundled in GeoServer for user generated content. There are some minor changes that need to be done for applications when updating to the latest Oskari, but it’s all described on the Migration Guide (<a href="https://github.com/oskariorg/oskari-server/blob/master/MigrationGuide.md">https://github.com/oskariorg/oskari-server/blob/master/MigrationGuide.md</a>).
The main thing is that you can shutdown the GeoServer that was bundled in with Oskari, the size of our binary distribution package dropped to almost half from the size it was (~330 -> ~170MB) and setting up and maintaining Oskari-based services is once again
a bit simpler.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<h1 style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white">
<span lang="EN-US" style="font-family:"Segoe UI",sans-serif;color:#1F2328">Release Notes<o:p></o:p></span></h1>
<h2 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-weight:var(--base-text-weight-semibold, 600);border-bottom:var(--borderColor-muted, var(--color-border-muted))">
<span lang="EN-US" style="font-family:"Segoe UI",sans-serif;color:#1F2328">Oskari-frontend<o:p></o:p></span></h2>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">For a full list of changes see: </span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328"><a href="https://github.com/oskariorg/oskari-frontend/milestone/45?closed=1"><span lang="EN-US">https://github.com/oskariorg/oskari-frontend/milestone/45?closed=1</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328"><o:p></o:p></span></p>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-weight:var(--base-text-weight-semibold, 600)">
<span lang="EN-US" style="font-size:15.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">Improvements for mobile devices / small screens<o:p></o:p></span></h3>
<ul type="disc">
<li class="MsoNormal" style="color:#1F2328;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l8 level1 lfo1;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Adding a marker now only shows one popup at a time making it more usable on small screens/mobile devices.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l8 level1 lfo1;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Marker and measurement tools now automatically hide the main navigation on geoportal when used on small screens to show more of the map when these tools are activated.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l8 level1 lfo1;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">The XY-tool now detects if the user has a mouse-controller and hides the "show coordinates at mouse location" toggle if mouse is not detected.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l8 level1 lfo1;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">The main navigation on geoportal now shows a scroll indicator to signal that there's more content on the navigation than fits the end-users screen. This helps users find functionalities
that don't fit on their screen and are not familiar with the UI to know where to search them.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l8 level1 lfo1;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Banner-announcements are now more usable on small screens and work better with dark themes (</span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-frontend/pull/2481"><span lang="EN-US">#2481</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">).<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l8 level1 lfo1;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">The announcements tile in geoportal main navigation is now hidden on small screens when there are no announcements to be listed.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l8 level1 lfo1;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">The UI for browsing sparse timeseries data like historical ortophotos has been improved for small screens: </span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-frontend/pull/2565"><span lang="EN-US">#2565</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l8 level1 lfo1;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Pinch zooming the page (outside the map/in the main navigation or flyout/popup content) on mobile devices can result the user losing access to part of the UI (usually the main navigation)
as its rendered outside the device physical screen after pinch zooming. We now try to detect this condition and offer a button for reseting the page zoom when this happens. This is experimental and unfortunately doesn't seem to work on all devices (notably
not working on iOS based devices). </span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">See <a href="https://github.com/oskariorg/oskari-frontend/pull/2534">#2534</a> for more details.<o:p></o:p></span></li></ul>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-weight:var(--base-text-weight-semibold, 600)">
<span style="font-size:15.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">Other improvements for end-users<o:p></o:p></span></h3>
<ul type="disc">
<li class="MsoNormal" style="color:#1F2328;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Swipe tool for comparing layers side by side can now be published as part of an embedded map. Options are to add the tool, auto-activate it on startup (this can also be activated
with a URL-parameter) and hide the UI (the end-user can't switch the tool off).<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Link tool includes the URL-parameter for activating the swipe tool when opening the link if the swipe tool was active when a link was generated.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">The swipe tool now uses the accent color from theme for the splitter color instead of always being the default yellow color.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">My data user details now shows account creation date and last login date.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Again fine-tuned tooltips when dragging layers on selected layers listing.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Layer coverage area can now be shown on the map. This is useful for locating content on the map when the layer content is on a smaller area. Relies on service capabilities/metadata
to be correct on the service itself (</span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-frontend/pull/2429"><span lang="EN-US">#2429</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">).<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Fixed the map legend tool selection for embedded maps in publisher not being saved correctly. The map layer legends button can now be used on embedded maps again.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Reverse geocoding search now zooms the map to show results more clearly.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Announcements are now polled by the frontend to allow showing any <em><span style="font-family:"Segoe UI",sans-serif">new</span></em> announcements that have been added/scheduled
to be shown <em><span style="font-family:"Segoe UI",sans-serif">after</span></em> the page has been loaded and/or when the page has been left open for a long time without refreshing the page (</span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-frontend/pull/2519"><span lang="EN-US">#2519</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">).<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Fixed an issue where opening an infobox on the map <em><span style="font-family:"Segoe UI",sans-serif">while</span></em> panning the map resulted in the map moving to weird locations
(mostly reproducible with wmts-layers </span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-frontend/pull/2523"><span lang="EN-US">#2523</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">).<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Markers can now be edited and removed by clicking on a marker when the marker tool is active.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Coordinates can now be included on a PDF-printout (</span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-frontend/pull/2537"><span lang="EN-US">#2537</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">).<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Coordinates info can now be included on the infobox UI (</span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-frontend/pull/2566"><span lang="EN-US">#2566</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">).
Requires activating it on the database for any appsetups that wish to show the coordinates.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Reversed map layers legends listing order for consistency/matching the layer order on selected layers.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Fixed an issue with infobox header not growing with the content (</span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-frontend/pull/2577"><span lang="EN-US">#2577</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">)<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Text selection now uses theme colors<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l10 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Timeseries UI now supports theme colors<o:p></o:p></span></li></ul>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-weight:var(--base-text-weight-semibold, 600)">
<span style="font-size:15.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">Admin functionalities<o:p></o:p></span></h3>
<ul type="disc">
<li class="MsoNormal" style="color:#1F2328;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo3;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Layer admin now has a new tab for JSON-configuration fields (options/attributes/capabilities). This also adds UI for managing the params-field for layers (</span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-frontend/pull/2438"><span lang="EN-US">#2438</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">).<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo3;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Layer admin permissions tab now always shows the column headers on screen even when there are roles that require scrolling.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo3;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Layer admin can now show the structure of the service when adding layers from a WMS-service: </span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-frontend/pull/2542"><span lang="EN-US">#2542</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo3;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Layer admin now allows selecting a geometry type for vector layers. This cleans up the style editor for both admins and end-users by hiding for example point and area style forms
from layers that only have lines etc.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo3;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Layer admin now has a UI for managing vector layer hover-styling (</span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-frontend/pull/2439"><span lang="EN-US">#2439</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">).
</span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Previously managed through JSON-based free text fields.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo3;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Button for adding announcements is now on the top of the announcements list instead of being at the bottom so it's easier to find when there are multiple announcements and for being
more consistent for example with the layer admin tools.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo3;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">User admin (</span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">admin-users</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> bundle)
now has swedish localizations and shows a nicer message for empty search result<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo3;background:white;box-sizing: border-box">
<code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">admin-permissions</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> bundle now tries to maintain scroll position after permission change. This makes
it more user-friendly as toggling a permission doesn't reset scrolling back to top.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo3;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">WMS-layers that offer GetFeatureInfo in JSON-format now benefit from the same formatting improvements as vector layers when looking at the GFI data on the </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">infobox</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">.
The layer admin UI for selecting/renaming properties and format values that is available for WFS-layers has not been added for WMS-layers but it's now technically possible to use the same formatting for these kinds of WMS-layers and even by default is usually
looks better than the default HTML returned by services (</span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-frontend/pull/2525"><span lang="EN-US">#2525</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">).<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo3;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Optional metadata url: </span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-frontend/pull/2594"><span lang="EN-US">#2594</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> Allows
admin to configure a layer specific url for fetching the layers metadata through </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">layer.attributes</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">.
This only supports showing the metadata for the layer. It doesn't add support for searching from multiple metadata services.<o:p></o:p></span></li></ul>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-weight:var(--base-text-weight-semibold, 600)">
<span style="font-size:15.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">New bundles<o:p></o:p></span></h3>
<ul type="disc">
<li class="MsoNormal" style="color:#1F2328;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo4;background:white;box-sizing: border-box">
<code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">metadatasearch</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> is a React-based drop-in replacement for jQuery-based </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">metadatacatalogue</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> for
searching metadata. Requires db migration as well as linking the new implementation on main.js as the bundle id changed, but the old version is also still available.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo4;background:white;box-sizing: border-box">
<code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">featuredata</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> is a React-based drop-in replacement for jQuery-based </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">featuredata2</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> for
feature data table. This was included in the last release as an optional preview version but is now working as intended and good for replacing the old one. This also adds pagination for results to make it usable in the case where the screen is full of features.
It also adds a toggle for condensed view to show more rows on screen at once even when feature property values might have very long content. Requires db migration as well as linking the new implementation on main.js as the bundle id changed, but the old version
is also still available.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo4;background:white;box-sizing: border-box">
<code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">personaldata</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> bundle has been removed from the source code. The drop-in replacement is the </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">mydata</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> bundle
that has been available for a couple of releases already. Requires linking the new implementation on main.js as the bundle id changed.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo4;background:white;box-sizing: border-box">
<code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">statsgrid</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> has a full React rewrite for thematic maps/statistical data functionality </span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-frontend/pull/2599"><span lang="EN-US">#2599</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">.
Requires linking the new codebase (</span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/sample-application/pull/33"><span lang="EN-US">oskariorg/sample-application#33</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">),
but doesn't require db migration since bundle id remains the same. This makes it easy to switch the implementation to test it out.<o:p></o:p></span></li></ul>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-weight:var(--base-text-weight-semibold, 600)">
<span style="font-size:15.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">For developers<o:p></o:p></span></h3>
<ul type="disc">
<li class="MsoNormal" style="color:#1F2328;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l6 level1 lfo5;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Added </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">Oskari.util.mouseExists()</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> for
detecting if user has a mouse present. This can be used to determine if we should hide UI-elements based on mouse like showing coordinates for pointer hovering the map (See </span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-frontend/pull/2422"><span lang="EN-US">XY-tool</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">).<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l6 level1 lfo5;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">New component under </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">mapping/mapmodule/MapModuleTextButton</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> for
allowing text-based buttons on map that respect theming etc. Similar to MapModuleButton which handles icons, but this one is for buttons with text.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l6 level1 lfo5;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Moved layertype icons from </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">layerlist</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> to </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">src/react/components/icons/LayerIcon.jsx</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> so
they can be accessed more easily from anywhere.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l6 level1 lfo5;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">The publisher functionality now has generic ReactToolsPanel and ToolsHandler for React-based publisher tools.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l6 level1 lfo5;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">The publisher size setting panel has been rewritten with React.js<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l6 level1 lfo5;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Added support for vertical scrollbar in React-based Flyouts (</span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-frontend/pull/2491"><span lang="EN-US">#2491</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">).<o:p></o:p></span></li></ul>
<h2 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white">
<span lang="EN-US" style="font-family:"Segoe UI",sans-serif;color:#1F2328">Oskari-server<o:p></o:p></span></h2>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">For a full list of changes see: </span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328"><a href="https://github.com/oskariorg/oskari-server/milestone/48?closed=1"><span lang="EN-US">https://github.com/oskariorg/oskari-server/milestone/48?closed=1</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328"><o:p></o:p></span></p>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-weight:var(--base-text-weight-semibold, 600)">
<span style="font-size:15.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">Bundled GeoServer removed<o:p></o:p></span></h3>
<ul type="disc">
<li class="MsoNormal" style="color:#1F2328;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo6;background:white;box-sizing: border-box">
<code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">myplaces</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> and </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">userlayer</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> (=
user-generated) content is now managed directly through the database connection without a need for a GeoServer to be run with oskari-server.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo6;background:white;box-sizing: border-box">
<code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">analysis</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> functionality still uses GeoServer to make the analysis, but most instances don't use
the analysis functionality so the bundled in GeoServer has been dropped from the download package.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo6;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Removed code related to initializing the bundled in GeoServer like the </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">setup.war</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> webapp
and </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">geoserver-rest-client</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo6;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">See </span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-server/blob/master/MigrationGuide.md"><span lang="EN-US">Migration
guide</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> for details about removing the GeoServer from an existing Oskari instance.<o:p></o:p></span></li></ul>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-weight:var(--base-text-weight-semibold, 600)">
<span style="font-size:15.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">New functionality<o:p></o:p></span></h3>
<ul type="disc">
<li class="MsoNormal" style="color:#1F2328;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l7 level1 lfo7;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Printouts can now include coordinates.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l7 level1 lfo7;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Added support for reverse geocoding for the OpenStreetMap search channel.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l7 level1 lfo7;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">URL-parameter </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">swipe=true</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> can
now be used to active layerswipe functionality on startup (on applications using layerswipe).<o:p></o:p></span></li></ul>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-weight:var(--base-text-weight-semibold, 600)">
<span style="font-size:15.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">Statistical data sources<o:p></o:p></span></h3>
<ul type="disc">
<li class="MsoNormal" style="color:#1F2328;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l9 level1 lfo8;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Statistical data adapter for SotkaNet now uses </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">absValue</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> for
the indicator data from the API if any result doesn't have a </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">value</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> so user can get some
data on screen instead of an error.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l9 level1 lfo8;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Improve region set matching for SotkaNet adapter for detecting data for </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">hyvinvointialue/wellbeing services
counties</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l9 level1 lfo8;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Made cache keys for statistical data consistent so it's easy to flush cached data from redis by using key-prefix </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">oskari:stats:[data
source id]*</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l9 level1 lfo8;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Removed the unused </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">service-statistics-kapa</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> module
from statistics-data plugins. It was developed as PoC for allowing multiple data sources to be read using adapters but there is no known data source that would use this (developed against mock service) and we have actual data sources with </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">PXWeb</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> and </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">SotkaNet</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> that
are used daily and demonstrate this.<o:p></o:p></span></li></ul>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-weight:var(--base-text-weight-semibold, 600)">
<span lang="EN-US" style="font-size:15.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">New bundles<o:p></o:p></span></h3>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">Drop-in React-based replacements for jQuery implementations:<o:p></o:p></span></p>
<ul type="disc">
<li class="MsoNormal" style="color:#1F2328;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l3 level1 lfo9;background:white;box-sizing: border-box">
<code><span style="font-size:10.0pt;font-family:Consolas">metadatasearch</span></code><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> -> </span><code><span style="font-size:10.0pt;font-family:Consolas">metadatacatalogue</span></code><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l3 level1 lfo9;background:white;box-sizing: border-box">
<code><span style="font-size:10.0pt;font-family:Consolas">featuredata2</span></code><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> -> </span><code><span style="font-size:10.0pt;font-family:Consolas">featuredata</span></code><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><o:p></o:p></span></li></ul>
<p style="margin:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">Both are allowed to be part of embedded maps by the </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:#1F2328">publisher</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328"> functionality
and we also added </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:#1F2328">layerswipe</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328"> and </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:#1F2328">announcements</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328"> bundle
to the default allowed list for publishing.<o:p></o:p></span></p>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-weight:var(--base-text-weight-semibold, 600)">
<span style="font-size:15.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">Improved error handling<o:p></o:p></span></h3>
<ul type="disc">
<li class="MsoNormal" style="color:#1F2328;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l5 level1 lfo10;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Users now have created and last login timestamps on the db. Previously the user attributes was used to store these with instance specific code, but to make querying easier its best
to have them in columns in the database. Custom login implementations should be updated to use these database columns as we now show the last login for the end user. For more details: </span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-server/pull/1000/files"><span lang="EN-US">https://github.com/oskariorg/oskari-server/pull/1000/files</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l5 level1 lfo10;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Improved identifier headers that are sent as part of requests made by oskari-server. Previously the </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">User-Agent</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> header
could result as </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">Oskari/null</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">. Now defaults to </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">Oskari/0.0</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> if
we are unable to determine the version.<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l5 level1 lfo10;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Fixed srid value in postgis for userlayer features (</span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/oskari-server/pull/1005"><span lang="EN-US">#1005</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">).<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l5 level1 lfo10;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Improved error handling while parsing layer capabilities to prevent an issue where the server might not start properly when running migrations that add layers from services that are
unavailable during the migration (</span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/sample-server-extension/pull/55"><span lang="EN-US">oskariorg/sample-server-extension#55</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">).<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l5 level1 lfo10;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">When querying for GFI, the server now checks if the user has permission to see the layer. Previously the GFI request was passed to the server without a check so knowing a layer id
and a coordinate where features on that layer would be could possibly be used to handcraft a request that by-passes authorization for that layer.<o:p></o:p></span></li></ul>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-weight:var(--base-text-weight-semibold, 600)">
<span lang="EN-US" style="font-size:15.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">Library updates<o:p></o:p></span></h3>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">Note! Apps will need to update these dependencies as well (See </span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328"><a href="https://github.com/oskariorg/oskari-server/blob/master/MigrationGuide.md"><span lang="EN-US">Migration
guide</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">).<o:p></o:p></span></p>
<ul type="disc">
<li class="MsoNormal" style="color:#1F2328;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Now uses </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">HikariCP</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> as
built-in connection pool instead of </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">BasicDataSource</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> from </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">commons-dbcp2</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Spring 5.3.28 -> 5.3.32<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Spring security 5.7.9 -> 5.7.11<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Spring session bom 2021.2.2 -> 2021.2.3<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">org.apache.commons.commons-lang3 3.13.0 -> 3.14.0<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">org.apache.commons.commons-text 1.10.0 -> 1.11.0<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">org.apache.commons.commons-dbcp2 2.9.0 -> 2.11.0<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">org.apache.pdfbox.pdfbox 2.0.24 -> 2.0.30<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">org.apache.xmlgraphics.fop 2.3 -> 2.9<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">org.apache.poi.poi-ooxml 4.1.2 -> 5.2.5<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">commons-csv 1.8 -> 1.10.0<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">commons-codec 1.15 -> 1.16.0<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">jsoup 1.16.1 -> 1.17.2<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">jackson 2.15.2 -> 2.16.1<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">mybatis 3.5.13 -> 3.5.15<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">flywaydb 9.12.0 -> 9.22.3<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Postgres jdbc 42.6.0 -> 42.7.2<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">SLF4J 1.7.36 -> 2.0.11<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo11;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Log4J2 2.20.0 -> 2.22.1<o:p></o:p></span></li></ul>
<p class="MsoNormal" style="margin-top:3.0pt;mso-margin-bottom-alt:auto;background:white">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328">Happy updating,<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-top:3.0pt;mso-margin-bottom-alt:auto;background:white">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#1F2328"> Sami<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
</div>
</body>
</html>