BMW lets the 7 Series be straight

‘, e.appendChild (e.resizeSensor), e.resizeSensor.offsetParent! == e && (e.style.position = “relative”); var r, s, d, a, l = e.resizeSensor.childNodes [0 ], c = l.childNodes [0], u = e.resizeSensor.childNodes [1], h = e.offsetWidth, f = e.offsetHeight, m ​​= function () {c.style.width = “100000px”, c.style.height = “100000px”, l.scrollLeft = 1e5, l.scrollTop = 1e5, u.scrollLeft = 1e5, u.scrollTop = 1e5}; m (); var p = function () {s = 0, r && (h = d, f = a, e.resizedAttached && e.resizedAttached.call ())}, v = function () {d = e.offsetWidth, a = e.offsetHeight, (r = d! = h || a ! = f) &&! s && (s = t (p)), m ()}, y = function (e, t, n) {e.attachEvent? e.attachEvent (“on” + t, n): e .addEventListener (t, n)}; y (l, “scroll”, v), y (u, “scroll”, v)}} (e, o)}), this.detach = function (e) {n .detach (i, e)}}; return n.detach = function (t, n) {e (t, function (e) {e && (e.resizedAttached && “function” == typeof n && (e.resizedAttached.remove ( n), e.resizedAttached.length ()) || e.resizeSensor && (e.contains (e.resizeSensor) && e.removeChild (e.resizeSensor), delete e.resizeSensor, delete e.resizedAttached))})}, n }), function (e, t) {“function” == typeof define && def ine.amd? define ([“./ ResizeSensor.js”], t): “object” == typeof exports? module.exports = t (require (“./ ResizeSensor.js”)) 🙁 e.ElementQueries = t (e.ResizeSensor), e.ElementQueries.listen ())} (“undefined”! = typeof window? window: this, function (e) {var t = function () {function n (e) {e || (e = document.documentElement); var t = window.getComputedStyle (e, null) .fontSize; return parseFloat (t) || 16} function i (e, t) {var i = t.split (/ d / ), o = i [i.length-1]; switch (t = parseFloat (t), o) {case “px”: return t; case “em”: return t * n (e); case “rem” : return t * n (); case “vw”: return t * document.documentElement.clientWidth / 100; case “vh”: return t * document.documentElement.clientHeight / 100; case “vmin”: case “vmax”: var r = document.documentElement.clientWidth / 100, s = document.documentElement.clientHeight / 100; return t * (0, Math [“vmin” === o? “min”: “max”]) (r, p ); default: return t}} function o (t, n) {t.elementQueriesSetupInformation? t.elementQueriesSetupInformation.addOption (n) 🙁 t.elementQueriesSetupInformation = new function (e) {this.element = e, this.options = {}; var t, n, o, r, s, d, a, l = 0, c = 0; this.addOption = function (e) {var t = [e.mode, e.property, e.value] .join (“,”); this.options [t] = e}; var u = [ “min-width”, “min-height”, “max-width”, “max-height”]; this.call = function () {for (t in l = this.element.offsetWidth, c = this.element .offsetHeight, s = {}, this.options) this.options.hasOwnProperty (t) && (n = this.options [t], o = i (this.element, n.value), r = “width” = = n.property? l: c, a = n.mode + “-” + n.property, d = “”, “min”! = n.mode || o> r || (d + = n.value), “max”! = n.mode || r> o || (d + = n.value), s [a] || (s [a] = “”), d && – 1 === (“” + s [a] + “”) .indexOf (“” + d + “”) && (s [a] + = “” + d)); for (var e in u) u.hasOwnProperty (e) && (s [u [e]]? this.element.setAttribute (u [e], s [u [e]]. substr (1)): this.element.removeAttribute (u [e]))}} (t), t. elementQueriesSetupInformation.addOption (n), t.elementQueriesSensor = new e (t, function () {t.elementQueriesSetupInformation.call ()})), t.elementQueriesSetupInformation.call (), l && c.indexOf (t) o [e]. minWidth && (n = e); if (n || (n = s), d! = n) if (a [n]) i [d] .style.display = “none”, i [n] .style. display = “block”, d = n; else {var l = new image; l.onload = function () {i [n] .src = r [n], i [d] .style.display = “none”, i [n] .style.display = “block”, a [n] =! 0, d = n}, l.src = r [n]} else i [n] .src = r [n]} var i = [], o = [], r = [], s = 0, d = -1, a = []; for (var u in t.children) if (t.children.hasOwnProperty (u) && t.children [u] .tagName && “img” === t.children [u] .tagName.toLowerCase ()) {i.push (t. children [u]); var h = t.children [u] .getAttribute (“min-width”) || t.children [u] .getAttribute (“data-min-width”), f = t.children [ u] .getAttribute (“data-src”) || t.children [u] .getAttribute (“url”); r.push (f); var m = {minWidth: h}; o.push (m), h? t.children [u] .style.display = “none” 🙁 s = i.length-1, t.children [u] .style.display = “block”)} d = s, t.resizeSensor = new e (t, n), n (), l && c.push (t)} function d (e) {var t, n, i, o, r, s; for (e = e.replace (/ ‘/ g , ‘”‘); null! == (t = h.exec (e));) for (n = t [1] + t [3], attrs = t [2]; null! == (attrMatch = f.exec (attrs));) i = n, o = attrMatch [1], r = attrMatch [2], s = attrMatch [3], void 0 === u [o] && (u [o] = {}), void 0 === u [o] [r] && (u [o] [r] = {}), void 0 === u [o] [r] [s]? u [o] [r] [s] = i: u [o] [r] [s] + = “,” + i} function a (e) {var t = “”; if (e) if (“string” == typeof e) (- 1! == (e = e.toLowerCase ()). index Of (“min-width”) || -1! == e.indexOf (“max-width”)) && d (e); else for (var n = 0, i = e.length; i> n; n ++ ) 1 === e [n] .type? -1! == (t = e [n] .selectorText || e [n] .cssText) .indexOf (“min-height”) || -1! = = t.indexOf (“max-height”)? d (t): (- 1! == t.indexOf (“min-width”) || -1! == t.indexOf (“max-width”) ) && d (t): 4 === e [n] .type? a (e [n] .cssRules || e [n] .rules): 3 === e [n] .type && a (e [n] .styleSheet.cssRules)} var l =! 1, c = [], u = {}, h = / ,? [ s t] * ([^, n] *?) ((?: [ [ s t] *? (?: min | max) – (?: width | height) [ s t] *? [~ $ ^]? = [ s t] *? “[^ “] *?” [ s t] *?]) +) ([^, n s {] *) / gim, f = / [[ s t] *? (min | max ) – (width | height) [ s t] *? [~ $ ^]? = [ s t] *? “([^”] *?) “[ s t] *?] /gim,m=!1;this.init=function(e)▶l=void 0! == e && e; for (var t = 0, n = document.styleSheets.length; n> t; t ++) try {a (document.styleSheets [t] .cssRules || document.styleSheets [t] .rules || document.styleSheets [t] .cssText)} catch (e) {if (“SecurityError”! == e.name) throw e } if (! m) {var i = document.createElement (“style”); i.type = “text / css”, i.innerHTML = “[responsive-image]> img, [data-responsive-image] { overflow: hidden; padding: 0; } [responsive-image]> img, [data-responsive-image]> img {width: 100%;} “, document.getElementsByTagName (” head “) [0] .appendChild (i), m =! 0} ( function () {var e = r (); for (var t in u) if (u.hasOwnProperty (t)) for (var n in u [t]) if (u [t] .hasOwnProperty (n)) for (var i in u [t] [n]) if (u [t] [n] .hasOwnProperty (i)) for (var s = e (u [t] [n] [i]), d = 0, a = s.length; a> d; d ++) o (s [d], {mode: t, property: n, value: i})}) (), function () {for (var e = r () (“[data-responsive-image], [responsive-image]”), t = 0, n = e.length; n> t; t ++) s (e [t])} ()}, this.update = function (e) {this.init (e)}, this.detach = function () {if (! l) throw “withTracking is not enabled. We can not detach elements since we don not store it.Use ElementQueries.withTracking = true; before domready or call ElementQueryes.update (true). “; for (var e; e = c.pop ();) t.detach (e); c = []}}; t.update = function (e) { t.instance.update (e)}, t.detach = function (e) {e.elementQueriesSetupInformation? (e.elementQueriesSensor.detach (), delete e.elementQueriesSetupInformation, delete e.elementQueriesSensor): e.resizeSensor && (e.resizeSensor .detach (), delete e.resizeSensor)}, t.withTracking =! 1, t.init = function () {t.instance || (t.instance = new t), t.instance.init (t.withTracking )}; return t.listen = function () {! function (e) {if (document.addEventListener) document.addEventListener (“DOMContentLoaded”, e,! 1); else if (/ KHTML | WebKit | iCab / i. test (navigator.userAgent)) var t = setInterval (function () {/ loaded | complete / i.test (document.readyState) && (e (), clearInterval (t))}, 10); else window.onload = e} (t.init)}, t})

Always up to date You have mail! Subscribe to our FAZ.NET newsletter and we will deliver the most important news directly to your mailbox.
An error has occurred. Please try again.

Thank you for your interest in the F.A.Z.letters. You will receive an email in a few minutes to confirm your newsletter order.

Go to source