91 #else /* Win or Linux */ |
92 #else /* Win or Linux */ |
92 QString baseDir = "."; /* Should this also be homePath()? */ |
93 QString baseDir = "."; /* Should this also be homePath()? */ |
93 #endif |
94 #endif |
94 QSettings::setValue("DataBaseDirectory", baseDir + "/"); |
95 QSettings::setValue("DataBaseDirectory", baseDir + "/"); |
95 } |
96 } |
|
97 |
|
98 if (!QSettings::contains("DataBaseName")) { |
|
99 #if defined Q_WS_MAEMO_5 |
|
100 QString baseDir = QDir::homePath(); |
|
101 QSettings::setValue("DataBaseName", baseDir + "/browserContent.db"); |
|
102 #else |
|
103 QSettings::setValue("DataBaseName", "browserContent.db"); |
|
104 #endif |
|
105 } |
96 |
106 |
97 if (!QSettings::contains("ChromeBaseDirectory")) { |
107 if (!QSettings::contains("ChromeBaseDirectory")) { |
98 QString chromeBaseDir = ":/chrome/"; |
108 QString chromeBaseDir = ":/chrome/"; |
99 #ifndef Q_OS_SYMBIAN |
109 #ifndef Q_OS_SYMBIAN |
100 // Maemo, Linux, Windows can override using an env var |
110 // Maemo, Linux, Windows can override using an env var |
101 static const QString envChromeBaseDir = QProcessEnvironment::systemEnvironment().value("BROWSER_CHROME"); // allow env var overriding for dev |
111 static const QString envChromeBaseDir = QProcessEnvironment::systemEnvironment().value("BROWSER_CHROME"); // allow env var overriding for dev |
102 if (envChromeBaseDir != "") |
112 if (envChromeBaseDir != "") |
103 chromeBaseDir = envChromeBaseDir; |
113 chromeBaseDir = envChromeBaseDir; |
104 #endif |
114 #endif |
105 QSettings::setValue("ChromeBaseDirectory", chromeBaseDir); |
115 QSettings::setValue("ChromeBaseDirectory", chromeBaseDir); |
106 } |
116 } |
107 |
117 |
108 if (!QSettings::contains("LocalPagesBaseDirectory")) { |
118 if (!QSettings::contains("LocalPagesBaseDirectory")) { |
109 #ifdef Q_OS_SYMBIAN |
119 #ifdef Q_OS_SYMBIAN |
110 QString localpagesBaseDir = QSettings::value("ROMBaseDirectory").toString() + "localpages/"; |
120 QString localpagesBaseDir = QSettings::value("ROMBaseDirectory").toString() + "localpages/"; |
|
121 #elif defined Q_WS_MAEMO_5 |
|
122 QDir localpages("/opt/nokia-browser/localpagesmaemo/"); |
|
123 QString localpagesBaseDir; |
|
124 if(localpages.exists()) //harware build |
|
125 localpagesBaseDir = "/opt/nokia-browser/localpagesmaemo/"; |
|
126 else //emulator |
|
127 localpagesBaseDir = "./sf/app/browserui/ginebra2/chrome/localpagesmaemo/"; |
111 #else |
128 #else |
112 QString localpagesBaseDir = QSettings::value("ChromeBaseDirectory").toString() + "localpages/"; |
129 QString localpagesBaseDir = "chrome/localpages/"; |
113 // Maemo, Linux, Windows can override using an env var |
130 // Linux, Windows can override using an env var |
114 static const QString envBaseDir = QProcessEnvironment::systemEnvironment().value("BROWSER_LOCALPAGES"); // allow env var overriding for dev |
131 static const QString envBaseDir = QProcessEnvironment::systemEnvironment().value("BROWSER_LOCALPAGES"); // allow env var overriding for dev |
115 if (envBaseDir != "") |
132 if (envBaseDir != "") |
116 localpagesBaseDir = envBaseDir; |
133 localpagesBaseDir = envBaseDir; |
117 #endif |
134 #endif |
118 QSettings::setValue("LocalPagesBaseDirectory", localpagesBaseDir); |
135 QSettings::setValue("LocalPagesBaseDirectory", localpagesBaseDir); |
119 } |
136 } |
120 |
137 |
121 if (!QSettings::contains("StartUpChrome")) { |
138 if (!QSettings::contains("StartUpChrome")) { |
122 #ifdef BROWSER_LAYOUT_TENONE |
139 QSettings::setValue("StartUpChrome", "chrome.html"); |
123 QSettings::setValue("StartUpChrome", "bedrockchrome/chrome_tenone.html"); |
140 } |
124 #else |
|
125 QSettings::setValue("StartUpChrome", "bedrockchrome/chrome.html"); |
|
126 #endif |
|
127 } |
|
128 |
141 |
129 if (!QSettings::contains("SplashImage")) { |
142 if (!QSettings::contains("SplashImage")) { |
130 QSettings::setValue("SplashImage", "localpages/bedrock_splash.png"); |
143 QSettings::setValue("SplashImage", "bedrock_splash.png"); |
131 } |
144 } |
132 |
145 |
133 if (!QSettings::contains("NetworkProxy")) { |
146 if (!QSettings::contains("NetworkProxy")) { |
134 // For s60 arm and maemo arm (i.e. not x86 emulator build) we need to set no proxy |
147 // For s60 arm and maemo arm (i.e. not x86 emulator build) we need to set no proxy |
135 #if (defined(Q_OS_SYMBIAN) && !defined(Q_CC_NOKIAX86)) || (defined(Q_WS_MAEMO_5) && !defined(QT_ARCH_I386)) |
148 #if (defined(Q_OS_SYMBIAN) && !defined(Q_CC_NOKIAX86)) || (defined(Q_WS_MAEMO_5) && !defined(QT_ARCH_I386)) |
136 // empty proxy only for ARMV5 Symbian targets |
149 // empty proxy only for ARMV5 Symbian targets |
137 QSettings::setValue("NetworkProxy", QString()); |
150 QSettings::setValue("NetworkProxy", QString()); |
138 // everything else, linux, win, s60 emulator, maemo emulator needs proxy |
151 // everything else, linux, win, s60 emulator, maemo emulator needs proxy |
139 #else |
152 #else |
140 QSettings::setValue("NetworkProxy", "bswebproxy01.americas.nokia.com"); |
153 QSettings::setValue("NetworkProxy", "bswebproxy01.americas.nokia.com"); |
141 #endif |
154 #endif |
142 } |
155 } |
143 |
156 |
144 if (!QSettings::contains("NetworkPort")) { |
157 if (!QSettings::contains("NetworkPort")) { |
145 // For s60 arm and maemo arm (i.e. not x86 emulator build) we need to set no proxy |
158 // For s60 arm and maemo arm (i.e. not x86 emulator build) we need to set no proxy |
146 #if (defined(Q_OS_SYMBIAN) && !defined(Q_CC_NOKIAX86)) || (defined(Q_WS_MAEMO_5) && !defined(QT_ARCH_I386)) |
159 #if (defined(Q_OS_SYMBIAN) && !defined(Q_CC_NOKIAX86)) || (defined(Q_WS_MAEMO_5) && !defined(QT_ARCH_I386)) |
147 // empty proxy only for ARMV5 Symbian targets |
160 // empty proxy only for ARMV5 Symbian targets |
148 QSettings::setValue("NetworkPort", QString()); |
161 QSettings::setValue("NetworkPort", QString()); |
149 // everything else, linux, win, s60 emulator, maemo emulator needs proxy |
162 // everything else, linux, win, s60 emulator, maemo emulator needs proxy |
150 #else |
163 #else |
151 QSettings::setValue("NetworkPort", "8080"); |
164 QSettings::setValue("NetworkPort", "8080"); |
152 #endif |
165 #endif |
153 } |
166 } |
154 if (!QSettings::contains("DiskCacheEnabled")) |
167 if (!QSettings::contains("DiskCacheEnabled")) |
155 QSettings::setValue("DiskCacheEnabled", "1"); |
168 QSettings::setValue("DiskCacheEnabled", "1"); |
156 |
169 |
157 if (!QSettings::contains("DiskCacheMaxSize")) |
170 if (!QSettings::contains("DiskCacheMaxSize")) |
158 QSettings::setValue("DiskCacheMaxSize", "4194304"); |
171 QSettings::setValue("DiskCacheMaxSize", "6291456"); //6M |
159 |
172 |
160 if (!QSettings::contains("MaxPagesInCache")) |
173 if (!QSettings::contains("MaxPagesInCache")) |
161 QSettings::setValue("MaxPagesInCache", "3"); |
174 QSettings::setValue("MaxPagesInCache", "3"); |
162 |
175 |
163 if (!QSettings::contains("DnsPrefetchEnabled")) |
176 if (!QSettings::contains("DnsPrefetchEnabled")) |
164 QSettings::setValue("DnsPrefetchEnabled", "0"); |
177 QSettings::setValue("DnsPrefetchEnabled", "0"); |
165 |
|
166 #ifdef Q_OS_SYMBIAN |
|
167 const QString diskCacheBaseDir = "d:/system/"; |
|
168 #else |
|
169 const QString diskCacheBaseDir = QSettings::value("DataBaseDirectory").toString(); |
178 const QString diskCacheBaseDir = QSettings::value("DataBaseDirectory").toString(); |
170 #endif |
|
171 |
179 |
172 if (!QSettings::contains("DiskCacheDirectoryPath")) { |
180 if (!QSettings::contains("DiskCacheDirectoryPath")) { |
173 QSettings::setValue("DiskCacheDirectoryPath", diskCacheBaseDir + "brCache"); |
181 QSettings::setValue("DiskCacheDirectoryPath", diskCacheBaseDir + "brCache"); |
174 } |
182 } |
175 |
183 |
222 // |
234 // |
223 // Limit: 200MB = 5MB per origin * 40 origins |
235 // Limit: 200MB = 5MB per origin * 40 origins |
224 QString maxSize = QString::number(200 * 1024 * 1024); |
236 QString maxSize = QString::number(200 * 1024 * 1024); |
225 QSettings::setValue("Html5ApplicationCacheMaxSize", maxSize); |
237 QSettings::setValue("Html5ApplicationCacheMaxSize", maxSize); |
226 } |
238 } |
227 |
239 |
|
240 |
|
241 |
|
242 // Gestures library settings |
|
243 initGestureParams(); |
|
244 |
|
245 |
228 // reserved entries for local bookmarks |
246 // reserved entries for local bookmarks |
229 if (!QSettings::contains("Bookmark0Title")) { |
247 if (!QSettings::contains("Bookmark0Title")) { |
230 QSettings::setValue("Bookmark0Title", "Browser Welcome Page"); |
248 QSettings::setValue("Bookmark0Title", "Browser Welcome Page"); |
231 } |
249 } |
232 |
250 |
233 if (!QSettings::contains("Bookmark0Url")) { |
251 if (!QSettings::contains("Bookmark0Url")) { |
234 QSettings::setValue("Bookmark0Url", "startpage.html"); |
252 QSettings::setValue("Bookmark0Url", "startpage.html"); |
235 } |
253 } |
236 |
254 |
237 if (!QSettings::contains("Bookmark1Title")) { |
255 if (!QSettings::contains("Bookmark1Title")) { |
238 QSettings::setValue("Bookmark1Title", ""); |
256 QSettings::setValue("Bookmark1Title", ""); |
239 } |
257 } |
240 |
258 |
241 if (!QSettings::contains("Bookmark1Url")) { |
259 if (!QSettings::contains("Bookmark1Url")) { |
242 QSettings::setValue("Bookmark1Url", ""); |
260 QSettings::setValue("Bookmark1Url", ""); |
243 } |
261 } |
244 |
262 |
245 if (!QSettings::contains("Bookmark2Title")) { |
263 if (!QSettings::contains("Bookmark2Title")) { |
246 QSettings::setValue("Bookmark2Title", ""); |
264 QSettings::setValue("Bookmark2Title", ""); |
247 } |
265 } |
248 |
266 |
249 if (!QSettings::contains("Bookmark2Url")) { |
267 if (!QSettings::contains("Bookmark2Url")) { |
250 QSettings::setValue("Bookmark2Url", ""); |
268 QSettings::setValue("Bookmark2Url", ""); |
251 } |
269 } |
252 } |
270 } |
253 |
271 |
254 // userAgentStringSetup, default empty. |
272 // userAgentStringSetup, default empty. |
255 if (!QSettings::contains("UserAgentString")) |
273 |
|
274 if (!QSettings::contains("UserAgentString")) |
256 { |
275 { |
257 QSettings::setValue("UserAgentString", QString()); |
276 #if defined Q_WS_MAEMO_5 |
258 } |
277 QSettings::setValue("UserAgentString", "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7"); |
|
278 #else // Symbian, Linux etc. |
|
279 QSettings::setValue("UserAgentString", QString()); |
|
280 #endif |
|
281 } |
|
282 |
|
283 |
|
284 |
|
285 //Scrolling options |
|
286 initScrollingParams(); |
|
287 |
|
288 //Tiling options |
|
289 initTilingParams(); |
|
290 |
259 endGroup(); // m_appuid |
291 endGroup(); // m_appuid |
260 sync(); |
292 sync(); |
|
293 } |
|
294 |
|
295 |
|
296 void BedrockProvisioning::initScrollingParams() |
|
297 { |
|
298 if (!QSettings::contains("KineticDeceleration")) { |
|
299 QSettings::setValue("KineticDeceleration", 2.0); |
|
300 } |
|
301 |
|
302 if (!QSettings::contains("MaxFlickSpeed")) { |
|
303 QSettings::setValue("MaxFlickSpeed", 1.2); |
|
304 } |
|
305 |
|
306 if (!QSettings::contains("MidFlickSpeed")) { |
|
307 QSettings::setValue("MidFlickSpeed", 0.5); |
|
308 } |
|
309 |
|
310 if (!QSettings::contains("MinFlickSpeed")) { |
|
311 QSettings::setValue("MinFlickSpeed", 0.15); |
|
312 } |
|
313 |
|
314 if (!QSettings::contains("MaxFlickInViewportUnits")) { |
|
315 QSettings::setValue("MaxFlickInViewportUnits", 0.7); |
|
316 } |
|
317 if (!QSettings::contains("MidFlickInViewportUnits")) { |
|
318 QSettings::setValue("MidFlickInViewportUnits", 0.4); |
|
319 } |
|
320 if (!QSettings::contains("MinFlickInViewportUnits")) { |
|
321 QSettings::setValue("MinFlickInViewportUnits", 0.2); |
|
322 } |
|
323 |
|
324 if (!QSettings::contains("MaxFlickDuration")) { |
|
325 QSettings::setValue("MaxFlickDuration", 1000); |
|
326 } |
|
327 if (!QSettings::contains("MidFlickDuration")) { |
|
328 QSettings::setValue("MidFlickDuration", 800); |
|
329 } |
|
330 if (!QSettings::contains("MinFlickDuration")) { |
|
331 QSettings::setValue("MinFlickDuration", 500); |
|
332 } |
|
333 if (!QSettings::contains("ScrollOvershoot")) { |
|
334 QSettings::setValue("ScrollOvershoot", 1.70158); |
|
335 } |
|
336 } |
|
337 |
|
338 void BedrockProvisioning::initTilingParams() |
|
339 { |
|
340 if (!QSettings::contains("EnableTiling")) { |
|
341 QSettings::setValue("EnableTiling", 1); |
|
342 } |
|
343 if (!QSettings::contains("TilesWidth")) { |
|
344 QSettings::setValue("TilesWidth", 256); |
|
345 } |
|
346 if (!QSettings::contains("TilesHeight")) { |
|
347 QSettings::setValue("TilesHeight", 256); |
|
348 } |
|
349 if (!QSettings::contains("TileCreationDelay")) { |
|
350 QSettings::setValue("TileCreationDelay", 50); |
|
351 } |
|
352 if (!QSettings::contains("TileCoverAreaMultiplier")) { |
|
353 QSettings::setValue("TileCoverAreaMultiplier", 2.5); |
|
354 } |
|
355 if (!QSettings::contains("TileKeepAreaMultiplier")) { |
|
356 QSettings::setValue("TileKeepAreaMultiplier", 2.5); |
|
357 } |
|
358 } |
|
359 |
|
360 void BedrockProvisioning::initGestureParams() |
|
361 { |
|
362 // Enable/disable specific gestures |
|
363 if (!QSettings::contains("GesturesEnableTap")) { |
|
364 QSettings::setValue("GesturesEnableTap", 1); |
|
365 } |
|
366 if (!QSettings::contains("GesturesEnablePan")) { |
|
367 QSettings::setValue("GesturesEnablePan", 1); |
|
368 } |
|
369 if (!QSettings::contains("GesturesEnableHover")) { |
|
370 QSettings::setValue("GesturesEnableHover", 0); |
|
371 } |
|
372 if (!QSettings::contains("GesturesEnableLeftRight")) { |
|
373 QSettings::setValue("GesturesEnableLeftRight", 1); |
|
374 } |
|
375 if (!QSettings::contains("GesturesEnableUpDown")) { |
|
376 QSettings::setValue("GesturesEnableUpDown", 1); |
|
377 } |
|
378 if (!QSettings::contains("GesturesEnableFlick")) { |
|
379 QSettings::setValue("GesturesEnableFlick", 1); |
|
380 } |
|
381 if (!QSettings::contains("GesturesEnableRelease")) { |
|
382 QSettings::setValue("GesturesEnableRelease", 1); |
|
383 } |
|
384 if (!QSettings::contains("GesturesEnableTouch")) { |
|
385 QSettings::setValue("GesturesEnableTouch", 1); |
|
386 } |
|
387 if (!QSettings::contains("GesturesEnableEdgeScroll")) { |
|
388 QSettings::setValue("GesturesEnableEdgeScroll", 0); |
|
389 } |
|
390 if (!QSettings::contains("GesturesEnableCornerZoom")) { |
|
391 QSettings::setValue("GesturesEnableCornerZoom", 0); |
|
392 } |
|
393 if (!QSettings::contains("GesturesEnablePinch")) { |
|
394 QSettings::setValue("GesturesEnablePinch", 1); |
|
395 } |
|
396 if (!QSettings::contains("GesturesEnableLongPress")) { |
|
397 QSettings::setValue("GesturesEnableLongPress", 1); |
|
398 } |
|
399 if (!QSettings::contains("GesturesEnableUnknown")) { |
|
400 QSettings::setValue("GesturesEnableUnknown", 1); |
|
401 } |
|
402 |
|
403 // General gesture settings |
|
404 if (!QSettings::contains("GesturesEnableLogging")) { |
|
405 QSettings::setValue("GesturesEnableLogging", 0); |
|
406 } |
|
407 if (!QSettings::contains("GesturesSuppressTimeout")) { |
|
408 QSettings::setValue("GesturesSuppressTimeout", 0); |
|
409 } |
|
410 if (!QSettings::contains("GesturesMoveSuppressTimeout")) { |
|
411 QSettings::setValue("GesturesMoveSuppressTimeout", 0); |
|
412 } |
|
413 if (!QSettings::contains("GesturesCapacitiveUpUsed")) { |
|
414 #ifdef ADVANCED_POINTER_EVENTS |
|
415 QSettings::setValue("GesturesCapacitiveUpUsed", 1); |
|
416 #else |
|
417 QSettings::setValue("GesturesCapacitiveUpUsed", 0); |
|
418 #endif |
|
419 } |
|
420 if (!QSettings::contains("GesturesAdjustYPos")) { |
|
421 #ifdef ADVANCED_POINTER_EVENTS |
|
422 QSettings::setValue("GesturesAdjustYPos", 0); |
|
423 #else |
|
424 QSettings::setValue("GesturesAdjustYPos", 0); |
|
425 #endif |
|
426 } |
|
427 if (!QSettings::contains("GesturesEnableFiltering")) { |
|
428 QSettings::setValue("GesturesEnableFiltering", 1); |
|
429 } |
|
430 if (!QSettings::contains("GesturesWServMessageInterception")) { |
|
431 QSettings::setValue("GesturesWServMessageInterception", 0); |
|
432 } |
|
433 |
|
434 // Individual gesture specific settings |
|
435 // Tap |
|
436 if (!QSettings::contains("GesturesDoubleTapTimeout")) { |
|
437 QSettings::setValue("GesturesDoubleTapTimeout", 600); |
|
438 } |
|
439 // Pan |
|
440 if (!QSettings::contains("GesturesPanSpeedLow")) { |
|
441 QSettings::setValue("GesturesPanSpeedLow", 5); |
|
442 } |
|
443 if (!QSettings::contains("GesturesPanSpeedHigh")) { |
|
444 QSettings::setValue("GesturesPanSpeedHigh", 50); |
|
445 } |
|
446 if (!QSettings::contains("GesturesPanDisabledWhileHovering")) { |
|
447 QSettings::setValue("GesturesPanDisabledWhileHovering", 0); |
|
448 } |
|
449 if (!QSettings::contains("GesturesMoveTolerance")) { |
|
450 QSettings::setValue("GesturesMoveTolerance", 0); |
|
451 } |
|
452 // Hover |
|
453 if (!QSettings::contains("GesturesHoverSpeed")) { |
|
454 QSettings::setValue("GesturesHoverSpeed", 0); |
|
455 } |
|
456 if (!QSettings::contains("GesturesHoverDisabledWhilePanning")) { |
|
457 QSettings::setValue("GesturesHoverDisabledWhilePanning", 0); |
|
458 } |
|
459 // Flick |
|
460 if (!QSettings::contains("GesturesFlickSpeed")) { |
|
461 QSettings::setValue("GesturesFlickSpeed", 35); |
|
462 } |
|
463 // EdgeScroll |
|
464 if (!QSettings::contains("GesturesEdgeScrollRange")) { |
|
465 QSettings::setValue("GesturesEdgeScrollRange", 20); |
|
466 } |
|
467 // CornerZoom |
|
468 if (!QSettings::contains("GesturesZoomCornerSize")) { |
|
469 QSettings::setValue("GesturesZoomCornerSize", 7); |
|
470 } |
|
471 // Area settings |
|
472 if (!QSettings::contains("GesturesTouchAreaShape")) { |
|
473 QSettings::setValue("GesturesTouchAreaShape", 1); |
|
474 } |
|
475 if (!QSettings::contains("GesturesTouchAreaTimeout")) { |
|
476 QSettings::setValue("GesturesTouchAreaTimeout", 50); |
|
477 } |
|
478 if (!QSettings::contains("GesturesTouchAreaWidth")) { |
|
479 QSettings::setValue("GesturesTouchAreaWidth", 7); |
|
480 } |
|
481 if (!QSettings::contains("GesturesTouchAreaHeight")) { |
|
482 QSettings::setValue("GesturesTouchAreaHeight", 7); |
|
483 } |
|
484 if (!QSettings::contains("GesturesTimeAreaShape")) { |
|
485 QSettings::setValue("GesturesTimeAreaShape", 1); |
|
486 } |
|
487 if (!QSettings::contains("GesturesTimeAreaTimeout")) { |
|
488 QSettings::setValue("GesturesTimeAreaTimeout", 0); |
|
489 } |
|
490 if (!QSettings::contains("GesturesTimeAreaWidth")) { |
|
491 QSettings::setValue("GesturesTimeAreaWidth", 11); |
|
492 } |
|
493 if (!QSettings::contains("GesturesTimeAreaHeight")) { |
|
494 QSettings::setValue("GesturesTimeAreaHeight", 11); |
|
495 } |
|
496 if (!QSettings::contains("GesturesHoldAreaShape")) { |
|
497 QSettings::setValue("GesturesHoldAreaShape", 1); |
|
498 } |
|
499 if (!QSettings::contains("GesturesHoldAreaTimeout")) { |
|
500 QSettings::setValue("GesturesHoldAreaTimeout", 1000); |
|
501 } |
|
502 if (!QSettings::contains("GesturesHoldAreaWidth")) { |
|
503 QSettings::setValue("GesturesHoldAreaWidth", 7); |
|
504 } |
|
505 if (!QSettings::contains("GesturesHoldAreaHeight")) { |
|
506 QSettings::setValue("GesturesHoldAreaHeight", 7); |
|
507 } |
|
508 if (!QSettings::contains("GesturesAxisLockThreshold")) { |
|
509 QSettings::setValue("GesturesAxisLockThreshold", 0.5); |
|
510 } |
|
511 |
|
512 if (!QSettings::contains("EnableGestures")) { |
|
513 QSettings::setValue("EnableGestures", 1); |
|
514 } |
261 } |
515 } |
262 |
516 |
263 |
517 |
264 QString BedrockProvisioning::valueAsString(const QString &key, const QVariant &defaultValue) |
518 QString BedrockProvisioning::valueAsString(const QString &key, const QVariant &defaultValue) |
265 { |
519 { |