PageSourceSearch

https://hymy.fi/kategoria/uutiset/

html hymy.fi collected 2026-09-24 20:47:49 UTC 135,918 bytes, 3,220 lines download raw bytes

1<!DOCTYPE html>
2<!--[if IE 7]>
3<html class="ie ie7" lang="fi">
4<![endif]--><!--[if IE 8]>
5<html class="ie ie8" lang="fi">
6<![endif]--><!--[if IE 9]>
7<html class="ie ie9" lang="fi">
8<![endif]--><!--[if !(IE 7) | !(IE 8) | !(IE 9)]><!--><html lang="fi">
9<!--<![endif]-->
10
11
12
13<head>
14    <meta charset="UTF-8">
15<script type="text/javascript">
16/* <![CDATA[ */
17var gform;gform||(document.addEventListener("gform_main_scripts_loaded",function(){gform.scriptsLoaded=!0}),document.addEventListener("gform/theme/scripts_loaded",function(){gform.themeScriptsLoaded=!0}),window.addEventListener("DOMContentLoaded",function(){gform.domLoaded=!0}),gform={domLoaded:!1,scriptsLoaded:!1,themeScriptsLoaded:!1,isFormEditor:()=>"function"==typeof InitializeEditor,callIfLoaded:function(o){return!(!gform.domLoaded||!gform.scriptsLoaded||!gform.themeScriptsLoaded&&!gform.isFormEditor()||(gform.isFormEditor()&&console.warn("The use of gform.initializeOnLoaded() is deprecated in the form editor context and will be removed in Gravity Forms 3.1."),o(),0))},initializeOnLoaded:function(o){gform.callIfLoaded(o)||(document.addEventListener("gform_main_scripts_loaded",()=>{gform.scriptsLoaded=!0,gform.callIfLoaded(o)}),document.addEventListener("gform/theme/scripts_loaded",()=>{gform.themeScriptsLoaded=!0,gform.callIfLoaded(o)}),window.addEventListener("DOMContentLoaded",()=>{gform.domLoaded=!0,gform.callIfLoaded(o)}))},hooks:{action:{},filter:{}},addAction:function(o,r,e,t){gform.addHook("action",o,r,e,t)},addFilter:function(o,r,e,t){gform.addHook("filter",o,r,e,t)},doAction:function(o){gform.doHook("action",o,arguments)},applyFilters:function(o){return gform.doHook("filter",o,arguments)},removeAction:function(o,r){gform.removeHook("action",o,r)},removeFilter:function(o,r,e){gform.removeHook("filter",o,r,e)},addHook:function(o,r,e,t,n){null==gform.hooks[o][r]&&(gform.hooks[o][r]=[]);var d=gform.hooks[o][r];null==n&&(n=r+"_"+d.length),gform.hooks[o][r].push({tag:n,callable:e,priority:t=null==t?10:t})},doHook:function(r,o,e){var t;if(e=Array.prototype.slice.call(e,1),null!=gform.hooks[r][o]&&((o=gform.hooks[r][o]).sort(function(o,r){return o.priority-r.priority}),o.forEach(function(o){"function"!=typeof(t=o.callable)&&(t=window[t]),"action"==r?t.apply(null,e):e[0]=t.apply(null,e)})),"filter"==r)return e[0]},removeHook:function(o,r,t,n){var e;null!=gform.hooks[o][r]&&(e=(e=gform.hooks[o][r]).filter(function(o,r,e){return!!(null!=n&&n!=o.tag||null!=t&&t!=o.priority)}),gform.hooks[o][r]=e)}});
18/* ]]> */
19</script>
19
20
21    <meta http-equiv="x-ua-compatible" content="IE=edge">
22    <meta name="viewport" content="width=device-width, initial-scale=1.0">
23    <meta name="format-detection" content="telephone=no">
24    <link rel="icon" type="image/png" sizes="32x32" href="https://hymy.fi/wp-content/themes/om-hymy-theme/favicon-32x32.png">
25    <link rel="icon" type="image/png" sizes="16x16" href="https://hymy.fi/wp-content/themes/om-hymy-theme/favicon-16x16.png">
26    <link rel="apple-touch-icon" sizes="57x57" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-57.png">
27    <link rel="apple-touch-icon" sizes="60x60" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-60.png">
28    <link rel="apple-touch-icon" sizes="72x72" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-72.png">
29    <link rel="apple-touch-icon" sizes="114x114" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-114.png">
30    <link rel="apple-touch-icon" sizes="120x120" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-120.png">
31    <link rel="apple-touch-icon" sizes="144x144" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-144.png">
32    <link rel="apple-touch-icon" sizes="152x152" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-152.png">
33    <link rel="apple-touch-icon" sizes="180x180" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-180.png">
34    <link rel="manifest" href="https://hymy.fi/wp-content/themes/om-hymy-theme/manifest.json">
35
36
37    
38
39    
39<script src="https://use.typekit.net/lyn0ejh.js"></script>
39 
39<script>try{Typekit.load({ async: true });}catch(e){}</script>
39    <link rel="profile" href="http:mpg.org/xfn/11">
40    <link rel="apple-touch-icon" href="">
41    <link rel="shortcut icon" href="">
42
43    <!-- Head tag start, do not remove -->
44
45<!-- // hymy.fi-->
46
47<script type="text/javascript">
48
49	const timerStart = Date.now();
50	window.timerStart = timerStart;
51	var dfpDebug = document.location.href.indexOf("dfpdebug=1") > -1 ? true : false;
52	var cmpDebug = document.location.href.indexOf("cmpdebug=1") > -1 ? true : false;
53	var testSRA = document.location.href.indexOf("testsra=1") > -1 ? true : true;
54
55</script>
55
56
57<meta name="facebook-domain-verification" content="zufmuphmfyae7u4gdbgu0ppy2ycmld">
58
59<style>
60
61	/*.article__body [id*='dfp__'] iframe {width: auto !important;}*/
62	html.no-scroll, body.no-scroll {
63		overflow: hidden !important;
64	}
65	@media screen and (max-width: 1020px) {
66		body.single-post [data-google-query-id] {
67			margin: 30px 0px !important;
68			clear: both !important;
69			display: flex;
70			justify-content: center;
71		}
72		body.category [data-google-query-id] {
73			margin: 0px 0px 30px !important;
74			clear: both !important;
75		}
76	}
77	body.category-horoskooppi [data-google-query-id] {
78		margin: 0px 0px 50px !important;
79		clear: both !important;
80	}
81	@media screen and (min-width: 1020px) {
82		#dfp__desk-12 {min-height: 408px}
83		.bbp-replies .bbp-dfp-slots {display: flex !important; justify-content: center !important}
84	}
85
86</style>
87
88<script src="https://storage.googleapis.com/om-gravito-cmp/om_gravito_stubScriptTag.js?rnd=1"></script>
88
89
90<script>
91
92	if (location.href.indexOf('testnewcmp=2') == -1) {
93
94		var cookieMatch = document.cookie.match(/(?:^|;\s*)TcString=([^;]+)/);
95		var tcString = cookieMatch ? decodeURIComponent(cookieMatch[1]) : null;
96
97		if (tcString || (window.tcstring_decoded && window.tcstring_decoded.tcString)) {
98
99			if (cmpDebug) {console.log('Testing local __tcfapi...')}
100
101			var decoded = window.tcstring_decoded || {};
102
103			var tcData = {
104				tcString: tcString || decoded.tcString,
105				version: 2,
106				gdprApplies: true,
107				cmpId: decoded.cmpId || 0,
108				cmpVersion: decoded.cmpVersion || 0,
109				tcfPolicyVersion: 0,
110				vendorListVersion: decoded.vendorListVersion || 0,
111				eventStatus: "tcloaded",
112				cmpStatus: "loaded",
113				purpose: decoded.purpose || { consents: {}, legitimateInterests: {} },
114				vendor: decoded.vendor || { consents: {}, legitimateInterests: {} },
115				publisher: decoded.publisher || { consents: {}, legitimateInterests: {} },
116				specialFeatureOptins: decoded.specialFeatureOptins || {}
117			};
118
119			var __tcfapiListeners = {};
120			var __tcfapiNextId = 1;
121
122			window.__tcfapi = function(command, version, callback, parameter) {
123
124				var haveValidString = !!tcData.tcString;
125
126				switch (command) {
127					case "ping":
128						callback({
129							cmpLoaded: true,
130							cmpStatus: "loaded",
131							tcfPolicyVersion: tcData.tcfPolicyVersion
132						}, true);
133						break;
134					case "getTCData":
135						callback(haveValidString ? tcData : null, haveValidString);
136						break;
137					case "getTCString":
138						callback(haveValidString ? tcData.tcString : null, haveValidString);
139						break;
140					case "addEventListener":
141						var id = __tcfapiNextId++;
142						__tcfapiListeners[id] = callback;
143						callback(haveValidString ? tcData : null, haveValidString);
144						break;
145					case "removeEventListener":
146						if (parameter && __tcfapiListeners[parameter]) {
147							delete __tcfapiListeners[parameter];
148							callback(true, true);
149						} else {
150							callback(false, false);
151						}
152						break;
153					default:
154						callback(null, false);
155				}
156
157				if (cmpDebug) {
158					console.log("[__tcfapi call]", {command, version, parameter});
159					console.log("[__tcfapi response]", {
160						time: (Date.now() - timerStart) + 'ms',
161						command: command,
162						returnedTcString: haveValidString ? tcData.tcString : null,
163						decodedObject: decoded || null
164					});
165				}
166
167			};
168
169		}
170
171	}
172
173	if (cmpDebug) {
174		__tcfapi('getTCData', 2, (tcData, success) => {
175			console.log('testdata3: ' + (Date.now() - timerStart) + 'ms --> ', tcData, success);
176		});
177	}
178
179</script>
179
180
181<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
181
182
183<script>
184
185	function waitForElement(selector) {
186		return new Promise(function(resolve, reject) {
187			var element = document.querySelector(selector);
188			if(element) {
189				resolve(element);
190				return;
191			}
192			var observer = new MutationObserver(function(mutations) {
193				mutations.forEach(function(mutation) {
194					var nodes = Array.from(mutation.addedNodes);
195					for(var node of nodes) {
196						if(node.matches && node.matches(selector)) {
197							observer.disconnect();
198							resolve(node);
199							return;
200						}
201					};
202				});
203			});
204			observer.observe(document.documentElement, { childList: true, subtree: true });
205		});
206	}
207
208	function waitForCondition(checkFn, interval = 50, timeout = 5000) {
209		return new Promise((resolve, reject) => {
210			try {
211				if (checkFn()) {
212					resolve(true);
213					return;
214				}
215			} catch (e) {
216				// ignore early errors (e.g., googletag not yet defined)
217			}
218
219			const start = Date.now();
220			const timer = setInterval(() => {
221				try {
222					if (checkFn()) {
223						clearInterval(timer);
224						resolve(true);
225					} else if (Date.now() - start > timeout) {
226						clearInterval(timer);
227						reject(new Error('Timeout waiting for condition'));
228					}
229				} catch (e) {
230					// still ignore transient errors
231				}
232			}, interval);
233		});
234	}
235
236	var cmpRnd = Math.floor(Math.random() * 999999);
237
238	if (location.href.indexOf('testnewcmp=1') > -1) {
239
240		document.addEventListener('gravito:tcfv2:client', function (event) {
241			console.log('TCData: gravito:tcfv2:client eventType: ', event.detail.eventType);
242		}, true);
243
244		__tcfapi("addEventListener", 2, function (TCData) {
245			console.log('TCData: Got an answer from TCData...');
246			console.log('TCData: eventStatus: ', TCData.eventStatus);
247			if (TCData.tcString && "cmpuishown" === TCData.eventStatus || 'tcloaded' === TCData.eventStatus || 'useractioncomplete' === TCData.eventStatus) {
248			}
249		});
250
251		//window.checkCMPConditions = function(e,t,n,o,r) {console.log("Uusi funktio toimii varmemmin!");return new Promise((l=>{cmpDebug&&console.log("Local TcString: "+JSON.stringify(tcstring_decoded));let s,g,i,c;""!=e?(cmpDebug&&console.log("Tsekataan keksistä..."),s=0===t.length||t.every((t=>e.purpose.consents[t])),g=0===n.length||n.every((t=>e.purpose.legitimateInterests[t])),i=0===o.length||o.every((t=>
251e.vendor.consents[t])),c=0===r.length||r.every((t=>e.vendor.legitimateInterests[t])),l(s&&g&&i&&c)):document.addEventListener("gravito:tcfv2:client",(function(a){cmpDebug&&console.log("Kuunnellaan gravito:tcfv2:clientia...");let p=a.detail.eventType;"layer1:opt-in:all"!=p&&"layer2:opt-in:all"!=p&&"layer2:opt-in:selected"!=p&&"layer2:opt-out:all"!=p||(cmpDebug&&console.log("purposeConsentsLength: "+a.detail.purposeConsents.length),gravitoCMP.currentState&&(consentString=cmpGetCookie("TcString"),e=TCStringParse(consentString),cmpDebug&&console.log("currentStaten data: "+JSON.stringify(e))),s=0===t.length||t.every((t=>e.purpose.consents[t])),g=0===n.length||n.every((t=>e.purpose.legitimateInterests[t])),i=0===o.length||o.every((t=>e.vendor.consents[t])),c=0===r.length||r.every((t=>e.vendor.legitimateInterests[t])),cmpDebug&&console.log(s&&g&&i&&c),l(s&&g&&i&&c))}),!0)}))};
252
253		if (location.href.indexOf('testcmp=1') > -1) {
254			waitForElement("body").then(function(element) {
255				(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
256				//e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript_stacks_purettu.js?' + cmpRnd;
257				e.src='http'+('https:'===location.protocol?'s://':'://')+'digitiimi.otavamedia.fi/testi/cmp/otavaScript_stacks_purettu.js?' + cmpRnd;
258				t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
259			});
260		} else if (location.href.indexOf('testcmp=2') > -1) {
261			waitForElement("body").then(function(element) {
262				(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
263				e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript2.js?' + cmpRnd;
264				t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
265			});
266		} else if (location.href.indexOf('testcmp=3') > -1) {
267			waitForElement("body").then(function(element) {
268				(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
269				e.src='http'+('https:'===location.protocol?'s://':'://')+'digitiimi.otavamedia.fi/testi/cmp/gravito-cmp-deployment-script.
269js?' + cmpRnd;
270				t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
271			});
272		} else {
273			waitForElement("body").then(function(element) {
274				(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
275				e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript.js';
276				t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
277			});
278		}
279
280	} else {
281
282		console.log('Testing local __tcfapi, with cmp script insert...');
283
284		//waitForElement("body").then(function(element) {
285		//	var cmpRnd = Math.floor(Math.random() * 999999);
286		//	(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
287		//	e.src='http'+('https:'===location.protocol?'s://':'://')+'digitiimi.otavamedia.fi/testi/cmp/otavaScript_stacks_purettu.js?' + cmpRnd;
288		//	t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
289		//});
290
291		if (location.href.indexOf('testcmp=1') > -1) {
292			waitForElement("body").then(function(element) {
293				(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
294				//e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript_stacks_purettu.js?' + cmpRnd;
295				e.src='http'+('https:'===location.protocol?'s://':'://')+'digitiimi.otavamedia.fi/testi/cmp/otavaScript_stacks_purettu.js?' + cmpRnd;
296				t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
297			});
298		} else {
299			waitForElement("body").then(function(element) {
300				(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
301				//e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript.js';
302				e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript.js?' + cmpRnd;
303				t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
304			});
305		}
306
307	}
308
309</script>
309
310
311<!-- Gravito CMP start-->
312	<!--script src="https://storage.googleapis.com/om-gravito-cmp/om_gravito_stubScriptTag.js"></script-->
313	<!--script async src="https://storage.googleapis.com/om-gravito-cmp/otavaScript.js"></script-->
314<!-- Gravito CMP end-->
315
316<script>
317	window.ghdConfig = {
318		autoInit: true,
319		endpoint: 'https://otava.detect.gravito.fi/api/v1/events',
320		volume: 'sampling',
321		samplingRatio: 0.1 // capture 10% of the events
322	};
323</script>
vendor: 1 bytes, line 323
323
324<script src="https://otava.detect.gravito.fi/sdk.js" async></script>
vendor: 1 bytes, line 324
324
325<script async="async" src="https://functions.adnami.io/api/macro/adsm.macro.hymy.fi.js"></script>
325
326
327<script>
328
329	var cxContextualIds = [], cxSegmentIds = [];
330	var articleCategory = '', articleCategories = '', recipeTheme = '', articleTags = '', articleSection = '';
331
332	var cX = cX || { options: { tcf20: true } }; cX.callQueue = cX.callQueue || [];
333	var cxDefaultSegments = '8nqech16gy6q,8mt8vs49hkio,8o1gwyxui6y1,aavib3epzfey,8o1mlcz9mvdd';
334	if (dfpDebug) {console.log('cXsegmentIds1: ' + cxSegmentIds)}
335
336	var deliveryType = 'tad';
337
338	checkCMPConditions(tcstring_decoded, [1,3,4], [2,7,9,10], [], [755]).then(result => {
339		if (result) {
340			if (dfpDebug) {console.log("Consent met: GAM IS ALLOWED TO SERVE personalized ads...")}
341			//googletag.pubads().setTargeting("deliveryType", "normal");
342			deliveryType = 'normal';
343		} else {
344			checkCMPConditions(tcstring_decoded, [1], [2,7,9,10], [], [755]).then(result => {
345				if (result) {
346					if (dfpDebug) {console.log("Consent met: GAM IS ALLOWED TO SERVE Non-personalized ads...")}
347					//googletag.pubads().setTargeting("deliveryType", "npa");
348					deliveryType = 'npa';
349				} else {
350					checkCMPConditions(tcstring_decoded, [], [2,7,9,10], [], [755]).then(result => {
351						if (result) {
352							if (dfpDebug) {console.log("Consent met: GAM IS ALLOWED TO SERVE Limited ads...")}
353							//googletag.pubads().setTargeting("deliveryType", "lads");
354							deliveryType = 'lads';
355							useHBM = false;
356						} else {
357							if (dfpDebug) {console.log("Consent not met: GAM IS ALLOWED TO SERVE TAD...")}
358							//googletag.pubads().setTargeting("deliveryType", "tad");
359							deliveryType = 'tad';
360							useHBM = false;
361						}
362					});
363				}
364			});
365		}
366	});
367
368	checkCMPConditions(tcstring_decoded, [1,3,4], [], [412], []).then(result => {
369		if (result) {
370
371			if (dfpDebug) {console.log("Consents met: PIANO IS GOOD TO GO...")}
372			if (dfpDebug) {console.log("cX can load via tcstring...")}
373
374			// Async load of cx.js
375			(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
376			e.src='http'+('https:'===location.protocol?'s://s':'://')+'cdn.cxense.com/cx.js';
377			t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
378
379			if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') {
380				if (dfpDebug) {console.log('cX: ls available, getting segments...')}
381				cxSegmentIds = localStorage.getItem('_cX_segmentInfo');
382				if (cxSegmentIds && cxSegmentIds.trim().length > 0) {
383					cxSegmentIds = cxSegmentIds.split(',');
384					if (dfpDebug) console.log('cX: Calling dfp.init() with lsSegments:', cxSegmentIds);
385					dfp.init(cxSegmentIds);
386				} else {
387					if (dfpDebug) {
388						console.log('cX: ls cxSegmentIds.trim().length = 0...');
389						console.log('cX: Calling dfp.init() with default segments...');
390					}
391					dfp.init(cxDefaultSegments);
392				}
393			}
394
395
396			waitForCondition(() => window.cX && cX.loaded).then(() => {
397
398				var cxSegmentIds = [];
399				var contextualIds = [];
400
401				if (dfpDebug) {console.log('cx.loaded, calling cX.getSegments...')}
402				cX.getSegments('f1ab28b7c9202ce3defa8bb2979a88f90c7a5ab2', function(segments) {
403
404					if (dfpDebug) console.log('cX.getSegments length: ' + segments.length);
405					if (!segments || !Array.isArray(segments) || !segments.length) {
406						if (dfpDebug) console.warn('cX: Segment fetch failed or empty:', segments);
407					}
408
409					cX.Array.forEach(segments, function (cxTypedSegment, index) {
410						if (cxTypedSegment.type == 'contextual') {
411							cxContextualIds.push(cxTypedSegment.id);
412						} else if (cxTypedSegment.type == 'traffic') {
413							cxSegmentIds.push(cxTypedSegment.id);
414						}
415					});
416
417					if (dfpDebug) console.log('cxContextualIds:', cxContextualIds);
418
419					if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') {
420						localStorage.setItem('_cX_segmentInfo', cxSegmentIds.join(','));
421						if (dfpDebug) console.log('cX: Segments fetched and stored:', cxSegmentIds);
422					}
423
424				});
425			}).catch(err => console.warn(err.message));
426
427		} else {
428
429			if (dfpDebug) {console.log("Consents NOT met: CAN NOT USE PIANO!!!")}
430			__tcfapi("addEventListener", 2, function (TCData) {
431				if (dfpDebug) {console.log('Got an answer from TCData...')}
432				if (TCData.tcString && "cmpuishown" === TCData.eventStatus || 'tcloaded' === TCData.eventStatus || 'useractioncomplete' === TCData.eventStatus) {
433					//initDFP(cxSegmentIds);
434					if (dfpDebug) {
435						console.log('No cX, calling dfp.init() with default segments...');
436					}
437					dfp.init(cxDefaultSegments);
438				}
439			});
440
441		}
442	});
443
444	setTimeout(() => {
445		if (window.dataLayer) {
446			dataLayer.forEach(function (dataLayerItem) {
447				if (dataLayerItem['PrimaryCategory'] !== '' && dataLayerItem['PrimaryCategory'] !== undefined) {
448					articleCategory = dataLayerItem['PrimaryCategory'].toLocaleStr
448ing().toLowerCase().replace(/, /g, ',');
449					if (dfpDebug) {console.log('ArticleCategory: ' + articleCategory);}
450				}
451				if (dataLayerItem['Categories'] !== '' && dataLayerItem['Categories'] !== undefined) {
452					articleCategories = dataLayerItem['Categories'].toLocaleString().toLowerCase().replace(/, /g, ',');
453					if (dfpDebug) {console.log('Categories: ' + articleCategories);}
454				}
455				if (dataLayerItem['Tags'] !== '' && dataLayerItem['Tags'] !== undefined) {
456					articleTags = dataLayerItem['Tags'].toLocaleString().toLowerCase().replace(/, /g, ',');
457					if (dfpDebug) {console.log('Tags: ' + articleTags);}
458				}
459				if (dataLayerItem['Section'] !== '' && dataLayerItem['Section'] !== undefined) {
460					articleSection = dataLayerItem['Section'].toLowerCase().replace(/, /g, ',');
461					if (dfpDebug) {console.log('ArticleSection: ' + articleSection);}
462				}
463			});
464		} else {
465			console.error('DataLayer is not defined.')
466		}
467	}, 120);
468
469	console.time("timer");
470
471	var adLocation = 'content';
472	var hideAllAds = false;
473	var userdpbjs = false;
474	var hb_setup = 'owpbjs';
475	var rnd = Math.floor(Math.random() * 50);
476	window.dataLayer = window.dataLayer || [];
477	var leiki_contextual = '';
478	var useHBM = true;
479	if (location.href.indexOf('usehbm=false') > -1) {
480		useHBM = false;
481		console.log('HBM not in use!!!');
482	}
483
484	function getLeikiContextual() {
485
486		if (!window.dataLayer) {
487			console.error('LeikiSmartProfiles: dataLayer is not defined.')
488			return;
489		}
490
491		var SmartProfiles = {};
492		var FilteredKeywords = [];
493		var dataLayerKey = 'LeikiSmartProfiles';
494		var keywordFilters = {
495			aste_helsinki: {
496				relevance: 2,
497				reversedSlotsLeft: 5,
498			},
499			iabtier1: {
500				relevance: 10,
501				reversedSlotsLeft: 5,
502			}
503		}
504
505		// Find correct object by key from dataLayer.
506		dataLayer.forEach(function (dataLayerItem) {
507			// If dataLayer item have object named by dataLayerKey
508			// eg. datalayer.LeikiSmartProfiles
509			if (dataLayerItem[dataLayerKey]) {
510				SmartProfiles = dataLayerItem[dataLayerKey];
511			};
512		});
513
514		// First get all object keys of SmartProfiles. Keys are SmartProfile classifications.
515		// Then go through all the classifications
516		Object.keys(SmartProfiles).forEach(function (classification) {
517			// Use only keywordFilters classifications
518			if (classification in keywordFilters) {
519				// Go throug all classification objects. In object we have array of keywords.
520				SmartProfiles[classification].forEach(function (keyword) {
521					// Filter out all keywords what doesn't meat minium relevance level
522					var isMeaningful = keywordFilters[classification].relevance < keyword.relevance;
523					if (isMeaningful && keywordFilters[classification].reversedSlotsLeft > 0) {
524						keywordFilters[classification].reversedSlotsLeft--;
525						FilteredKeywords.push(keyword.ID);
526					}
527				});
528			}
529		});
530
531		// Convert array to string. Keywords are separated by , by default
532		return FilteredKeywords.length > 0 ? FilteredKeywords.join() : null;
533
534	}
535
536	function cmpGetCookie(cname) {
537		var name = cname + "=";
538		var ca = document.cookie.split(';');
539		for(var i = 0; i < ca.length; i++) {
540			var c = ca[i];
541			while (c.charAt(0) == ' ') {
542				c = c.substring(1);
543			}
544			if (c.indexOf(name) == 0) {
545				return c.substring(name.length, c.length);
546			}
547		}
548		return "";
549	}
550
551	setTimeout(function() {
552		leiki_contextual = getLeikiContextual();
553	}, 50);
554
555	var googletag = googletag || {};
556	googletag.cmd = googletag.cmd || [];
557	var definedSlots = {};
558
559	googletag.cmd.push(function() {
560		googletag.pubads().addEventListener('slotRenderEnded', function(event) {
561			if (event.slot.getSlotElementId().includes('dfp__interstitial')) {
562				if (event.isEmpty) {
563					console.log('Interstitial empty...');
564				}
565			}
566		});
567	});
568
569	//var dfpConfig = {"location":"content","serviceName":"hymy","slots":["desk-1","in-text","rectangle-1","rectangle-2","rectangle-3","rectangle-4","rectangle-5","in-text","interstitial","mob-1","mob-2","mob-3"],"serviceStarted":""};
570	var dfpConfig = {"location":"content","serviceName":"hymy","slots":["desk-1","in-text","rectangle-1","rectangle-2","rectangle-3","rectangle-4","rectangle-5","in-text","mob-1","mob-2","mob-3","to
570pad-mob"],"serviceStarted":""};
571
572	window.dfp = {
573		location: "content",
574		serviceName: 'hymy',
575		visibility: document.documentElement.clientWidth >= 1279 ? "large" : document.documentElement.clientWidth >= 1020 ? "desktop" : "mobile",
576		networkcode: "135812570",
577		initialized: false,
578		definedAds: {},
579		slots: {
580			"desk-1": {
581				sizes: [[728,90], [980,120], [980,400], [980,552]],
582				visibility: ["desktop", "large"]
583			},
584			"rectangle-1": {
585				sizes: [[300,250], [300,300], [300,431], [300,600]],
586				visibility: ["desktop", "large"]
587			},
588			"rectangle-2": {
589				sizes: [[300,250], [300,300], [300,431], [300,600]],
590				visibility: ["desktop", "large"]
591			},
592			"rectangle-3": {
593				sizes: [[300,250], [300,300], [300,431], [300,600]],
594				visibility: ["desktop", "large"],
595				location: ["content", "forum"]
596			},
597			"rectangle-4": {
598				sizes: [[300,250], [300,300], [300,431], [300,600]],
599				visibility: ["desktop", "large"],
600				location: ["forum"]
601			},
602			"rectangle-5": {
603				sizes: [[300,250], [300,300], [300,431], [300,600]],
604				visibility: ["desktop", "large"],
605				location: ["forum"]
606			},
607			"in-text": {
608				sizes: [[300,250], [300,300], [468,400], [620,891]],
609				visibility: ["desktop", "large"]
610			},
611			'interstitial': {
612				sizes: [1, 1],
613				visibility: 'all'
614			},
615			"mob-1": {
616				sizes: [[360, 600], [320,600], [320,320], [300,600], [300,431], [300,300], [300,250], [300,150]],
617				visibility: ["mobile"]
618			},
619			"mob-2": {
620				sizes: [[360, 600], [320,600], [320,320], [300,600], [300,431], [300,300], [300,250], [300,150], ['fluid']],
621				visibility: ["mobile"],
622				location: ["frontpage", "content", "forum"]
623			},
624			"mob-3": {
625				sizes: [[360, 600], [320,600], [320,320], [300,600], [300,431], [300,300], [300,250], [300,150], ['fluid']],
626				visibility: ["mobile"],
627				location: ["forum"]
628			},
629			"mob-4": {
630				sizes: [[360, 600], [320,600], [320,320], [300,600], [300,431], [300,300], [300,250], [300,150], ['fluid']],
631				visibility: ["mobile"],
632				location: ["forum"]
633			},
634			'topad-mob': {
635				sizes: [[1, 2],[2, 2]],
636				visibility: 'mobile'
637			}
638		},
639
640		pbConfig: {
641			large: {
642				script: "https://otava-cdn.relevant-digital.com/static/tags/5e4c4c2c53ca952a90fa7d98.js",
643				configId: {
644					frontpage: "6078352f3b31001aa4257ba8",
645					content: "6078487db0b348085a257bb8",
646					forum: "60785428cac786902d627115"
647				},
648				lazyLoad: {
649					frontpage: 60,
650					content: 60,
651					forum: 60
652				}
653			},
654			desktop: {
655				script: "https://otava-cdn.relevant-digital.com/static/tags/5e4c4c2c53ca952a90fa7d98.js",
656				configId: {
657					frontpage: "6078352f3b31001aa4257ba8",
658					content: "6078487db0b348085a257bb8",
659					forum: "60785428cac786902d627115"
660				},
661				lazyLoad: {
662					frontpage: 60,
663					content: 60,
664					forum: 60
665				}
666			},
667			mobile: {
668				script: "https://otava-cdn.relevant-digital.com/static/tags/5e4c4c2c53ca952a90fa7d72.js",
669				configId: {
670					frontpage: "607844e0585539bac5257bb3",
671					content: "60784b5efaa9dbd1c0257bb9",
672					forum: "607856c5934372061f627116"
673				},
674				lazyLoad: {
675					frontpage: 60,
676					content: 60,
677					forum: 60
678				}
679			}
680		},
681
682		registerAdslots: function(i) {
683			for (adslot in this.slots) {
684				var v = this.slots[adslot].location || ["all"];
685				if (v != "all" && v.indexOf(adLocation) < 0) {
686					delete this.slots[adslot];
687					console.log(adslot + ' deleted!');
688				}
689			}
690		},
691
692		displayAdslot: function (id) {
693
694			//if (!this.initialized) this.init();
695
696			var that = this;
697			var parts = id.split('__');
698			var parts = parts[1].split('_');
699			var slotName = parts[0];
700
701			if (testSRA) {
702				//if (!(slotName.includes('native'))) {
703				//	return;
704				//}
705				return;
706			}
707
708			// Checking that the native adslot is known
709			if (slotName.includes('native') && this.slots.hasOwnProperty(slotName)) {
710				googletag.cmd.push(function () {
711					that.defineNative(id, slotName);
712					googletag.display(id);
713					if (dfpDebug) {console.log('googletag.display for ' + slotName + '...')}
714				});
715			} else {
716				// Checking that the adslot is known and visibility matches
717				//if (this.slots.hasOwnProperty(parts[0]) && ["all", this.visibility].indexOf(this.slots[parts[0]]['visibility'] || 'all') >= 0) {
718				if	(this.slots.hasOwnProperty(parts[0]) && (this.slots[parts[0]]['visibility'] === 'all' || this.slots[parts[0]]['visibility'].includes(this.visibility))) {
719					if (dfpDebug) {console.log('parts = ' + parts[0])}
720					if (parts[0] == 'interstitial') {
721						//var checkIfGoogletagReady = setInterval(function () {
722							//if (window.googletag && googletag.apiReady && googletag.pubadsReady) {
723								googletag.cmd.push(function () {
724									var slot = that.defineSlot(parts[0], id);
725									googletag.display(id);
726									if (dfpDebug) {console.log('googletag.display for ' + parts[0] + '..')}
727									//googletag.pubads().refresh([slot], {changeCorrelator: false});
728									//if (dfpDebug) {console.log('googletag.pubads().refresh for ' + parts[0] + '..')}
729								});
730								//clearInterval(checkIfGoogletagReady);
731							//}
732						//}, 50);
733					} else {
734						googletag.cmd.push(function () {
735							var slot = that.defineSlot(parts[0], id);
736							googletag.display(id);
737							if (slotName == 'desk-1' && location.href.indexOf('loadtopad') > -1) {
738								window.dfp.slotdesk1 = slot;
739							}
740							if (dfpDebug) {console.log('googletag.display for ' + parts[0] + '..')}
741						});
742					}
743				}
744			}
745
746		},
747
748		defineSlot: function (slotName, id) {
749
750			var id = id || 'dfp__' + slotName;
751			var path = this.networkcode + '/' + dfpConfig.serviceName + '/' + dfpConfig.location + '/' + slotName;
752			if (slotName.includes('topad-')) {
753				path = this.networkcode + '/' + dfpConfig.serviceName + '/content/' + slotName;
754			}
755			this.definedAds[id] = true;
756			//console.log('defineSlot: ' + slotName + '#' + id);
757
758			if (typeof this.slots[slotName]['sizes'] !== 'undefined') {
759				if (dfpDebug) {console.log('defineSlot for ' + slotName + '...')}
760				return googletag.defineSlot(path, this.slots[slotName]['sizes'], id).addService(googletag.pubads()).setTargeting('adslotid', id.replace('dfp__',''));
761			} else {
762				return googletag.defineOutOfPageSlot(path, id).addService(googletag.pubads());
763			}
764
765		},
766
767		defineNative: function(opt_div, slotName) {
768
769			var opt_div = opt_div || 'dfp__' + slotName;
770			var adUnitPath = this.networkcode + '/' + this.serviceName + '/native/' + slotName;
771			this.definedAds[opt_div] = true;
772			//console.log('defineNative: ' + slotName + '#' + opt_div;
773			//return googletag.defineSlot(adUnitPath, 'fluid', opt_div).addService(googletag.pubads());
774			return googletag.defineSlot(adUnitPath, this.slots[slotName]['sizes'], opt_div).addService(googletag.pubads()).setTargeting('adslotid', opt_div.replace('dfp__',''));
775
776		},
777
778		init: function(cXsegmentIds) {
779
780			//if (dfpDebug) {console.log('Initin segmentit: ' + cXsegmentIds)}
781
782			var that = this;
783
784			if (!dfpConfig.hasOwnProperty('serviceName')) {
785				console.log('DFP service name not set');
786				return;
787			}
788
789			this.registerAdslots(dfpConfig.slots);
790
791			if (!dfpConfig.serviceStarted) {
792
793				googletag.cmd.push(function () {
794
795					googletag.pubads().addEventListener('slotRenderEnded', function(event) {
796
797						if ((dfpDebug || 1 == 2) && window.dfp.visibility == 'mobile' && 1 == 2) {
798
799							var origAdSlotId = event.slot.getSlotElementId();
800							var acceptedSlotIds = ["mob-1","mob-2","mob-3","mob-4","2_1","2_2","2_3","2_4","2_5"];
801
802							if (acceptedSlotIds.some(value => origAdSlotId.endsWith(value))) {
803								if (dfpDebug) {console.log('adSlotId "' + origAdSlotId + '" is allowed for FRB...')}
804								var adPath = 'hymy';
805								if (event.isEmpty) {
806									if (window.relevantDigital) {
807
808										setTimeout(function() {
809											var newAdSlotId = origAdSlotId.replace("-","_") + '_111';
810											var adSlotName = origAdSlotId.substr(origAdSlotId.indexOf("__")+2);
811											//adSlotName = adSlotName.substr(0, adSlotName.indexOf("_"));
812											if (adSlotName.indexOf("_") > -1) {adSlotName = adSlotName.substr(0, adSlotName.indexOf("_"))}
813											if (dfpDebug) {console.log('adSlotName: ' + adSlotName)};
814											if (dfpDebug) {console.log('Creating new adslot: ' + '#' + origAdSlotId)};
815											jQuery('#' + origAdSlotId).after('<div id="' + newAdSlotId + '" class="' + adSlotName + '-article">
815<script>var ' + newAdSlotId + '; googletag.cmd.push(function(){' + newAdSlotId + ' = googletag.defineSlot("/135812570/'+ adPath +'/' + adLocation + '/' + adSlotName + '", [[300,250],[300,300],[300,431],[300,600]], "' + newAdSlotId + '").addService(googletag.pubads()).setTargeting("adslotid", ["' + origAdSlotId.replace("dfp__","") + '-111","frb"])});googletag.cmd.push(function() {googletag.display("' + newAdSlotId + '")});<\/script><\/div>');
816											var pbjsConf = window.dfp.pbConfig[window.dfp.visibility].configId[adLocation];
817											relevantDigital.cmd.push(function() {
818												relevantDigital.loadPrebid({configId: pbjsConf, manageAdserver: false, collapseEmptyDivs: true, collapseBeforeAdFetch: false, noGpt: true, allowedDivIds: [newAdSlotId], noSlotReload: true});
819													if (dfpDebug) {console.log('Requesting new ad to: #' + newAdSlotId)};
820											});
821										}, 100);
822
823									}
824								} else {
825									if (dfpDebug) {console.log('Ad slot ' + origAdSlotId + ' was not empty...')};
826								}
827							}
828
829						}
830
831						if (event.slot.getSlotElementId().indexOf('dfp__interstitial') > -1) {
832							if (event.isEmpty) {
833								if (dfpDebug) {console.log('Fpa is empty, calling webinterstitial...')}
834								window.canRunWebInterstitial = true;
835							} else {
836								if (dfpDebug) {console.log('BBW: preventing sticky player when fpa was shown...')}
837								window.bluebillywig = window.bluebillywig || {};
838								window.bluebillywig.cmd = window.bluebillywig.cmd || [];
839								//window.bluebillywig.cmd.push(function($$api) {
840								//	//const originalStickyMode = $$api.getPlayoutData().stickyMode;
841								//	$$api.updatePlayout({stickyMode: 'none'});
842								//	//$$api.updatePlayout({stickyMode: originalStickyMode});
843								//});
844								window.bluebillywig.cmd.push({
845									playerId: '/p/inarticle/a/hymy',
846									callback: function($$api) {
847										$$api.updatePlayout({stickyMode: 'none'});
848									}
849								});
850							}
851						}
852
853					});
854
855					googletag.pubads().setTargeting("url_domain", window.location.host),
856					googletag.pubads().setTargeting("url_path", window.location.pathname),
857					googletag.pubads().setTargeting("url_params", window.location.search.substring(1));
858					googletag.pubads().setTargeting("hb_setup", hb_setup);
859					//googletag.pubads().setCentering(true);
860
861
862					var m = document.cookie.match(/frosmo_keywords=.([^;$]+)/);
863					if(m != null &&  m.length) {
864						googletag.pubads().setTargeting("frosmo", m[1].split("."))
865					}
866
867					if (leiki_contextual !== null && leiki_contextual !== 'undefined') {
868
869						if (dfpDebug) {console.log('leiki_contextual_api success:', leiki_contextual);}
870						googletag.pubads().setTargeting("leiki_contextual", leiki_contextual);
871
872					}
873
874					if (window.dataLayer) {
875
876						//articleCategory = google_tag_manager["GTM-K5WDX4"].dataLayer.get('PrimaryCategory');
877						//articleCategories = google_tag_manager["GTM-K5WDX4"].dataLayer.get('Categories');
878						//recipeTheme = google_tag_manager["GTM-K5WDX4"].dataLayer.get('RecipeTheme');
879						//articleTags = google_tag_manager["GTM-K5WDX4"].dataLayer.get('Tags');
880
881						if (articleCategory != undefined && articleCategory != '') {
882							googletag.pubads().setTargeting("articlecategory", articleCategory.toLowerCase());
883							if (dfpDebug) {console.log('Targeting for articlecategory: ' + articleCategory.toLowerCase());}
884						}
885						if (articleCategories != undefined && articleCategories != '') {
886							googletag.pubads().setTargeting("articlecategories", articleCategories.toLowerCase());
887							if (dfpDebug) {console.log('Targeting for articlecategories: ' + articleCategories.toLowerCase());}
888						}
889						if (articleSection != undefined && articleSection != '') {
890							googletag.pubads().setTargeting("articlesection", articleSection.toLowerCase());
891							if (dfpDebug) {console.log('Targeting for articlesection: ' + articleSection.toLowerCase());}
892						}
893						if (articleTags != undefined && articleTags != '') {
894							googletag.pubads().setTargeting("articlekeywords", articleTags.toLowerCase().replace(/, /g, ','));
895							if (dfpDebug) {console.log('Targeting for articlekeywords: ' + articleTags.toLowerCase().replace(/, /g, ','));}
896						}
897
898					} else {
899						console.error('DataLayer not ready for targeting...')
900					}
901
902					if (cXsegmentIds !== null && cXsegmentIds !== undefined) {
903
904						var regexPattern = new RegExp("(\\b8nqech16gy6q\\b)");
905						if (!regexPattern.test(cXsegmentIds)) {
906							cXsegmentIds = (Array.isArray(cXsegmentIds) && cXsegmentIds.length === 0) ? '8nqech16gy6q' : (cXsegmentIds !== '' ? cXsegmentIds + ',8nqech16gy6q' : cXsegmentIds);
907							if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8nqech16gy6q"')}
908						}
909						var regexPattern = new RegExp("(\\b8mt8vs49hkio\\b)");
910						if (!regexPattern.test(cXsegmentIds)) {
911							cXsegmentIds = cXsegmentIds + (cXsegmentIds !== '' ? ',' : '') + '8mt8vs49hkio';
912							if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8mt8vs49hkio"')}
913						}
914						var regexPattern = new RegExp("(\\b8o1gwyxui6y1\\b)");
915						if (!regexPattern.test(cXsegmentIds)) {
916							cXsegmentIds = cXsegmentIds + (cXsegmentIds !== '' ? ',' : '') + '8o1gwyxui6y1,aavib3epzfey';
917							if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8o1gwyxui6y1,aavib3epzfey"')}
918						}
919						var regexPattern = new RegExp("(\\b8o1mlcz9mvdd\\b)");
920						if (!regexPattern.test(cXsegmentIds)) {
921							cXsegmentIds = cXsegmentIds + (cXsegmentIds !== '' ? ',' : '') + '8o1mlcz9mvdd';
922							if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8o1mlcz9mvdd"')}
923						}
924
925						if (dfpDebug) {console.log('DFP setTargeting CxSegments: ' + cXsegmentIds)}
926						googletag.pubads().setTargeting("CxSegments", cXsegmentIds);
927
928					}
929
930/*
931					if (dfpDebug) {console.log('Calling cX.getSegments...')}
932					cX.getSegments('f1ab28b7c9202ce3defa8bb2979a88f90c7a5ab2', function(segments) {
933						cX.Array.forEach(segments, function (cxTypedSegment, index) {
934							if (cxTypedSegment.type == 'contextual') {
935								contextualIds.push(cxTypedSegment.id);
936							}
937						});
938						if (dfpDebug) {console.log('Setting targeting fo cX.getSegments: ' + contextualIds.join())}
939						googletag.pubads().setTargeting("CxContext", contextualIds.join());
940					});
941*/
942
943					googletag.pubads().setTargeting("CxContext", cxContextualIds.join());
944
945					//var renderMarginPercent = Math.random() < 1/3 ? 20 : Math.random() < 1/2 ? 40 : 80;
946					var renderMarginPercent = window.dfp.pbConfig[window.dfp.visibility].lazyLoad[adLocation] || 40;
947					googletag.pubads().setTargeting("experiments", "lazyload_" + renderMarginPercent);
948
949
950					googletag.pubads().collapseEmptyDivs(),
951					googletag.pubads().enableLazyLoad({
952						fetchMarginPercent: 100,
953						renderMarginPercent: renderMarginPercent,
954						mobileScaling: 1
955					});
956					if (dfpDebug) {console.log('renderMarginPercent: ' + renderMarginPercent)}
957
958	/*
959					googletag.pubads().enableLazyLoad({
960						fetchMarginPercent: 100,
961						renderMarginPercent: 40,
962						mobileScaling: 1
963					});
964	*/
965
966					googletag.pubads().setTargeting("deliveryType", deliveryType);
967
968					(function () {
969
970						function generateNewPPID() {
971							return crypto.randomUUID().replace(/-/g, '');
972						}
973
974						function parsePossiblyDoubleEncodedJSON(value) {
975							var parsed = value;
976							while (typeof parsed === 'string') {
977								parsed = JSON.parse(parsed);
978							}
979							return parsed;
980						}
981
982						function setPPID(ppid) {
983							if (!ppid) return;
984							localStorage.setItem('ppid', ppid);
985							googletag.pubads().setPublisherProvidedId(ppid);
986						}
987
988						var storedPPID = localStorage.getItem('ppid');
989
990						if (storedPPID) {
991							if (dfpDebug) {console.log('ls storedPPID: ', storedPPID)}
992							googletag.pubads().setPublisherProvidedId(storedPPID);
993							return;
994						}
995
996						try {
997							var gravitoValue = localStorage.getItem('gravito-microprofile-data');
998							if (gravitoValue) {
999								var parsed = parsePossiblyDoubleEncodedJSON(gravitoValue);
1000								if (parsed && parsed.i) {
1001									var migratedPPID = btoa(parsed.i);
1002									if (dfpDebug) {console.log('gmd ls migratedPPID: ', migratedPPID)}
1003									setPPID(migratedPPID);
1004									return;
1005								}
1006							}
1007						} catch (e) {
1008							console.warn('Gravito migration failed:', e);
1009						}
1010
1011						var newPPID = generateNewPPID();
1012						setPPID(newPPID);
1013						if (dfpDebug) {console.log('created a newPPID: ', newPPID)}
1014
1015					})();
1016
1017					//waitForResource('localStorage', 'gravito-microprofile-data').then(function (value) {
1018					//	if (dfpDebug) {console.log('gravito-microprofile-data exists in local storage with value: ', value)}
1019					//	var ppid = btoa(JSON.parse(JSON.parse(value)).i);
1020					//	if (ppid) {
1021					//		googletag.pubads().setPublisherProvidedId(ppid);
1022					//		if (dfpDebug) {console.log('ppid: ' + ppid)}
1023					//	}
1024					//});
1025
1026					googletag.pubads().enableSingleRequest();
1027					googletag.pubads().disableInitialLoad();
1028					googletag.enableServices();
1029					console.timeEnd("timer");
1030
1031					dfpConfig.serviceStarted = true;
1032
1033				})
1034
1035			}
1036
1037			this.initialized = true;
1038			if (dfpDebug) {console.log('DFP initialized...')}
1039
1040		}
1041	}
1042
1043
1044	if (useHBM) {
1045
1046		var rdads = document.createElement('script');
1047		rdads.async = true;
1048		var useSSL = 'https:' == document.location.protocol;
1049		rdads.src = window.dfp.pbConfig[window.dfp.visibility].script;
1050		var node = document.getElementsByTagName('script')[0];
1051		node.parentNode.insertBefore(rdads, node);
1052
1053		var pbjsConf = window.dfp.pbConfig[window.dfp.visibility].configId[adLocation];
1054		if (dfpDebug) {console.log('pbjsConf in use ' + pbjsConf);}
1055
1056	}
1057
1058	function initDFP(cXsegmentIds) {
1059
1060		//if (dfpDebug) {console.log('cSsegmentIds: ' + cXsegmentIds)}
1061		if( window.dfp !== undefined ) {
1062			if (dfpDebug) {console.log('initDFP() called by cX.getUserSegmentIds ' + cXsegmentIds + '...')}
1063			if (location.href.indexOf("/erotiikka") == -1 && document.location.href.indexOf("/kuvat-ja-videot") == -1) {
1064				setTimeout(function(){
1065					window.dfp.init(cXsegmentIds);
1066				}, 1);
1067				setTimeout(function(){
1068					if (useHBM) {
1069						if (!testSRA) {
1070							if (dfpDebug) {console.log('HBM initialized...')}
1071							if (location.href.indexOf('loadtopad') > -1) {
1072								googletag.pubads().refresh([window.dfp.slotdesk1])
1073							}
1074							initHBM(cXsegmentIds);
1075						}
1076					} else {
1077						if (!testSRA) {
1078							console.log('HBM not in use!!!');
1079							googletag.pubads().refresh();
1080						}
1081					}
1082				}, 1);
1083			}
1084		} else {
1085			console.log('DFP init failed: window.dfp missing!');
1086		}
1087
1088	}
1089
1090	function initHBM(cXsegmentIds) {
1091
1092		if (dfpDebug) {console.log('initHBM called...')}
1093
1094		var hbArticleTags = articleTags != '' ? articleTags.split() : [];
1095		var hbArticleCategories = articleCategories != '' ? [...new Set(articleCategory.split(',').concat(articleCategories.split(',')))] : [];
1096
1097		window.relevantDigital = window.relevantDigital || {};
1098		relevantDigital.cmd = relevantDigital.cmd || [];
1099		relevantDigital.cmd.push(function() {
1100
1101			if (location.href.indexOf('loadtopad') > -1) {
1102
1103				let hasDoneFirstCall;
1104				relevantDigital.addAuctionCallbacks({
1105					onBeforeAuctionSetup: function ({ auction }) {
1106						if (!(window.googletag || {}).pubads) {
1107							console.error('GPT not initialized, this method only works if GPT-slots are created before calling relevantDigital.loadPrebid()');
1108							return;
1109						}
1110						if (hasDoneFirstCall) { // Only do this on page-load and not subsequent auctions
1111							return;
1112						}
1113						hasDoneFirstCall = true;
1114
1115						// Slots to load immediately (without waiting for relevantDigital)
1116						//const TO_LOAD_NOW = ['dfp__desk-1'];
1117						const TO_LOAD_NOW = [];
1118						// Slots to exclude entirely (never loaded)
1119						//const NOT_TO_LOAD_NOW = ['dfp__interstitial_1','dfp__desk-1'];
1120						const NOT_TO_LOAD_NOW = ['dfp__desk-1'];
1121
1122						const isLoadNowDiv = (divId) => TO_LOAD_NOW.includes(divId);
1123						const isNotToLoadDiv = (divId) => NOT_TO_LOAD_NOW.includes(divId);
1124
1125						const loadNowSlots = [];
1126
1127						googletag.pubads().getSlots().forEach((slot) => {
1128							const divId = slot.getSlotElementId(); // Get the div ID associated with the slot
1129							if (isLoadNowDiv(divId)) {
1130								loadNowSlots.push(slot);
1131							}
1132						});
1133
1134						if (!loadNowSlots.length && !NOT_TO_LOAD_NOW.length) {
1135							return; // continue as normal
1136						}
1137
1138						// Requests slots in TO_LOAD_NOW immediately
1139						if (loadNowSlots.length) {
1140							googletag.pubads().refresh(loadNowSlots);
1141						}
1142
1143						// Make sure NOT_TO_LOAD_NOW slots are excluded from the auction
1144						auction.adUnits = auction.adUnits.filter(({ gamPath, divId }) =>
1145							!isNotToLoadDiv(divId)
1146						);
1147
1148						// Then manually remove them when Relevant is doing the ad request
1149						auction.googletagCalls = auction.googletagCalls || {};
1150						auction.googletagCalls.refresh = (slots, ...rest) => {
1151							const all = slots || googletag.pubads().getSlots();
1152							const toLoad = all.filter((s) =>
1153								!isNotToLoadDiv(s.getSlotElementId()) // Exclude NOT_TO_LOAD_NOW slots
1154							);
1155							googletag.pubads().refresh(toLoad, ...rest);
1156						};
1157					}
1158				});
1159
1160			}
1161
1162			if (location.href.indexOf('interstitial11') > -1) {
1163
1164				let hasDoneFirstCall;
1165				relevantDigital.addAuctionCallbacks({
1166					onBeforeAuctionSetup: function ({ auction }) {
1167						if (!(window.googletag || {}).pubads) {
1168							console.error('GPT not initialized, this method only works if GPT-slots are created before calling relevantDigital.loadPrebid()');
1169							return;
1170						}
1171						if (hasDoneFirstCall) { // Only do this on page-load and not subsequent auctions
1172							return;
1173						}
1174						hasDoneFirstCall = true;
1175
1176						// Slots to load immediately (without waiting for relevantDigital)
1177						//const TO_LOAD_NOW = ['dfp__desk-1'];
1178						const TO_LOAD_NOW = [];
1179						// Slots to exclude entirely (never loaded)
1180						//const NOT_TO_LOAD_NOW = ['dfp__interstitial_1','dfp__desk-1'];
1181						const NOT_TO_LOAD_NOW = ['dfp__interstitial_1'];
1182
1183						const isLoadNowDiv = (divId) => TO_LOAD_NOW.includes(divId);
1184						const isNotToLoadDiv = (divId) => NOT_TO_LOAD_NOW.includes(divId);
1185
1186						const loadNowSlots = [];
1187
1188						googletag.pubads().getSlots().forEach((slot) => {
1189							const divId = slot.getSlotElementId(); // Get the div ID associated with the slot
1190							if (isLoadNowDiv(divId)) {
1191								loadNowSlots.push(slot);
1192							}
1193						});
1194
1195						if (!loadNowSlots.length && !NOT_TO_LOAD_NOW.length) {
1196							return; // continue as normal
1197						}
1198
1199						// Requests slots in TO_LOAD_NOW immediately
1200						if (loadNowSlots.length) {
1201							googletag.pubads().refresh(loadNowSlots);
1202						}
1203
1204						// Make sure NOT_TO_LOAD_NOW slots are excluded from the auction
1205						auction.adUnits = auction.adUnits.filter(({ gamPath, divId }) =>
1206							!isNotToLoadDiv(divId)
1207						);
1208
1209						// Then manually remove them when Relevant is doing the ad request
1210						auction.googletagCalls = auction.googletagCalls || {};
1211						auction.googletagCalls.refresh = (slots, ...rest) => {
1212							const all = slots || googletag.pubads().getSlots();
1213							const toLoad = all.filter((s) =>
1214								!isNotToLoadDiv(s.getSlotElementId()) // Exclude NOT_TO_LOAD_NOW slots
1215							);
1216							googletag.pubads().refresh(toLoad, ...rest);
1217						};
1218					}
1219				});
1220
1221			}
1222
1223			if (location.href.indexOf('interstitial22') > -1) {
1224
1225				let hasDoneFirstCall;
1226				relevantDigital.addAuctionCallbacks({
1227					onBeforeAuctionSetup: function ({ auction }) {
1228						if (!(window.googletag || {}).pubads) {
1229							console.error('GPT not initialized, this method only works if GPT-slots are created before calling relevantDigital.loadPrebid()');
1230							return;
1231						}
1232						if (hasDoneFirstCall) { // Only do this on page-load and not subsequent auctions
1233							return;
1234						}
1235						hasDoneFirstCall = true;
1236
1237						// Load all slots associated with these div IDs immediately (without waiting for relevantDigital)
1238						const TO_LOAD_NOW = ['dfp__interstitial_1'];
1239
1240						const isLoadNowDiv = (divId) => TO_LOAD_NOW.includes(divId);
1241						const loadNowSlots = [];
1242
1243						googletag.pubads().getSlots().forEach((slot) => {
1244							const divId = slot.getSlotElementId(); // Get the div ID associated with the slot
1245							if (isLoadNowDiv(divId)) {
1246								loadNowSlots.push(slot);
1247							}
1248						});
1249
1250						if (!loadNowSlots.length) {
1251							return; // continue as normal
1252						}
1253
1254						// Requests slots immediately
1255						googletag.pubads().refresh(loadNowSlots);
1256
1257						// Make sure they're not included in the prebid auction
1258						auction.adUnits = auction.adUnits.filter(({ gamPath, divId }) =>
1259							!isLoadNowDiv(divId)
1260						);
1261
1262						// Then manually remove them when Relevant is doing the ad request
1263						auction.googletagCalls = auction.googletagCalls || {};
1264						auction.googletagCalls.refresh = (slots, ...rest) => {
1265							const all = slots || googletag.pubads().getSlots();
1266							const toLoad = all.filter((s) =>
1267								!isLoadNowDiv(s.getSlotElementId())
1268							);
1269							googletag.pubads().refresh(toLoad, ...rest);
1270						};
1271					},
1272				});
1273
1274			}
1275
1276			if (location.href.indexOf('interstitial33') > -1) {
1277
1278				let hasDoneFirstCall;
1279				relevantDigital.addAuctionCallbacks({
1280					// Code in function below can alternatively be added inside relevantDigital.loadPrebid({ onBeforeAuctionSetup: { ... } })
1281					onBeforeAuctionSetup: function({ auction }) {
1282						if(!(window.googletag || {}).pubads) {
1283							console.error('GPT not initialized, this method only works if GPT-slots are created before calling relevantDigital.loadPrebid()');
1284							return;
1285						}
1286						if(hasDoneFirstCall) { // Only do this on page-load and not subsequent auctions
1287							return;
1288						}
1289						hasDoneFirstCall = true;
1290
1291						// Load all slots containing these strings in ad unit paths immediately (without waiting for prebid)
1292						const TO_LOAD_NOW = ['desk-1', 'interstitial'];
1293
1294						const isLoadNowPath = (p) => TO_LOAD_NOW.find((s) => p.includes(s));
1295						const loadNowSlots = [];
1296						googletag.pubads().getSlots().forEach((slot) => {
1297							if (isLoadNowPath(slot.getAdUnitPath())) {
1298								loadNowSlots.push(slot);
1299							}
1300						});
1301						if (!loadNowSlots.length) {
1302							return; // continue as normal
1303						}
1304						// Requests slots immediately
1305						googletag.pubads().refresh(loadNowSlots);
1306
1307						// Make sure they're not included in the prebid auction
1308						auction.adUnits = auction.adUnits.filter(({ gamPath }) => !isLoadNowPath(gamPath));
1309
1310						// Then manually remove them when Relevant is doing the ad request
1311						auction.googletagCalls = auction.googletagCalls || {};
1312						auction.googletagCalls.refresh = (slots, ...rest) => {
1313							const all = slots || googletag.pubads().getSlots();
1314							const toLoad = all.filter((s) => !isLoadNowPath(s.getAdUnitPath()));
1315							googletag.pubads().refresh(toLoad, ...rest);
1316						};
1317					},
1318				});
1319
1320			}
1321
1322			relevantDigital.addPrebidConfig({
1323				ortb2: {
1324					site: {
1325						//keywords: contextualIds.join(),
1326						ext: {
1327							data: {
1328								CxContext: Object.values(cxContextualIds),
1329								articleCategories: hbArticleCategories,
1330								articleTags: hbArticleTags
1331							}
1332						}
1333					}
1334				}
1335			});
1336
1337			relevantDigital.loadPrebid({
1338				configId: pbjsConf,
1339				manageAdserver: false, //Manage adserver set to off.
1340				collapseEmptyDivs: true,
1341				collapseBeforeAdFetch: false,
1342				noGpt: true,
1343				allowedDivIds: null, // set to an array to only load certain <div>s, example - ["divId1", "divId2"]
1344				noSlotReload: true, // set true to only load ad slots that have never been loaded
1345				onBeforeAuctionSetup: function(params) {
1346					params.auction.adUnits.forEach(function(unit) {
1347						unit.bids.forEach(function(bid){
1348							if (bid.bidder == 'appnexus') {
1349								bid.params.keywords = {cxSegments: cXsegmentIds, CxContext: cxContextualIds, articleTags: hbArticleTags, articleCategories: hbArticleCategories};
1350								if (dfpDebug) {console.log('Setting params for Xandr bidder...')}
1351							}
1352						})
1353					})
1354				}
1355			});
1356
1357			if (location.href.indexOf('testnewcmp=1') > -1) {
1358
1359				const printEvent = (type, ev, adUnitInstance) => {
1360					console.info(`********** ${type} **********`);
1361					console.info('Event: ', ev);
1362					console.info('AdUnitInstance (if any): ', adUnitInstance);
1363					console.info('Is direct rendering: ', ev.directRender);
1364					console.info('Direct rendered bid: ', ev.bid);
1365					console.info('Ad slot: ', ev.slot);
1366					console.info('Is empty: ', ev.isEmpty);
1367				};
1368				relevantDigital.addAdsCallbacks({
1369					slotRequested: (...args) => {
1370						printEvent('slotRequested', ...args);
1371					},
1372					slotResponseReceived: (...args) => {
1373						printEvent('slotResponseReceived', ...args);
1374					},
1375					slotRenderEnded: (ev, data) => {
1376						printEvent('slotRenderEnded', ev, data);
1377					}
1378				});
1379
1380			}
1381
1382		});
1383
1384	}
1385
1386
1387	function loadAdSlot(adSlotId) {
1388
1389		if (location.href.includes('testnewads=1')) {
1390			return;
1391		}
1392
1393		if (dfpDebug) {console.log('HAS: runHeaderbid: ' + adSlotId + ', ' + (Date.now() - timerStart) + 'ms...')}
1394		observerHeaderbidRun = true;
1395
1396		var adUnit = adSlotId.split('__')[1].split('_')[0];
1397
1398		//var hbArticleTags = articleTags != '' ? articleTags.split(',') : [];
1399		var hbArticleTags = articleTags != '' ? articleTags.split(',').map(tag => tag.trim()) : [];
1400		var hbArticleCategories = articleCategories != '' ? [...new Set(articleCategory.split(',').concat(articleCategories.split(',')))] : [];
1401
1402		var takeOver = '', adSlotsNotAllowedForHBM = [];
1403		//if (hbArticleTags.includes('unelmien joulu')) { // exact match
1404		if (hbArticleTags.some(tag => tag.includes('joulu'))) {
1405			useHBM = false;
1406			takeOver = 'unelmien joulu';
1407		}
1408		if (['joulu', 'unelmien joulu'].some(cat => hbArticleCategories.includes(cat))) {
1409			useHBM = false;
1410			takeOver = 'unelmien joulu';
1411		}
1412		if (articleSection == 'unelmien joulu') {
1413			useHBM = false;
1414			takeOver = 'unelmien joulu';
1415		}
1416
1417		//if (!useHBM && takeOver == 'unelmien joulu') {
1418		//	adSlotsNotAllowedForHBM = ['mob-1', 'mob-2', 'desk-1', 'desk-2'];
1419		//	if (dfpDebug) {console.log('HAS: takeOver: ' + takeOver + ', adSlotsNotAllowedForHBM: ' + adSlotsNotAllowedForHBM)}
1420		//}
1421
1422		var slotLocation = adLocation;
1423		if (adUnit.includes('native')) {
1424			slotLocation = 'native';
1425		} else if (adUnit.includes('topad') || adUnit.includes('interstitial')) {
1426			slotLocation = 'content';
1427		}
1428
1429
1430		googletag.cmd.push(function() {
1431
1432			googletag.defineSlot('/' + window.dfp.networkcode + '/' + window.dfp.serviceName + '/' + slotLocation + '/' + adUnit + '', window.dfp.slots[adUnit].sizes, adSlotId)
1433			.addService(googletag.pubads())
1434			.setTargeting('adslotid', adSlotId.replace('dfp__',''))
1435			.setTargeting('CxContext', cxContextualIds);
1436			if (dfpDebug) {console.log('Defining slot: /' + window.dfp.networkcode + '/' + window.dfp.serviceName + '/' + slotLocation + '/' + adUnit)}
1437
1438		});
1439
1440		//if (adUnit.includes('native') || adUnit.includes('interstitial')) {
1441		if (['native', 'interstitial', 'topad-desk', 'desk-1', ...(adSlotsNotAllowedForHBM || [])].some(slot => adUnit.includes(slot)) || (["tad", "lads"].includes(deliveryType) && !useHBM)) {
1442
1443			googletag.cmd.push(function() {
1444				const slot = googletag.pubads().getSlots().find(s => s.getSlotElementId() === adSlotId);
1445				if (slot) {
1446					googletag.pubads().refresh([slot], {changeCorrelator: false});
1447				}
1448			});
1449
1450		} else {
1451
1452			if (dfpDebug) {
1453				console.log('HAS: Existing slots: ');
1454				googletag.pubads().getSlots().forEach((slot) => {
1455					console.log('HAS: ' + slot.getSlotElementId());
1456				});
1457			}
1458
1459			window.relevantDigital = window.relevantDigital || {};
1460			relevantDigital.cmd = relevantDigital.cmd || [];
1461			relevantDigital.cmd.push(function() {
1462
1463				relevantDigital.addPrebidConfig({
1464					ortb2: {
1465						site: {
1466							//keywords: contextualIds.join(),
1467							ext: {
1468								data: {
1469									CxContext: Object.values(cxContextualIds),
1470									articleCategories: hbArticleCategories,
1471									articleTags: hbArticleTags
1472								}
1473							}
1474						}
1475					}
1476				});
1477
1478				relevantDigital.loadPrebid({
1479					configId: pbjsConf,
1480					manageAdserver: false, //Manage adserver set to off.
1481					collapseEmptyDivs: true,
1482					collapseBeforeAdFetch: false,
1483					noGpt: true,
1484					allowedDivIds: Array.isArray(adSlotId) ? adSlotId : [adSlotId], // set to an array to only load certain <div>s, example - ["divId1", "divId2"]
1485					noSlotReload: true, // set true to only load ad slots that have never been loaded
1486					googletagCalls: {
1487						refresh: (slots) => googletag.pubads().refresh(slots, { changeCorrelator: false }),
1488					},
1489					onBeforeAuctionSetup: function(params) {
1490						params.auction.adUnits.forEach(function(unit) {
1491							unit.bids.forEach(function(bid){
1492								if (bid.bidder == 'appnexus' || bid.bidder == 'appnexus_s2s_alias') {
1493									bid.params.keywords = {cxSegments: cxSegmentIds, CxContext: cxContextualIds, articleTags: hbArticleTags, articleCategories: hbArticleCategories};
1494									if (dfpDebug) {console.log('Setting params for Xandr bidder...')}
1495								}
1496							})
1497						})
1498					}
1499
1500				});
1501			});
1502
1503		}
1504
1505	}
1506
1507
1508	if (location.href.indexOf('interstitial99') > -1) {
1509
1510
1511			let interval = setInterval(function(){
1512				if (window.googletag && googletag.apiReady && googletag.pubadsReady) {
1513					waitForElement("body").then(function(element) {
1514						var aStr = '
1514<script>var interstitialSlot2; googletag.cmd.push(function() {interstitialSlot2 = googletag.defineOutOfPageSlot(\"/135812570/hymy/frontpage/interstitial\", \"dfp__interstitial_2\").addService(googletag.pubads());});<\/script><div id=\"dfp__interstitial_2\">
1514<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_2\");googletag.pubads().refresh([interstitialSlot2]);});<\/script></div>';
1515						jQuery('#inner-wrapper > div.col-two').before(aStr);
1516						console.log('Interstitial added after timeout...');
1517					});
1518					clearInterval(interval);
1519				}
1520			}, 50);
1521
1522			waitForElement("body").then(function(element) {
1523				var aStr = '
1523<script>var interstitialSlot; googletag.cmd.push(function() {interstitialSlot = googletag.defineOutOfPageSlot(\"/135812570/hymy/frontpage/interstitial\", \"dfp__interstitial_1\").addService(googletag.pubads());});<\/script><div id=\"dfp__interstitial_1\">
1523<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");googletag.pubads().refresh([interstitialSlot]);});<\/script></div>';
1524				jQuery('#inner-wrapper > div.col-two').before(aStr);
1525				console.log('Interstitial added...');
1526			});
1527
1528	}
1529
1530/*
1531	if (!location.href.includes('dfptesti')) {
1532
1533		if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') {
1534			cxSegmentIds = localStorage.getItem("_cX_segmentInfo");
1535		}
1536
1537		initDFP(cxSegmentIds);
1538		console.log('initDFP called with LS_cX_segmentInfo...');
1539
1540	}
1541*/
1542
1543</script>
1543
1544
1545<!-- DFP End -->
1546
1547<style>
1548
1549	#topbar .navi>li>a { padding: 0 6px; letter-spacing: 0; }
1550
1551	.bbp-dfp-slots .grid-item {
1552		padding: 25px 0 0;
1553	}
1554	.clearfix.grid__container.box--full.bbp-dfp-slots {
1555		border: none;
1556	}
1557	@media only screen and (max-width: 768px) {
1558		#bbpress-forums .bbp-body .bbp-reply-author {
1559			min-height: 60px !important;
1560			padding-left: 0 !important;
1561		}
1562		.grid-item2 {
1563			float: none;
1564		}
1565		.clearfix.grid__container.box--full.bbp-dfp-slots .grid-item {
1566			padding: 0;
1567		}
1568		.bbp-dfp-slots .grid-item {
1569			padding: 25px 0;
1570		}
1571	}
1572
1573</style>
1574
1575<!-- Google Tag Manager needs to be here -->
1576<script>
vendor: 327 bytes, lines 1576-1580
1576(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
1577new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
1578j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
1579'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
1580})(window,document,'script','dataLayer','
1580GTM-M3VTTX
vendor: 3 bytes, line 1580
1580');
1580</script>
1580
1581<!-- End Google Tag Manager -->
1582
1583<!-- Google Tag Manager -->
1584<script>
vendor: 327 bytes, lines 1584-1588
1584(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
1585new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
1586j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
1587'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
1588})(window,document,'script','dataLayer','
1588GTM-TSMVFP56
vendor: 3 bytes, line 1588
1588');
1588</script>
1588
1589<!-- End Google Tag Manager -->
1590
1591<!-- Google Tag Manager -->
1592<script>
vendor: 327 bytes, lines 1592-1596
1592(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
1593new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
1594j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
1595'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
1596})(window,document,'script','dataLayer','
1596GTM-T56W3Z7
vendor: 3 bytes, line 1596
1596');
1596</script>
1596
1597<!-- End Google Tag Manager -->
1598
1599<!-- // hymy.fi-->
1600
1601<!-- Head tag end, do not remove -->
1602    <meta name="viewport" content="width=device-width, initial-scale=1.0">
1603<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
1604
1605	<!-- This site is optimized with the Yoast SEO plugin v26.3 - https://yoast.com/wordpress/plugins/seo/ -->
1606	<title>Uutiset - Hymy</title>
1607	<link rel="canonical" href="https://hymy.fi/kategoria/uutiset/">
1608	<link rel="next" href="https://hymy.fi/kategoria/uutiset/page/2/">
1609	<meta property="og:locale" content="fi_FI">
1610	<meta property="og:type" content="article">
1611	<meta property="og:title" content="Uutiset - Hymy">
1612	<meta property="og:url" content="https://hymy.fi/kategoria/uutiset/">
1613	<meta property="og:site_name" content="Hymy">
1614	<meta property="og:image" content="https://hymy.fi/wp-content/uploads/2016/08/hymylogo-1024x710.jpg">
1615	<meta property="og:image:width" content="1024">
1616	<meta property="og:image:height" content="710">
1617	<meta property="og:image:type" content="image/jpeg">
1618	<meta name="twitter:card" content="summary_large_image">
1619	
1619<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"CollectionPage","@id":"https://hymy.fi/kategoria/uutiset/","url":"https://hymy.fi/kategoria/uutiset/","name":"Uutiset - Hymy","isPartOf":{"@id":"https://hymy.fi/#website"},"breadcrumb":{"@id":"https://hymy.fi/kategoria/uutiset/#breadcrumb"},"inLanguage":"fi"},{"@type":"BreadcrumbList","@id":"https://hymy.fi/kategoria/uutiset/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Etusivu","item":"https://hymy.fi/"},{"@type":"ListItem","position":2,"name":"Uutiset"}]},{"@type":"WebSite","@id":"https://hymy.fi/#website","url":"https://hymy.fi/","name":"Hymy","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://hymy.fi/haku/?q={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fi"}]}</script>
1619
1620	<!-- / Yoast SEO plugin. -->
1621
1622
1623<link rel="dns-prefetch" href="//ajax.googleapis.com">
1624<link rel="dns-prefetch" href="//plausible.io">
1625<link rel="alternate" type="application/rss+xml" title="Hymy &raquo; Uutiset kategorian RSS-syöte" href="https://hymy.fi/kategoria/uutiset/feed/">
1626
1627    
1627<script>
1628      window.AsteikkoMagWidgets = {
1629        siteUrl: "https:\/\/hymy.fi"      };
1630    </script>
1630
1631
1632    <style id="wp-img-auto-sizes-contain-inline-css" type="text/css">
1633img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
1634/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
1635</style>
1636<link rel="stylesheet" id="asteikko-auth-style-css" href="https://hymy.fi/wp-content/plugins/asteikko-auth-otavamedia/css/style.css?ver=3.0.5" type="text/css" media="all">
1637<link rel="stylesheet" id="asmag_widgets_css-css" href="https://hymy.fi/wp-content/plugins/asteikko-mag/dist/wp-widgets/index.css?ver=6.21.2-67928b343a4e93d76879e5e503996d22" type="text/css" media="all">
1638<link rel="stylesheet" id="om-core-css" href="https://hymy.fi/wp-content/themes/om-core/style.css?ver=1790248696" type="text/css" media="all">
1639<link rel="stylesheet" id="om-core-widgets-styles-css" href="https://hymy.fi/wp-content/plugins/om-widgets-plugin/assets/widgets.css?ver=6.9.9" type="text/css" media="all">
1640<style id="wp-block-library-inline-css" type="text/css">
1641:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
1641--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}.has-text-align-center{text-align:center}.has-text-align-left{text-align:left}.has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
1642/*wp_block_styles_on_demand_placeholder:6ab572ed7fc54*/
1643/*# sourceURL=wp-block-library-inline-css */
1644</style>
1645<style id="classic-theme-styles-inline-css" type="text/css">
1646/*! This file is auto-generated */
1647.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
1648/*# sourceURL=/wp-includes/css/classic-themes.min.css */
1649</style>
1650<link rel="stylesheet" id="om-footer-css" href="https://hymy.fi/wp-content/plugins/om-footer/assets/css/om-footer.css?ver=1.1.0" type="text/css" media="all">
1651<link rel="stylesheet" id="child-style-css" href="https://hymy.fi/wp-content/themes/om-hymy-theme/style.css?ver=6.9.9" type="text/css" media="all">
1652<link rel="stylesheet" id="style_login_widget-css" href="https://hymy.fi/wp-content/plugins/miniorange-oauth-oidc-single-sign-on-single/resources/css/style_login_widget.css?ver=6.9.9" type="text/css" media="all">
1653    
1653<script type="text/javascript" id="om-website-analytics">
1654      analyticsEvent = function() {};
1655      analyticsSocial = function() {};
1656      analyticsVPV = function() {};
1657      analyticsClearVPV = function() {};
1658      analyticsForm = function() {};
1659      window.dataLayer = window.dataLayer || [];
1660      dataLayer.push({"PageType":"Kategoria","PaidUser":false,"UserLevel":"1"});
1661    </script>
vendor: 1 bytes, line 1661
1661
1662<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js" id="jquery-js"></script>
vendor: 1 bytes, line 1662
1662
1663<script type="text/javascript" src="https://hymy.fi/wp-content/themes/om-core/plugins.js?ver=1790248696" id="om-core-plugins-js"></script>
vendor: 1 bytes, line 1663
1663
1664<script type="text/javascript" defer data-domain="hymy.fi" data-api="https://plausible.io/api/event" data-cfasync="false" src="https://plausible.io/js/plausible.outbound-links.js?ver=2.3.1" id="plausible-analytics-js"></script>
vendor: 1 bytes, line 1664
1664
1665<script type="text/javascript" id="plausible-analytics-js-after">
1666/* <![CDATA[ */
1667window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }
1668//# sourceURL=plausible-analytics-js-after
1669/* ]]> */
1670</script>
1670
1671<link rel="https://api.w.org/" href="https://hymy.fi/wp-json/"><link rel="alternate" title="JSON" type="application/json" href="https://hymy.fi/wp-json/wp/v2/categories/11355"><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://hymy.fi/xmlrpc.php?rsd">
1672<meta name="generator" content="WordPress 6.9.9">
1673<!-- AWPO lazy-load marker --><meta name="plausible-analytics-version" content="2.3.1">
1674
1675    
1675<script>
1676        var wp_template_url = 'https://hymy.fi/wp-content/themes/om-core';
1677    </script>
1677
1678
1679
1680    
1681    <!-- SSO login related -->
1682    
1682<script type="text/javascript">
1683        window.om = window.om || {};
1684        window.om.wp_nonce = "ac08bb4d1b";
1685        window.om.client_id = "2db43cdc-f69e-4559-9e56-c5694ebacff6";
1686        window.om.client_url = "https://tili.otavamedia.fi";
1687    </script>
1687
1688
1689
1690</head>
1691
1692<body class="archive category category-uutiset category-11355 wp-theme-om-core wp-child-theme-om-hymy-theme blog-1">
1693
1694    <!-- Body tag start, do not remove -->
1695
1696<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 1696-1697
1696
1697<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1697GTM-M3VTTX
vendor: 83 bytes, line 1697
1697" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1698<!-- End Google Tag Manager (noscript) -->
1699
1700<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 1700-1701
1700
1701<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1701GTM-TSMVFP56
vendor: 83 bytes, line 1701
1701" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1702<!-- End Google Tag Manager (noscript) -->
1703
1704<!-- Google Tag Manager (noscript) -->
1705<noscript><iframe height="0" width="0" style="display:none;visibility:hidden" data-src="https://www.googletagmanager.com/ns.html?id=GTM-T56W3Z7" class="awpo-lazy"></iframe></noscript>
1706<!-- End Google Tag Manager (noscript) -->
1707
1708<script>
1709
1710	if (location.href.includes('dfptesti')) {
1711
1712		if (window.dataLayer) {
1713			dataLayer.forEach(function (dataLayerItem) {
1714				if (dataLayerItem['PrimaryCategory'] !== '' && dataLayerItem['PrimaryCategory'] !== undefined) {
1715					articleCategory = dataLayerItem['PrimaryCategory'].toLocaleString().toLowerCase().replace(/, /g, ',');
1716					if (dfpDebug) {console.log('ArticleCategory: ' + articleCategory);}
1717				}
1718				if (dataLayerItem['Categories'] !== '' && dataLayerItem['Categories'] !== undefined) {
1719					articleCategories = dataLayerItem['Categories'].toLocaleString().toLowerCase().replace(/, /g, ',');
1720					if (dfpDebug) {console.log('Categories: ' + articleCategories);}
1721				}
1722				if (dataLayerItem['Tags'] !== '' && dataLayerItem['Tags'] !== undefined) {
1723					articleTags = dataLayerItem['Tags'].toLocaleString().toLowerCase().replace(/, /g, ',');
1724					if (dfpDebug) {console.log('Tags: ' + articleTags);}
1725				}
1726				if (dataLayerItem['Section'] !== '' && dataLayerItem['Section'] !== undefined) {
1727					articleSection = dataLayerItem['Section'].toLowerCase().replace(/, /g, ',');
1728					if (dfpDebug) {console.log('ArticleSection: ' + articleSection);}
1729				}
1730			});
1731		} else {
1732			console.error('DataLayer is not defined.')
1733		}
1734
1735		if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') {
1736			cxSegmentIds = localStorage.getItem("_cX_segmentInfo");
1737		}
1738		initDFP(cxSegmentIds);
1739		console.log('initDFP called with LS_cX_segmentInfo...');
1740
1741	}
1742
1743</script>
1743
1744
1745<!-- Body tag end, do not edit or remove -->
1746    
1746<script>
1747        function getCookie(name) {
1748            var value = "; " + document.cookie;
1749            var parts = value.split("; " + name + "=");
1750            if (parts.length == 2) return parts.pop().split(";").shift();
1751        }
1752
1753        if (getCookie("theme") == "light") {
1754            document.getElementsByTagName("body")[0].classList.add("light");
1755        }
1756    </script>
1756
1757
1758    <div id="additionalBg">
1759        <div id="topbar">
1760            <div class="wrapper--center">
1761
1762    
1763    <span id="mobile-navigation__button" class="fa fa-bars"></span>
1764    <span id="mobile-navigation__search" class="fa fa-search navi__search--button"></span>
1765
1766    
1767    <a class="topbar__logo float--left" href="https://hymy.fi/"></a>
1768
1769    <div id="mobile-scroll">
1770
1771      <div id="navigation--mobilebuttons" class="navi float--right">
1772        <a href="/tilaa" class="float--left">Tilaa</a>
1773<a href="/nakoislehti" class="navi__magazine float--left">Näköislehti</a>
1774
1775<a href="https://hymy.fi/kirjaudu/" title="Kirjaudu" class="navi__user float--left">
1776	Kirjaudu</a>
1777
1778      </div>
1779
1780      <ul id="navigation--primary" class="navi float--left"><li id="menu-item-36689" class="menu-item menu-item-type-taxonomy menu-item-object-category current-menu-item menu-item-36689"><a href="https://hymy.fi/kategoria/uutiset/" aria-current="page">Uutiset</a></li>
1781<li id="menu-item-692075" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-692075"><a href="https://hymy.fi/kategoria/ilmiot/">Ilmiöt</a></li>
1782<li id="menu-item-690496" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-690496"><a href="https://hymy.fi/kategoria/terveys/">Terveys</a></li>
1783<li id="menu-item-690497" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-690497"><a href="https://hymy.fi/kategoria/sotahistoria/">Sotahistoria</a></li>
1784<li id="menu-item-106865" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-106865"><a href="https://hymy.fi/kategoria/horoskooppi/">Horoskooppi</a></li>
1785<li id="menu-item-667255" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-667255"><a href="https://hymy.fi/kategoria/soini-sanoo-suoraan/">Soini sanoo suoraan</a></li>
1786</ul><div id="navigation--secondary" class="navi float--right">
1787
1788  <a href="/nakoislehti" class="navi__magazine float--left" title="Näköislehti">Näköislehti</a>
1789
1790  
1791
1792  <a href="https://hymy.fi/kirjaudu/" class="navi__icon navi__user float--left" title="Kirjaudu">
1793    <i class="fa fa-user"></i>
1794    <span class="display__text--tablet">Kirjaudu</span>
1795  </a>
1796
1797  <a class="navi__icon navi__search--button float--left" title="Haku">
1798    <i class="fa fa-search"></i>
1799  </a>
1800
1801</div>
1802          <div class="navi float--right" id="navigation--some">
1803
1804                          <a href="https://www.facebook.com/hymy.fi" target="_blank" title="Facebook" class="fa fa-facebook"></a>
1805                            <a href="https://twitter.com/HymyFI" target="_blank" title="Twitter" class="fa fa-twitter"></a>
1806                            <a href="https://hymy.fi/feed" target="_blank" title="RSS-syöte" class="fa fa-rss"></a>
1807                          </div>
1808          
1809      <div style="clear:both;"><!-- overflow:hidden; won't work in this case --></div>
1810
1811    </div><!-- mobile-scroll -->
1812  </div><!-- .wrapper--center -->        </div> <!-- topbar -->
1813
1814
1815        <div id="wrapper">
1816            <div id="inner-wrapper">
1817                <div class="widget-area super-widget-area">
1818                                    </div>
1819                <div class="widget-area top-widget-area">
1820
1821                    
1822                </div>
1823
1824                <div class="col-two">
1825		  
1826
1827	<div class="widget-area">
1828
1829		
1830  <div data-template="def50200c34cb985c4da2c6e867abc50dc17e1e27d804e0653e6bc2127931bc7aa3ca453dfd8dcf40f58d0dde6e97516431b54bf394e7fd64f89f3bf878de6b31b8f5044eb5ab7081f30b8ff7c21e94e9d0298a1e86e5bd0" data-query="def502005c0ffbd0ea0249fc8c7c81d5f7b074ec48fdabceef7cd8f2cd6ec8073a31d162db86201ef0bb6430d409e6b02adb84e038e0ccc6e9a1e05f8579b1e1836abc030ecd44de4a7feb35d6750ef06a1c5d8303f55249ee4399747ab58f240388c1ef332e97cc6aa694beec057397f523b574161378f7bdc903df20cc10d6aeccc6aae69887433b8d1cc44555cd1127d3c5f5a73036ccbc8b5c7420758dbf0d150da77ba1c0c91849093b8d051445315da0b4870fd0486bdebfa97b8922637fedef905b7b08ef8859896269318916e55e20c313c56f685c6d34d11a1d754ea96705ab2abca186db13803dc99422ae95bd2b2badc79cea3235d1e3495a7214c6e9cb3b064b75511852d4acbe6a23c768f8793e124c2dc017cf7479d35c88e8f35cd0" data-hash="6ab572ed87997" data-blog="1" data-options="def50200c297f2171c267351bead65272793b30a6d64fe9e6f5c149db6414c0c62da469d9988fb7466f10c1fec29932ab5808f99c9616f094373b513926bedde14231ca6492266a3bdfdf17154672de1165eb0e42b9e" class="postlisting postlisting-6 omwidget om-grid-container two ">
1831
1832    
1833    <ul class="om-grid">
1834          <li class="om-grid-item">
1835
1836        <a href="https://hymy.fi/uutiset/elokuussa-80-vuotiaana-kuolleelta-dolly-partonilta-kuullaan-viela-yksi-uusi-levytys/">
1837            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2026/08/image-23.png">
1838            </div>
1839        </a>
1840
1841        <div class="om-grid-item__content">
1842          <div class="meta typogr__meta">
1843            <span class="typogr__meta--category">
1844                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
1845            </span>
1846          </div>
1847                    <a href="https://hymy.fi/uutiset/elokuussa-80-vuotiaana-kuolleelta-dolly-partonilta-kuullaan-viela-yksi-uusi-levytys/">
1848              <h2>Dolly Partonin viimeinen levytys julkaistaan U2:n uudella albumilla!</h2>
1849
1850              <div class="om-grid-item__excerpt">
1851                <p>Elokuussa 80-vuotiaana kuolleelta&nbsp;Dolly Partonilta&nbsp;kuullaan vielä yksi uusi levytys. Country-legenda esiintyy U2:n tulevalla&nbsp;Ca&hellip;</p>
1852              </div>
1853          </a>
1854
1855          <div class="meta typogr__meta">
1856            
1857            <span class="typogr__meta--date">
1858              24.09.2026            </span>
1859
1860            
1861            
1862          </div>
1863
1864        </div>
1865
1866    </li>
1867    <li class="om-grid-item">
1868
1869        <a href="https://hymy.fi/uutiset/laulaja-tauski-peltonen-63-ja-tanssija-henna-peltonen-42-ovat-virallisesti-avioerossa/">
1870            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2025/04/24430-1024x999.jpg">
1871            </div>
1872        </a>
1873
1874        <div class="om-grid-item__content">
1875          <div class="meta typogr__meta">
1876            <span class="typogr__meta--category">
1877                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
1878            </span>
1879          </div>
1880                    <a href="https://hymy.fi/uutiset/laulaja-tauski-peltonen-63-ja-tanssija-henna-peltonen-42-ovat-virallisesti-avioerossa/">
1881              <h2>IL: Tauski ja Henna &#8211; avioero!</h2>
1882
1883              <div class="om-grid-item__excerpt">
1884                <p>Laulaja Tauski Peltonen, 63, ja tanssija Henna Peltonen, 42, ovat virallisesti avioerossa. Asian kertoi Iltalehti. Sen mukaan asiasta on kirja&hellip;</p>
1885              </div>
1886          </a>
1887
1888          <div class="meta typogr__meta">
1889            
1890            <span class="typogr__meta--date">
1891              24.09.2026            </span>
1892
1893            
1894            
1895          </div>
1896
1897        </div>
1898
1899    </li>
1900    <li class="om-grid-item">
1901
1902        <a href="https://hymy.fi/uutiset/automaattinen-luonnolentomatkustamiseen-liittyy-pitka-lista-pienia-vinkkeja-ja-varoituksia-mutta-yksi-niista-kuulostaa-ensikuulemalta-erikoiselta-lentokoneeseen-ei-kannattaisi-pukea-mustia-sukkia/">
1903            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2021/02/lentokone_matkustamo.jpg">
1904            </div>
1905        </a>
1906
1907        <div class="om-grid-item__content">
1908          <div class="meta typogr__meta">
1909            <span class="typogr__meta--category">
1910                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
1911            </span>
1912          </div>
1913                    <a href="https://hymy.fi/uutiset/automaattinen-luonnolentomatkustamiseen-liittyy-pitka-lista-pienia-vinkkeja-ja-varoituksia-mutta-yksi-niista-kuulostaa-ensikuulemalta-erikoiselta-lentokoneeseen-ei-kannattaisi-pukea-mustia-sukkia/">
1914              <h2>Älä käytä mustia sukkia lentokoneessa – tässä syy!</h2>
1915
1916              <div class="om-grid-item__excerpt">
1917                <p>Lentomatkustamiseen liittyy pitkä lista pieniä vinkkejä ja varoituksia, mutta yksi niistä kuulostaa ensikuulemalta erikoiselta: lentokoneeseen&hellip;</p>
1918              </div>
1919          </a>
1920
1921          <div class="meta typogr__meta">
1922            
1923            <span class="typogr__meta--date">
1924              24.09.2026            </span>
1925
1926            
1927            
1928          </div>
1929
1930        </div>
1931
1932    </li>
1933    <li class="om-grid-item">
1934
1935        <a href="https://hymy.fi/uutiset/kuva-on-jo-sita-luokkaa-etta-siina-voisi-lukea-ei-herkille-helena-ahti-hallberg-on-julkaissut-kuvan-suoraan-hoitopoydalta/">
1936            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2021/09/ahti_hallberg_helena_peko.jpg">
1937            </div>
1938        </a>
1939
1940        <div class="om-grid-item__content">
1941          <div class="meta typogr__meta">
1942            <span class="typogr__meta--category">
1943                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
1944            </span>
1945          </div>
1946                    <a href="https://hymy.fi/uutiset/kuva-on-jo-sita-luokkaa-etta-siina-voisi-lukea-ei-herkille-helena-ahti-hallberg-on-julkaissut-kuvan-suoraan-hoitopoydalta/">
1947              <h2>Huh, Helena Ahti-Hallberg hurjan näköisenä hoitopöydällä!</h2>
1948
1949              <div class="om-grid-item__excerpt">
1950                <p>Video on jo sitä luokkaa, että siinä voisi lukea &#8221;Ei herkille&#8221;. Helena Ahti-Hallberg on julkaissut videon suoraan hoitopöydältä. S&hellip;</p>
1951              </div>
1952          </a>
1953
1954          <div class="meta typogr__meta">
1955            
1956            <span class="typogr__meta--date">
1957              24.09.2026            </span>
1958
1959            
1960            
1961          </div>
1962
1963        </div>
1964
1965    </li>
1966    <li class="om-grid-item">
1967
1968        <a href="https://hymy.fi/uutiset/oulun-poliisilaitos-tutkii-oulussa-keskiviikkona-23-9-illalla-tapahtuneita-epailtyja-rattijuopumusrikoksia/">
1969            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2021/06/poliisi_2021_1-1024x768.jpg">
1970            </div>
1971        </a>
1972
1973        <div class="om-grid-item__content">
1974          <div class="meta typogr__meta">
1975            <span class="typogr__meta--category">
1976                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
1977            </span>
1978          </div>
1979                    <a href="https://hymy.fi/uutiset/oulun-poliisilaitos-tutkii-oulussa-keskiviikkona-23-9-illalla-tapahtuneita-epailtyja-rattijuopumusrikoksia/">
1980              <h2>Oulussa rattijuopot vaaransivat liikennettä!</h2>
1981
1982              <div class="om-grid-item__excerpt">
1983                <p>Oulun poliisilaitos tutkii Oulussa keskiviikkona 23.9. illalla tapahtuneita epäiltyjä rattijuopumusrikoksia. Kummassakin tapauksessa kuljettaj&hellip;</p>
1984              </div>
1985          </a>
1986
1987          <div class="meta typogr__meta">
1988            
1989            <span class="typogr__meta--date">
1990              24.09.2026            </span>
1991
1992            
1993            
1994          </div>
1995
1996        </div>
1997
1998    </li>
1999    <li class="om-grid-item">
2000
2001        <a href="https://hymy.fi/uutiset/mika-aaltola-kertoo-onnellisia-uutisia-heidan-perheeseen-syntyy-vauva/">
2002            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2024/02/aaltola_3-1024x869.jpg">
2003            </div>
2004        </a>
2005
2006        <div class="om-grid-item__content">
2007          <div class="meta typogr__meta">
2008            <span class="typogr__meta--category">
2009                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2010            </span>
2011          </div>
2012                    <a href="https://hymy.fi/uutiset/mika-aaltola-kertoo-onnellisia-uutisia-heidan-perheeseen-syntyy-vauva/">
2013              <h2>Mika Aaltolan perheeseen syntyy vauva!</h2>
2014
2015              <div class="om-grid-item__excerpt">
2016                <p>Mika Aaltola kertoo onnellisia uutisia. Heidän perheeseen syntyy vauva. Mika Aaltola ja Kirsi Aaltola naimisiin syyskuussa 2019. Avioparilla o&hellip;</p>
2017              </div>
2018          </a>
2019
2020          <div class="meta typogr__meta">
2021            
2022            <span class="typogr__meta--date">
2023              24.09.2026            </span>
2024
2025            
2026            
2027          </div>
2028
2029        </div>
2030
2031    </li>
2032    <li class="om-grid-item">
2033
2034        <a href="https://hymy.fi/uutiset/erotiikka-sehan-se-kiinnostaa-ja-myy-kuinka-moni-laulaja-nayttelija-tai-muu-tahti-olisikaan-ihan-takarivin-tellu-ilman-erotiikkaa/">
2035            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2018/07/kardashian_kim_mainos_raskauspahvointi_puoli_miljoonaa_dollaria_sai.jpg">
2036            </div>
2037        </a>
2038
2039        <div class="om-grid-item__content">
2040          <div class="meta typogr__meta">
2041            <span class="typogr__meta--category">
2042                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2043            </span>
2044          </div>
2045                    <a href="https://hymy.fi/uutiset/erotiikka-sehan-se-kiinnostaa-ja-myy-kuinka-moni-laulaja-nayttelija-tai-muu-tahti-olisikaan-ihan-takarivin-tellu-ilman-erotiikkaa/">
2046              <h2>Kim Kardashian eroottisissa kuvissa!</h2>
2047
2048              <div class="om-grid-item__excerpt">
2049                <p>Erotiikka &#8211; sehän se kiinnostaa. Ja myy. Kuinka moni laulaja, näyttelijä tai muu tähti olisikaan ihan takarivin henkilö ilman erotiikkaa&hellip;</p>
2050              </div>
2051          </a>
2052
2053          <div class="meta typogr__meta">
2054            
2055            <span class="typogr__meta--date">
2056              23.09.2026            </span>
2057
2058            
2059            
2060          </div>
2061
2062        </div>
2063
2064    </li>
2065    <li class="om-grid-item">
2066
2067        <a href="https://hymy.fi/uutiset/salatut-elamat-suosikkisarja-tekee-televisiohistoriaa/">
2068            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2026/09/image-40-1024x582.png">
2069            </div>
2070        </a>
2071
2072        <div class="om-grid-item__content">
2073          <div class="meta typogr__meta">
2074            <span class="typogr__meta--category">
2075                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2076            </span>
2077          </div>
2078                    <a href="https://hymy.fi/uutiset/salatut-elamat-suosikkisarja-tekee-televisiohistoriaa/">
2079              <h2>Salatut elämät &#8211; suosikkisarja tekee televisiohistoriaa!</h2>
2080
2081              <div class="om-grid-item__excerpt">
2082                <p>Suursuosikki Salatut elämät saavuttaa 5000. jakson rajapyykin samalla, kun Pihlajakadun käänteet tavoittavat MTV Katsomossa ja MTV3-kanavalla &hellip;</p>
2083              </div>
2084          </a>
2085
2086          <div class="meta typogr__meta">
2087            
2088            <span class="typogr__meta--date">
2089              23.09.2026            </span>
2090
2091            
2092            
2093          </div>
2094
2095        </div>
2096
2097    </li>
2098    <li class="om-grid-item">
2099
2100        <a href="https://hymy.fi/uutiset/kauppa-sai-alkunsa-vuoden-2025-lopulla-jarjestetysta-huutokaupasta-jonka-toteutti-muumikerailytuotteisiin-erikoistunut-verkkokauppa-muumimukit-rahaksi/">
2101            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2026/09/image-39-1024x786.png">
2102            </div>
2103        </a>
2104
2105        <div class="om-grid-item__content">
2106          <div class="meta typogr__meta">
2107            <span class="typogr__meta--category">
2108                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2109            </span>
2110          </div>
2111                    <a href="https://hymy.fi/uutiset/kauppa-sai-alkunsa-vuoden-2025-lopulla-jarjestetysta-huutokaupasta-jonka-toteutti-muumikerailytuotteisiin-erikoistunut-verkkokauppa-muumimukit-rahaksi/">
2112              <h2>Muumimukien maailmanennätys rikkoutui: Uimahyppy simpukoilla myytiin yli 46 000 eurolla!</h2>
2113
2114              <div class="om-grid-item__excerpt">
2115                <p>Kauppa sai alkunsa vuoden 2025 lopulla järjestetystä huutokaupasta, jonka toteutti muumikeräilytuotteisiin erikoistunut verkkokauppa Muumimuki&hellip;</p>
2116              </div>
2117          </a>
2118
2119          <div class="meta typogr__meta">
2120            
2121            <span class="typogr__meta--date">
2122              23.09.2026            </span>
2123
2124            
2125            
2126          </div>
2127
2128        </div>
2129
2130    </li>
2131    <li class="om-grid-item">
2132
2133        <a href="https://hymy.fi/uutiset/karita-tykka-on-nyt-50-vuotias/">
2134            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2021/08/karita_tykka-1024x697.jpg">
2135            </div>
2136        </a>
2137
2138        <div class="om-grid-item__content">
2139          <div class="meta typogr__meta">
2140            <span class="typogr__meta--category">
2141                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2142            </span>
2143          </div>
2144                    <a href="https://hymy.fi/uutiset/karita-tykka-on-nyt-50-vuotias/">
2145              <h2>Karita Tykkä &#8211; alastonkuvat!</h2>
2146
2147              <div class="om-grid-item__excerpt">
2148                <p>Karita Tykkä on nyt 50-vuotias. On sopiva ikä julkaista itsestään alastonkuvat. Ja totta vieköön, ne ovat todella upeat. Syy kuvien julkaisull&hellip;</p>
2149              </div>
2150          </a>
2151
2152          <div class="meta typogr__meta">
2153            
2154            <span class="typogr__meta--date">
2155              23.09.2026            </span>
2156
2157            
2158            
2159          </div>
2160
2161        </div>
2162
2163    </li>
2164    </ul>
2165
2166        <ul class="om-grid-controls">
2167          <li>
2168        <button class="button om-grid-load-more">Lataa lisää <i style="display:none;" class="loader"></i>
2169       </button>
2170    </li>
2171        </ul>
2172    
2173  </div>
2174
2175        <div id="dfp__mob-2">
2176          
2176<script>window.dfp.displayAdslot('dfp__mob-2')</script>
2176
2177        </div>
2178                <div id="dfp__in-text">
2179          
2179<script>window.dfp.displayAdslot('dfp__in-text')</script>
2179
2180        </div>
2181        
2182	</div>
2183
2184	
2185	<div style="clear: both;"></div>
2186
2187</div>
2188
2189                        
2190<div id="sivupalkki">
2191	<div>
2192		<div class="mainside"></div>
2193	
2194						
2195		<div style="clear:both"></div>
2196		
2197					<div id="secondary" class="widget-area" role="complementary">
2198				
2199				
2200		<div id="tilaa-seuraa" class="om-widget sidebar-block socialmedialinks socialmedialinks-2">
2201			<div class="links">
2202				<a href="/kirjaudu/" class="returnLink">Kirjaudu</a><a href="/tilaa?promoPosition=header-kategoria">Tilaa</a><a href="/ukk/">Ohje</a>			</div>
2203
2204						<div class="some">
2205
2206				<a href="https://www.facebook.com/hymy.fi" target="_blank" title="Facebook" class="fa fa-facebook"></a><a href="https://twitter.com/HymyFI" target="_blank" title="Twitter" class="fa fa-twitter"></a><a href="https://hymy.fi/feed" target="_blank" title="RSS-syöte" class="fa fa-rss"></a>			</div>
2207						<div style="clear:both;"></div>
2208		</div>
2209
2210
2211	        <div id="dfp__rectangle-1">
2212          
2212<script>window.dfp.displayAdslot('dfp__rectangle-1')</script>
2212
2213        </div>
2214        <div class="widget_text sidebar-block"><div class="textwidget custom-html-widget"><!--<div style="text-align: center">	
2215<a href="https://hymy.fi/mainos/tiesitko-taman-kulutusluotosta-vastasimme-vaitteisiin-ja-kumosimme-virheet/"><img src="https://hymy.fi/wp-content/uploads/2024/02/Sortter-2024-helmikuu-Hymy-kuva-01.jpg" border="0"></a></div>--></div></div>
2216      <div class="omwidget sidebar-block magazineorderwidget magazineorderwidget-2">
2217
2218        <a href="https://tilaus.hymy.fi/tilaus?promoID=OM_widget&amp;promoName=OM_HY&amp;promoCreative=onlinetarjous&amp;promoPosition=sidebar">
2219
2220          <div class="magazineorderwidget__content">
2221
2222              <img class="magazineorderwidget__background awpo-lazy" data-src="https://hymy.fi/wp-content/uploads/2018/03/HY_sivupalkin_myyntiviesti2.jpg"><noscript><img class="magazineorderwidget__background" src="https://hymy.fi/wp-content/uploads/2018/03/HY_sivupalkin_myyntiviesti2.jpg"></noscript>
2223
2224              <img class="magazineorderwidget__cover awpo-lazy" data-src="https://mediapankki.otavamedia.fi/api/v1/covers/hymy/latest.jpg?maxWidth=200&amp;maxHeight=258"><noscript><img class="magazineorderwidget__cover" src="https://mediapankki.otavamedia.fi/api/v1/covers/hymy/latest.jpg?maxWidth=200&amp;maxHeight=258"></noscript>
2225          </div>
2226
2227        </a>
2228
2229      </div>
2230
2231      <div class="sidebar-block">      <h2 class="block-header_sidebar">Suosituimmat</h2>
2232            <article class="omwidget om-tab-container">
2233
2234  
2235    <ul class="navtabs two">
2236      <li class="active typogr__tab" data-hash="6ab572ed8db3e"><a>Tänään</a></li>
2237      <li class="typogr__tab" data-hash="6ab572ed8dc31"><a>Viikko</a></li>
2238    </ul>
2239
2240
2241  <div data-template="def5020009429b023bcea5ea5512150db22ff1be6f401790268f40af0480ede2a46b5d2f15d7cc483f6edc5db7ee5b8271a123e2cabdaa0ea48e4dc140d79c4b6ed95521fc3aedca09c1d9fe07b8b62f381582081d0fb7e42f75c9" data-query="def502004374f878563da80f6a71bad40173bc1db23ef2e50539038f2261aa690ce65a42dd8a2bc0a13bd10e40ac558c57d32a291130f8d3eff68aa287b0dc8415527ed3bd08c2fea2ab1530bacf389a1de36a23e42371124e59873ea9e09e4dad71c66e2a955c59bab243ebcaea8e7d3ba3938a2e72984e7acc239a60d75ae50a8fcd689d6403e959a056e89c27ca95baa1c67bf699e2b8b6c931a5072f355f87e8476b54d3bf8ed79333661a5153981cf527fe93c9122a946d5d1a446d880446f77587499e0cb90764fedecb9a408aef0f2da176be82733910a111fa094cda5dd15cb830fa0e143fa706f89a63a113049dbe696214d3551dba5917d0e0e9ef84430ccbf6a6acea092cd1fb4e3c74557b9bddef031d33b56119f67ef29236e932751d08b5b737da9024102f2199c42c2f32394ac14efd4527d72489e75519d53661fc6179f75e9b2d09efb6e62caa5aeaae" data-hash="6ab572ed8db3e" data-blog="1" data-options="def50200593f374f2cbadd9fa220ca605c5b0fb4f561256ffa730cc792bb9cd766f688a19ca44ff732439baea9ca6b0cb1bc0f438aa71e477ac51337fababa69486f96b608e5816e4788bf278935d5b4866d081929d7" class="postlistingwithtabs postlistingwithtabs--1 omwidget om-grid-container one  active">
2242
2243    
2244    <ul class="om-grid">
2245      <li class="compact">
2246  <div class="meta typogr__meta">
2247    <span class="compact__cats typogr__catlink">
2248        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2249    </span>
2250    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2251      23.09.2026    </span>
2252  </div>
2253
2254  <a href="https://hymy.fi/uutiset/karita-tykka-on-nyt-50-vuotias/">
2255    <h3>Karita Tykkä &#8211; alastonkuvat!</h3>
2256  </a>
2257
2258</li>
2259<li class="compact">
2260  <div class="meta typogr__meta">
2261    <span class="compact__cats typogr__catlink">
2262        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2263    </span>
2264    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2265      22.09.2026    </span>
2266  </div>
2267
2268  <a href="https://hymy.fi/uutiset/perjantain-vain-elamaa-jaksossa-vietetaan-nelli-matulan-paivaa-jaksossa-kuullaan-muun-muassa-bessin-kateudesta-nellia-kohtaan/">
2269    <h3>Vain elämää: Bess ei halunnut olla samassa ohjelmassa kuin Nelli Matula!</h3>
2270  </a>
2271
2272</li>
2273<li class="compact">
2274  <div class="meta typogr__meta">
2275    <span class="compact__cats typogr__catlink">
2276        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2277    </span>
2278    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2279      23.09.2026    </span>
2280  </div>
2281
2282  <a href="https://hymy.fi/uutiset/erotiikka-sehan-se-kiinnostaa-ja-myy-kuinka-moni-laulaja-nayttelija-tai-muu-tahti-olisikaan-ihan-takarivin-tellu-ilman-erotiikkaa/">
2283    <h3>Kim Kardashian eroottisissa kuvissa!</h3>
2284  </a>
2285
2286</li>
2287<li class="compact">
2288  <div class="meta typogr__meta">
2289    <span class="compact__cats typogr__catlink">
2290        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2291    </span>
2292    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2293      17.12.2025    </span>
2294  </div>
2295
2296  <a href="https://hymy.fi/uutiset/martina-aitolehti/">
2297    <h3>Tällainen on Martina Aitolehden ökyauto!</h3>
2298  </a>
2299
2300</li>
2301<li class="compact">
2302  <div class="meta typogr__meta">
2303    <span class="compact__cats typogr__catlink">
2304        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2305    </span>
2306    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2307      02.02.2011    </span>
2308  </div>
2309
2310  <a href="https://hymy.fi/uutiset/vielako-muistat-nama-martina-aitolehden-rohkeat-alastonkuvat-katso/">
2311    <h3>Vieläkö muistat nämä Martina Aitolehden rohkeat alastonkuvat &#8211; katso!</h3>
2312  </a>
2313
2314</li>
2315    </ul>
2316
2317    
2318  </div>
2319
2320
2321  <div data-template="def50200a3dae018844638dbfd95519a0b57570875f4a1a6ca3df16ea383338db8478b4e9015ff59aec0dec03bf411e59f1accdf4953ab24eae8889e78add63e9da2c6efe9c951c4fc091ac389cf7c7453a6d9d861169a3aa7a5b8" data-query="def50200bf3bcd11789f70d9a913d3c898075a9c8c5b46af6e4f43cbfe68d3304a63784cf733b4923a302c5c6f036d5831c79e1b6c63bf262c22e6501714d988106bf59a6caf30293b1d009d2c580a5ea757ad5d548240b0d8320c83077bcb0831dce87f34cb152e4a3ef80cd35e4bf727c71e694c021d387a8e19270d9802a74de75fdad7a9b5a9039d0444b0c36f01e832ff1671c3477f33845855d8882ea1eb3bca2b3608648378eb2c76a0fe456124254db7b444367b5dc7b86f5510d5098500dd078a5e142557649a3646dd251b7a42395d649485ab5c3fdcd372bf99c4b367357d141c278bd98fb39e40fca760463083d9d8cb2c1959a4a08840b61f14c92c905bd557394807be8ac2277dc934ca3d47afda5e5d81de35a4e55500688e8d528f6d68e988f5361212b86770f1674bcd161604976e4ed2f9dbc6dd742a838b873f8d263793ba048f7a9dbedffc6b4ae1" data-hash="6ab572ed8dc31" data-blog="1" data-options="def5020038dbfd05a9fde9e61e359b82d2653443f895edd0d9a823c958c402353a427f033f92af81b7eb464a8d6191c534765a99b4c9a8aca73838f7b3ad4c928cef6fd2581dbf3c868057f278600d7ba41e834b21ff" class="postlistingwithtabs postlistingwithtabs--1 omwidget om-grid-container one ">
2322
2323    
2324    <ul class="om-grid">
2325      <li class="compact">
2326  <div class="meta typogr__meta">
2327    <span class="compact__cats typogr__catlink">
2328        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2329    </span>
2330    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2331      23.09.2026    </span>
2332  </div>
2333
2334  <a href="https://hymy.fi/uutiset/karita-tykka-on-nyt-50-vuotias/">
2335    <h3>Karita Tykkä &#8211; alastonkuvat!</h3>
2336  </a>
2337
2338</li>
2339<li class="compact">
2340  <div class="meta typogr__meta">
2341    <span class="compact__cats typogr__catlink">
2342        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2343    </span>
2344    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2345      17.09.2026    </span>
2346  </div>
2347
2348  <a href="https://hymy.fi/uutiset/ex-taitoluistelija-kiira-korpi-kavi-hakemassa-salaattiannoksen-ravintolasta-pika-koiransa-kanssa/">
2349    <h3>Kiira Korpi tyylikkäänä arki-asussa &#8211; käväisi salaattiannoksen kaupasta!</h3>
2350  </a>
2351
2352</li>
2353<li class="compact">
2354  <div class="meta typogr__meta">
2355    <span class="compact__cats typogr__catlink">
2356        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2357    </span>
2358    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2359      22.09.2026    </span>
2360  </div>
2361
2362  <a href="https://hymy.fi/uutiset/perjantain-vain-elamaa-jaksossa-vietetaan-nelli-matulan-paivaa-jaksossa-kuullaan-muun-muassa-bessin-kateudesta-nellia-kohtaan/">
2363    <h3>Vain elämää: Bess ei halunnut olla samassa ohjelmassa kuin Nelli Matula!</h3>
2364  </a>
2365
2366</li>
2367<li class="compact">
2368  <div class="meta typogr__meta">
2369    <span class="compact__cats typogr__catlink">
2370        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2371    </span>
2372    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2373      17.09.2026    </span>
2374  </div>
2375
2376  <a href="https://hymy.fi/uutiset/kylie-jenner-on-julkaissut-jalleen-nayttavia-kuvia-kuntosaliltaan-vain-vahan-sen-jalkeen-kun-han-kertoi-haluavansa-nykyista-suuremmat-rinnat/">
2377    <h3>Kylie Jenner poseeraa niukassa treenitopissa – haluaa vieläkin suuremmat rinnat!</h3>
2378  </a>
2379
2380</li>
2381<li class="compact">
2382  <div class="meta typogr__meta">
2383    <span class="compact__cats typogr__catlink">
2384        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2385    </span>
2386    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2387      17.12.2025    </span>
2388  </div>
2389
2390  <a href="https://hymy.fi/uutiset/martina-aitolehti/">
2391    <h3>Tällainen on Martina Aitolehden ökyauto!</h3>
2392  </a>
2393
2394</li>
2395    </ul>
2396
2397    
2398  </div>
2399
2400     </article> 
2401</div>
2402  <div class="widget-imgButton sidebar-block">
2403        <a href="https://hymy.fi/juttuvinkki/" target="_blank">
2404      <img data-src="https://hymy.fi/wp-content/uploads/2016/04/laheta-juttuvinkki.gif" class="awpo-lazy"><noscript><img src="https://hymy.fi/wp-content/uploads/2016/04/laheta-juttuvinkki.gif"></noscript>
2405    </a>
2406  </div>
2407
2408  
2409  <div class="widget-imgButton sidebar-block">
2410        <a href="http://pubads.g.doubleclick.net/gampad/clk?id=6012526269&amp;iu=/135812570/tracking/click-tracking" target="_blank">
2411      <img data-src="https://hymy.fi/wp-content/uploads/2026/09/HYMY_300x300_syksy2.jpg" class="awpo-lazy"><noscript><img src="https://hymy.fi/wp-content/uploads/2026/09/HYMY_300x300_syksy2.jpg"></noscript>
2412    </a>
2413  </div>
2414
2415  				
2416			</div>
2417		
2418	</div>
2419</div>
2420<div style="clear: both;"></div>
2421</div><!-- #inner-wrapper -->
2422</div><!-- #wrapper -->
2423
2424<footer class="site-footer" id="footer">
2425  
2426<div class="om-footer">
2427    <div class="om-footer__columns">
2428    <div class="om-footer__columns-inner">
2429      <div class="om-footer__column">
2430                  <h2 class="om-footer__column-title">
2431            Asiakaspalvelu          </h2>
2432                          <div class="om-footer__column-content">
2433            <p><span class="label">Digipalvelut</span>(09) 156 6227<br>
2434<span class="label">Avoinna</span>ma–pe 8–19</p>
2435<p>&nbsp;</p>
2436<p><span class="label">Painettu lehti</span>(09) 156 665</p>
2437<p><span class="type label">Avoinna</span>ma–pe 8–19</p>
2438<p>&nbsp;</p>
2439<p><span class="label">Sähköposti (digi)</span> [email protected]</p>
2440<p><span class="label">Sähköposti</span> [email protected]</p>
2441<p>&nbsp;</p>
2442<p><span class="label">Otavamedian vaihde</span> (09) 156 61</p>
2443          </div>
2444              </div>
2445      <div class="om-footer__column">
2446                  <h2 class="om-footer__column-title">
2447            Postiosoite          </h2>
2448                          <div class="om-footer__column-content">
2449            <p>Uudenmaankatu 10<br>
245000015 OTAVAMEDIA</p>
2451<p>&nbsp;</p>
2452<p><a href="https://otavamedia.fi/evasteiden-kaytto/">Tietoa evästeiden käytöstä</a><br>
2453<a href="https://www.youronlinechoices.com/fi/">Käyttäytymiseen perustuva mainonta</a><br>
2454<a href="#">Evästeasetukset</a></p>
2455          </div>
2456              </div>
2457      <div class="om-footer__column">
2458                  <h2 class="om-footer__column-title">
2459            Mediatiedot          </h2>
2460                          <div class="om-footer__column-content">
2461            <ul class="footer__list">
2462<li><a href="https://yrityksille.otavamedia.fi/tekniset-tiedot-ja-hinnat/">Tekniset tiedot, aikataulut ja ilmoitushinnat</a></li>
2463<li><a href="https://yrityksille.otavamedia.fi/reaaliaikainen-kayttajatieto/" rel="nofollow">Tietoa verkon kävijöistä</a></li>
2464<li><a href="https://otavamedia.fi/tietosuoja/" rel="nofollow">Tietosuojaseloste</a></li>
2465<li><a href="https://otavamedia.fi/tilaus-ja-kayttoehdot/">Käyttöehdot</a></li>
2466</ul>
2467          </div>
2468                          <h2 class="om-footer__column-title">
2469            Tuotteet          </h2>
2470                          <div class="om-footer__column-content">
2471            <ul>
2472<li><a href="https://otavamedia.fi/tuotteet-ja-edut/" rel="nofollow">Aikakauslehdet</a></li>
2473<li><a href="https://otavamedia.fi/tuotteet-ja-edut/verkkopalvelut" rel="nofollow">Verkkopalvelut</a></li>
2474<li><a href="https://otavamedia.fi/tuotteet-ja-edut/digilehdet" rel="nofollow">Digilehdet</a></li>
2475</ul>
2476          </div>
2477              </div>
2478      <div class="om-footer__column">
2479                  <h2 class="om-footer__column-title">
2480            Toimitus ja lehtitilaus          </h2>
2481                          <div class="om-footer__column-content">
2482            <ul class="footer__list">
2483<li><a href="https://otavamedia.fi/asiakaspalvelu/#omat-tiedot-ja-tilaukset" rel="nofollow">Tilausmuutokset</a></li>
2484<li><a href="/toimituksen-yhteystiedot/#palaute">Palautelomake</a></li>
2485</ul>
2486<p><a class="footer-button" href="/toimituksen-yhteystiedot/">Toimitus</a><br>
2487Sähköpostiosoitteet: [email protected]<br>
2488<a class="footer-button" href="https://hymy.fi/tilaa?promoPosition=footer-etusivu&amp;src=hymy.fi&amp;sid=fd97b1d2-7f45-331b-b8a5-881b7647ff09">Tilaa lehti</a></p>
2489          </div>
2490              </div>
2491    </div>
2492  </div>
2493      <div class="om-footer__logo">
2494        <img width="400" height="174" class="attachment-thumbnail size-thumbnail awpo-lazy" alt="" decoding="async" loading="lazy" data-srcset="https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-400x174.png 400w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-800x347.png 800w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-1024x445.png 1024w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-768x334.png 768w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-1536x667.png 1536w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-2048x889.png 2048w" data-sizes="auto, (max-width: 400px) 100v
2494w, 400px" data-src="https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-400x174.png"><noscript><img width="400" height="174" src="https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-400x174.png" class="attachment-thumbnail size-thumbnail" alt="" decoding="async" loading="lazy" srcset="https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-400x174.png 400w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-800x347.png 800w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-1024x445.png 1024w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-768x334.png 768w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-1536x667.png 1536w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-2048x889.png 2048w" sizes="auto, (max-width: 400px) 100vw, 400px"></noscript>    </div>
2495  </div>
2496
2497</footer>
2498
2499
2500<!--[if IE 8]>
2501<div class="if-ie-8">Huom! Sivuston kaikki ominaisuudet eivät välttämättä toimi selaimellasi. Ole hyvä, ja päivitä selaimesi.</div>
2502<![endif]-->
2503
2504<!-- 157 queries in 0,344 seconds. -->
2505<script type="speculationrules">
2506{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/om-hymy-theme/*","/wp-content/themes/om-core/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
2507</script>
2507
2508
2509<script type="text/javascript">
2510  jQuery( function() {
2511    try {
2512      AsteikkoAuth.init( "https:\/\/hymy.fi\/" );
2513    } catch( e ) {
2514      if ( window.console && console.error )
2515        console.error( e );
2516    }
2517  } );
2518</script>
2518			
2518<script>
2519				function convert_to_url(obj) {
2520					return Object
2521					.keys(obj)
2522					.map(k => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`)
2523					.join('&');
2524				}
2525
2526				function pass_to_backend() {
2527					if(window.location.hash) {
2528						var hash = window.location.hash;
2529						var elements = {};
2530						hash.split("#")[1].split("&").forEach(element => {
2531							var vars = element.split("=");
2532							elements[vars[0]] = vars[1];
2533						});
2534						if(("access_token" in elements) || ("id_token" in elements) || ("token" in elements)) {
2535							if(window.location.href.indexOf("?") !== -1) {
2536								window.location = (window.location.href.split("?")[0] + window.location.hash).split('#')[0] + "?" + convert_to_url(elements);
2537							} else {
2538								window.location = window.location.href.split('#')[0] + "?" + convert_to_url(elements);
2539							}
2540						}
2541					}
2542				}
2543
2544				pass_to_backend();
2545			</script>
2545
2546
2547		
2547<script type="text/javascript" src="https://hymy.fi/wp-content/cache/asauth/fi_blog1.js?ver=84" id="asteikko-auth-lang-fi-js"></script>
vendor: 1 bytes, line 2547
2547
2548<script type="text/javascript" src="https://hymy.fi/wp-content/plugins/asteikko-auth-otavamedia/js/asteikko-auth.js?ver=3.0.5" id="asteikko-auth-js"></script>
vendor: 1 bytes, line 2548
2548
2549<script type="text/javascript" src="https://hymy.fi/wp-content/plugins/asteikko-mag/dist/wp-widgets/index.js?ver=6.21.2-0c797b1a9ed13eb8dd863a1165181f5f" id="asmag_widgets_js-js"></script>
vendor: 1 bytes, line 2549
2549
2550<script type="text/javascript" src="https://hymy.fi/wp-content/themes/om-core/script.js?ver=1790248696" id="om-core-js-js"></script>
vendor: 1 bytes, line 2550
2550
2551<script type="text/javascript" src="https://hymy.fi/wp-content/plugins/om-widgets-plugin/assets/widgets.js?ver=1" id="om-core-widgets-js-js"></script>
vendor: 1 bytes, line 2551
2551
2552<script type="text/javascript" src="https://hymy.fi/wp-content/plugins/wp-optimizer/assets/dist/awpo.min.js?ver=1722410914" id="awpo-lazyload-js"></script>
vendor: 1 bytes, line 2552
2552
2553<script type="text/javascript" src="https://hymy.fi/wp-content/themes/om-hymy-theme/plugins.js?ver=6.9.9" id="custom-plugins-js"></script>
vendor: 1 bytes, line 2553
2553
2554<script type="text/javascript" src="https://hymy.fi/wp-content/themes/om-hymy-theme/script.js?ver=6.9.9" id="custom-scripts-js"></script>
2554
2555</div> <!-- / #additionalBg -->
2556<!-- Body end tag start, do not remove -->
2557
2558<script>
2559
2560	//hymy.fi
2561
2562	async function waitForVariable2(variableName, timeoutMs = 30000, intervalMs = 1000) {
2563		const startTime = Date.now();
2564		for (; !window[variableName]; ) {
2565			if (Date.now() - startTime >= timeoutMs) {
2566				console.warn(`waitForVariable2: Timeout of ${timeoutMs / 1000}s reached for variable "${variableName}".`);
2567				return false;
2568			}
2569			await new Promise(resolve => setTimeout(resolve, intervalMs));
2570		}
2571		return true;
2572	}
2573
2574	//jQuery('#inner-wrapper > div.col-two').before(jQuery('#dfp__interstitial'));
2575	//if (dfpDebug) {console.log('Moving interstitial...')}
2576	
2577	jQuery('body').prepend('<div id=\'dfp__interstitial_1\'>
2577<script>window.dfp.displayAdslot(\'dfp__interstitial_1\')<\/script></div>');
2578
2579	if (location.href.indexOf('interstitial2') > -1) {
2580
2581//		let interval = setInterval(function(){
2582//			if (window.googletag && googletag.apiReady && googletag.pubadsReady) {
2583				//var aStr = '
2583<script>var interstitialSlot; googletag.cmd.push(function() {interstitialSlot = googletag.defineOutOfPageSlot(\"/135812570/hymy/content/interstitial\", \"dfp__interstitial_1\").addService(googletag.pubads());});<\/script><div id=\"dfp__interstitial_1\">
2583<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");googletag.pubads().refresh([interstitialSlot]);});<\/script></div>';
2584				//var aStr = '
2584<script>var interstitialSlot; googletag.cmd.push(function() {interstitialSlot = googletag.defineOutOfPageSlot(\"/135812570/hymy/content/interstitial\", \"dfp__interstitial_1\").addService(googletag.pubads());});<\/script><div id=\"dfp__interstitial_1\">
2584<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");});<\/script></div>';
2585				var aStr = '
2585<script>var interstitialSlot; googletag.cmd.push(function() {interstitialSlot = googletag.defineSlot(\"/135812570/hymy/content/interstitial\", [1, 1], \"dfp__interstitial_1\").addService(googletag.pubads());});<\/script><div id=\"dfp__interstitial_1\">
2585<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");});<\/script></div>';
2586				//jQuery('#inner-wrapper > div.col-two').before(aStr);
2587				jQuery('body').prepend(aStr);
2588				console.log('Interstitial added...');
2589//				clearInterval(interval);
2590//			}
2591//		}, 10);
2592
2593	}	
2594
2595	if (location.href.indexOf('webinterstitial') >= -1) {
2596		waitForVariable2("canRunWebInterstitial", 30000, 1000)
2597		.then((success) => {
2598			if (success) {
2599				if (dfpDebug) {console.log('Defining webinterstitial...')}
2600				var webinterstitialSlot;
2601				googletag.cmd.push(function() {
2602					webinterstitialSlot = googletag.defineOutOfPageSlot('/135812570/hymy/content/webinterstitial', googletag.enums.OutOfPageFormat.INTERSTITIAL);
2603					if (webinterstitialSlot) {webinterstitialSlot.addService(googletag.pubads()); googletag.pubads().refresh([webinterstitialSlot]);}
2604				});
2605			} else {
2606				if (dfpDebug) { console.log('waitForVariable2 "canRunWebInterstitial" timed out or variable was not found.'); }
2607			}
2608		})
2609		.catch(error => {
2610			if (dfpDebug) { console.error('Error in waitForVariable2:', error); }
2611		});
2612	}
2613
2614	if (location.href.indexOf('anchorad') > -1) {
2615		if (dfpDebug) {console.log('Anchor ad defined...')}
2616		var anchorSlot;
2617		googletag.cmd.push(function() {
2618			if (document.body.clientWidth <= 500) {
2619				anchorSlot = googletag.defineOutOfPageSlot('/135812570/hymy/content/anchorad', googletag.enums.OutOfPageFormat.BOTTOM_ANCHOR);
2620			} else {
2621				anchorSlot = googletag.defineOutOfPageSlot('/135812570/hymy/content/anchorad', googletag.enums.OutOfPageFormat.BOTTOM_ANCHOR);
2622			}
2623			if (anchorSlot) {anchorSlot.addService(googletag.pubads())}
2624		});
2625	}
2626
2627	if (window.dfp.visibility == 'mobile') {
2628		jQuery('body').prepend('<div id=\'dfp__topad-mob\'>
2628<script>window.dfp.displayAdslot(\'dfp__topad-mob\')<\/script></div>');
2629	}
2630
2631	if (document.documentElement.clientWidth >= 1020) {
2632		jQuery("#inner-wrapper > div.col-two").before('<div id="dfp__desk-1_1">
2632<script>window.dfp.displayAdslot("dfp__desk-1_1")<\/script></div>');
2633		jQuery('#sivupalkki').find('h2:contains("Suosituimmat")').parent('div').after('<div id="dfp__rectangle-2_2">
2633<script>window.dfp.displayAdslot("dfp__rectangle-2_2")<\/script></div>');
2634		jQuery('#sivupalkki #secondary').append('<div id="dfp__rectangle-2_3">
2634<script>window.dfp.displayAdslot("dfp__rectangle-2_3")<\/script></div>');
2635	}
2636
2637	if (adLocation == 'frontpage') {
2638		
2639		if (document.documentElement.clientWidth < 1020) {
2640			jQuery(".col-two .widget-area .postlisting-3 ul li").eq(0).css('margin-bottom','30px').after('<div id="dfp__mob-1_1">
2640<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>');
2641			jQuery(".col-two .widget-area .postlisting-2 ul li").eq(0).after(jQuery("#dfp__mob-2").css('margin','0px 0px 40px'));
2642			jQuery(".col-two .widget-area .postlisting-2 ul li").eq(2).after('<div id="dfp__mob-2_1">
2642<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>');
2643			jQuery(".col-two .widget-area .postlisting-2 ul li").eq(4).after('<div id="dfp__mob-2_2">
2643<script>window.dfp.displayAdslot("dfp__mob-2_2")<\/script></div>');
2644		} else {
2645			//jQuery(".col-two .widget-area .postlisting-2 ul li").eq(1).after(jQuery("#dfp__in-text"));
2646		}
2647
2648	}
2649
2650	if (jQuery('body').hasClass('category-horoskooppi')) {
2651		
2652		if (document.documentElement.clientWidth < 1020) {
2653			jQuery(".col-two .widget-area .postlisting-4 ul li").eq(0).after('<div id="dfp__mob-1_1">
2653<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>');
2654			jQuery(".col-two .widget-area .postlisting-4 ul li").eq(3).after(jQuery("#dfp__mob-2"));
2655			jQuery(".col-two .widget-area .postlisting-4 ul li").eq(6).after('<div id="dfp__mob-2_1">
2655<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>');
2656			jQuery(".col-two .widget-area .postlisting-4 ul li").eq(9).after('<div id="dfp__mob-2_2">
2656<script>window.dfp.displayAdslot("dfp__mob-2_2")<\/script></div>');
2657		} else {
2658			jQuery(".col-two .widget-area .postlisting-4 ul li").eq(2).after(jQuery("#dfp__in-text"));
2659		}
2660
2661	} else if (jQuery('body').hasClass('category')) {
2662		
2663		if (document.documentElement.clientWidth < 1020) {
2664			jQuery(".col-two .widget-area .postlisting-6 ul li").eq(0).after('<div id="dfp__mob-1_1">
2664<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>');
2665			jQuery(".col-two .widget-area .postlisting-6 ul li").eq(2).after(jQuery("#dfp__mob-2").css('margin','0px 0px 30px'));
2666			jQuery(".col-two .widget-area .postlisting-6 ul li").eq(4).after('<div id="dfp__mob-2_1">
2666<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>');
2667			jQuery(".col-two .widget-area .postlisting-6 ul li").eq(6).after('<div id="dfp__mob-2_2">
2667<script>window.dfp.displayAdslot("dfp__mob-2_2")<\/script></div>');
2668		} else {
2669			jQuery(".col-two .widget-area .postlisting-6 ul li").eq(3).after('<div></div>').after(jQuery("#dfp__in-text").css('margin-bottom', '30px').css('width','100%'));
2670		}
2671
2672	}
2673
2674	if (adLocation == 'content' && jQuery('body').hasClass('single-post') && location.href.indexOf('testnewads=1') == -1) {
2675
2676		if (document.documentElement.clientWidth < 1020) {
2677
2678			var readMoreIndex = 0;
2679			jQuery('.article__body > p').each(function(index) {
2680				if (jQuery(this).text().trim() === 'Lue lisää:' || jQuery(this).text().trim() === 'Lue myös:') {
2681					readMoreIndex = index;
2682					return false;
2683				}
2684			});
2685			if (dfpDebug) {console.log('readMoreIndex: ' + readMoreIndex)}
2686			var nbrOfParagraphs = jQuery('.article__body > p').length;
2687			var nbrOfContentParagraphs = readMoreIndex > 0 ? nbrOfParagraphs - (nbrOfParagraphs - readMoreIndex) : nbrOfParagraphs;
2688			var mob1AdPlace = nbrOfContentParagraphs > 10 ? 1 : nbrOfContentParagraphs > 5 ? 0 : 0;
2689			if (dfpDebug) {console.log('nop: ' + nbrOfParagraphs + ', nocp: ' + nbrOfContentParagraphs + '. m1ap: ' + mob1AdPlace)}
2690			
2691			if (jQuery(".article__body > p").eq(mob1AdPlace).text().trim().slice(-1) == ">") {mob1AdPlace++}
2692			jQuery(".article__body > p").eq(mob1AdPlace).after('<div id="dfp__mob-1_1">
2692<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>');
2693	
2694			if (dfpDebug) {console.log('Content p ' + nbrOfContentParagraphs + '. mob-1 after p.eq(' + mob1AdPlace + ')')}
2695			
2696			if (nbrOfContentParagraphs > 8) {
2697	
2698				(function() {
2699					var t = new Date().getTime(); t -= t % (1000*60*60*24*30);
2700					var l = document.createElement('script'); l.type = 'text/javascript'; l.async = true;
2701					l.src = '//otavamedia.bbvms.com/a/hymy.js?t='+t;
2702					var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(l, s);
2703				})();
2704	
2705				var bbwPlace = parseInt(nbrOfContentParagraphs/2);
2706				jQuery(".article__body > p").eq(bbwPlace).after('<div id=\"bbwvideo\"></div>');
2707				if (dfpDebug) {console.log('BBW after p.eq(' + bbwPlace + ')')}
2708	
2709			}
2710	
2711			if (nbrOfContentParagraphs > 4) {
2712				jQuery(".article__body > p").eq(nbrOfContentParagraphs-2).after('<div id="dfp__mob-2_1">
2712<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>');
2713				if (dfpDebug) {console.log('mob-2 after p.eq(' + (nbrOfContentParagraphs-2) + ')')}
2714			}
2715
2716		} else {
2717			jQuery(".article__body > p").eq(4).after('<div id="dfp__in-text_1">
2717<script>window.dfp.displayAdslot("dfp__in-text_1")<\/script></div>');
2718		}
2719
2720	}
2721
2722	var useDelay = false;
2723	if (location.href.indexOf('usedelay') > -1) {useDelay = true}
2724	if (useDelay) {
2725
2726		if (adLocation == 'content' && document.documentElement.clientWidth < 1020) {
2727			jQuery("#dfp__mob-1, #dfp__mob-2").wrap("<div class='wrapper__mob'><div class='wrapper__mob__inner'></div></div>");
2728			jQuery(".wrapper__mob").css({"min-height": "600px"});
2729			jQuery(".wrapper__mob__inner").css({"position":"-webkit-sticky","position":"sticky","top":"50px"});
2730			//console.log('adLocation: content...');
2731		}
2732		if (document.documentElement.clientWidth >= 1020) {
2733			jQuery("#dfp__sky-scraper-1").wrap("<div class='wrapper__sky-1'></div>");
2734			jQuery("#dfp__sky-scraper-2").wrap("<div class='wrapper__sky-2'></div>");
2735			jQuery(".wrapper__sky-1").css({"min-height": "750px"});
2736			jQuery(".wrapper__sky-2").css({"min-height": "1500px"});
2737			jQuery("#dfp__sky-scraper-1, #dfp__sky-scraper-2").css({"position":"-webkit-sticky","position":"sticky","top":"50px"});
2738		}
2739
2740	}
2741
2742	let showConsentManager = function(){__tcfapi("showConsentManager",true,function(data){console.log(data)});}
2743	jQuery('#footer a[href=#]').replaceWith('<a href="#" class="manageSettings" onclick="window.gravitoCMP.openPreferences()">Evästeasetukset</a>');
2744
2745	//var rnd = Math.floor(Math.random() * 50);
2746	console.log('rnd: ' + rnd + ', p_rum: ' + cmpGetCookie('p_rum'))
2747
2748	//if (cmpGetCookie('p_rum') != 1 && rnd >= 40) {
2749	if (rnd >= 31) {
2750
2751		console.log('Calling Pingdom rum...');
2752		var fpa = document.createElement('script'); fpa.type = 'text/javascript'; fpa.async = true;
2753		fpa.src = '//rum-static.pingdom.net/pa-5a3bc7dfd31eee00070000c6.js';
2754		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(fpa, s);
2755
2756	}
2757
2758	if (window.dfp.visibility == 'desktop' || window.dfp.visibility == 'large') {
2759		jQuery("body").append('<iframe srcdoc=\"\
2759<script src=\'https:\/\/cdn.performax.cz\/acc\/loader.js?aab=loader\'\>\<\/script\>\" style=\"display: none\" data-web=\"hymy.fi\" data-hash=\"347437801fe88859caf76003d7ea5b8b\"><\/iframe>');
2760	}
2761	
2762	var dfpReady = setInterval(function() {
2763		if(window.googletag && googletag.pubadsReady && 1 == 2) {
2764
2765			jQuery(document).ready(function() {
2766
2767				var hasLueLisaa = false;
2768				var paragraphCounter = 0;
2769				//console.log('pCount: ' + jQuery('.article__body > p').length);
2770				jQuery('.article__body > p').each(function() {
2771					if (jQuery(this).text().trim() === 'Lue lisää:' || jQuery(this).text().trim() === 'Lue myös:') {
2772						hasLueLisaa = true;
2773						//jQuery(jQuery(this)).before(jQuery('#dfp__mob-2'));
2774						jQuery('.article__body > .grid--dfp-slots').append('<div style="clear: both"></div>')
2775						jQuery(jQuery(this)).before(jQuery('.article__body > .grid--dfp-slots'));
2776						//var scriptContent = jQuery('.article__body #dfp__rectangle-2').find('script').html();
2777						//var newScriptContent = scriptContent.replace(/dfp__rectangle-2/g, 'dfp__rectangle-2_1');
2778						//jQuery('.article__body #dfp__rectangle-2').find('script').html(newScriptContent);
2779						//jQuery('#dfp__rectangle-2').attr('id', 'dfp__rectangle-2_1');
2780
2781						return false;
2782					}
2783					paragraphCounter++;
2784					//console.log('paragraphCounter: ' + paragraphCounter);
2785				});
2786			
2787				if (hasLueLisaa) {
2788					//console.log('bbbb: ' + (paragraphCounter-1));
2789					var nextParagraphs = (jQuery('.article__body > p').length - (paragraphCounter-1));
2790					//console.log('nextParagraphs: ' + nextParagraphs);
2791					//jQuery('.article__body > p').eq(paragraphCounter+9).before('<p>testi</p>');
2792
2793					var nbrOf2ndAds = 1;
2794					for (i=0;i<=nextParagraphs-1;i++) {
2795						//jQuery('.article__body > p').eq(i).before('<p>testi</p>');
2796						//console.log(i);
2797						jQuery('.article__body > p').eq(i+paragraphCounter).find('a[target="_blank"]').removeAttr('target');
2798						if (document.documentElement.clientWidth < 1020) {
2799							if (i > 0 && i % 7 == 0 && nbrOf2ndAds < 3) {
2800								//console.log('Lisätään mob-2 to p(eq): ' + i);
2801								jQuery('.article__body > p').eq(i+paragraphCounter).before('<div id="dfp__mob-2_' + nbrOf2ndAds + '">
2801<script>window.dfp.displayAdslot("dfp__mob-2_' + nbrOf2ndAds + '")<\/script></div>');
2802								if (nbrOf2ndAds == 2) {
2803									//break;
2804								}
2805								nbrOf2ndAds++;
2806							}
2807						} else {
2808							if (i > 0 && i % 12 == 0 && nbrOf2ndAds < 2) {
2809								//jQuery('.article__body > p').eq(i+paragraphCounter).before('<div id="dfp__in-text_' + nbrOf2ndAds + '">
2809<script>window.dfp.displayAdslot("dfp__in-text_' + nbrOf2ndAds + '")<\/script></div>');
2810								jQuery('.article__body > p').eq(i+paragraphCounter).before(jQuery('#dfp__in-text'));
2811								if (nbrOf2ndAds == 1) {
2812									//break;
2813								}
2814								nbrOf2ndAds++;
2815							}
2816						}
2817					}
2818				}
2819				
2820			});
2821			clearInterval(dfpReady);
2822	
2823		} else {
2824			//console.log('Checking Again if DFP ready...');
2825		}
2826	}, 100);
2827
2828
2829	if (testSRA) {
2830	
2831		const observers = new Map();
2832		
2833		function observeDFPElements() {
2834			
2835			//const targets = [...document.querySelectorAll('[id^="dfp__"]:not([data-observed])')].filter(el => el.id !== 'dfp__mob-2_222' && !el.id.includes('native'));
2836			const targets = [...document.querySelectorAll('[id^="dfp__"]:not([data-observed])')].filter(el => el.id !== 'dfp__mob-2_222');
2837	
2838			targets.forEach(target => {
2839	
2840				target.setAttribute('data-observed', 'true');
2841				//const thresholdValue = parseFloat(target.getAttribute('data-threshold')) || 1;
2842				let thresholdValue = parseFloat(target.getAttribute('data-threshold')) || 0.6;
2843				if (target.getAttribute('id').includes('dfp__native')) {
2844					thresholdValue = 0.3;
2845				};
2846	
2847				let observer = observers.get(thresholdValue);
2848				if (!observer) {
2849					if (dfpDebug) console.log(`Creating new observer for threshold: ${thresholdValue}`);
2850					//const rootMargin = `0px 0px ${thresholdValue * 100}% 0px`;
2851					const rootMargin = `${thresholdValue * 100}% 0px ${thresholdValue * 100}% 0px`;
2852					
2853					observer = new IntersectionObserver(
2854						(entries, obs) => {
2855							entries.forEach(entry => {
2856								if (entry.isIntersecting) {
2857									if (dfpDebug) {
2858										console.log('HAS: entry.boundingClientRect.height: ' + entry.boundingClientRect.height);
2859										console.log('HAS: calling runHeaderbid: ' + entry.target.id);
2860										let distanceFromViewportBottom = window.innerHeight - entry.boundingClientRect.top;
2861										console.log(`HAS: ${entry.target.id} is ${distanceFromViewportBottom.toFixed(0)}px from the bottom of viewport...`);
2862									}
2863									loadAdSlot(entry.target.id);
2864									obs.unobserve(entry.target);
2865								}
2866							});
2867						},
2868						{
2869							root: null, // relative to the viewport
2870							rootMargin: rootMargin,
2871							threshold: 0.0 // Fire as soon as it enters the margin
2872						}
2873					);
2874					observers.set(thresholdValue, observer);
2875				}
2876		
2877				observer.observe(target);
2878				if (dfpDebug) console.log('Observing element: ', target.id, 'with threshold:', thresholdValue);
2879			});
2880		}
2881		
2882		let debounceTimeout;
2883		function debouncedObserve() {
2884			clearTimeout(debounceTimeout);
2885			debounceTimeout = setTimeout(observeDFPElements, 100);
2886		}
2887	
2888	
2889		var dfpReady = setInterval(function() {
2890			if(window.googletag && googletag.pubadsReady) {
2891				if (dfpDebug) {console.log('DFP ready, starting observation...')}
2892	
2893				observeDFPElements();
2894	
2895				const mutationObserver = new MutationObserver(debouncedObserve);
2896				mutationObserver.observe(document.body, {childList: true, subtree: true});
2897	
2898				clearInterval(dfpReady);
2899	
2900			}
2901		}, 50)
2902	
2903	}
2904
2905
2906	var adslotsDefined = true;
2907
2908
2909	jQuery(function () {
2910	
2911		jQuery('body.single-post .article__body').append('<h3>Lue myös:</h3><ul id="latest-articles"></ul>');
2912	
2913		const FEED_URL = 'https://hymy.fi/wp-json/feeds/uutiset-uusimmat';
2914		const MAX_POSTS = 15;
2915	
2916		const FEED_KEY = 'latestArticlesFeed';
2917		const FEED_TS_KEY = 'latestArticlesFeedTs';
2918		const FEED_TTL = 1000 * 60 * 60; // 1 hour
2919	
2920		const READ_KEY = 'latestReadPostIds';
2921		const READ_TTL = 1000 * 60 * 60 * 24 * 7; // 7 days
2922	
2923		function decodeHtmlEntities(str) {
2924			if (!str) return '';
2925			const txt = document.createElement('textarea');
2926			txt.innerHTML = str;
2927			return txt.value;
2928		}
2929	
2930		function storageAvailable(type) {
2931			try {
2932				const storage = window[type];
2933				const x = '__test__';
2934				storage.setItem(x, x);
2935				storage.removeItem(x);
2936				return true;
2937			} catch (e) {
2938				return false;
2939			}
2940		}
2941	
2942		function getReadPostMap() {
2943	
2944			let readPostMap = {};
2945			if (!storageAvailable('localStorage')) return readPostMap;
2946	
2947			try {
2948				readPostMap = JSON.parse(localStorage.getItem(READ_KEY)) || {};
2949			} catch (e) {
2950				return {};
2951			}
2952	
2953			const now = Date.now();
2954			let changed = false;
2955	
2956			Object.keys(readPostMap).forEach(postId => {
2957				if (now - readPostMap[postId] > READ_TTL) {
2958					delete readPostMap[postId];
2959					changed = true;
2960				}
2961			});
2962	
2963			if (changed) {
2964				localStorage.setItem(READ_KEY, JSON.stringify(readPostMap));
2965			}
2966	
2967			return readPostMap;
2968	
2969		}
2970	
2971		function markPostAsRead(postId) {
2972	
2973			if (!postId || !storageAvailable('localStorage')) return;
2974	
2975			const readPostMap = getReadPostMap();
2976			if (!readPostMap[postId]) {
2977				readPostMap[postId] = Date.now();
2978				localStorage.setItem(READ_KEY, JSON.stringify(readPostMap));
2979			}
2980	
2981		}
2982	
2983		function isPostRead(postId) {
2984			return !!getReadPostMap()[postId];
2985		}
2986	
2987		let currentPostId = null;
2988		if (window.dataLayer && Array.isArray(window.dataLayer)) {
2989			const pageData = window.dataLayer.find(obj => obj.PostId);
2990			if (pageData) {
2991				currentPostId = pageData.PostId;
2992			}
2993		}
2994	
2995		if (currentPostId) {
2996			markPostAsRead(currentPostId);
2997		}
2998	
2999		function getCachedFeed() {
3000	
3001			if (!storageAvailable('sessionStorage')) return null;
3002	
3003			try {
3004	
3005				const feedData = sessionStorage.getItem(FEED_KEY);
3006				const ts = sessionStorage.getItem(FEED_TS_KEY);
3007	
3008				if (!feedData || !ts) return null;
3009	
3010				if (Date.now() - parseInt(ts, 10) > FEED_TTL) {
3011					sessionStorage.removeItem(FEED_KEY);
3012					sessionStorage.removeItem(FEED_TS_KEY);
3013					return null;
3014				}
3015	
3016				return JSON.parse(feedData);
3017	
3018			} catch (e) {
3019				return null;
3020			}
3021	
3022		}
3023	
3024		function cacheFeed(feedData) {
3025			if (!storageAvailable('sessionStorage')) return;
3026			try {
3027				sessionStorage.setItem(FEED_KEY, JSON.stringify(feedData));
3028				sessionStorage.setItem(FEED_TS_KEY, Date.now());
3029			} catch (e) {}
3030		}
3031	
3032		function renderPostList(posts) {
3033	
3034			if (!posts || !posts.length) return;
3035	
3036			const $ul = jQuery('#latest-articles');
3037			if (!$ul.length) return;
3038	
3039			let postsRendered = 0;
3040	
3041			posts.forEach(post => {
3042	
3043				if (postsRendered >= MAX_POSTS) return;
3044				if (post.is_ad) return;
3045				if (post.ID === currentPostId) return;
3046				if (isPostRead(post.ID)) return;
3047	
3048				const $link = jQuery('<a>', {
3049					href: post.url,
3050					text: decodeHtmlEntities(post.title),
3051					class: 'latest-article-link',
3052					'data-postid': post.ID
3053				});
3054	
3055				$link.on('click', function () {
3056	
3057					const postId = jQuery(this).data('postid');
3058					const targetPostId = currentPostId || 0;
3059	
3060					markPostAsRead(postId);
3061	
3062					const cacheBuster = Math.floor(Math.random() * 100000000);
3063					const img = new Image();
3064					img.src =
3065						'https://digitiimi.otavamedia.fi/cc/recom/?siteid=18&typeid=1' +
3066						'&bu=' + encodeURIComponent(location.href) +
3067						'&tu=' + encodeURIComponent(post.url) +
3068						'&cb=' + cacheBuster +
3069						'&pid=' + postId +
3070						'&tpid=' + targetPostId;
3071				});
3072	
3073				const $li = jQuery('<li>').append($link);
3074				$ul.append($li);
3075	
3076				postsRendered++;
3077			});
3078		}
3079	
3080		function init(feedData) {
3081	
3082			if (!feedData || !feedData.posts || !feedData.posts.length) return;
3083	
3084			const posts = feedData.posts.slice().reverse();
3085			renderPostList(posts);
3086	
3087		}
3088	
3089		const cachedFeed = getCachedFeed();
3090	
3091		if (cachedFeed) {
3092			init(cachedFeed);
3093		} else {
3094			jQuery.getJSON(FEED_URL)
3095				.done(function (feedData) {
3096					cacheFeed(feedData);
3097					init(feedData);
3098				});
3099		}
3100	
3101	});
3102
3103</script>
3103
3104
3105<script>
3106
3107	if (document.location.href.indexOf("anchorad=1") > -1) {
3108
3109		//loadAds();
3110		//console.log("load_test"); // This should be called when all <div data-ad-unit="??"> elements exists in DOM
3111
3112		var adTestParam = 'anchorad=1';
3113		$("body a").each(function() {
3114			var hrefSrc = $(this).attr('href');
3115			if (hrefSrc != null) {
3116				if (hrefSrc.indexOf("jpg") < 0 && hrefSrc.indexOf("gif") < 0 && hrefSrc.indexOf("png") < 0 && hrefSrc.indexOf("javascript") < 0 && hrefSrc.indexOf("debug=1") < 0) {
3117					if (hrefSrc.indexOf("?") < 0) {
3118						var ahreffi = hrefSrc + '?' + adTestParam;
3119					} else {
3120						var ahreffi = hrefSrc + '&' + adTestParam;
3121					}
3122					$(this).attr('href',ahreffi);
3123				}
3124			}
3125		});
3126
3127	}
3128
3129</script>
3129
3130
3131<style>
3132
3133	.latest-article-link {
3134		font-size: 15px;
3135	}
3136	ul#latest-articles {
3137		list-style-type: none;
3138		margin: 0;
3139		padding-top: 10px;
3140	}
3141	ul#latest-articles li {
3142		margin-bottom: 5px;
3143	}
3144	ul#latest-articles li:nth-Child(5n+0) {
3145		margin-bottom: 20px;
3146	}
3147	@media screen and (max-width: 768px) {
3148		.latest-article-link {
3149			font-size: 18px;
3150		}
3151		ul#latest-articles li {
3152			margin-bottom: 10px;
3153		}
3154		ul#latest-articles li:nth-Child(5n+0) {
3155			margin-bottom: 30px;
3156		}
3157	}
3158
3159	#verkkopalvelut .footer__services,
3160	#verkkopalvelut #palvelut {
3161		display: none;
3162	}
3163	
3164	#verkkopalvelut .om-logo,
3165	#verkkopalvelut .footer__logo {
3166		margin: 0 auto;
3167		display: block;
3168		float: none;    
3169		max-width:100px;
3170	}
3171	
3172	#verkkopalvelut .footer__logo img {
3173		width: 100%;
3174		max-width:100px;
3175		margin: 0 auto;
3176		display:block;
3177	}
3178	
3179	#verkkopalvelut .om-logo,
3180	#verkkopalvelut {
3181		padding-bottom:0;
3182		padding-top:0;
3183		padding-left:0;
3184		padding-right:0;
3185	}
3186	
3187	#verkkopalvelut .verkkopalvelut-inner {
3188		padding: 30px 0;
3189	}
3190
3191	.bb-float-close-button {
3192		top: -32px !important;
3193		padding: 7px 5px !important;
3194		font-size: 26px !important;
3195	}
3196	.bb_wrapper:has(.bb-float-close-button[style*="display: block"]), .bb_wrapper:has(.bb-float-close-button:not([style*=display])) {
3197		right: 8px !important;
3198		bottom: 8px !important;
3199	}
3200	@media screen and (min-width: 880px) {
3201		.bb_wrapper:has(.bb-float-close-button[style*="display: block"]), .bb_wrapper:has(.bb-float-close-button:not([style*=display])) {
3202			right: 20px !important;
3203			bottom: 15px !important;
3204		}
3205	}
3206	#dfp__interstitial_1 {
3207		position: fixed;
3208		z-index: 1000000;
3209		width: 1px;
3210		height: 1px;
3211		margin: 0px;
3212		padding: 0px;
3213		left: 0px;
3214		top: 0px;
3215	}
3216
3217</style>
3218
3219<!-- Body end tag end, do not remove --></body>
3220</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.