The Invisible Lifetime of Addie LaRue by V.E. Schwab, reviewed.

Photo illustration by Slate. Image by Tor Books.

I have never met anyone like Addie LaRue. Actually, no one has. The main character of V.E. Schwab’s new book, The Invisible Life of Addie LaRue, makes a deal with the devil for immortality, but it comes with a curse: No one will ever remember her, so she can never “meet” anyone. Still, it’s rare to encounter a character as stunningly, fiercely written as Addie as she grows and changes over a span of 300 years. She is a high wire act of a character in a high wire act of a story, neither of which—despite the devil’s best efforts—I am likely to forget.

The Invisible Life of Addie LaRue marks the sixth adult novel for New York Times–bestselling author Schwab, who has also written nearly a dozen YA and middle-grade books, on top of some comics and short stories. I’ve loved Schwab’s work ever since I devoured her Shades of Magic series, a riveting fantasy about four magical, parallel Londons and the adventures of the rare race of magicians who can travel between them. Shades’ gorgeous writing, her knack for world building, and her ability to balance action with deeply drawn characterization and relationships made the series resonate with me like no other books have.

The best of movies, TV, books, music, and more, delivered to your inbox three times a week.

I am pleased to say that much of what has made Schwab’s previous work so successful can also be found in The Invisible Life of Addie LaRue. Addie’s story begins in 1714, when 23-year-old Adeline LaRue, a young woman whose dreams surpass the boundaries of her small French town, flees into the woods to escape an unwanted marriage. There Adeline makes a deal with a dark god who promises a life with more time and freedom in exchange for Addie’s soul when she decides she is done living. The undisclosed catch, which Addie discovers too late, is that no one will ever remember her. She can leave no explicit trace, record, or product of herself behind: a life free of constraints, but also free of connection.

The book begins with Addie in New York City in the mid-2010s and cuts to flashbacks across three centuries’ worth of her exploits across continents. Along the way, an unlikely relationship unfolds between Addie and the devil (sometimes called “the darkness” or “Luc”) who cursed her, both her archenemy and her sole companion. But in New York, Addie’s life is forever altered yet again when she meets a mysterious young man named Henry Strauss who, somehow, remembers her.

Addie incorporates many of Schwab’s oft-explored themes, including the transformative effects of intense personal bonds and the relationship between life and death (and those who exist somewhere in between them). As was particularly notable in Shades, her characters are “queer unless stated otherwise,” even more of a rarity in Addie given its historical elements. But the scope of Addie is unlike anything Schwab has written before—epic yet intimate, sweeping but not sprawling. I often found myself wondering how various aspects of the book might translate cinematically, like how exactly the shadowy Luc might look in his chosen human-imitative form of “less a man than a collection of features”—a query that will be answered thanks to an already announced big-screen adaptation.

  1. Jim Carrey’s Joe Biden Was Nearly Unwatchable

  2. The Absolute Best Way to Cook Chicken Thighs, According to So Many Tests

  3. What’s Fact and What’s Fiction in The Good Lord Bird

  4. Jimmy Butler Says No One Works Harder Than Jimmy Butler. Jimmy Butler Is Correct.

Because Addie covers so much ground, it can be disappointing when stories are hinted at but never manifest (do I need to keep an eye out for her quickly mentioned time in Prague?), and one wonders why we hear so little about any travels the insatiably curious Addie makes beyond Europe and North America. But though Addie’s world may be vast, it is depicted with careful attention to detail, like the changes in her vocabulary that subtly signal time’s passage. (She describes a “head full of muslin” on a sleepy morning in 1806, but by 1899, Addie and other characters use the more popularized “cotton” when describing similar sensations.) Schwab uses Addie’s broad setting less as a destination in and of itself and more as a means to explore the ramifications of Addie’s deal as she engineers a life within its confines and ekes out semblances of belonging, no matter how transient. Addie manipulates her curse to help her steal and spy and learns to leave traces of herself behind in art and ideas throughout history, her contributions anonymous but visible nonetheless.

It’s that particular aspect of The Invisible Life of Addie LaRue that keeps looping through my head in these days of the pandemic. Addie does not say much about physical illness, but it has a lot to say about how connection and love are always possible even in the face of isolation, how we inevitably leave our mark in the world and on the people who cross our paths, even in the unlikeliest or most fleeting of circumstances. It is easy to feel that in the absence of traditional, tangible moments of connection, no such connection could exist, no mark can be made. And yet, as an acquaintance advises Addie, “there are many ways to matter.” If Addie shows anything, it’s that the impact of our actions and interactions can be vaster and longer-lasting than we can predict. Much like the seven freckles that sprinkle Addie’s face, we create our own constellations, and as we live through these darkened days, I feel brighter for having added Addie to mine.

A black book cover with thin, yellow lettering: The Invisible Life of Addie LaRue. Seven scattered stars are connected, forming a constellation.

By V.E. Schwab. Tor Books.

element for the amplitude component,
* hit the Amplitude APlog the page view.
* This function calls itself up to RETRY_LIMIT times
* with a RETRY_DELAY delay, because the device ID isn’t
* available right away.
*
* If the device ID isn’t found after RETRY_LIMIT times,
* then log the page view without the device ID.
*
* @param {Element} el
* @param {int|undefined} attemptCount // defaults to 0
*/
// find a component by classname and verify the data-uri matches
// returns the component element, or `undefined` if it can’t be found or verified

function findComponent(name) {
var component = document.body.querySelector(“.” + name);

if (component) {
var uri = component.dataset.uri;

if (uri && uri.split(“/”)[2] === name) {
return component;
}
}
}

function getLayoutBreakpoint(viewportWidth) {
// see app/global/scss/settings/_units.scss#L1
var breakpoints = [[“sm”, 320], [“md”, 768], [“lg”, 1024], [“xl”, 1440]];
var i = breakpoints.length;

while (i–) {
if (viewportWidth >= breakpoints[i][1]) return breakpoints[i][0];
}

return breakpoints[0][0];
}

function logPageView(instance, el, mpvCookie) {
var pageviewProperties = slateAmplitude.getDomEventData(el);
pageviewProperties.search = window.location.search;
pageviewProperties.amplitude_id = instance.options ? instance.options.deviceId : “no options – no deviceId”;
pageviewProperties.viewportWidth = document.documentElement.clientWidth;
pageviewProperties.layoutBreakpoint = getLayoutBreakpoint(pageviewProperties.viewportWidth);
var membershipType = getUserMembershipType();

if (membershipType) {
pageviewProperties.plan = membershipType;
}

if (loginId) {
pageviewProperties.signed_in_uuid = loginId;
}

pageviewProperties.taboola_loaded = castAsAmplitudeBool(isTaboolaLoaded());
pageviewProperties.taboola_eligible = castAsAmplitudeBool(isTaboolaEligible());

if (window.Scroll && Scroll.config.detected) {
pageviewProperties.isScrollUser = true;
}
/* In case session api errors out */

pageviewProperties.visitstart = castAsAmplitudeBool(isVisitStart());

try {
pageviewProperties.adBlocker = castAsAmplitudeBool(isAbEnabled());
} catch (e) {
console.error(e);
}

if (!isNaN(mpvCookie.pv)) {
pageviewProperties.Nth_pageview = mpvCookie.pv + “”;
} // add event properties to help measure effectiveness of affiliate and product links

if (getAffiliateLinks().length > 0) {
pageviewProperties[“Affiliate Link”] = “✅”;
}

var product = findComponent(“product”);

if (product) {
pageviewProperties[“Product Component”] = “✅”;
} // event properties to measure the effectiveness of newsletter signups

var newsletterSignup = findComponent(“newsletter-signup”);
pageviewProperties[“Includes Newsletter Signup”] = castAsAmplitudeBool(newsletterSignup);

if (newsletterSignup) {
pageviewProperties[“Newsletter Signup Placement”] = “In Content”; // eventually there will be other values for this
} // event properties to measure the effectiveness of slate plus button

var slatePlusButtonComponent = findComponent(“slate-plus-button”);

if (slatePlusButtonComponent) {
var slatePlusButton = slatePlusButtonComponent.querySelector(“.slate-plus-button__basic”);

if (slatePlusButton) {
pageviewProperties[“Slate Plus Button Component”] = slatePlusButton.innerText;
}
}

var roadblock = !membershipType && findComponent(“slate-roadblock”);
pageviewProperties[“Includes Slate Plus Roadblock”] = castAsAmplitudeBool(roadblock);
var headerPromo = findComponent(“header-promo”);

if (headerPromo) {
pageviewProperties[“Includes Header Promo”] = “TRUE”;
}

slateAmplitude.page(pageviewProperties); // after the pageview was logged, trim the “via” from the url to prevent users from sharing it

via.removeFromLocation();
}

function setMemberStatusUserProp(userProps) {
var membershipType = getUserMembershipType();

if (membershipType) {
userProps.plan = membershipType;
}
}

function setUserLoginId(userProps) {
if (loginId) {
userProps.signed_in_uuid = loginId;
}
}

function setScrollUserProp(userProps) {
var isScrollUser = window.Scroll && Scroll.config.detected;

if (isScrollUser) {
userProps.scrollUser = isScrollUser;
}
}

function setABUserProp(userProps) {
var abCookie = Cookies.get(“AB”); // sanitize the cookie

userProps.abTest = isValidAbTestString(abCookie) ? abCookie : “0”;
}

function trackEndOfArticle() {
var parahTombstone = document.querySelector(“.slate-paragraph–tombstone”);

if (!parahTombstone) {
return;
} //makes sure tracking is only sent once because of throttling

var trackSent = _once(function () {
slateAmplitude.track(“Completed article”);
slatePermutive.track(“ArticleCompletion”);
document.removeEventListener(“scroll”, trackScrolling);
});

var trackScrolling = _throttle(function () {
var scrollY = “scrollY” in window ? window.scrollY : window.pageYOffset; // non-standard prop for IE11

if (parahTombstone.offsetTop + parahTombstone.offsetHeight 0) {
window.permutive.identify(identities);
}

permutive.consent({
opt_in: consent,
token: consentTokenName
});
permutive.addon(“web”, window.slatePermutiveData);
var elem = document.createElement(“script”);
elem.src = “https://cdn.permutive.com/” + el.dataset.permutiveProjectId + “-web.js”;
elem.defer = true;
var scpt = document.getElementsByTagName(“script”)[0];
scpt.parentNode.insertBefore(elem, scpt);
return true;
},
updateConsentFunc: function updateConsentFunc(consent) {
if (permutive) {
try {
var currentConsent = JSON.parse(localStorage[“permutive-consent”]).opt_in;

if (currentConsent != consent) {
permutive.consent({
opt_in: consent,
token: consentTokenName
});
}
} catch (e) {
permutive.consent({
opt_in: consent,
token: consentTokenName
});
}
}
}
});
permutive.ready(function () {
// Amplitude is loaded later, so we have to queue our identify call
window.slateAmplitudeQueue.push(function () {
var permutiveIdentities = [];

if (permutive.context) {
permutiveIdentities.push({
tag: “puid”,
id: permutive.context.user_id
});
}

try {
var amplitudeId = window.amplitude.getInstance().options.deviceId;

if (amplitudeId) {
permutiveIdentities.push({
tag: “amplitudeId”,
id: amplitudeId
});
}
} catch (e) {
console.error(“Error setting amplitudeId”, e);
}

if (permutiveIdentities.length > 0) {
permutive.identify(permutiveIdentities);
}
});
});
};
}, {}];
window.modules[“piano.client”] = [function(require,module,exports){“use strict”;

var slateAmplitude = require(1);

var _require = require(42),
getMorgioniProps = _require.getMorgioniProps,
setMorgioniProps = _require.setMorgioniProps;

var cookies = require(43); // tp implicit global variable initialization –
// this differs from their docs, our scripts do not run in the global context,
// and the global tp object gets replaced on init so the variable reference becomes wrong

if (!window.tp) window.tp = [];
var tp = window.tp; // this bit could turn out to be useful if we need to do anything with the hydrated tp object
// tp.push([“init”, () => void (tp = window.tp)]); // re-assign local variable after init
// todo: is it ok to run this after tp init?

try {
var articleData = slateAmplitude.getDomEventData(); // The content published date

tp.push([“setContentCreated”, articleData.pub_date]); // The content author -only one is allowed according to their docs..

tp.push([“setContentAuthor”, articleData.authors.join(“,”)]); // The content section – or should we use the rubric?

tp.push([“setContentSection”, articleData.section]); // Add custom variables as any key-value pair. The first parameter is the key; second is the value

tp.push([“setCustomVariable”https://slate.com/culture/2020/10/,”contentRubric”, articleData.rubric]); // The content tags

tp.push([“setTags”, articleData.tags]);
} catch (e) {
console.error(e);
} // If the content is native advertising
// tp.push([“setContentIsNative”, false]);
// The custom params
// todo: what is this and how does it differ from a custom variable
// tp.push([“setCustomParam”https://slate.com/culture/2020/10/,”type”https://slate.com/culture/2020/10/,”premium”https://slate.com/culture/2020/10/,”content”]);
// The AAM Zone
// tp.push([“setZone”https://slate.com/culture/2020/10/,”Web”]);

tp.push([“setUsePianoIdUserProvider”, true]);
tp.push([“init”, function () {
var tp = window.tp; // fuuuuuuck
// I hate this

tp.amplitude = slateAmplitude;
tp.morgioni = {
getMorgioniProps: getMorgioniProps,
setMorgioniProps: setMorgioniProps
}; // Called by Piano Composer

tp.fireAmplitude = function (event) {
tp.morgioni.setMorgioniProps();
var eventProps = tp.morgioni.getMorgioniProps();
slateAmplitude.track(event, eventProps);
};

tp.pianoId.init({
loginSuccess: function loginSuccess() {
if (!cookies.get(“sp_secure_id”)) {
var myslateUrl = document.documentElement.dataset.myslateurl; // set sp_secure_id cookie and splus cookie for members

fetch(“”.concat(myslateUrl, “/membership/verify/”), {
credentials: “include”
}); // see slate-comments/client.js for lf_secure_login_id
}
},
loggedOut: function loggedOut() {
// these cookies are set by myslate and we don’t know what domain the cookie is on
[“.local.dev.slate.com”https://slate.com/culture/2020/10/,”.dev.slate.com”https://slate.com/culture/2020/10/,”.stage.slate.com”https://slate.com/culture/2020/10/,”.slate.com”].forEach(function (d) {
[“splus”https://slate.com/culture/2020/10/,”sp_secure_id”https://slate.com/culture/2020/10/,”lf_secure_login_id”].forEach(function (c) {
cookies.remove(c, {
domain: d
});
});
});

try {
for (var i = 0; i < localStorage.length; i++) { if (localStorage.key(i).indexOf("fyre") > -1) {
localStorage.removeItem(localStorage.key(i));
}
}
} catch (e) {// do nothing, if an exception is thrown accessing cookies or storage,
// then we probably never had anything stored in the first place
}
}
});
}]);
}, {“1″:1,”42″:42,”43”:43}];
window.modules[“adblock-message.client”] = [function(require,module,exports){“use strict”;

var membership = require(3),
isMember = membership.isMember(),
isAbEnabled = require(2).isAbEnabled,
slateAmplitude = require(1);

DS.controller(“adblock-message”, [function () {
var Constructor;
/**
* @param {Element} el
* @constructor
* @property {Element} el
*/

Constructor = function Constructor(el) {
this.el = el;
this.message = el.querySelector(“.adblock-message__content”); // it’s not in the spec but in practice browsers may raise exceptions for “getItem”

try {
// using `var` to set this in the function scope
var pageView = localStorage.pageview || 0;
} catch (e) {
return; // we can’t access storage to keep track of pageviews, bail out
}

function setPageViewCookie(count) {
try {
localStorage.pageview = count;
} catch (e) {// swallow the error, users may disable storage access after the component is constructed
}
}

function isActivePageView() {
return (pageView – 2) % 3 === 0;
}
/**
* Set and increment pageview cookie on page load
*/

window.addEventListener(“load”, function () {
pageView++;
setPageViewCookie(pageView);
});
/**
* Check conditions for displaying the adblock message
*/

var _this = this;

window.setTimeout(function () {
var adblockEnabled = isAbEnabled(),
activeView = isActivePageView();

if (!isMember && adblockEnabled && activeView) {
_this.showMessage();
}
}, 1000);
/**
* Close the ad message if user clicks outside of the message container
*/

document.body.addEventListener(“click”, function (e) {
if (_this.messageIsVisible()) {
if (!_this.message.contains(e.target)) {
_this.hideMessage();
}
}
});
document.addEventListener(“keyup”, function (e) {
if (_this.messageIsVisible() && (e.key === “Escape” || e.key === “Esc”)) {
_this.hideMessage();
}
});
};

Constructor.prototype = {
events: {
“.js-message-close click”: “hideMessage”,
“.js-message-button click”: “buttonAnalytics”
},
messageIsVisible: function messageIsVisible() {
return document.body.classList.contains(“adblock-enabled”);
},
showMessage: function showMessage() {
document.body.classList.add(“adblock-enabled”);
slateAmplitude.track(“Adblocker – View Overlay”);
},
hideMessage: function hideMessage(e) {
document.body.classList.remove(“adblock-enabled”);
},
buttonAnalytics: function buttonAnalytics(e) {
var button = e.target,
buttonEvent = button.text;
slateAmplitude.track(“Adblocker – Click ” + buttonEvent);
}
};
return Constructor;
}]);
}, {“1″:1,”2″:2,”3”:3}];
window.modules[“webapp-serviceworker.client”] = [function(require,module,exports){“use strict”;

(function () {
“use strict”;

if (!navigator.serviceWorker) {
return;
} // Temp patch on issue that affected ads. This is not permanent business logic.
// https://github.com/slategroup/slate-redux/issues/3212

if (navigator.vendor === “Apple Computer, Inc.”) {
navigator.serviceWorker.getRegistrations().then(function (registrations) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;

try {
for (var _iterator = registrations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var reg = _step.value;
var valid = reg && reg.active && reg.active.scriptURL;

if (valid && reg.active.scriptURL.indexOf(“sw.js”) > -1) {
console.log(“removing serviceworker”);
reg.unregister();
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
});
return;
}

var slateAmplitude = require(1);

window.addEventListener(“load”, function () {
navigator.serviceWorker.register(“/sw.js”).then(function (registration) {// Registration was successful
}, function (err) {
// registration failed 🙁
console.error(“ServiceWorker registration failed: “, err);
});
}); // via https://developers.google.com/web/fundamentals/app-install-banners/

window.addEventListener(“beforeinstallprompt”, function (e) {
e.userChoice.then(function (choiceResult) {
if (choiceResult.outcome === “dismissed”) {
slateAmplitude.track(“PWA – dismissed install prompt”);
} else {
slateAmplitude.track(“PWA – Added to Home Screen”);
}
});
});
})();
}, {“1”:1}];
window.modules[“amazon-oneclick.client”] = [function(require,module,exports){“use strict”;

module.exports = function (el) {
window.nonIabVendorApi.registerVendor(“amazon-oneclick”, {
categories: [“C0004”],
initFunc: function initFunc(consent) {
if (!consent) return;
var elem = document.createElement(“script”);
elem.src = “https://z-na.amazon-adsystem.com/widgets/onejs?MarketPlace=US&adInstanceId=797217ac-ca6e-482f-8925-4c302e9c855c”;
elem.defer = true;
elem.type = “text/javascript”;
var scpt = document.getElementsByTagName(“script”)[0];
scpt.parentNode.insertBefore(elem, scpt);
},
updateConsentFunc: function updateConsentFunc(consent) {
if (!consent) {// not much we can do here. the script already ran.
}
}
});
};
}, {}];
window.modules[“aaa-module-mounting.legacy”] = [function(require,module,exports){‘use strict’; // blame somebody else for this shit: https://github.com/nymag/sites/blame/master/global/js/aaa-module-mounting.js
// Note: this mounts before all client.js files, so legacy client controllers may call DS.controller()
// it also mounts before other legacy services (because of the filename) so they can call DS.service()

var eventify = require(65),
_pickBy = require(69),
_each = require(68),
DS = require(64);

var _once = require(67);

var _throttle = require(66);

var Cookies = require(43);

function registerGlobals() {
window.DS = DS;
window.Eventify = eventify; // allow these libs to be imported into Dollar Slice components

DS.value(‘Eventify’, eventify);
DS.value(‘_once’, _once);
DS.value(‘_throttle’, _throttle);
DS.value(‘Cookies’, Cookies);
DS.value(‘$document’, window.document);
DS.value(‘$window’, window);
}
/**
* Mount all Dollar Slice components.
*/

function mountDollarSliceComponents() {
// search page for components, and instantiate their controllers
DS.service(‘components’, [‘$document”https://slate.com/culture/2020/10/,”$module’, function ($document, $module) {
var controllers = _pickBy($module.definitions, function (definition) {
return definition.providerStrategy === $module.providers.controller;
}),
list = Object.keys(controllers); // for each component on the page, loop through the instances and kickoff the controller

_each(list, function (name) {
var components = $document.querySelectorAll(‘[data-uri*=”/_components/’ + name + ‘/”]’),
// matches data-uri=”/_components//instances/”
defaultComponents = $document.querySelectorAll(‘[data-uri$=”/_components/’ + name + ‘”]’); // matches data-uri=”/_components/”

_each(components, initController(name));

_each(defaultComponents, initController(name));
}); // expose list of components on the page

this.components = list;

function initController(name) {
return function (component) {
try {
$module.get(name, component);
} catch (error) {
logMountError(component, error);
}
};
}
}]); // other components might want to interact with our service, but we’ll start it here.

DS.get(‘components’);
}
/**
* Log an error mounting the client script for the specified element.
* @param {HtmlElement} el
* @param {Error} error
*/

function logMountError(el, error) {
// element tag will be the full contents of the component’s tag such as:
//
var elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(‘Error attaching controller to ‘ + elementTag, error);
} // globals (like DS) must be registered before other files call DS.service() or DS.component()

registerGlobals(); // wait until everything else has been mounted before instantiating legacy DS controllers

document.addEventListener(‘DOMContentLoaded’, function () {
mountDollarSliceComponents();
});
}, {“43″:43,”64″:64,”65″:65,”66″:66,”67″:67,”68″:68,”69”:69}];
window.modules[“ads.legacy”] = [function(require,module,exports){“use strict”;

DS.service(“adService”, [“$window”https://slate.com/culture/2020/10/,”headerBidding”https://slate.com/culture/2020/10/,”$visibility”, function ($window, headerBidding, $visibility) {
$window.googletag = $window.googletag || {}, $window.googletag.cmd = $window.googletag.cmd || [];
$window.pbjs = $window.pbjs || {};
$window.pbjs.que = $window.pbjs.que || [];
var adIndex = {},
adSlotsWithRefresh = [],
testParam = getTestParam(),
pageId = getPageId(),
slotData = [];
/**
* Checks if url query parameters contain ‘test_ads’ and returns it’s value
* @return {string}
*/

function getTestParam() {
var TEST_ADS_REGEX = /[?&]test_ads=([^&#?]+)/;
var results = TEST_ADS_REGEX.exec($window.location.search);
return results ? results[1] : “”;
}
/*
* Config GPT scripts
*/

$window.googletag.cmd.push(function () {
var pageType = document.querySelector(“.js-analytics-js-data”).getAttribute(“data-pagetype”).replace(” “https://slate.com/culture/2020/10/,”-“);
$window.googletag.pubads().disableInitialLoad();
$window.googletag.enableServices();
var cacheBustValue = Math.floor(Math.random() * 10000000000000),
cacheBustMeta = document.querySelectorAll(‘meta[name=”dfp-cache-buster”]’)[0];

if (cacheBustMeta && cacheBustMeta.content) {
cacheBustValue = cacheBustMeta.content;
}

$window.googletag.pubads().setTargeting(“dfp_cache_buster”, cacheBustValue).setTargeting(“page_id”, pageId).setTargeting(“page_type”, pageType);
var usprivacyRegex = /usprivacy=d+[YN]Y/;

if (document.cookie.match(usprivacyRegex)) {
$window.googletag.pubads().setRequestNonPersonalizedAds(1);
}

if (testParam) {
googletag.pubads().setTargeting(“kw”https://slate.com/culture/2020/10/,”test_” + testParam);
} // AB value

var ABCookie = document.cookie.match(/AB=(d+_d+)/);

if (ABCookie && ABCookie.length > 1) {
googletag.pubads().setTargeting(“ab_var”, ABCookie[1]);
}

enableAdRefresh();
});
/*
* Request ad from the DFP
*/

this.requestAd = function (ad_data) {
ad_data.defineSlot();
googletag.pubads().refresh([ad_data.gptSlot], {
changeCorrelator: false
});
};
/**
* Add refresh to some ad slots
*/

function enableAdRefresh() {
googletag.pubads().addEventListener(“slotRenderEnded”, function (event) {
var slot = event.slot;
var slotId = slot.getSlotElementId();
var slotElement = $window.document.getElementById(slotId);

if (Array.isArray(event.size) && event.size[0] && event.size[1]) {
var size = event.size[0] + “x” + event.size[1];

if (refreshEnabled(size) && !adSlotsWithRefresh[slotId]) {
updateSlotTargeting(slot);
addRefreshToSlot(slot, slotData[slotId], slotElement);
adSlotsWithRefresh[slotId] = true;
}
}
});
}
/**
* Every 20 sec check if slot is in view
* If it is, request new ad from the DFP
*/

function addRefreshToSlot(slot, ad_data, slotElement) {
var refreshInterval = 30000;
setInterval(function () {
if (adIsInView(slotElement)) {
headerBidding.prebid(ad_data, slot);
}
}, refreshInterval);
}
/**
* Removes prebid targeting
* Adds targetig for the specific height
*/

function updateSlotTargeting(slot) {
slot.clearTargeting(“hb_adid”);
slot.clearTargeting(“hb_bidder”);
slot.clearTargeting(“hb_pb”);
slot.clearTargeting(“hb_size”);
slot.setTargeting(“refresh”https://slate.com/culture/2020/10/,”yes”);
}
/**
* Checks ad’s size to make sure it’s enabled to refresh
*/

function refreshEnabled(size) {
// Nonstandard ad sizes, not allowed to refresh
var teadsSize = “2×2”,
nativeSize = “1×2”,
customSize = “1×3”,
podcastTextAdSize = “1×4”;
return size !== teadsSize && size !== nativeSize && size !== customSize && size !== podcastTextAdSize;
}
/**
* Checks if ad slot is in view and window is focused
*/

function adIsInView(slotElement) {
var windowHasFocus = $window.document.hasFocus();

if (!windowHasFocus) {
return false;
} else {
return $visibility.isElementInViewport(slotElement);
}
}
/*
* Create ad object
*/

this.createAd = function (el) {
var type = el.getAttribute(“data-type”),
prebid = el.getAttribute(“data-prebid”),
dataDfpSizes = el.getAttribute(“data-sizes”),
dataPrebidSizes = el.getAttribute(“data-prebid-sizes”),
rubiconZoneId = el.getAttribute(“data-zone-id”),
appnexusPlacementId = el.getAttribute(“data-placement-id”),
trustxId = el.getAttribute(“data-trustx-id”),
criteoZoneId = el.getAttribute(“data-criteo-id”),
indexSiteId = el.getAttribute(“data-site-id”),
tripleliftCode = el.getAttribute(“data-tl-code”);

if (!adIndex[type]) {
adIndex[type] = 1;
}

el.id = type + “-” + adIndex[type];
adIndex[type]++;
var ad = {
id: el.id,
type: type,
adUnit: getAdUnit(),
prebid: getBoolean(prebid),
dfpSizes: getSizeArray(dataDfpSizes),
prebidSizes: getSizeArray(dataPrebidSizes),
rubiconZoneId: rubiconZoneId,
appnexusPlacementId: appnexusPlacementId,
trustxId: trustxId,
criteoZoneId: criteoZoneId,
indexSiteId: indexSiteId,
tripleliftCode: tripleliftCode,
gptSlot: null,
defineSlot: function defineSlot() {
this.gptSlot = $window.googletag.defineSlot(this.adUnit, this.dfpSizes, this.id);
slotData[this.id] = this;
this.gptSlot.addService(googletag.pubads()); // slot level targeting

this.gptSlot.setTargeting(“site”https://slate.com/culture/2020/10/,”redux”);
this.gptSlot.setTargeting(“refresh”https://slate.com/culture/2020/10/,”no”);
this.gptSlot.setTargeting(“pos”, this.id);
$window.googletag.display(this.id);
}
};
return ad;
};
/**
* Converts “true” / “false” strings to boolean
* @param {string} value
* @returns {boolean}
*/

function getBoolean(value) {
return value === “true” ? true : false;
}
/**
* Returns sizes as an array
* @param {string} sizes
* @returns {array}
*/

function getSizeArray(sizes) {
var sizesArray = [];

if (sizes && sizes.length) {
sizes = sizes.split(“,”);
sizes.map(function (size) {
size = size.split(“x”);
var w = parseInt(size[0]);
var h = parseInt(size[1]);
sizesArray.push([w, h]);
});
}

return sizesArray;
}
/**
* Returns ad node
* @returns {string}
*/

function getAdNode() {
var adNodeElement = document.querySelector(“div[data-adnode]”),
adNode = “”;

if (adNodeElement) {
adNode = adNodeElement.getAttribute(“data-adnode”);
}

return adNode;
}
/**
* Returns DFP ad unit
* @returns {string}
*/

function getAdUnit() {
var networkCode = “91898098”,
platform = “slate.com”,
adNode = getAdNode();
return networkCode + “/” + platform + “/” + adNode;
}
/**
* Returns page id
* @returns {string}
*/

function getPageId() {
var html = window.document.documentElement,
dataUri = html.getAttribute(“data-uri”),
pageId = dataUri.split(“/”)[2].replace(“@published”https://slate.com/culture/2020/10/,””);
return pageId;
}
}]);
}, {}];
window.modules[“headerbidding.legacy”] = [function(require,module,exports){“use strict”;

DS.service(“headerBidding”, function () {
var adData,
permutiveData = getPermutiveData(),
isMember = require(3).isMember(),
HARD_TIMEOUT = 1500; // max amount of time ad calls are delayed for headerbidding

this.prebid = function (data) {
adData = data;
adData.biddersManager = {
adserverRequestSent: false,
prebid: false,
amazon: false
};

var _self = this;

window.slateCMP.TCF.ready.then(function (tcData) {
_self.requestBidsFromExchanges.call(_self);
}); // header bidding has a fixed amount of time to finish
// after that we call ad server

setTimeout(function () {
googletag.cmd.push(function () {
defineGptSlot(adData);
callAdServer(adData);
});
}, HARD_TIMEOUT);
}; // Request bids from the exchanges

this.requestBidsFromExchanges = function () {
this.getBidsFromPrebidExchanges();
this.getBidsFromAmazon();
}; // get bids from all prebid partners

this.getBidsFromPrebidExchanges = function () {
var prebidAdUnit = this.createPrebidAdUnit();
pbjs.que.push(function () {
pbjs.addAdUnits([prebidAdUnit]); // cache a reference to the ad data at this time,
// before we re-assign those variable names when we run auctions for other ad units

var data = adData;
pbjs.requestBids({
adUnitCodes: [adData.id],
bidsBackHandler: function bidsBackHandler() {
googletag.cmd.push(function () {
pbjs.que.push(function () {
// gpt slot must be defined before bids are set
defineGptSlot(data);
pbjs.setTargetingForGPTAsync([data.id]); // add winning bid to the ad slot

pbjs.removeAdUnit(data.id); // remove ad unit from prebid

data.biddersManager.prebid = true; // mark prebid as done

bidderFinished(data);
});
});
}
});
});
}; // get bids from amazon

this.getBidsFromAmazon = function () {
var apsAdUnit = this.createApsAdUnit(),
prebidTimeout = pbjs.getConfig(“bidderTimeout”),
timeout = prebidTimeout ? prebidTimeout : 800,
// cache a reference to the ad data at this time,
// before we re-assign those variable names when we run auctions for other ad units
data = adData;

if (apstag) {
apstag.fetchBids({
slots: [apsAdUnit],
timeout: timeout
}, function (bids) {
googletag.cmd.push(function () {
// gpt slot must be defined before bids are set
defineGptSlot(data);
apstag.setDisplayBids();
data.biddersManager.amazon = true; // mark amazon as done

bidderFinished(data);
});
});
}
}; // check if both prebid and amazon are done
// and if the ad server request hasn’t been sent yet

function bidderFinished(data) {
if (data.biddersManager.amazon && data.biddersManager.prebid) {
callAdServer(data);
}
} // call ad server

function callAdServer(data) {
if (data.biddersManager.adserverRequestSent) {
return;
}

data.biddersManager.adserverRequestSent = true;
googletag.cmd.push(function () {
googletag.pubads().refresh([data.gptSlot], {
changeCorrelator: false
}); // send request to the dfp
});
} // gpt slot is defined here, after header bidding, because we don’t
// want to delay header bidding until gpt is ready
// this function will be called from amazon callback, prebid callback and after timeout
// slot will be defined just once

function defineGptSlot(data) {
// check if gpt slot has been already defined
if (!data.gptSlot) {
data.defineSlot();
}
} // Returns prebid ad unit

this.createPrebidAdUnit = function () {
var outstreamMediaType = {
context: “outstream”,
playerSize: [444, 250]
};
var bannerMediaType = {
sizes: adData.prebidSizes
};
var adUnit = {
code: adData.id,
mediaTypes: {
banner: bannerMediaType
},
bids: this.getBidders()
}; // add outstream configs if outstream is enabled for this slot

if (this.outstreamEnabled(adData.type)) {
adUnit.mediaTypes.video = outstreamMediaType;
}

return adUnit;
}; // returns an array of bidders to call
// bidders are added in the order they will be called by prebid

this.getBidders = function () {
var isMobile = window.innerWidth < 768, isMobileLeaderboard = adData.type === "leaderboard-mobile", bidders = []; if (this.outstreamEnabled(adData.type)) { bidders.push(this.teads()); } bidders.push(this.appnexus()); bidders.push(this.triplelift()); // kargo is a mobile only partner if (isMobile) { if (!isMobileLeaderboard) { // if this isn't mobile leaderboard kargo can be added bidders.push(this.kargo()); } else if (!isMember) { // kargo uses mobile leaderboard to server sticky ads // we don't want to show sticky ads to slate plus users // therefore if this is mobile leaderboard, include kargo // only if this isn't slate plus user bidders.push(this.kargo()); } } bidders.push(this.rubicon()); // do not include index in prebid for EU users if (!this.isEuUser()) { // index exchange needs one bid per size for (var i = 0; i < adData.prebidSizes.length; i++) { var size = adData.prebidSizes[i]; var indexBidForSize = this.index(size); bidders.push(indexBidForSize); } } bidders.push(this.trustx()); bidders.push(this.criteo()); return bidders; }; // Returns ad unit for amazon publisher service this.createApsAdUnit = function () { return { slotID: adData.id, slotName: adData.adUnit, sizes: adData.prebidSizes }; }; // Returns data for appnexus bid request this.appnexus = function () { return { bidder: "appnexusAst", params: { placementId: adData.appnexusPlacementId, keywords: { permutive: permutiveData } } }; }; // Returns data for rubicon bid request this.rubicon = function () { return { bidder: "rubicon", params: { accountId: "13590", siteId: "60302", zoneId: adData.rubiconZoneId } }; }; // Returns data for trustx bid request this.trustx = function () { return { bidder: "trustx", params: { uid: adData.trustxId } }; }; this.criteo = function () { return { bidder: "criteo", params: { zoneId: adData.criteoZoneId } }; }; // Returns data for index bid request this.index = function (size) { return { bidder: "ix", params: { siteId: adData.indexSiteId, size: size } }; }; this.kargo = function () { var placementId = adData.type === "leaderboard-mobile" ? "_mBJrAZ6WvF" : "_uG77kNNswo"; return { bidder: "kargo", params: { placementId: placementId } }; }; this.triplelift = function () { return { bidder: "triplelift", params: { inventoryCode: adData.tripleliftCode } }; }; this.teads = function () { var teadsData = getTeadsData(); return { bidder: "teads", params: { pageId: teadsData.pageId, placementId: teadsData.placementId } }; }; // outstream is enabled only for some in-article slots // slate plus members are excluded this.outstreamEnabled = function (type) { var outstreamEnabledTypes = ["mid-article-spot"https://slate.com/culture/2020/10/,"mid-article-spot-tablet"https://slate.com/culture/2020/10/,"mid-article-spot-mobile"], isOutstreamSlot = outstreamEnabledTypes.includes(type); return isOutstreamSlot && !isMember; }; // Returns whether user is from EU this.isEuUser = function () { return document.cookie.indexOf("GDPR_consent=1") > -1;
}; // returns permutive data

function getPermutiveData() {
var pSegs;

try {
pSegs = JSON.parse(window.localStorage._papns || “[]”).slice(0, 250).map(String);
} catch (e) {
pSegs = [];
}

return pSegs;
}

function getTeadsData() {
var adnodeElement = document.querySelector(“div[data-adnode]”);
var adNode = adnodeElement.getAttribute(“data-adnode”);
var section = adNode.split(“/”)[0]; // teads data for each section

var teadsData = {
news_and_politics: {
pageId: 79225,
placementId: 85784
},
culture: {
pageId: 90291,
placementId: 97769
},
technology: {
pageId: 90293,
placementId: 97775
},
business: {
pageId: 90294,
placementId: 97778
},
human_interest: {
pageId: 90292,
placementId: 97772
}
};
return teadsData[section];
}
});
}, {“3”:3}];
window.modules[“lazyload.legacy”] = [function(require,module,exports){“use strict”;

require(70); // for side effects

var Layzr = require(71);

var instance = Layzr({
threshold: 100
});
instance.on(“src:before”, function (element) {
// add a load event listener
element.addEventListener(“load”, function (event) {
element.parentElement.classList.add(“loaded”);
});
});
document.addEventListener(“DOMContentLoaded”, function (event) {
instance.update().check().handlers(true);
});
}, {“70″:70,”71”:71}];
window.modules[“prebid.min.legacy”] = [function(require,module,exports){“use strict”;

function _typeof(obj) { if (typeof Symbol === “function” && typeof Symbol.iterator === “symbol”) { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === “function” && obj.constructor === Symbol && obj !== Symbol.prototype ? “symbol” : typeof obj; }; } return _typeof(obj); }

/* prebid.js v3.23.0
Updated : 2020-06-22 */
!function (u) {
var s = window.pbjsChunk;

window.pbjsChunk = function (e, t, n) {
for (var r, o, i, a = 0, c = []; a < e.length; a++) { o = e[a], d[o] && c.push(d[o][0]), d[o] = 0; } for (r in t) { Object.prototype.hasOwnProperty.call(t, r) && (u[r] = t[r]); } for (s && s(e, t, n); c.length;) { c.shift()(); } if (n) for (a = 0; a < n.length; a++) { i = f(f.s = n[a]); } return i; }; var n = {}, d = { 313: 0 }; function f(e) { if (n[e]) return n[e].exports; var t = n[e] = { i: e, l: !1, exports: {} }; return u[e].call(t.exports, t, t.exports, f), t.l = !0, t.exports; } f.m = u, f.c = n, f.d = function (e, t, n) { f.o(e, t) || Object.defineProperty(e, t, { configurable: !1, enumerable: !0, get: n }); }, f.n = function (e) { var t = e && e.__esModule ? function () { return e.default; } : function () { return e; }; return f.d(t, "a", t), t; }, f.o = function (e, t) { return Object.prototype.hasOwnProperty.call(e, t); }, f.p = "", f.oe = function (e) { throw (console.error(e), e); }, f(f.s = 831); }([function (e, t, n) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), n.d(t, "internal", function () { return k; }), n.d(t, "bind", function () { return N; }), t.getUniqueIdentifierStr = q, t.generateUUID = function e return t ? (t ^ G() >> t / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, e);
}, t.getBidIdParameter = function (e, t) {
if (t && t[e]) return t[e];
return “”;
}, t.tryAppendQueryString = function (e, t, n) {
if (n) return e + t + “=” + encodeURIComponent(n) + “&”;
return e;
}, t.parseQueryStringParameters = function (e) {
var t = “”;

for (var n in e) {
e.hasOwnProperty(n) && (t += n + “=” + encodeURIComponent(e[n]) + “&”);
}

return t = t.replace(/&$/, “”);
}, t.transformAdServerTargetingObj = function
return t && 0 < Object.getOwnPropertyNames return "".concat(e, "=").concat(encodeURIComponent(ye(t, e))); }).join("&") : ""; }, t.getAdUnitSizes = function (e) { if (!e) return; var t = []; { var n; e.mediaTypes && e.mediaTypes.banner && Array.isArray(e.mediaTypes.banner.sizes) ? (n = e.mediaTypes.banner.sizes, Array.isArray(n[0]) ? t = n : t.push(n)) : Array.isArray(e.sizes) && (Array.isArray(e.sizes[0]) ? t = e.sizes : t.push(e.sizes)); } return t; }, t.parseSizesInput = function (e) { var t = []; if ("string" == typeof e) { var n = e.split(","), r = /^(d)+x(d)+$/i; if (n) for (var o in n) { ae(n, o) && n[o].match(r) && t.push(n[o]); } } else if ("object" === S(e)) { var i = e.length; if (0 < i) if (2 === i && "number" == typeof e[0] && "number" == typeof e[1]) t.push(F(e));else for (var a = 0; a < i; a++) { t.push(F(e[a])); } } return t; }, t.parseGPTSingleSizeArray = F, t.parseGPTSingleSizeArrayToRtbSize = function (e) { if (W(e)) return { w: e[0], h: e[1] }; }, t.getWindowTop = L, t.getWindowSelf = z, t.getWindowLocation = V, t.logMessage = H, t.logInfo = J, t.logWarn = K, t.logError = $, t.hasConsoleLogger = function () { return _; }, t.debugTurnedOn = Q, t.createInvisibleIframe = function () { var e = document.createElement("iframe"); return e.id = q(), e.height = 0, e.width = 0, e.border = "0px", e.hspace = "0", e.vspace = "0", e.marginWidth = "0", e.marginHeight = "0", e.style.border = "0", e.scrolling = "no", e.frameBorder = "0", e.src = "https://slate.com/culture/2020/10/about:blank", e.style.display = "none", e; }, t.getParameterByName = function (e) { return je(V().search)[e] || ""; }, t.isA = X, t.isFn = Z, t.isStr = ee, t.isArray = te, t.isNumber = ne, t.isPlainObject = re, t.isBoolean = function (e) { return X(e, C); }, t.isEmpty = oe, t.isEmptyStr = function (e) { return ee(e) && (!e || 0 === e.length); }, t._each = ie, t.contains = function (e, t) { if (oe(e)) return !1; if (Z(e.indexOf)) return -1 !== e.indexOf var n = e.length; for (; n--;) { if (e[n] === t) return !0; } return !1; }, t._map = function (n, r) { if (oe(n)) return []; if (Z(n.map)) return n.map(r); var o = []; return ie(n, function (e, t) { o.push(r(e, t, n)); }), o; }, t.hasOwn = ae, t.insertElement = ce, t.triggerPixel = ue, t.callBurl = function (e) { var t = e.source, n = e.burl; t === E.S2S.SRC && n && k.triggerPixel(n); }, t.insertHtmlIntoIframe = function (e) { if (!e) return; var t = document.createElement("iframe"); t.id = q(), t.width = 0, t.height = 0, t.hspace = "0", t.vspace = "0", t.marginWidth = "0", t.marginHeight = "0", t.style.display = "none", t.style.height = "0px", t.style.width = "0px", t.scrolling = "no", t.frameBorder = "0", t.allowtransparency = "true", k.insertElement(t, document, "body"), t.contentWindow.document.open(), t.contentWindow.document.write(e), t.contentWindow.document.close(); }, t.insertUserSyncIframe = se, t.createTrackPixelHtml = function (e) { if (!e) return ""; var t = encodeURI(e), n = ''; return n += '‘;
}, t.createTrackPixelIframeHtml = de, t.getValueString = fe, t.uniques = le, t.flatten = pe, t.getBidRequest = function (n, e) {
return n ? (e.some(function (e) {
var t = s()(e.bids, function
return [“bidId”https://slate.com/culture/2020/10/,”adId”https://slate.com/culture/2020/10/,”bid_id”].some(function (e) {
return t[e] === n;
});
});
return t && (r = t), t;
}), r) : void 0;
var r;
}, t.getKeys = ge, t.getValue = ye, t.getKeyByValue = function (e, t) {
for (var n in e) {
if (e.hasOwnProperty(n) && e[n] === t) return n;
}
}, t.getBidderCodes = function () {
return (0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : pbjs.adUnits).map(function (e) { return e.bids.map(function (e) { return e.bidder; }).reduce(pe, []); }).reduce(pe).filter(le); }, t.isGptPubadsDefined = be, n.d(t, "getHighestCpm", function () { return ve; }), n.d(t, "getOldestHighestCpmBid", function () { return he; }), n.d(t, "getLatestHighestCpmBid", function () { return me; }), t.shuffle = function (e) { var t = e.length; for (; 0 < t;) { var n = Math.floor(Math.random() * t), r = e[--t]; e } return e; }, t.adUnitsFilter = function (e, t) { return f()(e, t && t.adUnitCode); }, t.deepClone = Ae, t.inIframe = function () { try { return k.getWindowSelf() !== k.getWindowTop(); } catch (e) { return !0; } }, t.isSafariBrowser = function () { return /^((?!chrome|android|crios|fxios).)*safari/i.test(navigator.userAgent); }, t.replaceAuctionPrice = function (e, t) { if (!e) return; return e.replace(/${AUCTION_PRICE}/g, t); }, t.timestamp = function () { return new Date().getTime(); }, t.hasDeviceAccess = function () { return !1 !== r.b.getConfig("deviceAccess"); }, t.checkCookieSupport = Ee, t.delayExecution = function (e, t) { if (t < 1) throw new Error("numRequiredCalls must be a positive number. Got ".concat var n = 0; return function () { ++n === t && e.apply(this, arguments); }; }, t.groupBy = function (e, n) { return e.reduce(function (e, t) { return (e[t[n]] = e[t[n]] || []).push }, {}); }, t.getDefinedParams = function (n, e) { return e.filter(function (e) { return n[e]; }).reduce(function (e, t) { return m(e, h({}, t, n }, {}); }, t.isValidMediaTypes = function (e) { var t = ["banner"https://slate.com/culture/2020/10/,"native"https://slate.com/culture/2020/10/,"video"]; if (!Object.keys(e).every(function (e) { return f()(t, e); })) return !1; if (e.video && e.video.context) return f()(["instream"https://slate.com/culture/2020/10/,"outstream"https://slate.com/culture/2020/10/,"adpod"], e.video.context); return !0; }, t.getBidderRequest = function (e, t, n) { return s()(e, function (e) { return 0 < e.bids.filter(function (e) { return e.bidder === t && e.adUnitCode === n; }).length; }) || { start: null, auctionId: null }; }, t.getUserConfiguredParams = function (e, t, n) { return e.filter(function (e) { return e.code === t; }).map(function (e) { return e.bids; }).reduce(pe, []).filter(function (e) { return e.bidder === n; }).map(function (e) { return e.params || {}; }); }, t.getOrigin = function () { return window.location.origin ? window.location.origin : window.location.protocol + "//" + window.location.hostname + (window.location.port ? ":" + window.location.port : ""); }, t.getDNT = function () { return "1" === navigator.doNotTrack || "1" === window.doNotTrack || "1" === navigator.msDoNotTrack || "yes" === navigator.doNotTrack; }, t.isAdUnitCodeMatchingSlot = function return function (e) { return Oe(t, e); }; }, t.isSlotMatchingAdUnitCode = Ie, t.getGptSlotInfoForAdUnitCode = function (e) { var t; be() && (t = s()(window.googletag.pubads().getSlots(), Ie(e))); if gptSlot: t.getAdUnitPath(), divId: t.getSlotElementId() }; return {}; }, t.unsupportedBidderMessage = function (e, t) { var n = Object.keys(e.mediaTypes || { banner: "banner" }).join("https://slate.com/culture/2020/10/,"); return "n ".concat(e.code, " is a ").concat(n, " ad unitn containing bidders that don't support ").concat(n, ": ").concat(t, ".n This bidder won't fetch demand.n "); }, t.isInteger = Te, t.convertCamelToUnderscore = function (e) { return e.replace(/(?:^|.?)([A-Z])/g, function (e, t) { return "_" + t.toLowerCase(); }).replace(/^_/, ""); }, t.cleanObj = function (n) { return Object.keys(n).reduce(function (e, t) { return void 0 !== n }, {}); }, t.pick = function (a, c) { return "object" === S(a) ? c.reduce(function (e, t, n) { if ("function" == typeof t) return e; var r = t, o = t.match(/^(.+?)sass(.+?)$/i); o && (t = o[1], r = o[2]); var i = a return "function" == typeof c[n + 1] && (i = c[n + 1](i, e)), void 0 !== i && (e[r] = i), e; }, {}) : {}; }, t.transformBidderParamKeywords = function (e) { var r = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : "keywords", o = []; return ie(e, function (e, t) { if (te(e)) { var n = []; ie(e, function (e) { !(e = fe(r + "." + t, e)) && "" !== e || n.push(e); }), e = n; } else { if (!ee(e = fe(r + "." + t, e))) return; e = [e]; } o.push({ key: t, value: e }); }), o; }, t.convertTypes = function (r, o) { return Object.keys(r).forEach(function (e) { var t, n; o[e] && (Z(r[e]) ? o[e] = r[e](o[e]) : o[e] = (t = r[e], n = o[e], "string" === t ? n && n.toString() : "number" === t ? Number(n) : n), isNaN(o[e]) && delete o.key); }), o; }, t.isArrayOfNums = function (e, t) { return te(e) && (!t || e.length === t) && e.every(Te); }, t.fill = function (e, t) { for (var n = [], r = 0; r < t; r++) { var o = re(e) ? Ae(e) : e; n.push(o); } return n; }, t.chunk = function (e, t) { for (var n = [], r = 0; r < Math.ceil(e.length / t); r++) { var o = r * t, i = o + t; n.push(e.slice(o, i)); } return n; }, t.getMinValueFromArray = function (e) { return Math.min.apply(Math, y(e)); }, t.getMaxValueFromArray = function (e) { return Math.max.apply(Math, y(e)); }, t.compareOn = function (n) { return function (e, t) { return e[n] < t[n] ? 1 : e[n] > t[n] ? -1 : 0;
};
}, t.parseQS = je, t.formatQS = we, t.parseUrl = function (e, t) {
var n = document.createElement(“a”);
t && “noDecodeWholeURL” in t && t.noDecodeWholeURL ? n.href = e : n.href = decodeURIComponent(e);
var r = t && “decodeSearchAsString” in t && t.decodeSearchAsString;
return {
href: n.href,
protocol: (n.protocol || “”).replace(/:$/, “”),
hostname: n.hostname,
port: +n.port,
pathname: n.pathname.replace(/^(?!/)/, “/”),
search: r ? n.search : k.parseQS(n.search || “”),
hash: (n.hash || “”).replace(/^#/, “”),
host: n.host || window.location.host
};
}, t.buildUrl = function (e) {
return (e.protocol || “http”) + “://” + (e.host || e.hostname + (e.port ? “:”.concat(e.port) : “”)) + (e.pathname || “”) + (e.search ? “?”.concat(k.formatQS(e.search || “”)) : “”) + (e.hash ? “#”.concat(e.hash) : “”);
}, t.deepEqual = Ce, t.mergeDeep = xe;
var r = n(3),
o = n(167),
i = n.n(o),
a = n(168),
c = n.n(a),
u = n(11),
s = n.n(u),
d = n(12),
f = n.n(d),
l = n(182);
n.d(t, “deepAccess”, function () {
return l.a;
});
var p = n(183);

function g(e, t) {
return function (e) {
if (Array.isArray(e)) return e;
}(e) || function (e, t) {
if (“undefined” == typeof Symbol || !(Symbol.iterator in Object(e))) return;
var n = [],
r = !0,
o = !1,
i = void 0;

try {
for (var a, c = e[Symbol.iterator](); !(r = (a = c.next()).done) && (n.push(a.value), !t || n.length !== t); r = !0) {
;
}
} catch (e) {
o = !0, i = e;
} finally {
try {
r || null == c.return || c.return();
} finally {
if (o) throw i;
}
}

return n;
}(e, t) || b(e, t) || function () {
throw new TypeError(“Invalid attempt to destructure non-iterable instance.nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.”);
}();
}

function y(e) {
return function (e) {
if (Array.isArray(e)) return v(e);
}(e) || function (e) {
if (“undefined” != typeof Symbol && Symbol.iterator in Object(e)) return Array.from(e);
}(e) || b(e) || function () {
throw new TypeError(“Invalid attempt to spread non-iterable instance.nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.”);
}();
}

function b(e, t) {
if (e) {
if (“string” == typeof e) return v(e, t);
var n = Object.prototype.toString.call(e).slice(8, -1);
return “Object” === n && e.constructor && (n = e.constructor.name), “Map” === n || “Set” === n ? Array.from(e) : “Arguments” === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? v(e, t) : void 0;
}
}

function v(e, t) {
(null == t || t > e.length) && (t = e.length);

for (var n = 0, r = new Array
r[n] = e[n];
}

return r;
}

function h(e, t, n) {
return t in e ? Object.defineProperty(e, t, {
value: n,
enumerable: !0,
configurable: !0,
writable: !0
}) : e
}

function m() {
return (m = Object.assign || function (e) {
for (var t = 1; t < arguments.length; t++) { var n = arguments for (var r in n) { Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } } return e; }).apply(this, arguments); } function S(e) { return (S = "function" == typeof Symbol && "symbol" == _typeof(Symbol.iterator) ? function (e) { return _typeof(e); } : function (e) { return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : _typeof(e); })(e); } n.d(t, "deepSetValue", function () { return p.a; }); var A, E = n(5), O = "Array", I = "String", T = "Function", j = "Number", w = "Object", C = "Boolean", x = Object.prototype.toString, U = Boolean(window.console), _ = Boolean(U && window.console.log), B = Boolean(U && window.console.info), R = Boolean(U && window.console.warn), P = Boolean(U && window.console.error), k = { checkCookieSupport: Ee, createTrackPixelIframeHtml: de, getWindowSelf: z, getWindowTop: L, getWindowLocation: V, insertUserSyncIframe: se, insertElement: ce, isFn: Z, triggerPixel: ue, logError: $, logWarn: K, logMessage: H, logInfo: J, parseQS: je, formatQS: we, deepEqual: Ce }, D = {}, N = function (e, t) { return t; }.bind(null, 1, D)() === D ? Function.prototype.bind : function (e) { var t = this, n = Array.prototype.slice.call(arguments, 1); return function () { return t.apply(e, n.concat(Array.prototype.slice.call(arguments))); }; }, M = (A = 0, function () { return ++A; }); function q() { return M() + Math.random().toString(16).substr(2); } function G() { return window && window.crypto && window.crypto.getRandomValues ? crypto.getRandomValues(new Uint8Array(1))[0] % 16 : 16 * Math.random(); } function F(e) { if (W(e)) return e[0] + "x" + e[1]; } function W(e) { return te(e) && 2 === e.length && !isNaN(e[0]) && !isNaN(e[1]); } function L() { return window.top; } function z() { return window.self; } function V() { return window.location; } function H() { Q() && _ && console.log.apply(console, Y(arguments, "MESSAGE:")); } function J() { Q() && B && console.info.apply(console, Y(arguments, "INFO:")); } function K() { Q() && R && console.warn.apply(console, Y(arguments, "WARNING:")); } function $() { Q() && P && console.error.apply(console, Y(arguments, "ERROR:")); } function Y(e, t) { return e = [].slice.call(e), t && e.unshift } function Q() { return !!r.b.getConfig("debug"); } function X(e, t) { return x.call(e) === "[object " + t + "]"; } function Z(e) { return X(e, T); } function ee(e) { return X(e, I); } function te(e) { return X(e, O); } function ne(e) { return X(e, j); } function re(e) { return X(e, w); } function oe(e) { if (!e) return !0; if (te(e) || ee(e)) return !(0 < e.length); for (var t in e) { if (hasOwnProperty.call(e, t)) return !1; } return !0; } function ie(e, t) { if (!oe(e)) { if (Z(e.forEach)) return e.forEach(t, this); var n = 0, r = e.length; if (0 < r) for (; n < r; n++) { t(e[n], n, e); } else for (n in e) { hasOwnProperty.call(e, n) && t.call(this, e[n], n); } } } function ae(e, t) { return e.hasOwnProperty ? e.hasOwnProperty } function ce(e, t, n, r) { var o; t = t || document, o = n ? t.getElementsByTagName(n) : t.getElementsByTagName("head"); try { if ((o = o.length ? o : t.getElementsByTagName("body")).length) { o = o[0]; var i = r ? null : o.firstChild; return o.insertBefore(e, i); } } catch (e) {} } function ue(e, t) { var n = new Image(); t && k.isFn } function se(e, t) { var n = k.createTrackPixelIframeHtml(e, !1, "allow-scripts allow-same-origin"), r = document.createElement("div"); r.innerHTML = n; var o = r.firstChild; t && k.isFn } function de(e) { var t = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : ""; return e ? ((!(1 < arguments.length && void 0 !== arguments[1]) || arguments[1]) && (e = encodeURI(e)), t = t && 'sandbox="'.concat(t, '"'), "