Home Blog

News – A 21-year-old driver in a fatal accident on the A88 near Argentan

0
News - A 21-year-old driver in a fatal accident on the A88 near Argentan

A 21-year-old truck driver died on Monday, August 2 around 5:50 a.m. on the A88 near Argentan in the Orne region. He crashed into a bridge pier as he was driving towards Caen.

A 21-year-old young man died on Monday, August 2, 2021 at around 5:50 a.m. on the A88 near Argentan (Orne), in Moulins-sur-Orne, driving his truck.

The victim struck a bridge pier while he was alone on the A88 towards Caen (Calvados).

The truck driver died instantly following the violence of the shock. He was transporting fruit and vegetables for the Quinette transport company in Mayenne.

No other casualties were to be deplored in this accident. Debris was thrown in both directions of traffic and one lane was closed on each side.

Has this article been useful to you? Please note that you can follow Le Journal de l’Orne in the Mon Actu area. In one click, after registration, you will find all the news from your favorite cities and brands.

© 2021 actu.fr, owned and co-operated by Publihebdos and its subsidiaries Dedicated hosting: Groupe DIS, Digital Ad Trust and ACPM. Conception and design: Datagif.

Actu.fr is a site belonging to Publihebdos (Sipa Ouest-France Group) to which more than 400 professional journalists collaborate.
The collection of cookies is useful for collecting advertising revenue which allows us to provide you with reliable, quality information free of charge. If you want to help us, you can accept cookies

Ref: https://actu.fr

News – Amazon will be fined 746 million euros for breaching private data in Europe

0
News - Amazon will be fined 746 million euros for breaching private data in Europe

It was in Luxembourg that Amazon was ordered to pay a fine of 746 million euros. As a result of this heavy sanction, repeated violations of European Union data protection regulations. This is the largest fine ever imposed under this law, report our colleagues from the Wall Street Journal on July 30, 2021.

This fine was made public in Amazon’s last quarterly report (Q2 2021). In one of the documents presented, one can read: “On July 16, 2021, the Luxembourg National Commission for Data Protection (the” CNPD “) issued a decision against Amazon Europe, claiming that the processing personal data by Amazon did not comply with the EU’s General Data Protection Regulation. The ruling imposes a fine of 746 million euros and corresponding practice reviews. ” Amazon will also need to review some of its business practices, but has not said exactly which ones.

Unsurprisingly, the eCommerce giant ruled that this conviction was “unfounded”, and has already announced that it will appeal this decision. “Maintaining the security of our customers’ information and their trust is a top priority. There has been no data breach, and no customer data has been exposed to a third party. These facts are undisputed.” , Said the company.

For the European Union, the protection of private data is a subject on which it is not good to joke, and Amazon has just learned it the hard way. However, he is far from being the only target. In recent years, fines have multiplied against companies that do not comply with European regulations, and their price seems to rise inexorably from one sanction to another. In 2020, the total amount of fines for non-compliance with the GDPR amounted to 171 million euros.

In 2021, this amount is expected to be even higher. It must be said that the year started on the hats of wheels. As early as January, Ireland fined WhatsApp € 50 million for violating the GDPR. In May, it was Norway that fined Disqus 2.5 million euros. More recently, the CNIL imposed a fine of 1.75 million euros on AG2R La Mondiale. The same month, Monsanto was also sanctioned with a fine of 400,000 euros by the National Commission for Informatics and Freedoms of France.

Ref: https://siecledigital.fr

News – 2021 Olympic Games – Weightlifting: the beautiful final of Gaëlle Nayo-Ketchanke, 5th in the under 87 kg competition

0
News - 2021 Olympic Games - Weightlifting: the beautiful final of Gaëlle Nayo-Ketchanke, 5th in the under 87 kg competition

The 33-year-old Frenchwoman performed two very good performances in the snatch and the clean and jerk, and finished with a total of 247 kg lifted.

An end of career in apotheosis, or almost, for Gaëlle Nayo-Ketchanke. The 33-year-old Frenchwoman, 8th at the Rio Games in 2016, had an excellent weightlifting competition on Monday, August 2, in the under 87 kg category. She finished in 5th place in the final, after lifting a total of 247 kg (108 kg in the snatch, 139 in the clean and jerk).

The European clean and jerk champion in less than 81 kg in Moscow this year did better than hold her place against the untouchable Chinese Zhouyu Wang, crowned Olympic champion with a total of 270 kg. Her smile said a lot at the end of the competition, she who was heavily injured in 2019 with a double fracture of the arm and a dislocation of the elbow. An example of resilience, one more, which is not unlike that of Samir Aït Saïd, also at the foot of the podium with the rings (4th) on Monday.

In weightlifting, Gaëlle Nayo-Ketchanke (-87kg) finished 5th overall, with a total of 247kg! #AllezLesBleus # Tokyo2020

Video

Olympics 2021 – Track cycling: 5th in team pursuit qualifications, the French shatter the national record

2021 Olympic Games: sixth gold medal for France thanks to Jean Quiquampoix in rapid pistol shooting at 25 meters

Video

Olympics 2021 – Handball: “We will be able to let go completely on the quarter-finals”, reacts Olivier Krumbholz after the victory of the Blue against Brazil

Video

Olympic Games 2021 – Shooting: Jean Quiquampoix Olympic champion, relive his Marseillaise on the podium

Olympics 2021: what ranking for France? Find the Tokyo Olympic Games medal table

Every day, Franceinfo selects content from European public audiovisual media, members of Eurovision. These contents are published in English or French.

Related title :
Olympic Games 2021 – Weightlifting: the beautiful final of Gaëlle Nayo-Ketchanke, 5th in the under 87 kg competition
Gaëlle Nayo Ketchanke finishes fifth in -87 kg at the Tokyo Olympics
TOKYO 2020 – Nayo Ketchanke finishes 5th in the -87kgs
Olympic Games 2020 / Weightlifting (F): the French Gaëlle Nayo-Ketchanke finishes 5th – Sport.fr

Ref: https://www.francetvinfo.fr

News – Olympic Games – Equitation – Complete horses declared fit for show jumping at the Tokyo Games

0
News - Olympic Games - Equitation - Complete horses declared fit for show jumping at the Tokyo Games

The French eventing team, 3rd in the provisional standings, passed the veterinary visit without hindrance before the show jumping. The three horses of the French eventing team, Triton Fontaine, Absolut Gold and Totem de Brecey passed the 2nd veterinary inspection without a hitch. The show jumping event will start at 10 a.m. (5 p.m. in Tokyo). The French riders are 3rd in the provisional classification, less than one point from the silver medal. read also France is in third place after cross-country

Several schools are opposed, on this transfer window 2021-22. On the one hand, there are the clubs which act without delay, so as not to lose the benefit of integration and summer preparation. OM, PSG or OGC Nice are among those. In contrast, other clubs have yet to budge, half a month after opening [&hellip

After withdrawing from the all-around and several apparatus finals, the American Simone Biles should line up well on the beam this Tuesday. She is officially registered anyway.

Samir Aït Saïd, flag bearer of the France team, finished fourth while aiming for a medal. The event was won by the Chinese Liu Yang, ahead of his compatriot You Hao and the Greek Eleftherios Petrounias.

SIG unveiled the name of its second recruit on Monday. This is the American winger Matt Mitchell (22 years old, 1.98 m), who will have his first professional experience in Alsace.

Candidate for the podium on the rings, this Monday, at the Tokyo Olympics, the flag bearer of the French delegation Samir Aït-Saïd ranked fourth in a competition dominated by the Chinese Yang Liu and Hao You.

Led by Adam Peaty, Great Britain won the gold medal in the mixed 4x100m medley relay on Sunday at the Tokyo Olympics. Olympic 100m breaststroke champion hopes his team will get

A few minutes after his speed pistol coronation at the Tokyo Olympic Games, the Frenchman Jean Quiquampoix, 25, was already thinking of the Paris Olympics in 2024.

The French women’s team pursuit team set the fifth qualifying time by beating the national record by nearly five seconds on Monday at the Tokyo Olympics. Germany lowered the best world time by almost three seconds.

Lamont Marcell Jacobs won the queen event in the 100 meters and succeeds sprint legend Usain Bolt, winner in 2008, 2012 and 2016. The Italian does not want to compare himself to the Jamaican.

Former Lotus F1 team boss, the new owner of the Girondins, Gérard Lopez, hailed Esteban Ocon’s victory behind the wheel of his Alpine in the Hungarian Grand Prix on Sunday.

Marcell Jacobs won the queen event in the 100 meters. He succeeds sprint legend Usain Bolt, winner in 2008, 2012 and 2016. The Italian does not want to compare himself to the Jamaican.

According to information from “MaLigue2”, confirmed by us, several L2 teams have sent a letter to the LFP, the DNCG and the FFF to denounce the practices of the ASNL, which uses the Belgian club Ostend to get around its restrictions on the transfer window.

As the last week of the Tokyo Olympics (Japan) begins this Monday, find most of the results of the night.

The interior of the France team Sandrine Gruda appreciated the values ​​displayed by her team during the narrow defeat against the United States on Monday (93-82), synonymous with qualifying for the quarter-finals.

PARIS (Reuters) – Several European countries have already offered to grant political asylum to Belarusian sprinter Krystsina Tsimanouskaya, French Secretary of State for European Affairs Clément Beaune said on Monday. Krystsina Tsimanouskaya, who was due to start in the women’s 200-meter race on Monday, missed being forcibly repatriated to Belarus on Sunday after criticizing her coaches during the Tokyo Olympics.

by The basketball players of the France team can take a sigh of relief. The Blue should not lose by more than 14 points against the Americans to qualify for the quarter-finals.

FOOTBALL – It is not good to support the Palestinian cause when playing a soccer match in Tel Aviv

After Gasly in 2020, Ocon? S victory in Hungary, served on a platter by a reborn Alpine team, revives the French industry.

TOKYO (Reuters) – Belarusian athlete Krystsina Tsimanouskaya, who on Sunday refused to board a plane to Belarus after being said to be driven against her will to Tokyo airport, is “safe” in the Japanese capital, said the International Olympic Committee (IOC). The 24-year-old sprinter spent the night at an airport hotel after asking Japanese police for protection on Sunday evening, IOC spokesperson said on Sunday evening.

OLYMPIC GAMES – Another great day for sport and France, to follow all together.

Related title :
JO – Equitation – The complete horses declared fit for jumping at the Tokyo Games
Olympic Games, Equitation (M): France on the provisional podium in the eventing

Ref: https://fr.sports.yahoo.com

News – Disney announces mandatory vaccination for all on-site employees

0
News - Disney announces mandatory vaccination for all on-site employees

To divert the narrative of their multi-million dollar feud with Scarlett “the Jostfrau” Johansson, the Walt Disney Company announced on Friday that all of their local employees have “60 days from today” to be fully vaccinated, if they are not yet. This mandate applies to all permanent and non-union employees working in the United States, including the theme parks in California and Florida, where coronavirus cases have increased. In a press release, the company said: At Walt Disney Company, the safety and wellbeing of our employees during the pandemic has been and remains the highest priority. To this end, and based on the latest recommendations from scientists, health officials, and our own health professionals that the COVID-19 vaccine is the best protection against serious infections, we require that all US employed and non-union workers work on everyone of our locations.

Employees who have not yet been vaccinated and who are working on site have 60 days from today to complete their reports, and all employees who are still working from home must before their return Provide proof of vaccination, with a few limited exceptions. We have also started discussions on this subject with the unions that represent our employees under collective agreements. In addition, all newly hired employees must be fully vaccinated before starting employment. Vaccines are the best tool we all have to contain this global pandemic and protect our employees.

In addition, the company announced that visitors to its American theme parks will be able to access all indoor attractions from Friday, including park transport such as the monorail to have to wear masks again. Do you think the masked characters have to wear masks under their masks?

Already a subscriber?
Log in or link your magazine subscription

Already a subscriber?
Log in or link your magazine subscription

Already a subscriber?
Log in or link your magazine subscription

= 0? (u = f.substr (0, v), c = f.substr (v 1)) πŸ™ u = f, c = “”), i = decodeURIComponent (u), l = decodeURIComponent (c), hasOwnProperty (o, i)? isArray (o [i])? o [i] .push (l): o [i] = [o [i], l]: o [i] = l } return o}; var isArray = Array.isArray || function (r) {return “[Object-Array]” === Object.prototype.toString.call (r)};
}, {}];
window.modules [“1189”] = [function (require, module, exports) {“use strict”; var stringifyPrimitive = function (r) {switch (typeof r) {case “string”: return r; case “boolean” : return r? “true”: “false”; case “number”: return isFinite (r)? r: “”; default: return “”}}; module.exports = function (r, e, t, n) {return e = e || “&”, t = t || “=”, null === r&& (r = void 0), “object” == typeof r? map (objectKeys (r), function (n ) {var i = encodeURIComponent (stringifyPrimitive (n)) t; return isArray (r [n])? map (r [n], function (r) {return i encodeURIComponent (stringifyPrimitive (r))}). join (e ): i encodeURIComponent (stringifyPrimitive (r [n]))}). join (e): n? encodeURIComponent (stringifyPrimitive (n)) t encodeURIComponent (stringifyPrimitive (r)): “”}; var isArray = Array.isArray | | function (r) {return “[object Array]” === Object.prototype.toString.call (r)}; function map (r, e) {if (r.map) return r.map (e); for (var t = [], n = 0; n0&&a [a.length-1]) && (6 === i [0] || 2 === i [0])) {o = 0; next} if (3 === i [0] && (! a || i [1]> a [0] &&i [1] “:” akbar-men “,” ∑ “:” majmou “,” ¤ “:” omla “}, az: {}, ca: {” ∆ “:” delta “,” ∞ “:” infinit “,” ♥ “:” amor “,” & “:” i “,” | “:” o “,” “:” mes que “,” ∑ “:” suma dels “,” ¤ “:” moneda “}, cz: {” ∆ “:” delta “,” ∞ “:” nekonecno “,” ♥ ” : “laska”, “&”: “a”, “|”: “nebo”, “”: “vice jako”, “∑”: “soucet”, “¤”: “mena”}, de: {” ∆ “:” delta “,” ∞ “:” infinite “,” ♥ “:” Love “,” & “:” and “,” | “:” or “,” “:” greater than “,” ∑ ” : “Sum of”, “¤”: “Currency”}, dv: {“∆”: “delta”, “∞”: “kolunulaa”, “♥”: “loabi”, “&”: “aai”, “|”: “noonee”, “”: “ah vure bodu”, “∑”: “jumula”, “¤”: “faisaa”}, en: {“∆”: “delta”, “∞”: ” infinite “,” ♥ “:” love “,” & “:” and “,” | “:” or “,” “:” greater than “,” ∑ “:” sum “,” ¤ “:” currency ” }, es: {“∆”: “delta”, “∞”: “infinito”, “♥”: “amor”, “&”: “y”, “|”: “u”, “”: “mas que “,” ∑ “:” suma de los “,” ¤ “:” moneda “}, fr: {” ∆ “:” delta “,” ∞ “:” infinite “,” ♥ “:” Amour “,” & “:” et “,” | “:” ou “,” “:” superieure a “,” ∑ “:” somme des “,” ¤ “:” monnaie “}, gr: {}, hu: {” ∆ “:” delta “,” ∞ “:” vegtelen “,” ♥ “:” szerelem “,” & “:” es “,” | “:” vagy “,” “:” nagyobb mint “,” ∑ “:” szu mma “,” ¤ ” : “penznem”}, it: {“∆”: “delta”, “∞”: “infinito”, “♥”: “amore”, “&”: “e”, “|”: “o”, ” “:” maggiore di “,” ∑ “:” somma “,” ¤ “:” moneta “}, lt: {}, lv: {” ∆ “:” delta “,” ∞ “:” bezgaliba “,” ♥ “:” milestiba “,” & “:” un “,” | “:” vai “,” “:” lielaks neka “,” ∑ “:” summa “,” ¤ “:” valuta “}, my: { “∆”: “kwahkhyaet”, “∞”: “asaonasme”, “♥”: “akhyait”, “&”: “nhin”, “|”: “tho”, “”: “kyithaw”, “∑” : “paungld”, “¤”: “ngwekye”}, mk: {}, nl: {“∆”: “delta”, “∞”: “oneindig”, “♥”: “fielde”, “&”: “en”, “|”: “of”, “”: “groter dan”, “∑”: “som”, “¤”: “valuta”}, pl: {“∆”: “delta”, “∞ “:” nieskonczonosc “,” ♥ “:” milosc “,” & “:” i “,” | “:” lub “,” “:” wieksze niz “,” ∑ “:” suma “,” ¤ “: “waluta”}, pt: {“∆”: “delta”, “∞”: “infinito”, “♥”: “amor”, “&”: “e”, “|”: “ou”, “” : “maior que”, “∑”: “soma”, “¤”: “moeda”}, ro: {“∆”: “delta”, “∞”: “infinite”, “♥”: “dragoste”, “&”: “si”, “|”: “sau”, “”: “mai mare ca”, “∑ “:” suma “,” ¤ “:” valuta “}, ru: {” ∆ “:” delta “,” ∞ “:” beskonechno “,” ♥ “:” lubov “,” & “:” i “, “|”: “ili”, “”: “bolshe”, “∑”: “summa”, “¤”: “valjuta”}, sk: {“∆”: “delta”, “∞”: “nekonecno” , “♥”: “laska”, “&”: “a”, “|”: “alebo”, “”: “viac ako”, “∑”: “sucet”, “¤”: “mena”}, sr: {}, tr: {“∆”: “delta”, “∞”: “sonsuzluk”, “♥”: “ask”, “&”: “ve”, “|”: “veya”, “” : “buyuktur”, “∑”: “toplam”, “¤”: “para birimi”}, uk: {“∆”: “delta”, “∞”: “bezkinechnist”, “♥”: “lubov”, “&”: “i”, “|”: “abo”, “”: “bilshe”, “∑”: “suma”, “¤”: “valjuta”}, vn: {“∆”: “delta” , “∞”: “vo cuc”, “♥”: “yeu”, “&”: “va”, “|”: “hoac”, “”: “lon hon”, “∑”: “tong”, “¤”: “tien te”}}; if (“string”! = Typeof e) return “”; if (“string” == typeof a&& (A = a), m = I.en, c = C. en, “object” == typeof a) for (g in n = a.maintainCase ||! 1, O = a.custom&& “object” == typeof a.custom? a.custom: O, u = a.truncate > 1&&a.truncate ||! 1, l = a.uric ||! 1, s = a.uricNoSlash ||! 1, r = a.mark ||! 1, S =! 1! == a.symbols&&! 1! == a.lang , A = a.separator || A, l&& (p = b.join (“”)), s&& (p = z.join (“”)), r&& (p = [“.”, “!”, ” ~ “,” * “,” ‘”,” (“,”) “]. join (” “)), m = a.lang&&I [a.lang] && S? I [a.lang]: S? I .en: {}, c = a.lang&&C [a.lang]? C [a.lang] :! 1 === a.lang ||! 0 == = a.lang? {}: C.en, a.titleCase&& “number” == typeof a.titleCase.length&&Array.prototype.toString.call (a.titleCase)? (a.titleCase.forEach (function (e) {O [e “}”) = e ” , t =! 0): t = !! a.titleCase, a.custom&& “number” == typeof a.custom.length&&Array.prototype.toString.call (a. custom) &&a.custom (e )ach (function.forEach) {O [e “”] = e “”}), Object.keys (O) .forEach (function (a) {var n; n = a.length> 1? New RegExp (“\ b” o (a ) “\ b”, “gi”): new RegExp (o (a), “gi”), e = e.replace (n, O [a])}), O) p = g; for (p = o (p = A), f =! 1, y =! 1, d = 0, k = (e = e. replace (/ (^ s | s $) / g, “”)). length; d = 0? (j = g, g = “”) :! 0 === y? (g = U [j ] v [g], j = “”): g = f&&v [g] .match (/ [A-Za-z0-9] /)? “” v [g]: v [g], f =! 1 , y =! 1): g in U? (j = g, g = “”, d === k-1&& (g = U [j]), y =! 0) :! m [g] || l&&-1! == b.join (“”) .indexOf (g) || s&&-1! == z.join (“”). indexOf (g)? (! 0 === y? (g = U [j] g, j = “”, y =! 1): f&& (/ [A-Za-z0-9] /. Test (g) || E.substr (-1). match (/ A-Za-z0-9] /)) && (g = “” g), f =! 1) πŸ™ g = f || E.substr (-1) .match (/ [A-Za -z0-9] /)? A m [g]: m [g], g = void 0! == e [d 1] &&e [d 1] .match (/ [A-Za-z0-9] / )? A: “”, f =! 0), E = g.replace (new RegExp (“[^ \ w \ s” p “_-]”, “g”), A); return t&& ( E = E.replace (/ ( w) ( S *) / g, function (e, a, n) {var t = a.toUpperCase () (null! == n? N: “”); return Object.keys (O) .indexOf (t.toLowerCase ()) u&& (h = E.charAt (u) === A, E = E.slice (0, u), h || (E = E.slice (0, E.lastIndexOf (A)))), n || t || (E = E.toLowerCase ()), E}, t = function (e) {return function (a) {return n (a, e )}}, o = function (e) {return e.replace (/ [- \ ^ $ *?. () | [] {} /] / g, “\ $ &”)}, i = function (e, a) {for (var n in a) if (a [n] === e) return! 0}; if (“undefined”! = typeof module&&module.exports) module.exports = n, module .exports.createSlug = t; else if (“undefined”! = typeof define&&define.amd) define ([], function () {return n}); else try {if (e.getSlug || e.createSlug) throw ” Speakingurl: globals exists / (getSlug | c reateSlug) / “; e.getSlug = n, e.createSlug = t} catch (e) {}} (this);
}, {}];
window.modules [“1222”] = [function (require, module, exports) {var namespace = “expire_mixin”; function expirePlugin () {var e = this.createStore (this.storage, null, this._namespacePrefix namespace); return {set: function (t, n, a, r) ​​{this.hasNamespace (namespace) || e.set (n, r); return t ()}, get: function (e, n) {this.hasNamespace (namespace) || t.call (this, n); return e ()}, remove: function (t, n) {this.hasNamespace (namespace) || e.remove (n); return t ()}, getExpiration: function (t, n) {return e.get (n)}, removeExpiredKeys: function (e) {var n = []; this.each (function (e, t) {n.push (t)}) ; for (var a = 0; a = 0; r -) {var l = localStorage (). key (r); e (read (l), l)}} function remove (e) {return localStorage () .removeItem (e)} function clearAll () {return localStorage (). clear ()} module.exports = {name: “localStorage”, read: read, write: write, each: each, remove: remove, clearAll: clearAll };
}, {“1224”: 1224}];
window.modules [“1226”] = [function (require, module, exports) {module.exports = {name: “memoryStorage”, read: read, write: write, each: each, remove: remove, clearAll: clearAll} ; var memoryStorage = {}; function read (e) {return memoryStorage [e]} function write (e, r) {memoryStorage [e] = r} function each (e) {for (var r in memoryStorage) memoryStorage.hasOwnProperty (r) &&e (memoryStorage [r], r)} function remove (e) {delete memoryStorage [e]} function clearAll (e) {memoryStorage = {}}
}, {}];
window.modules [“1247”] = [function (require, module, exports) {! function (e) {var t = function (e) {return new y (e)}; t.version = “0.6.8” , “undefined”! = typeof module&&module.exports? module.exports = t: “function” == typeof define&&define.amd? define (function () {return t}): e.typogr = t; var n = function (e , t) {return new RegExp (e, t)}, s = /] *> / i, r = t.amp = function (e) {var t = / ( s |) (& | & | & # 38;) ( s |) / g; if (e || “string” == typeof e) return e.replace (/ ()? ([^)? / G, function (e, n, r, a) {return a = a || “”, (n = n || “”). match (s)? nra: n (r = r.replace (t, ‘$ 1& $ 3’)) a})} , a = t.ord = function (e) {if (e || “string” == typeof e) {var t, n = f (e), r = [], a =! 1, p = / ( d) (st | nd | rd | th) / g; return n.forEach (function (e) {“tag” === e.type? (r.push (e.txt), t = s.exec (e.txt), a =! (! t || void 0! == t [1])): a? r.push (e.txt): r.push (e.txt.replace (p, ‘ $ 1 $ 2 ‘))}), r.join (“”)}}, p = t.initQuotes = function (e) {var t = n (“(?: (?:] *> | ^) \ s * (?:] *> \ s *) *) (?: ( “|“ | “) | (‘|’ | ‘))”, “i”); if (e || “string” = = typeof e) return e.replace (t, functio n (e, t, n) {var s = t? “dquo”: “quo”, r = t || n; return [e.slice (0, e.lastIndexOf (r)), ”, r, “”] .join (“”)})}, c = t.widont = function (e) {var t = “(?:] *?>) *? [^ \ s] (? πŸ™ ?: a | em | span | strong | i | b) [^>] *?>) *? “, s = n (” (\ s “t” \ s “t”) (?: \ s) ([^ \ s] ( ?: \ s * (?: a | em | span | strong | i | b) [^>] *?> \ s * \. *) *? (?: \ s *? (?: p | h [1-6] | li | dt | dd)> | $)) “,” gi “); return e.replace (s, ‘$ 1 $ 2’)}, i = t.caps = function (e ) {var t, r = f (e), a = [], p =! 1, c = n (“((\ b [AZ \ d] * [AZ] \ d * [AZ] [ AZ \ d ‘] * \ b) | (\ b [AZ] \. \ s? (?: [AZ] \. \ s?)) (?: \ s | \ b | $)) “,” g “); return r.forEach (function (e) {” tag “=== e.type? (a.push (e.txt), t = s.exec (e. txt), p =! (! t || void 0! == t [1])): p? a.push (e.txt): a.push (e.txt.replace (c, function (e, t, n, s) {var r, a; return n? ‘% s’.replace (“% s”, n) πŸ™ “” === s.slice (-1)? (r = s.slice (0, -1), a = “”) πŸ™ r = s, a = “”), ‘% s1% s2’.replace (“% s1”, r) .replace (“% s2”, a) )}))}), a.join (“”)}; t.typogrify = function (e) {var t = e; return e.jquery&&e.html&& (t = e.html ()), t = r ( t), t = c (t), t = u (t), t = i (t), t = p (t), t = a (t)}; var l, o, u = t.smartypants = Function (e) {var t, n, r = f (e), a = [], p = [], c = “”, i = “”, l =! 1, o = “”; return r. forEach (function (e) {if (“tag” === e.type) a.push (e.txt), null! == (i = s.exec (e.txt)) && (c = i [ 2]. ToLowerCa se (), i [1]? (p.length> 0&&c === p [p.length-1] &&p.pop (), 0 === p.length&& (l =! 1)) πŸ™ p. push (c), l =! 0)); else {if (n = (n = e.txt) .replace (/ (rock) ‘n’ (roll) / gi, “$ 1’n ‘$ 2”), t = n.slice (-1) ,! l) switch (n = g (n), n = h (n), n = d (n), n = x (n)) {case “‘”: n = / S / .test (o)? “‘”: “‘”; Break; case ‘”‘: n = / S / .test (o)?” “”: “” “; Break; default: n = m (n)} o = t, a.push (n)}}), a.join (“”)}, f = t.tokenize = function (e) {for (var t, n = [] , s = 0, r = / ([^] *>) / gi; zero! == (t = r.exec (e));) {var a = t [1], p = t [2]; a&&n.push ({type: “text”, txt: a}), n.push ({type: “tag”, txt: p}), s = r.lastIndex} return r.lastIndex) / g, “$ 1 -“)}, d = t.smartEllipses = function (e) {return e.replace (/…/ g, “…”). replace (/ . . ./ g, “…”)}, x = t.smartBackticks = function (e) {return e.replace ( /“/g,”””).replace(/“/g, “” “)}, m = t.smartQuotes = function (e) {var t =” (? =% s \ B) ” .replace (“% s”, “[! ” # \ $ \% \ ‘() *, -. \ /:;? \ @ \ [\\] \ ^ _ `{|} ~]”), s = “[^ \ \ t \ r n \ [\ {\ (\ -]”, r = n (“(\ s | | – | & [mn] dash; | – | – | ȁ [34];) ‘(? = \ w) “,” g “), a = n (” (“s”)’ (?! \ s | s \ b | \ d) “,” g “), p = n (” (“s”) ‘(?! \ s | s \ b) “,” g “), c = n (‘(\ s | | – | & [mn] dash; | – | – | ȁ [34];) “(? = \ w)’,” g “), i = n ( ‘”(? = \ s)’,” g “), l = n (” (“s’)” ‘, “g”); return e.replace (n (“^’% s” .replace ( “% s”, t), “g”), “‘”). replace (n (‘ ^ “% s’.replace (“% s “, t),” g “),” “”). replace (/”‘(?=w)/g,””‘”).replace(/ ‘”(? = w) / g,”‘ “”). replace (/ b ‘(? = d {2} s) / g, “‘”). Replace (r, “$ 1′”). Replace (a, “$ 1 ‘”). Replace (p, “$ 1’ $ 2”). Replace (“‘”, “‘”) .replace (c, “$ 1” “). replace (i,” “”). replace (l, “$ 1” “). replace (‘”‘, “” “)}, y = function (e) {this._wrapped = e}, v = function (e, n) {y.prototype [e ] = function () {return e = n.call (t, this._wrapped), this._chain? t (e) .chain (): e; var e}}; for (l in t) t.hasOwnProperty ( l) && ((o = t [l]) &CS SEANDCHARo.constructor&&o.call&&o.apply) &&v (l, t this }, y.prototype.value = function () {return this._wrapped}} (dies);
}, {}];
window.modules [“1317”] = [function (require, module, exports) {“use strict”; module.exports = {isString: function (n) {return “string” == typeof n}, isObject: function ( n) {return “object” == typeof n&&null! == n}, isNull: function (n) {return null === n}, isNullOrUndefined: function (n) {return null == n}};
}, {}];
window.modules [“1344”] = [function (require, module, exports) {“use strict”; const universalAgora = require (1346), universalRest = require (20), universalQuery = require (1345), _ get = require ( 13); function searchByQueryWithRawResults (e, r) {const t = `// $ {r.site.host} $ {80! == r.site.port?`: $ {R.site.port} `:” “} $ {r.site.path} / _ agora / _search`; return universalRest.post (t, e,! 0)} function getProducts (e, r, t) {return searchByQueryWithRawResults (universalAgora.buildProductsQuery (e), r ) .then (e => {const r = universalQuery.formatSearchResult (e); return {total: e.hits.total, products: t? universalAgora.filterByLocale (r): r}})} function getMerchantsList (e) { return searchByQueryWithRawResults (universalAgora.buildMerchantsAggregation (1e6, _get (e, “site.agoraLocale”)), e) .then (universalQuery.formatAggregationResults ({aggregationName: “merchants”, field: “key”, subfield: “name”}) )} module.exports.getProduct = universalAgora.getProduct, module.exports.getProducts = getProducts, module.exports.getMerchantsList = getMerchantsList, module.exports.searchByCross yWith RawResults = searchByQueryWithRawResults, module.exports.buildMerchantsByUrlQuery = universalAgora.buildMerchantsByUrlQuery;
}, {“13”: 13, “20”: 20, “1345”: 1345, “1346”: 1346}];
window.modules [“1345”] = [function (require, module, exports) {“use strict”; const _map = require (75), _ get = require (13), _ isArray = require (174), _ set = require ( 131), _ isObject = require (112), _ cloneDeep = require (85), _ uniq = require (115); function formatSearchResult (e) {return _map (e.hits.hits, “_ source”)} function newQuery (e) { if (! e) throw new Error (“An` index` is required to create a query “); return {index: e, type:” _ doc “, body: {query: {}}}} function addShould ( e, o) {var t = _get (e, “body.query.bool.should”, void 0), r = _isArray (o); return t? r? _set (e, “body.query.bool.should “, t.concat (o)) πŸ™ t.push (o), _ set (e,” body.query.bool.should “, t)): _ set (e,” body.query.bool.should “, r? o: [o]), e} function addMust (e, o) {var t = _get (e, “body.query.bool.must”, void 0), r = _isArray (o); return t? r? _set (e, “body.query.bool.must”, t.concat (o)) πŸ™ t.push (o), _ set (e, “body.query.bool.must”, t)): _ set ( e, “body.query.bool.must”, r? o: [o]), e} function addMustNot (e, o) {var t = _get (e, “body.query.bool.must_not”, void 0 ), r = _isArray (o); return t? r? _set (e, “body.query.bool.must_not”, t .concat (o)) πŸ™ t.push (o), _ set (e, “body .query.bool.must_not “, t)): _ set (e,” body.query.bool.must_not “, r? o: [o]), e} function addFilter (e, o) {var t = _get ( e, “body.query.bool.filter”, void 0); if (! _ isObject (o)) throw new Error (“Filter query must be an object”); return t? _isArray (t)? (t.push ( o), _ set (e, “body.query.bool.filter”, t)): _ set (e, “body .query.bool.filter”, [_ cloneDeep (t), o]): _ set (e, ” body.query.bool.filter “, o), e} function addMinimumShould (e, o) {if (” number “! = typeof o) throw new Error (” A number is required as a second argument “); return _set ( e, “body.query.bool.minimum_should_match”, o), e} function addSort (e, o) {var t = _get (e, “body.sort”); return _isArray (t) || _set (e, “body.sort”, t = []), t.push (o), e} function addSize (e, o) {if (! o&CSSEANDC HAR0! == o) return e; if (o = parseInt (o), isNaN (o)) throw new Error (`Second argument must be a number: $ {o}`); return _set (e, “body. size “, o)} function addFrom (e, o) {if (! o&&0! == o) return e; if (o = parseInt (o), isNaN (o)) throw new Error (` Second argument must be a number be r: $ {o} `); return _set (e,” body.from “, o)} function onlyWithTheseFields (e, o) {if (! _ isArray (o)) throw new Error (” Second argument must be an array “); return _set (e,” body._source.include “, _ uniq (o)), e} function onlyWithinThisSite (e, o) {return o.subsiteSlug? addFilter (e, {term: {subsite: o .subsiteSlug }}) πŸ™ addFilter (e, {term: {site: o.slug}}), addMustNot (e, {exists: {field: “subsite”}})), e} function onlyWithinThisDomain (e, o) { return addFilter (e, {prefix: {canonicalUrl: `http: // $ {o.host}`}}), e} function withinThisSiteAndCrossposts (e, o) {var t = {term: {}}, r = { bool: {should: [], minimum_should_match: 1}}; return t.term [“crosspost.” (o.subsiteSlug || o.slug)] =! 0, r.bool.should.push (t), o.subsiteSlug? r.bool.should.push ({term: {subsite: o.subsiteSlug}}) : (r.bool.should.push ({term: {site: o.slug}}), addMustNot (e, {exists: {field: “subsite”}})), addFilter (e, r), e} function withinThisDomainOrCrossposts (e, o) {return addShould (e, {term: {[`crosspost. $ {o.subsiteSlug || o.slug}`] :! 0}}), addShould (e, {prefix: {canonicalUrl : `http: // $ {o.host}`}}), addMinimumShould (e, 1), e} function moreLikeThis (e, o, t) {let r = {fields: [“tags”], like: {_index: e.index, _type: “_ doc”, _ id: o}, include:! 1, min_term_freq: 1, max_query_terms: 12, min_doc_freq: 1}; return {more_like_this: Object.assign (r, t)}} Function addAggregation (e = {}, o) {const {body: t = {}} = e; return o? (T.aggs? _Set (e, “body.aggs”, Object.assign (t.aggs, o )): _ set (e, “body.aggs”, o), e): e} function formatAggregationResults ({aggregationName: e = “”, field: o = “”, subfield: t = “”, skipEmpty: r = ! 0}) {return function (s = {}) {let u = _get (s, `aggregations. $ {E} $ {t?”. “T”. “:”. “} Buckets`, []) ; return r&& (u = u.filter (e => 0! == _ get (e, “doc_cou nt “, 0))), u.map (e => e [o] ||” “)}} function addGeo (e, o) {if (! _ isArray (o)) throw new Error (” Second argument is required to be an array “); if (2! == o.length) throw new Error (” Array must have length 2 “); if (o.some (isNaN)) throw new Error (” Array may only be Contain numbers “); return _set (e,” body.query.geo_shape.location.shape.type “,” point “), _ set (e,” body.query.geo_shape.location.shape.coordinates “, o), e} combine functionFunctionScoreQueries (e, o) {let t = _cloneDeep (_get (e, “body.query”, {})), r = _cloneDeep (_get (o, “body.query”, {})), s = _get (e, “body.sort”); return _set (e, “body.query”, {}), _ set (e, “body.query.function_score.functions”, []), e.body.query .function_score.functions.push ({filter: t, weight: 20}), e.body.query.function_score.functions.push ({filter: r, weight: 10}), e.body.query.function_score.score_mode = “max”, e.body. query.function_score.min_score = 10, _isArray (s) || _set (e, “body.sort”, s = []), s.unshift ({_ score: “desc”}), e} function addNestedObjQuery (e, o, t) {if (! e) throw new Error (“There is no base query to run the addNestedObjQuery operation ion”); if (! o) throw new Error (“There is no nested object path to run the nested query” ); if (! t) throw new Error (“There is no nested query path to execute the nested query against”); return _set (e, “nested”, {path: o, query: t}), e} function addMatchAll (e) {return _set (e, “body.query”, {match_all: {}}), e} function addMultiMatch (e, o) {const t = _get (e, “body.query.bool.must”, void 0), {fields: r, type: s, string: u} = o, i = {multi_match: {query: u, fields: r, type: s}}; return t? (t.push (i) , _set (e, “body.query.bool.must”, t)): _ set (e, “body.query.bool.must”, [i]), e} module.exports = newQuery, module.exports. addGeo = addGeo, module.exports.addAggregation = addAggregation, module.exports.addShould = addShould, module. exports.addFilter = addFilter, module.exports.addMust = addMust, module.exports.addMustNot = addMustNot, module.exports.addMinimumShould = addMinimumShould, module.exports.addSort = addSort, module.exports.addSize = addSize, module.exports addFrom = addFrom, module.exports.onlyWithTheseFields = only with synthesis fields, module.exports.onlyWithinThisS ite = only within this site, module.exports.onlyWithinThisDomain = only within this domain, module.exports.withinThisSiteAndCrossposts = withinThisSiteAndCrossposts, module.exports.withinThisDomainOrCrossposts = withinThisDomainOrCrossposts, module.exports.formatAggregationResults more like this , module.exports.combineFunctionScoreQueries = combineFunctionScoreQueries, module.exports.addNestedObjQuery = addNestedObjQuery, module.exports.addMatchAll = addMatchAll, module.exports.addMultiMatch = addMultiMatch;
}, {“13”: 13, “75”: 75, “85”: 85, “112”: 112, “115”: 115, “131”: 131, “174”: 174}];
window.modules [“1346”] = [function (require, module, exports) {(function (process, __ filename) {(function () {
“use strictly”; const _forEach = require (66), _ get = require (13), _ filter = require (158), _ map = require (75), _ isEmpty = require (111), urlParse = require (76), log = require (11) .setup ({file: __ filename}), queryService = require (1345), universalRest = require (20), AGORA_HOST = window.process.env.AGORA_HOST, AGORA_ELASTIC_PREFIX = window.process.env.AGORA_ELASTIC_PREFIX, =. GORA_END AGORA_HOST? `$ {AGORA_HOST} / api / v1`: null, requestHeader = {” Content-Type “:” application / json “}, PRODUCTS_INDEX =” agora-products “, AFFILIATES_INDEX =” affiliates “, RETAILERS_INDEX =” retailers “, FILTER_KEY = {merchants:” name “, affiliates:” affiliate “}, URL_RE = / ^ https?: / /.*$/; function getProducts (e, t) {const {limit: r = 100, start: a = 0, search: s = “”, sortDate: i = “desc”} = e, n = `$ {AGORA_ENDPOINT} / products? limit = $ {r} &start = $ {a} &search = $ { encodeURIComponent (s)} &sortDate = $ {i} `; return fetch (n) .then (handleResponse) .then (e => t? filterByLocale (e, t): e) .then (e => ({total: e .length, products: e})). catch (handleError (n))} function getProduct (e, t) {const r = `$ {AGORA_END PO INT} / products / $ {e} `; if (! AGORA_ENDPOINT) throw new Error (” No Agora endpoint was set “); if (” string “! = Typeof e) throw new Error (” Request must be a Specify product id “); return fetch (r) .then (handleResponse) .then (e => t? FilterByLocale (e, t): e) .catch (handleError (r))} function postProduct (e) {const t = `$ {AGORA_ENDPOINT} / products`, r = {method:” POST “, headers: requestHeader, body: JSON.stringify (e)}; return fetch (t, r) .then (handleResponse) .catch (handleError ( t))} Function putProduct (e, t) {const r = `$ {AGORA_ENDPOINT} / products / $ {e}`, a = {method: “PUT”, headers: requestHeader, body: JSON.stringify (t) }; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function patchProduct (e, t) {const r = `$ {AGORA_ENDPOINT} / products / $ {e}`, a = {method : “PATCH”, headers: requestHeader, body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function deleteProduct (e) {const t = ` $ {AGORA_ENDPOINT} / products / $ {e} `; return fetch (t, {method:” DELETE “, headers: requestHeader}). Then (handleResponse) .catch (handleError (t))} function getMerchantList (e) { const {limit: t = 100, fields: r = “”} = e; Return Promise.resolve ([{name: “Amazon”}]). catch (handleError (“”))} function getMerchant (e) {const t = `$ {AGORA_ENDPOINT} / merchants / $ {e}`; if (“string”! = typeof e) throw new Error (“Request must specify a merchant ID”); return fetch (t) .then (handleResponse ) .catch (handleError (t))} function patchMerchant (e, t) {const r = `$ {AGORA_ENDPOINT} / merchants / $ {e}`, a = {method: “PATCH”, headers: requestHeader, body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function postMerchant (e) {const t = `$ {AGORA_ENDPO INT} / merchants`, r = {method: “POST”, headers: requestHeader, body: JSON.stringify (e)}; return fetch (t, r) .then (handleResponse) .catch (handleError (t))} function putMerchant (e, t) {const r = `$ {AGORA_ENDPOINT} / merchants / $ {e}`, a = {method: “PUT”, headers: requestHeader, body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function deleteMerchant (e) {const t = `$ {AGORA_ENDPOINT} / merchants / $ {e}`; return fetch (t, {method: “DELETE”, hea ders: requestHeader}). Then (handleResponse) .catch (handleError (t))} function migrationMerchants (e) {const t = `$ {AGORA_ENDPOINT} / merchants / migrate-affiliate`, r = {method : “POST”, headers: requestHeader, body: JSON.stringify (e)}; return fetch (t, r) .then (handleResponse) .catch (handleError (t))} function getRetailers (e) {const {limit: t = 100, start: r = 0} = e, a = `$ {AGORA_ENDPOINT} / retailers? limit = $ {t} &start = $ {r}`; return fetch (a) .then (handleResponse) .then ( e => ({total: e.length, retailers: e})). catch (handleError (a))} function getRetailer (e) {const t = `$ {AGORA_ENDPOINT} / retailers / $ {e} `; return fetch (t). then (handleResponse) .catch (handleError (t))} function postRetailer (e) {const t = `$ {AGORA_ENDPOINT} / retailers`, r = {method:” POST “, headers: requestHeader, body: JSON.stringify ( e)}; return fetch (t, r) .then (handleResponse) .catch (handleError (t))} function putRetailer (e, t) {const r = `$ {AGORA_ENDPOINT} / retailers / $ {e}`, a = {method: “PUT”, headers: requestHeader, body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} fun ction deleteRetailer (e) {const t = `$ {AGORA_ENDPOINT} / retailers / $ {e}`; return fetch (t, {method: “DELETE”, headers: requestHeader}). then (handleResponse) .catch (handleError (t))} function getAffiliates (e) {const {limit: t = 100, start: r = 0} = e, a = `$ {AGORA_ENDPOINT} / affiliates? limit = $ {t} &start = $ {r}`; return fetch (a ) .then (handleResponse) .then (e => ({total: e.length, affiliates: e})). catch (handleError (a))} function getAffiliateRetailers (e) {const t = `$ {AGORA_ENDPOINT} / retailers / $ {e} / affiliates`; return fetch (t) .then (handleResponse) .catch (handleError (t))} function getAffiliateRetailer (e, t) {const r = `$ {AGORA_ENDPOINT} / retailers / $ {e} / affiliates / $ {t}`; return fetch (r) .then (handleResponse) .catch (handleError (r))} function postAffiliateRetailer (e, t ) {const r = `$ {AGORA_ENDPOINT} / retailers / $ {e} / affiliates`, a = {method:” POST “, headers: requestHeader, body: JSON.stringify (t)}; return fetch (r, a ) .then (handleResponse) .catch (handleError (r))} Function putAffiliateRetailer (e, t, r) {const a = `$ {AGORA_ENDPOINT} / retailers / $ {e} / affiliates / $ {t}`, s = {method: “PUT”, headers: requestHeader, body: JSON.stringify (r)}; return fetch (a, s) .then (handleResponse) .catch (handleError (a))} function deleteAffiliateRetailer (e, t) {const r = `$ {AGORA_ENDPOINT} / retailers / $ {e} / affiliates / $ {t}`; return fetch (r, {method: “DELETE”, headers: requestHeader}). catch (handleError (r)) } function postLocale (e) {const t = `$ {AGORA_ENDPOINT} / locales /`, r = {method: “POST”, headers: requestHeader, body: JSON.stringify (e)}; return fetch (t, r) . then (handleResponse) .catch (handleError (t))} function patchLocale (e, t) {const r = `$ {AGORA_ENDPOINT} / locales / $ {e}`, a = {method: “PATCH”, headers: requestHeader , body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function handleResponse (e) {try {return e.json (). then (t => {if (e.status> = 400) {const e = _get (t, “message.details [0] .message”); throw new Error (e)} return t})} catch (e) {throw new Error (e.message)}} function handleError (e) {return t => {throw log (“warn”, `Failed request to $ {e}`, t), new Error (`Request to $ {e} failed`)}} function buildProductsQue ry ({search: e = “”, limit: t = 100, start: r = 0, sortDate: a = “”, filters: s, locale: i}) {const n = queryService (PRODUCTS_INDEX), c = s&&Object .keys (s) .length? Object.keys (s) .filter (e => Array.isArray (s [e]) &&s [e] .length): [], o = { }, l = {}; if (prependElasticPrefix (n), e || c.length || i || queryService.addMatchAll (n), i&& (queryService.addMust (o, {match: {“locales.locale”: i}}), queryService. addMust (l, {match: {“merchants.locale”: i}})), e) if (isURL (e)) queryService.addMust (n, [queryService.addNestedObjQuery ({}, “merchants”, {match: {“merchants.buyUrl”: e}})]); else {const t = {}; queryService.addShould (t, [{match: {“locales.productId”: e}}, {match: {“locales. name “: {query: e, boost: 2}}}]), queryService.addMinimumShould (t, 1), queryService.addMust (o, _get (t,” body.query “))} if (c.length) {const e = {}; c.forEach (t => {const r = s [t], a = FILTER_KEY [t], i = {}; a&& (i [`merchants. $ {a}`] = r , queryService.addMust (e, {terms: i}))}), queryService.addMust (l, _get (e, “body.query”))} return _isEmpty (o) || queryServi ce.addMust (n, [ queryService.addNestedObjQuery ({}, “locales”, _ get (o, “body.query”))]), _ isEmpty (l) || queryService.addMust (n, [queryService.addNestedObjQuery ({}, “merchants”, _ get (l, “body.query”))]), queryService.addSize (n, t), r> = 0&&q ueryService.addFrom (n, r), “desc” === a || “asc” === a? queryService.addSort (n, {updatedAt: {order: a}}): e&&queryService.addSort (n, {_ score: {order: “desc”}}), n} function prependElasticPrefix (e ) {return e.index = AGORA_ELASTIC_PREFIX? `$ {AGORA_ELASTIC_PREFIX} _ $ {e.index}`: e.index, e} function buildMerchantsAggregation (e = 1e6, t) {const r = queryService (PRODUCTS_INDEX); return prependElasticPrefix ( r), queryService.addMust (r, {match: {active:! 0}}), t&&queryService.addMust (r, queryService.addNestedObjQuery ({}, “merchants”, _ get (queryService.addMust ({}, {match: {“merchants.locale”: t}}), “body.query”))), queryService.addAggregation (r, {merchants: {nested: {path: “merchants”}, aggs: {name: {terms: { field: “merchants.name”, size: e}}}}}), queryService.addSize (r, 0), r} function isURL (e) {return URL_RE.test (e)} function filterByLocale (e, t, r = {locales: “US”}) {const a = Array.isArray (e); if (_isEmpty (e)) return a? []: {}; const s = [“locales”, “merchants”], i = a? e: [e], n = Object.keys (r), c = _map (i, e => {const a = Object.assign ({}, e); return _forEach (s, s => {if (Object. keys (a) .includes (s)) {const i = t? _filter (e [s], [“locale”, t]): e [s]; a [s] = i,! i.length&&n.includes (s) && (a [s] = (_ filter (e [s], [“locale”, r [s]]) || []). map (e => (e.id = null, e.locale = t, e)))}}), a.name = _get (a, “locales [0] .name”, “”), a}); return a&&c.length? c: _get (c, “[0 ] “, {})} Function searchByQueryWithRawResults (e, t) {const r =` // $ {t .site.host} $ {80! == t.site.port? `: $ {T.site.port } `:” “} $ {t.site.path} / _ agora / _search`; return universalRest.post (r, e,! 0)} function buildMerchantsByUrlQuery (e) {const t = queryService (PRODUCTS_INDEX); return prependElasticPrefix ( t), queryService.addNestedObjQuery (t.body.query, “merchants”, {match: {“merchants. buyUrl “: e}}), t} Function getAffiliatesByLocale (e, t) {const r = que ryService (AFFILIATES_INDEX); return prependElasticPrefix (r), queryService.addMust (r, {match: {locale: e}}), queryService.addSize (r, 1e3), queryService.addSort (r, {name: “asc”}), searchByQueryWithRawResults (r, t) .then (e => _ get (e, “hits.hits”, []). map (e => _ get (e, “_ source”, {})))} function buildRetailersQuery ({search: e = “”, limit: t = 50, start: r = 0, direction: a = “asc”, locale: s = “US”, sortColumn: i = “retailers”}) {const n = queryService (RETAILERS_INDEX); if (prependElasticPrefix (n), queryService.addMust (n, {match: {locale: s}}), e&&queryService.addMultiMatch (n, {fields: [“name”, “domains ^ 2”], string: e, type: “phrase_prefix”}), “Retailers” === i&&queryService.addSort (n, {“name.keyword “: a}),” affiliates “=== i) {let e = {}; queryService .addNestedObjQuery (e,” affiliateRetailers “, {match_all: {}}), queryService.addMust (n, e), queryService. addSort (n, {“affiliateRetailers.affiliateName.keyword”: {order: a, nested_path: “affiliateRetailers”}})} return query Service.addSize (n, t), queryService.addFrom (n, r), n} function getRetailer sList (e, t) {return searchByQueryWithRawResults (buildRetailersQuery (e), t) .then (e => ({total: _get (e, “hits.total”, 0), retailers: _get (e, “hits.hits”, []). map (e => _ get (e, “_ source”, {}))}))} function getRetailersByAffiliateId (e, t, r) {const a = queryService (RETAILERS_INDEX); return e? (prependElasticPrefix (a), queryService.addMust (a, {match: {locale: r}}), queryService.addMust (a, [ queryService.addNestedObjQuery ({}, “affiliateRetailers”, {match: {“affiliateRetailers.affiliateId”: e}})]), queryService.addSize (a, 1e4), queryService.addSort (a, {“name.keyword”: “asc”}), searchByQueryWithRawResults (a, t) .then (e => _ get (e, “hits.hits”, []). map (e => _ get (e, “_ source”, {}))) ): Promise.reject ()} function getMerchantsList (e) {return searchByQueryWithRawResults (buildMerchantsAggregation (1e6, _get (e, “site.agoraLocale”)), e) .then (queryService.formatAggregationResults ({aggregationName: “. Merchants”, field : “key”, subfield: “name”}))} function queryRetailersByUrl (e, t, r) {const a = urlPa rse (e) .host.split (“www.”). join (“”), s = queryService (RETAILERS_INDEX); return qu eryService.addMust (s, {match: {locale: r}}), queryService.addMust (s, {match: {domains: a}}), prependElasticPrefix (s), queryService.addSize (s, 10), searchByQueryWithRawResults (s, t) .then (e => _ get (e, “hits.hits”, []). map (e => _ get (e, “_ source”, {})))} function queryRetailersByName (e, t, r) {const a = queryService (RETAILERS_INDEX); Return queryService.addMust (a, {match : {locale: r}}), queryService.addMust (a, {match: {“name.keyword”: e}}), prependElasticPrefix (a), queryService.addSize (a, 10), searchByQueryWithRawResults (a, t) .then (e => _ get (e, “hits.hits”, []). map (e => _ get (e, “_source”, {})))} require (233), module.exports = {buildProductsQuery : buildProductsQuery, buildMerchantsAggregation: buildMerchantsAggregation, getProducts: getProducts, getProduct: getProduct, postProduct: postProduct, putProduct: putProduct, patchProduct: patchProduct, deleteProduct, patchProduct, deleteProduct, patch, postMerchant, patchMerchant, patch: getMerchantMerchant, patch: getMerchant, postProduct: getMerchant, postProduct: getMerchant: erchant, putMerchant: putMerchant, deleteMerchant: deleteMerchant, migrateMerchants: mig rate merchants, getRetailers: getRetailers, getRetailersList: getRetailersList, getRetailer: getRetailer, post retailer: post retailer, putRetailer: putRetailer, deleteRetailer: deleteRetailer, getRetailersByAffiliateId: getRetailersByAffiliateId, getAffiliates: getAffiliates, getAffiliateRetailers: getAffiliateRetailers , getAffiliateRetailer: getAffiliateRetailer, post affiliate retailer: post affiliate retailer, putAffiliateRetailer: putAffiliateRetailer, deleteAffiliateRetailer: deleteAffiliateRetailer, isURL: isURL, filterByLocale: filterByLocale, patch locale: patch locale, post locale: post locale, buildMerchantsByUrlQuery: buildMerchantsByUrlQuery, getAffiliatesByLocale: getAffiliatesByLocale, searchByQueryWithRawResults: searchByQueryWithRawResults, getMerchantsList: getMerchantsList, queryRetailersByUrl : queryRetailersByUrl, queryRetailersByName: queryRetailersByName};

}). call (this)}). call (this, require (26), “/ services / universal / agora.js”)}, {“11”: 11, “13”: 13, “20”: 20 , “26”: 26, “66”: 66, “75”: 75, “76”: 76, “111”: 111, “158”: 158, “233”: 233, “1345”: 1345}] ;
window.modules [“1347”] = [function (require, module, exports) {“use strict”; const _map = require (75), _ mapValues ​​= require (228), _ reduce = require (113), _ assign = require ( 162), _ get = require (13), _ pickBy = require (163), _ find = require (67), affiliateFields = [“siteShortKey”, “pageUri”, “productId”, “utmMedium”, “utmSource”, “sessionCount” , “format”, “utmCampaign”, “referrer”, “deviceAbbreviation”, “zone”], affiliateSettings = {amazon: {domains: [“amazon.com”, “amazon.co.uk”], subtagKey: “ascsubtag “, maxLength: 99, delimiter:” standard “, encode:! 1}, narrative: {domains: [” shop-links.co/” ],subtagKey:”u1″,maxLength:99,delimiter:”standard “, encode:! 0}, rakuten: {domains: [“click.linksynergy.com/deeplink”,”linksynergy.walmart.com/deeplink” ],subtagKey:”u1″,maxLength:72,delimiter:”standard”,encode :! 1}, shareasale: {domains: [“shareasale.com”], subtagKey: “afftrack”, maxLength: 99, delimiter: “standard”, encode:! 1}, skimlinks: {domains: [“go.redirectingat .com “], subtagKey:” xcust “, maxLength: 50, delimiter:” alt “, encode:! 1}, impact: {domains: [], subtagKey:” subId2 “, maxLen gth: 99, delimiter: “standard”, encode:! 1}, avantlink: {domains: [“avantlink.com”], subtagKey: “ctc”, maxLength: 64, delimiter: “old”, encode:! 1 }, cj: {domains: [“tkqlhce.com”, “jdoqocy.com”, “dpbolvw.net”, “anrdoezrs.net”, “kqzyfj.com”], subtagKey: “sid”, maxLength: 64, separator : “alt”, encode:! 1, joinBy: “/”, assignBy: “/”, positioned:! 0, position: “after”, positionKey: “type / dlg /”}, partnerize: {domains: [” prf .hn “], subtagKey:” pubref “, maxLength: 100, delimiter:” alt “, encode:! 1, joinBy:” / “, assignBy:”: “, positioned:! 0, position:” before “, positionKey: “Target”}, pepperjam: {domains: [“gopjn.com”, “pntrac.com”, “pjtra.com”, “pjatr.com”, “pntrs.com”, “pntra.com”], subtagKey: “sid”, maxLength: 100, delimiter: “alt”, encode:! 1}, awin: {domains: [“awin1.com”], subtagKey: “pref1”, maxLength: 100, delimiter: “alt” , encode:! 1, positioned:! 0, position: “before”, positionKey: “ued”}}, subtagDictionary = {siteShortKey: “”, pageUri: “p”, productId: “i”, zone: “z” , device abbreviation: “d”, utmSource: “s”, utmMedium: “m”, utmCampaign: “c”, sessionCount: “u”, referrer: “r”, format: “t”}, d elimite rs = {standard: [“[“, “]”], old: [“__”, “_”]}; function parseValueFromSubtag (e, t, i) {const a = t [0] et [1] , s = i.split (a) [1] || “”; return s? s.split (t [0]) [0]: null} function parseSubtag (e, t = delimiters.standard) {return _pickBy ( _mapValues ​​(subtagDictionary, i => parseValueFromSubtag (i, t, e)))} function generateSubtag (e, t, i = delimiters.standard, a =! 1) {const s = (e => t => `$ { e [0]} $ {t} $ {e [1]} `) (i); let n = _reduce (affiliateFields, (t, i) => {const a = s (subtagDictionary [i]), n = e [i]; return t (n? an: “”)}, “”); return a&& (n = encodeURIComponent (n)), n} function applySubtagMaxlength (e, t) {var i = t-3 * ( e .split (“,”). length-1 e.split (“|”). length-1); return e.substr (0, i)} function getSubtagData ({getters: e, fields: t = [] , visitState: i, locals: a, productLink: s}) {let n = {}; return t.forEach (t => {n [t] = e [t] &&e [t] ({visitState: i, locals : a, productLink: s})}), n} function parseQuery (e = “”) {return e.split (“&”). reduce ((e, t) => {const i = t.split (” = “) [0], a = t.split (” = “) [1]; return void 0! == a&& (e [i ] = a), e}, {})} fun ction processSubtagPosition ({url: e, positionKey: t, subtagKey: i, position: a = “after”, subtagString: s, joinBy: n, assignBy: o} = {}) {const [r, l] = e. split (t), u = `$ {i} $ {o} $ {s}`, g = []; if (“after” === a) {if (! l) return e; const [a, s = “”] = l.split (`$ {i} $ {o}`), d = s.split (n) .slice (1) .join (n); g.push (`$ {r} $ {t} `, u), a&&g.push (a), d&&g.push (d)} if (” before “=== a) {const [e, a =” “] = r.split (` $ {i} $ {o} `), s = a.split (n) .slice (1) .join (n); g.push (e), s&&g.push (s), g.push (u,` $ {t} $ {l} `)} return g.reduce ((e, t) => {return e.slice (-1) === n&& (e = e.slice (0, -1)), e.length? [e, t] .join (n): t}, “”)} function processSubtag ({getters: e, affiliate: t, url: i, visitState: a = {}, locals: s}) {const n = affiliateFields, o = _get (affiliateSettings [t], “subtagKey”), r = _get (affiliateSettings [t], “maxLength”), l = _get (affiliateSettings [t], “encode”), u = _get (affiliateSettings [t], “delimiter”), g = _get (affiliateSettings [t], “positioned”,! 1), d = _get (affiliateSettings [t], “position”), c = _get (affiliateSettings [t ], “positionKey”), p = _get (affiliateSettings [t], “assignBy”, “=”), m = _get (affiliateSettings [t], “joinBy”, “&”), f = delimiters [u]; let b, y, S = i. indexOf (“?”)> = 0? i.split (“?”). pop (): “”, h = parseQuery (S), _ = getSubtagData ({getters: e, fields: n, visitState: a, locals: s, productLink: i}); return o&& (y = h [o] || “”, y = applySubtagMaxlength (b = generateSubtag (_ = _ assign (parseSubtag (y, f), _ pickBy (_)), t , f, l), r), h [o] = y, S = _map (h, (e, t) => `$ {t} = $ {e}`) .join (“&”), i = g? processSubtagPosition ({url: i, positionKey: c, subtagKey: o, position: d, subtagString: y, joinBy: m, assignBy: p}): i.split (“?”) [0] `? $ {S} `), i} function getAffiliate (e) {const t = Object.keys (affiliateSettings); return _find (t, t => _ find (affiliateSettings [t] .domains, t => e.includes (t .toLowerCase ()))) || “”} Function createSubtagProcessor (e) {return ({url: t, visitState: i, locals: a, affiliate: s}) => (s = getAffiliate (t) || s )? processSubtag ({getters: e, url: t, affiliate: s, visitState: i, locals: a}): “”} module.exports.generateSubtag = generateSubtag, module.exports.getAffiliate = getAffiliate, module.exp orts .createSubtagProcessor = createSubtagProcessor, module.exports.processSubtag = processSubtag;
}, {“13”: 13, “67”: 67, “75”: 75, “113”: 113, “162”: 162, “163”: 163, “228”: 228}];
window.modules [“article-nav.client”] = [function (require, module, exports) {“use strict”; const dom = require (4), _ throttle = require (62), $ visibility = require (5) , $ popup = require (78), $ gtm = require (3), {reportSocial: reportSocial} = require (77), auth0 = require (10); module.exports = (t => {let e = dom.find (“.page-header”), i = dom.find (“. article-content”), r = dom.find (t, “. deepscroll-headline”), o = dom.find (t, “. deepscroll -rubric “), s = dom.find (t,”. deepscroll-rubric-sponsored “), l = dom.find (“. article .article-header .rubric “), n = dom.find (” # deepscroll_center_divider “), a = dom.find (“. clay-paragraph “), d = dom.find (t,”. logo “), c = dom.find (t,”. dyn-cut-logo “), p = dom.find (t, “. article-nav-top”), u = dom.find (t, “. article-nav-deepscroll”), m = dom.find (‘link [rel = “canonical”] ‘), f = m&&m.getAttribute (“href”), g = dom.find (‘ meta [property = “og: image”] ‘)? dom.find (‘ meta [property = “og: image”] ‘ ) .getAttribute (“content”): “”, h = dom.find (‘meta [property = “og: title”]’)? dom.find (‘meta [property = “og: title”]’). getAttribute (“content”): “”, y = dom.find ( t, “. shar e-link.facebook”), w = dom.find (t, “. share-link.twitter”), v = dom.find (t, “. share-link.pinterest”), b = t.classList. contains (“header-simple”), x = window.getComputedStyle (d, null) .getPropertyValue (“- targetFlexBasis”), L = window.getComputedStyle (d, null) .getPropertyValue (“- verticalStart”) || 0, C = window.getComputedStyle (d, null) .getPropertyValue (“- verticalEnd”) || 0, $ =! 1, _ = 55; function k () {_ = parseInt (window.getComputedStyle (d, null ) .getPropertyValue (“- stickyTop”)) || _, C = $ visibility.getViewportWidth ()> = 1180? window.getComputedStyle (d, null) .getPropertyValue (“- verticalEndDesktop”) || C: window. getComputedStyle (d, null) .getPropertyValue (“- verticalEnd”) || C} function S () {$ =! 1, P ()} function P () {let {top: r} = t.getBoundingClientRect () , o = window.getComputedStyle (d, null) .getPropertyValue (“- baseFlexBasis”), s = ox, l = (_- e.getBoundingClientRect (). top) / _, n = Math.max (0, Math .min (1, l)), m = LC-2, f = Math.round (L- (m * n 2)), g = Math.ceil (os * n); if (lt? e.classList. add (“header-after-scroll”): e.classList.remove (“header-after-scroll”), p.style.transform = `translateY ($ {C} px)`, u.style.transform = `translateY ($ {C} px)`, void (d.style.flexBasis = x “px”)} window.scrollY> r? t.classList.add (“after-scroll”): t.classList.remove ( “after-scroll”), window.scrollY> r? e.classList.add (“header-after-scroll”): e.classList .remove (“header-after-scroll”), p.style.transform = ` translateY ($ {f} px) `, u.style.transform =` translateY ($ {f} px) `, d.style. flexBasis = g” px “, c&& (c.style.flexBasis = g” px ” ), $ visibility.getViewportWidth ()> = 1180&&i&&function () {const t = a? $ visibility.getPageOffset (a) .top-70: 0, e = $ visibility.getPageOffset (i) .top, r = Math.max (e, t); return Math.max (window.scrollY, document.body.scrollTop)> = r} ()? T.classList .add (“deep-scroll”): t.classList.remove (“deep-scroll”)} function V (t) {var e = t.currentTarget, i = e.getAttribute (“href”), r = e .getAttribute (“data-handle”), o = $ popup.getPopupClass (e.classList), s = $ visibility.isBelowPrimaryContent (e)? “bottom”: “top”; $ gtm.reportNow ({event: “social -share-widget “, clickLocation: s, socialNet work: o}), reportSocial (o), $ visibility.getViewportWidth ()> = 768&&o&& (t.preventDefault (), $ popup.popWindow (o, r, i)) }! function () {const e = _throttle (P, 30); if (k (), dom.findAll (t, “. share-link”). forEach (t => t.addEventListener (“click”, V )), y&& (y.href = “http: //www.facebook.com/sharer/sharer.php? u =” f “? utm_source = fb&utm_medium = s3&utm_campaign = sharebutton-t”), wCSSEANDfCHARC (wCSSEANDfCHARC) “https://twitter.com/share? text = “encodeURIComponent (h)” &url = “f”? utm_source = tw&utm_medium = s3&utm_campaign = sharebutton-t&via = “w.getAttribute (” data-handle “)), v&C: // pinterest. com / pin / create / button /? url = “f”? utm_source = pin&utm_medium = s3&utm_campaign = sharebutton-t&description = “encodeURIComponent (h)” &media = “g)”, b) return; auth0.on (“init0.on (” init ) => {auth0.isSubscriber () &&t.classList.add (“subscribed”)}), window.addEvent Listener (“scroll”, e), window.addEventListener (“resize”, S), window.addEventListener (” resize “, k), l? l.classList.contains (” rubric-sponsor-story “) &&s? (o.classList.remove (” visible “), s.classList.add (” visible “), s.textContent = l.text || l.textContent) πŸ™ o.textContent = l.text || l.textContent, o.href = l.href || “#”) πŸ™ n.style.display = “none”, o.style.display = “none”); S (), r.textContent = h} ()});
}, {“3”: 3, “4”: 4, “5”: 5, “10”: 10, “62”: 62, “77”: 77, “78”: 78}];
window.modules [“nav-search-button.client”] = [function (require, module, exports) {“use strict”; const dom = require (4), $ gtm = require (3), {reportSearch: reportSearch } = require (77), openClass = “open”, closeClass = “closed”; module.exports = (e => {const s = e, t = dom.find (e, “. nav-search-button-trigger “), n = dom.find (e,”. nav-search-form “), o = dom.find (e,”. search-input “); function i () {const e = dom.find (” body “); s.classList.toggle (closeClass), s.classList.toggle (openClass), e.classList.toggle (” disabled “), e.classList.toggle (” search-active “)} function c () {i (), s.classList.contains (openClass) &&o.focus ()} function a (e) {! s.contains (e.target) &&s.classList.contains (openClass) &&i ()} function r (e ) {27 === e.keyCode&&s.classList.contains (openClass) &&i ()} function d (e) {e.preventDefault (), $ gtm.reportCustomEvent ({category: “search”, label: “on =” window.location.href, action: o.value}), reportSearch ((o.value || “”). split (“”), () => n.submit ())}! functi on (e, s, t) {s&&s.addEventListener (“click”, c); t&&t.addEventListener (“submit”, d); e.addEventListener (“click”, a), document.addEventListener (“keydown”, r), e .addEventListener (“touchend”, a), n.addEventListener (“submit”, d)} (dom.find (“body”), t, dom.find (e, “. nav-search-form Submit”)) });
}, {“3”: 3, “4”: 4, “77”: 77}];
window.modules [“nav-dropdown-button.client”] = [function (require, module, exports) {“use strict”; const dom = require (4), visibility = require (5), {reportSearch: reportSearch} = require (77); function getNextSiblings (e) {const t = []; let i = e; for (; i = i.nextElementSibling;) t.push (i); return t} function getMainChildren (e, t) {let i = [], n = e.firstChild; for (; n = n.nextElementSibling;) n.contains (t)? n.isSameNode (t) || (i = i.concat (getMainChildren (n, t ))): i.push (n); return i} function isMobile () {return visible.getViewportWidth () {let t; const i = e.querySelector (“. nav-dropdown-button-trigger”), n = dom.find (“body”), o = dom.find (“. top”), l = dom.find (“. confetti-list”), s = dom.find (“. nav-dropdown-button_nymag-homepage “), r = dom.find (” header.page-header “) || o, c = dom.find (‘[data-editable =” main “]’), a = dom.closest (e,”. page-header “), d = a? a.querySelectorAll (“. confetti-image.blue “):” “, g = a? a.querySelectorAll (“. confetti-image.green “):” “, u = a? a.querySelectorAll (“. confetti-image.orange”): “”, f = a? a.querySelectorAll (“. confetti-image.orange2”): “”, m = a? a.que rySe lectorAll (“. confetti-image.pink”): “”, p = a? a.querySelectorAll (“. confetti-image.purple”): “”, h = a? a.querySelectorAll (“. confetti-image . yellow “):” “, y = e.querySelectorAll (“. dropdown-nav-search-form “); function b (e) {let t = e.currentTarget, i = t.querySelector (“. nav-search- input “), n = i? i.value.split (” “): []; e.preventDefault (), reportSearch (n, () => t.submit ())} i.addEventListener (” click “, () => {initializeHeight (e), v ()}); for (let e = 0, t = y.length; e (function (e) {e.classList.remove (“c-right”, “c -rightdown “,” c-left “,” c-leftdown “)}) (e))}, 500)} ()) πŸ™ i.setAttribute (” aria-expanded “,” true “), t = window .scrollY), e.classList.toggle (“closed”), e.classList.toggle (“open”), n.classList.toggle (“disabled”), a&&e.isSameNode (s)? function () {if ( o.contains (e)) {const e = getMainChildren (o, s); S (e), w (o)} if (c.contains (e)) {const e = getMainChildren (c, s); o. classList.toggle (“hidden component”), w (c), S (e)} e.classList.toggle (“open-mobile”)} (): a&&! y&&r&& (w (r), function () { const i = e .classList.contains (“open”)? 0: t; window.scrollTo ({top: i})} ())} function w (e) {S (getNextSiblings (e))} function S ( e) {e .forE ach (e => {e.classList.toggle (“hidden-component”)})} n.addEventListener (“click”, t => {! e.contains (t.target) &&e.classList.contains (“open “) &&v ()}), document.addEventListener (” keydown “, t => {27 === t.keyCode&&e.classList.contains (” open “) &&v ()})});
}, {“4”: 4, “5”: 5, “77”: 77}];
window.modules [“follow.client”] = [function (require, module, exports) {“use strict”; const _find = require (67), $ popup = require (78); DS.controller (“follow”, [function () {function e (e) {this.el = e, this.handle = e.getAttribute (“data-handle”)} return e.prototype = {events: {click: “openFollow”}, openFollow: function (e) {var t, n, a = $ popup.position, o = $ popup.params, l = {}, r = {w: 780, h: 500}, s = new a (rw, rh) , c = this.el.classList; l.handle = this.handle, r.left = s.left, r.top = s.top, n = _find ([{className: “facebook”, url: “https: //facebook.com/{handle}”,network:”Facebook”},{className:”pinterest”,url:”http://www.pinterest.com/ registers”,network:”Pinterest “}, {className: “instagram”, url: “https://www.instagram.com/ Zonenhandle}”, network: “Instagram”}, {className: “rss”, url: “http: //feeds.feedburner. com / {handle} “, network:” RSS “}, {className:” twitter “, url:” https://twitter.com/intent/follow?screen_name=phiahandle Genealogie&tw_p=followbutton&variant=2.0 “, network: “Twitter”}, {className: “snapchat”, url: “https://www.snapchat.com/discover/ Genealogiehandle}” , netw ork: “Snapchat”}], function (e) {return c.contains (e.className)}), l.url = n.url.replace (“{handle}”, l.handle), l. network = n.network, l.name = “Follow” l.handle “on” l.network, t = new o (l, r), window.open (t.address, t.name, t.features), e. PreventDefault ()}}, e}]);
}, {“67”: 67, “78”: 78}];
window.modules [“comments-link.client”] = [function (require, module, exports) {“use strict”; const dom = require (4), _ get = require (13), _ isFinite = require (134), ajax = require (133); DS.controller (“comments-link”, [function () {var t, e = “http: //” document.documentElement.getAttribute (“data-uri”) “.html”; Function n (n) {var o; (this.el = n, this.coral_talk_root = n.getAttribute (“data-coral-talk”), this.commentsCount = dom.find (n, “. Comments-link-count “), this.commentsText = dom.find (n,”. comments-link-text “), this.isNavVariation = n.classList.contains (” comments-link_article-nav “), this.cutoffCnt = n.getAttribute ( “data-cutoffCnt”) || 1e3, t = `$ {this.coral_talk_root} /api/v1/graph/ql`,this.shouldRenderCommentStream ()) && (o = this.onCommentCountFetched.bind (this), ajax. sendReceiveJson ({method: “GET”, url: t ‘? query = {asset (url: “‘ e ‘”) {totalCommentCount}}’, dataType: “json”}, function (t, e) {var n = _get (e, “data.asset.totalCommentCount”, 0); return t? o (t): _ isFinite (n)? void o (null, n): o (“Unexpected Coral Talk response”)})) } back ck n.prototype.onCommentCountFetched = function (t, e) {if (t) return console.warn (t); e> 0&& (this.isNavVariation&&e1? “s”: “”), this.el.classList.remove (“no comments”))}, n.prototype.shouldRenderCommentStream = function () {return-1! == e.indexOf (“@ published”)}, n}]);
}, {“4”: 4, “13”: 13, “133”: 133, “134”: 134}];
window.modules [“head-gtm.client”] = [function (require, module, exports) {“use strict”; const {getCLS: getCLS, getFID: getFID, getLCP: getLCP} = require (166), isProduction = require (9) (); function reportWebVitals (e) {isProduction || console.log (“reportWebVitals:% O”, e); const t = “string” == typeof e.name?e.name.toUpperCase () : e.name; window.dataLayer = window.dataLayer || [], window.dataLayer.push ({event: “analyticsEvent”, event_action: t, event_category: “Web Vitals”, event_label: e.id, event_value: e .delta, eventAction: t, eventCategory: “Web Vitals”, eventLabel: e.id, eventNonInt:! 0, eventValue: e.delta, nonInteraction:! 0, transport: “beacon”})} getCLS (e => { e.delta = Math.round (1e3 * e.delta), reportWebVitals (e)}), getFID (e => {e.delta = Math.round (e.delta), reportWebVitals (e)}), getLCP ( e => {e.delta = Math.round (e.delta), reportWebVitals (e)});
}, {“9”: 9, “166”: 166}];
window.modules [“concert-ads.client”] = [function (require, module, exports) {“use strict”; const customMappings = {“crime-assault”: “power”, “career money productivity”: “power “,” feminism-politics-identity “:” power “,” culture-media “:” culture “, celebrity:” culture “, living:” style “, fashion:” style “, shopping:” style “, weddings: “Style”, Beauty: “Style”, Animals: “Self”, “Learn Creativity”: “Self”, “Relationships-Friends-Family”: “Self”, “Mental Health Personality Social Behavior”: “Self”, “Learn creative “:” self “,” health-wellness “:” self “, parenting:” self “,” relationships-sex-dating marriage “:” self “}, striptags = require (79); function installConcertAds () {const e = new URLSearchParams (window.location.search) .get (“concert_config_url”), t = e || window.concertConfigUrl; window._nymPermutive || console.warn (“ConcertAds is initialized without permutive”), window.concertAds = createConcertAds (), window.concertAds.loadRemoteConfig (t) .then (function () {window.concertAds.install ()})} function createConcertAds () {const e = getAuth Status (); let t = getD ata (“title”), n = window.location.href, i = getData (“section”), o = “”, a = getData (“type”), r = getData ( “vertical”); t&& (t = striptags (htmlDecode (t)). split (“”)), n = n.slice (n.lastIndexOf (“/”) 1); const l = {kw: getKeywords () , network: r, page_type: a, entry_group: i, keywords: t, pn: n}; return “Homepage” === a? o = “homepage”: “Section Page” === a&& (o = (o = window.location.pathname). replace (/ // g, “”)), i&&-1 === i.indexOf (“”) && (o = i), customMappings [i] && (o = customMappings [i]), window.location .hostname.match (/ . aws ./ i) ​​&& (l.clay_sandbox_env = r), new window.ConcertAds ({cmd: [], slots: [], dfpVariables: l, slugPath: “/” o. replace (/ – | – / g, “-“), loggedIn: “unauthenticated”! == e, paywallActive: getPaywallStatus (e)})} function getKeywords () {try {const e = window._nymPermutive.article.keywords ; return e&&e.length> 0&&e.some (Boolean)? e: (document.querySelector (‘meta [name = “keywords”]’) || document.querySelector (‘meta [property = “article: tag”]’) ) .getAttribute (“content”). split (“,”). map (function (e) {return e.trim ()})} catch (e) {return}} function getData (e) {if (window. _nymPermutive) {if (e in window._nymPermutive) return window._nymPermutive [e]; if (window._nymPermutive.article&&e in window._nymPermutive.article) Return window. _nymPermutive.article [e]; if (window._nymPermutive.user&&e in window._nymPermutive.user) return window._nymPermutive.user [e]}} function htmlDecode (e) {var t = document.createElement (“div”); return t.innerHTML = e, 0 === t.childNodes.length? “”: t.childNodes [0] .nodeValue} function getAuthStatus () {const e = JSON.parse (localStorage.getItem (“auth0: profile” )), t = e? e [“http://nymag.com/app_metadata”]: null; return t? t.has_subscription? “entitled”: “unentitled”: “unauthenticated”} function getPaywallStatus (e) {const t = getData (“totalCount”) || 0; return Boolean (t> = 3&& “entitled”! == e)} window.ConcertAds? installConcertAds (): window.addEventListener (“concertAdsReady”, in stallConcertAds);
}, {“79”: 79}];
window.modules [“latest-news.client”] = [function (require, module, exports) {“use strict”; const dom = require (4), lazyLoad = require (120); function lazyLoadImage (a) {const o = dom.find (a, “img [data-src]”), d = dom.findAll (a, “source [data-srcset]”), e = dom.closest (a, “. result”); if (o&&e) {new lazyLoad.LazyLoader (e, o, d) .init ()}} Function handleLazyLoad (a) {(dom.findAll (a, “. result”) || []). forEach (lazyLoadImage)} module.exports = (a => {handleLazyLoad (a)});
}, {“4”: 4, “120”: 120}];
window.modules [“coral-talk.client”] = [function (require, module, exports) {“use strict”; const dom = require (4), store = require (140), visibility = require (5), auth0 = require (10), TALK_AUTH = “talk: auth_token”; let coralEmbed, hasEmbedScriptLoaded =! 1, hasCoralTalkRendered =! 1; function renderComments (e) {if (hasEmbedScriptLoaded&CSSEAND {{{= const! hasCoralTalkRendered) .CORAL_TALK_HOST} `, auth_token: getAuthToken (), asset_url: e.TALK_ASSET_URL}; hasCoralTalkRendered =! 0, coralEmbed = window.Coral.Talk.render (e.commentStreamContainer, t)}} function getAuthToken = e&&e [“http://nymag.com/coral_talk”] || auth0.getTalkJwt (), i = store.get (TALK_AUTH); return t? i&&t == i? i: (store.set (TALK_AUTH, t) , t) πŸ™ i&&store.remove (TALK_AUTH), null)} function coralLogin () {coralEmbed.login (getAuthToken ())} function embedScript (e, t) {let i = document.createElement (“script”); i.type = “text / javascript”, i.async =! 0, i.src = e, i.addEventListener (“load”, () => {hasEmbedScriptLoaded =! 0, renderComments (t)}), document. getElementsByTagName (“head”) [0] .appendChild (i)} function initVerificationMessage () {auth0.isAuthenticated () &&auth0.refresh (); let e = document.querySelector (“. coral -talk-container”); auth0. isAuthenticated () &&! auth0.isEmailVerified () && (e.insertAdjacentHTML (“beforebegin”, ‘ n n Please check your account to activate comments. Did not receive a confirmation email? Resend email now . n ‘), document.querySelector (“. activation-link”). addEventListener (“click”, sendVerificationEmail))} function sendVerificationEmail () {let e = document.querySelector (“. coral-talk -verify-address” ); return fetch (`https: // $ {window.location.host} / _user / verification-email? user_id = $ {auth0.getUserID ()}`, {method: “GET”, headers: {“Content- Type “:” application / json “}}). Then (e => e) .then (t => {t&&200 == t.status? E.inn erHTML = “Confirmation email was sent successfully”: e.innerHTML = `$ {t.statusText}`}). catch (e => console.log (e))} Function attemptScriptEmbedding (e, t) {initVerificationMessage ( ), hasEmbedScriptLoaded? renderComments (t): embedScript (t .EMBED_URL, t)} function addVisibilityListener (e, t) {new Visibility.Visible (e, {preloadThreshold: 750}). on (“preload”, () => attemptScriptEmbedding (e, t))} function removeSignInButton (e) {e&&e.parentNode&&dom.removeElement (e)} function init (e) {const t = e.getAttribute (“data-coral-talk-host”), i = ` $ {t} / static / embed.js`, n = `http: // $ {document.documentElement.getAttribute (” data-uri “)}. html`, a =” true “=== e.getAttribute ( “data-maintenance”), o = -1! == n.indexOf (“@ published”), r = e.querySelector (“. coral-talk-container”), s = e.querySelector (“. coral- talk-btn-signin “), c = {CORAL_TALK_HOST: t, EMBED_URL: i, commentStreamContainer: r, signInButton: s, TALK_ASSET_URL: n}; e, c), “.addEventListener (s.addEventListener”, () => auth0.showLogin ()), auth0.isAuthenticated () &&removeSignInButton (s)}), auth0.on (“login”, t => {removeSignInButtonT (s)., getAuth., getAuth (t), visibility.isElementInViewport (e) &&attemptScriptEmbedding (c), hasCoralTalkRendered&&coralLogin ()}), auth0.on (“logout”, () => {store.remove () => {store.remove (TALK_AUTH; module.ex)})) =} init; module.ex)
}, {“4”: 4, “5”: 5, “10”: 10, “140”: 140}];
window.modules [“choreographer.client”] = [function (require, module, exports) {“use strict”; const cookie = require (65), _ get = require (13), _ omit = require (104), {insertSpeedBumpComponents : insertSpeedBumpComponents} = require (103), {insertNewsletterSpeedBumpComponents: insertNewsletterSpeedBumpComponents} = require (101), {generateGrowl: generateGrowl} = require (100), gtm = require (3), {getLocalStorage: getLocalStorage: setLocalSorage: setLocalS (t) 49) {reportPaywall: reportPaywall} = require (77), moment = require (54), {getClientHistory: getClientHistory, updateClientHistoryWithPageData: updateClientHistoryWithPageData} = require (102), auth0 = require (10), {Scenario: Scenario} = require (97) , cidReadyEvent = “nymcid-set”, cidKey = “nymcid”, isProduction = require (9) (), logger = require (98) .Logger (() => getLocalStorage (“show_choreographer_logs”)), {Verdon: Verdon} = require (99), TEST_COHORT_FLAG = “optimizeCohort”; function displayDebug (e = “”) {if (“entitlement”! == e.split (“#”). pop ()) return; const t = _get (window , “dataLayer [0] .userDetails”, {}), o = _get (w indow, “dataLayer [0] .pag eDetails.featureTypes “,” “), n = o.includes (” magazine “)?” magazine “:” “, r = o.includes (” feature “)?” featured “:” “, i =” Value of the Article: “(n || r ||” article “), a = _get (JSON.parse (localStorage.getItem (” auth0: profile “)),” http: // nymag. com / app_metadata “), l =” Authentication status: “(a?” authenticated “:” unauthenticated “), s =” Authorization status: “(!! a&&a.has_subscription?” entitled “:” unentitled “), c = Object. keys (_omit (t, “newYorkMediaUserID”)). map (e => `$ {e}: $ {t [e]}`), d = document.body, g = document.createElement (“div”), u = document.createElement (“ul”); [i, l, s, … c] .map (e => {const t = document.createElement (“li”); return t.classList.add (” debug-item “), t.appendChild (document.createTextNode (e)), t}). forEach (e => {u.appendChild (e)}), u.classList.add (” data-bullets “), g.classList.add (“debug-choreographer”), g.classList.add (“display-debug-data”), g.appendChild (u), d.appendChild (g)} function initializeChoreographer (e) {const t = e.getAttribute (“data-site-slug”), o = pageShouldCountAsView (t), n = auth0.isSubs criber (); return t? getClientId (cidKey, 8e3) .then (e => (logger.h1 ( “Choreographer initialized”), logger.log (`clientId: $ {e}`), logger.log (`page counts as view: $ {o}`), window.nymViewsResponse || (o? UpdateClientHistoryWithPageData (e, t ): ge tClientHistory (e)))). then (r => {if (logger.group (), logger .h2 (“Client history”), logger.table (r), logger.groupEnd (), isNCR ()) return; const {scenarios: i, touts: a, testCohort: l = “”} = readJSONFromScript (e. querySelector (“script”)); if (! (l === (document.body.dataset [TEST_COHORT_FLAG] || “”))) return; const s = i.map (e => Scenario (Object.assign ( {}, e, {history: r, siteSlug: t, isSubscriber: n}))). filter (e => (logger.group (), logger.h2 (“Evaluate scenarios”), logger.log (e) , logger.groupEnd (), e.shouldShow)). reduce ((e, {action: t, min: o, count: n}) => {const r = a.find (({value: e}) = > e === t); Return r? (e [r.type] = r, e [r.type] .viewCount = no, e): e}, {}); logger.group (), logger. h2 (“Active Touts”), logger.log (s), logger.groupEnd (), executeTouts (e, o, s, r)}). catch (console.error): console.error (“siteSlug not found. “)} Function document I ncludesComponent (e) {return document.querySelector (` [data-uri * = “/ $ {e} /”] `)} Function pageShouldCountAsView (e) {const t =” strategist “=== e, o = [“product”, “product-grid”]. find (e => documentIncludesComponent (e)); return t ||! o} Function executeTouts (e, t, o = {}, n) {const {global: r} = n, i = {featureArticleCount: r.Feature || 0, magazineArticleCount: r.Magazine || 0, standardArticleCount: r.Article || 0, totalArticleCount: r.total || 0}, a = window.concertAds , l = window.ConcertAds; if (o [“speed-bump”] && (_get (a, “adsBlocked”,! 0)? insertSpeedBumpComponents (findTemplate (e, “speed-bump”), o [“speed-bump “], i): a.lifecycle.listenAndPlayback (l.events.slotsInserted, () => {insertSpeedBumpComponents (findTemplate (e,” speed-bump “), o [” speed-bump “], i)})) , o [“newsletter-speed-bump”] && (_get (a, “adsBlocked”,! 0)? insertNewsletterSpeedBumpComponents (findTemplate ( e, “newsletter-speed-bump”), o [“newsletter-speed-bump”], i): a.lifecycle.listenAndPlayback (l.events.slotsInserted, () => {insertNewsletterSpeedBumpComponents (findTemplate (e, “newsletter -speed-bump “), o [” newsletter-speed-bump “], i)})), o [” branded-growl “] &&brandedTakeoverTime (o [” branded-growl “]) &&t) return logger.log ( “should show branded growl”), void growlManager (findTemplate (e, “branded-growl”), {baseTrackingData: i, body: o [“branded-growl”]. brandedGrowlBody, contentClass: “branded-content”, cta: o [“branded-growl”]. brandedGrowlCTA, imageUrl: o [“branded-growl”]. imageUrl, link: o [“branded-growl”]. brandedGrowlLink, name: o [“branded-growl”]. name, scrollDepth: o [“branded-growl”]. brandedGrowlScrollDepth, title: o [“branded-growl”]. brandedGrowlTitle, toutType: “branded growl”}, “# branded-growl”); if (t&&o [“content-cliff “]) contentCliff (findTemplate (e,” content-cliff “), o [” content-cliff “], o [” content-cliff “]. viewsLeft, n); else {if (t&&o [” cliff-takeover “) ])re turn / coronavirus news | pivot | paywall exclude / i.test (window._nymGtmPage.tags)? void (isProduction&&logger.log (“Content cliff no-op due to excluded tag match:”, window._nymGtmPage.tags)): void cliffTakeover (findTemplate (e, “paywall-reader-interface”), i, o [“cliff-takeover”]); if (o [“growl-newletter”] ||! o [“promo-growl”]) if (o [“baby-growl”]) babyGrowl (findTemplate (e, “paywall-reader-interface”), i, o [“baby-growl”]); else {if (! o [“warning-growl-2 “]) return o [” warning-growl “] &&shouldWarn ()? (setContentCliffWarningDisplayed (), logger.log (” should show warning “), void growlManager (findTemplate (e,” warning-growl “), {contentClass:” warning-content “, title: o [” warning-growl “]. warningGrowlTitle, name: o [” warning-growl “]. name, scrollDepth: o [” warning-growl “]. warningGrowlScrollDepth, cta: o [” warning -growl “]. warningGrowlCTA, body: o [” warning-growl “]. warningGrowlBody, link: o [” warning-growl “]. warningGrowlLink, baseTrackingData: i, toutType:” warning growl “},” # warning-growl “)): void 0; warningGrowl (findTe mplate (e, “paywall-reader-interface”), i, o [“warning-growl-2”])} else growlManager (findTemplate (e, “growl-message”), {contentClass: “promo-content”, title: void 0, name: o [“prom o-growl”]. name, scrollDepth: o [“promo-growl”]. promoGrowlScrollDepth, cta: o [“promo-growl”]. promoGrowlCTA, body: o [” promo-growl “]. promoGrowlMessage, link: o [” promo-growl “]. promoGrowlLink, baseTrackingData: i, toutType:” promo growl “},” # growl-message “)}} function shouldWarn () {return! contentCliffWarningDisplayed ()} function getContentCliffWarningDisplayedKey () {const e = new Date, t = e.getMonth (); return`content-cliff-warning-displayed – $ {e.getFullYear ()} – $ {t} `} function contentCliffWarningDisplayed ( ) {const e = getContentCliffWarningDisplayedKey (); return “true” === getLocalStorage (e)} function setContentCliffWarningDisplayed () {const e = getContentCliffWarningDisplayedKey (); return setLocalStorage (e, {content “)} function growlManager (e : t, scrollDepth: o, name: n, title: r, body: i, cta: a, link: l, baseTrackingData: s, toutType: c, imageUrl: d = null}, g = “”) {const u = f unction () {const e = ` n n n n $ {r} n $ {d? ”:” “} n $ {i} n $ {d?` `:” “} n $ {a} n n n n `; return document.createRange (). createContextualFragment (e)} (), p = {creative: i, id: c, name: n, position:” growl “};u.querySelector(“a”).addEventListener(“click”,()=>promotionReport(“Click”,s,p)),generateGrowl(e,g,{content:u,scrollDepth:o,onShow :()=>promotionReport(“View”,s,p)})}function contentCliff(e,t,o,n){const{first_visit:r,global:i}=n,a={totalArticleCount:i. total||0,standardArticleCount:i.Article||0,featureArticleCount:i.Feature||0,magazineArticleCount:i.Magazine||0},{contentCliffBody:l}=t,s=document.importNode(e,! 0).querySelector(“.content-cliff”),c=document.querySelector(“.article-content > .clay-paragraph”),d={creative:l,id:”content cliff”,name:”Content Cliff”,position:”in-article”};s&&(c.insertAdjacentHTML(“afterend”,s.outerHTML),require(“content-cliff.client”)(document.querySele ctor(“.content-cliff”),{contentCliffOptions:t,viewsLeft:o,firstVisit:Number(r),onShow:()=>promotionReport(“View”,a,d),onClickCliff:()=>promotionReport(“Click”,a,d)}))} function verdonFosseToutSetter(e,t,o,n,r){const i=new Verdon({container:”.paywall-reader-interface”,url:”https://fosse.nymag.com/fosse/v1.6.1/index.html”}),a=e.type,l={email:auth0.getEmail(),isAuthenticated:auth0.isAuthenticated(),isSubscriber:auth0.isSubscriber()};n.classList.add(a),i.once(“frame:ready”,()=>{i.sendMessage(“tout:show”,{readerState:l,toutType:a,toutData:e}),r&&i.sendMessage(“frame:height”)}),i.on(“tout:visible”,()=>{promotionReport(“View”,t,o)}),i.on(“tout:sign-in”,()=>{auth0.showLogin(window.location.href)}),i.on(“tout:log-out”,()=>{auth0.logout()}),i.on(“tout:dismiss”,()=>{n.classList.add(“dismiss”),i.sendMessage(“tout:hide”,{toutType:a,toutData:e})}),i.on(“tout:subscribe”,()=>{e.ctaLink=replaceQueryParams(e.ctaLink),promotionReport(“Click”,t,o),window.location.href=e.ctaLink}),i.on( “frame:height”,e=>{n.style.height=`${e.payload.currentHeight 10}px`}),i.on(“tout:view-account”,()=>{window.location.href=”https://subs.nymag.com/account”})}function pro motionReport(e,t,o){const{creative:n,id:r,name:i,position:a}=o;t.event=`eec.promotion${e}`,t.ecommerce={promoView:{promotions:[{creative:n.trim(),id:r,name:i,position:a}]}},gtm.reportNow(t),reportPaywall({creative:n.trim(),eventType:e,id:r,name:i,position:a})}function babyGrowl(e,t,o){const n=document.importNode(e,!0).querySelector(“.paywall-reader-interface”),r={creative:o.babygrowlDescription,id:”baby growl”,name:”baby growl”,position:”growl”};document.body.appendChild(n),o.ctaLink=o.babygrowlCtaLink,o.ctaText=o.babygrowlMessage,o.headline=o.babygrowlDescription,verdonFosseToutSetter(o,t,r,n)}function cliffTakeover(e,t,o){const{cliffTakeoverCTA:n,cliffTakeoverCtaLink:r,cliffTakeoverDescription:i,cliffTakeoverImage:a,cliffTakeoverPromo:l,cliffTakeoverStatus:s,type:c}=o,d=document.importNode(e,!0).querySelector(“.paywal l-reader-interface”),g=document.querySelectorAll(“.clay-paragraph”),u={creative:l,id:”content cliff”,name:”Content Cliff”,position:”growl”},p={cta:n,ctaLink:r,descriptio n:i,image:a,promo:l,status:s,type:c};document.body.appendChild(d),g.forEach((e,t)=>{0!==t&&e.remove()}),verdonFosseToutSetter(p,t,u,d,!0),document.querySelector(“html”).style.overflowY=”hidden”,document.body.style.position=”fixed”}function warningGrowl(e,t,o){const{type:n,warningGrowl2CTA:r,warningGrowl2CtaLink:i,warningGrowl2Description:a,warningGrowl2Image:l,warningGrowl2Promo:s,warningGrowl2Status:c}=o,d=document.importNode(e,!0).querySelector(“.paywall-reader-interface”),g={creative:s,id:”warning growl”,name:”Warning Growl”,position:”growl”},u={cta:r,ctaLink:i,description:a,image:l,promo:s,status:c,type:n};document.body.appendChild(d),verdonFosseToutSetter(u,t,g,d,!0)}function getClientId(e=””,t=8e3){let o=cookie.get(e);return o?Promise.resolve(o):new Promise((o,n)=>{const r=setTimeout(()=>{n(`c ould not find key: ${e} on cookie after ${t}ms`)},t);window.addEventListener(cidReadyEvent,()=>{clearTimeout(r),o(cookie.get(e))})})}function readJSONFromScript(e){try{re turn JSON.parse(e.innerHTML)}catch(e){return{touts:[],scenarios:[]}}}function findTemplate(e,t=””){const o=e&&e.querySelector(`[data-template-id=”${t}”]`);return o&&o.content}function isNCR(){return/[?&]source=ncr/.test(location.search)}function brandedTakeoverTime(e){const{startTime:t,endTime:o,startDate:n,endDate:r}=e,i=n.concat(” “,t),a=r.concat(” “,o),l=moment(i),s=moment(a);return moment().isBetween(l,s)}function optimizeDebugger(){return new Promise(e=>{const t=window.location.search||””;if(t){const o=new URLSearchParams(t),n=o.get(“optimize-attribute-name”)||””,r=o.get(“optimize-attribute-value”)||””,i=o.get(“optimize-delay”)||0,a=o.get(“optimize-cookie”)||!1;setTimeout(()=>{a&&(document.cookie=randomNymcid()),document.body.setAttribute(`data -${n}`,r),e()},i)}else e()})}function randomNymcid(){return`nymcid=${(()=>([1e7] -1e3 -4e3 -8e3 -1e11).replace(/[018]/g,e=>(e^16*crypto.getRandomValues(new Uint8Array(1))[ 0]>>e/4).toString(16)[0]))()}`}function replaceQueryParams(e){const t=window.location.search||””;if(t){const o=new URLSearchParams(t);if(e.includes(“?”)){const t=e.split(“?”),n=new URLSearchParams(t[1]);for(let e of o.entries())n.set(e[0],e[1]);e=`${t[0]}?${n.toString()}`}else e=`${e}?${o.toString()}`}return e}module.exports=(e=>new Promise(e=>{auth0.on(“init”,()=>{e()})}).then(()=>optimizeDebugger()).then(()=>{displayDebug(window.location.href),initializeChoreographer(e)}));
}, {“3″:3,”9″:9,”10″:10,”13″:13,”49″:49,”54″:54,”65″:65,”77″:77,”97″:97,”98″:98,”99″:99,”100″:100,”101″:101,”102″:102,”103″:103,”104″:104,”content-cliff.client”:”content-cliff.client”}];
window.modules[“growl.client”] = [function(require,module,exports){“use strict”;require(164);const _some=require(84),dom=require(4),localStorageKeyRoot=”slideout-“,{getLocalStorage:getLocalStorage,setLocalStorage:setLocalStorage}=require(49);module.exports=((e,t)=>{const{content:o,onShow:s,scrollDepth:r=50,dismissable:i=!1}=t,n=Number(r||e.getAttribute(“data-display-at-page-scroll-percentage”)),a=dom.find(e,”.modal”),l=”slideout-” (t.id||e.getAttribute(“id”)),c=getLocalStorage(l);function d(){a.classList.add(“hidden”)}function g(){setLocalStorage(l,!0),d()}i&&c?e.remove():(o&&e.querySelector(“[data-content]”).appendChild(o),n&&function(e=50){const t=new IntersectionObserver(e=>{_some(e,”isIntersecting”)&&(a.style.top=”inherit”,a.classList.remove(“hidden”,”initial”),”function”==typeof s&&s(),t.unobserve(a))});a.style.top=`${document.querySelector(“body”).scrollHeight/(100/e)}px`,t.observe(a)}(n),e.querySelector(“.dismiss-modal”).addEventListener(“click”,()=>i?g():d()),e.addEventListener(“growl:hide”,d),e.addEventListener(“growl:dismiss”,g))});
}, {“4″:4,”49″:49,”84″:84,”164”:164}];
window.modules[“newsletter-speed-bump.client”] = [function(require,module,exports){“use strict”;const{loadRecaptcha:loadRecaptcha}=require(132),_isEmpty=require(111),_set=require(131),_kebabCase=require(105),gtm=require(3),auth0=require(10),visibility=require(5),COMPONENT_NAME=”newsletter-speed-bump”,EMAIL_VALID_REGEX=/^(?:(?:[^()[]\.,;:[email protected]”] (?:.[^()[]\.,;:[email protected]”] )*)|(“. “))@(?:(?:[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(?:(?:[a-zA-Z-0-9] .) [a-zA-Z]{2,}))$/,LOCAL_STORAGE_KEY_NAME=”newsletterSpeedBumpSignUpStatus_”,MAX_EMAIL_LENGTH=50;function setClass(e,t){e.classList.add(t)}function getRequestUrl(e){return e.getAttribute(“action”)}function getPageType(e){const t=e?e.getAttribute(“content”):””;return _kebabCase(t)}function getPayloadObject(e,t,r,s){const n={};return _set(n,`vars.source_${t}`,`${COMPONENT_NAME}_${s}`),n.email=r,n.lists={},n.lists[t]=!0,n.recaptcha=e,n.signuppage=`${document.location.href}_${t}`,n[`source_${t}`]=”newsleter_speedbump”,n}module.exports=((e,t)=>{if(!t||!e)return;if(“success”===window.localStorage.getItem(`${LOCAL_STORAGE_KEY_NAME}${t.newsletterSpeedBumpNewsletterId}`))return void e.remove();const{baseTrackingData:r,name:s,newsletterSpeedBumpCtaCopy:n,newsletterSpeedBumpDescription:i,newsletterSpeedBumpHeadline:a,newsletterSpeedBumpNewsletterId:o,newsletterSpeedBumpThankYouMessage:c,RECAPTCHA_PUBLIC_KEY:l}=t,u=auth0.getEmail(),d=e.querySelector(“.description”),p=e.querySelector(“.input.email”),m=e.querySelector(“.error-message”),h=e.querySelector(“.form”),E=e.querySelector(“.form-container”),y=e.querySelector(“.form-recaptcha-container”),g=e.querySelector(“.headline”),v=e.querySelector(“.container”),S=e.querySelector(“.input.newsletterId”),_=e.querySelector(“.recaptcha-wrapper”),L=e.querySelector(“.input.submit”),w=e.querySelector(“.text-container”),q=new visibility.Visible(e,{shownThreshold:.5});u&&(p.removeAttribute(“required”),e.classList.add(“signed-in”)),d.innerHTML=i,g.innerHTML=a,S.value=o,L.value=n,q.on(“shown”,function(){if(visibility.isElementNotHidden(e)){const e=r;e.event=”eec.promotionView”,e.ecommerce={promoView:{promotions:[{creative:`${a} | ${i}`,id:”newsletter speed bump”,name:s,position:”in-article”}]}},gtm.reportNow(e),q.destroy()}}),p.addEventListener(“focus”,()=>{_.classList.remove(“hidden”)}),h.addEventListener(“submit”,t=>{t.preventDefault();const s=new XMLHttpRequest,n=u||e.querySelector(“.input.email”).value,i=getPageType(document.querySelector(‘meta[name=”type”]’));u||!(n.length>=50)&&EMAIL_VALID_REGEX.test(n)?loadRecaptcha(l,”newsletterSubmit”,!0).then(a=>{s.open(“POST”,getRequestUrl(h),!0),s.setRequestHeader(“Content-Type”,”application/json;charset=UTF-8″),s.addEventListener(“load”,s=>{const a=s.currentTarget||s.target;if(a.status>=200&&a.statussetClass(e,”success”)),[d,E,m,_].forEach(e=>setClass(e,”hidden”)),g.innerHTML=c.replace(“{{email}}”,n),m.innerHTML=””;const s=JSON.parse(a.response),l=_isEmpty(s.sailthruIds)?””:Object.values(s.sailthruIds)[0],u=r;u.event=”eec.purchase”,u.ecommerce={purchase:{actionField:{id:l,revenue:”0.00″},products:[{category:”newsletter signup”,name:S.value,quantity:1,variant:`${COMPONENT_NAME} – ${i}`}]}},gtm.reportNow(u),setTimeout(()=>{e.classList.add(“hidden”)},5e3),t.preventDefault()}else m.innerHTML=”*An error has occurred. Please try again.”}),s.addEventListener(“error”,()=>{m.classList.remove(“hidden”),m.innerHTML=”*An error has occurred. Please try again.”}),s.send(JSON.stringify(getPayloadObject(a,o,n,i))),t.preventDefault()}):m.innerHTML=”*Please enter a valid email”})});
}, {“3″:3,”5″:5,”10″:10,”105″:105,”111″:111,”131″:131,”132”:132}];
window.modules[“speed-bump.client”] = [function(require,module,exports){“use strict”;const gtm=require(3),visibility=require(5);module.exports=((e,i)=>{if(!i||!e)return;const{name:o,speedbumpDescription:r,speedbumpMessage:t,speedbumpLink:n,baseTrackingData:s}=i,c=new visibility.Visible(e,{shownThreshold:.5});e.querySelector(“.description”).innerHTML=r,e.querySelector(“.promo-link”).innerHTML=t,e.querySelector(“.promo-link”).href=n,e.classList.remove(“collapsed”),c.on(“shown”,function(){if(visibility.isElementNotHidden(e)){let e=s;e.event=”eec.promotionView”,e.ecommerce={promoView:{promotions:[{name:o,creative:r,id:”speed bump”,position:”in-article”}]}},gtm.reportNow(e),c.destroy()}}),e.querySelector(“.promo-link”).addEventListener(“click”,function(){let e=s;e.event=”eec.promotionClick”,e.ecommerce={promoClick:{promotions:[{name:o,creative:r,id:”speed bump”,position:”in-article”}]}},gtm.reportNow(e)})});
}, {“3″:3,”5”:5}];
window.modules[“content-cliff.client”] = [function(require,module,exports){“use strict”;const auth0=require(10),isProduction=require(9)(),logger=require(98).Logger(()=>!isProduction);module.exports=((t,e)=>{if(!e)return;logger.group(),logger.h2(“Content Cliff”);const{contentCliffOptions:o,firstVisit:n,onShow:r,onClickCliff:i}=e,c=300,l=Number(document.querySelector(“[data-components-count]”).getAttribute(“data-components-count”)),u=3,s=[“taboola”],a=”#content-cliff”,f=t,d=function(){let t=0;return document.querySelectorAll(“[data-word-count]”).forEach(function(e){t =Number(e.getAttribute(“data-word-count”)||0,10)||0}),t}(),g=function(t,e){function o(t){return Math.round(t.getTime()/1e3/60)}const n=o(t),r=o(e);return n-r}(new Date,new Date(n)){},show:()=>{r(),function(){(p=function(t=””){return document.querySelectorAll(`${t} ~ *`)}(a)).forEach(t=>t.remove()),function(){const{contentCliffStatus:e,contentCliffPromo:n,contentCliffCTA:r,contentCliffURL:c}=o,l=t.querySelector(“[data-content-cliff-status]”),u=t.querySelector(“[data-content-cliff-promo]”),s=t.querySelector(“[data-content-cliff-cta]”);s&&s.setAttribute(“href”,c),s&&s.insertAdjacentHTML(“afterbegin”,r),l&&l.insertAdjacentHTML(“afterbegin”,e),u&&u.insertAdjacentHTML(“afterbegin”,n),s&&s.addEventListener(“click”,i)}(),f.classList.remove(“collapsed”),e=s,e.forEach(t=>{const e=document.querySelector(`[data-uri*=”/${t}/”]`);e&&e.remove()}),m.addEventListener(“click”,()=>auth0.showLogin());var e}()}}[function(){if(dl)return logger.log(`article word count ${d} was too short for the cliff`),logger.log(`article components count is smaller than ${u} and not eligible for the cliff`),”noop”;if(g&&isProduction)return”noop”;g&&logger.log(`First session check was ${g}! Showing the cliff anyway: isProduction => ${isProduction}`);if(/coronavirus news|pivot|paywall exclude/i.test(window._nymGtmPage.tags))return isProduction&&logger.log(“Content cliff no-op due to excluded tag match: “,window._nymGtmPage.tags),”noop”;return”show”}()],m=t.querySelector(“.content-cliff-login”);let p=[];return logger.log(`should noop in production due to 30-minute first-session window: ${g}`),logger.groupEnd(),auth0.on(“login”,()=>{f.classList.add(“collapsed”),(p=Array.prototype.slice.call(p,0).reverse()).forEach(t=>f.insertAdjacentElement(“afterend”,t)),p=[]}),”function”==typeof h?h():void 0});
}, {“9″:9,”10″:10,”98”:98}];
window.modules[“ad.client”] = [function(require,module,exports){“use strict”;const _forEach=require(66),_max=require(68),_find=require(67),_includes=require(69),$visibility=require(5),dom=require(4),MAX_MOBILE_RE=/[[0-9]{1,3}-(768|600)/,MAX_TABLET_RE=/[0-9]{3}-(1024|1180)/,DESKTOP_RE=/(1024|1180)-plus/,AD_NAME_SELECTOR='[data-name^=”/4088/”], [data-name^=”/172968584/”]’;var flaggedComponentsOnPage=function(){var e,t=document.querySelector(“.article-content”),n=[];return t&&_forEach([‘.article-sidebar[data-width=”large”]’],function(a){e=t.querySelectorAll(a),_forEach(e,function(e){n.push(e)})}),n}();function getElementsVerticalOverlap(e,t){var n=e.getBoundingClientRect(),a=t.getBoundingClientRect();return!(n.top>a.bottom||n.righta.right)?a.bottom-n.top:0}function getElementsOverlapAmount(e,t){var n,a=[];return _forEach(t,function(t){n=getElementsVerticalOverlap(e,t),a.push(n)}),_max(a)}function getNYMagAdChannel(e){var t=””;switch(e){case”company information”:t=”company”;break;case”new york guides & things to do”:t=”to-do”;break;case”other”:t=e;break;case”sponsored guides”:t=”s-guides”;break;case”urbanist”:t=”urbanist”;break;default:t=””}return t}function appendSectionToDfpAds(){var e,t,n,a=document.querySelector(“meta[property=’og:site_name’]”),o=document.querySelector(“article[data-content-channel]”),i=document.querySelectorAll(AD_NAME_SELECTOR);a&&(e=a.content),o&&(t=o.getAttribute(“data-content-channel”).toLowerCase()),t&&”New York Magazine”===e&&(n=getNYMagAdChannel(t)),n&&appendToAdd(i,n)}function appendPageTypeToDfpAds(){let e=document.querySelector(“.body > div”)||{},t=document.querySelector(“body”)||{},n=e&&e.classList,a=n&&n.length?[…n]:[],o=_find(a,e=>e.includes(“feature”)),i=document.querySelectorAll(AD_NAME_SELECTOR);n&&(o?appendPageNumberPositionToDfpAds(i,”Feature”):n.contains(“lede-gallery-content”)?appendPageNumberPositionToDfpAds(i,”Image_Gallery”):t.classList.contains(“one-column-layout”)?appendPageNumberPositionToDfpAds(i,”One_Column_Article”):n.contains(“article-content”)&&appendPageNumberPositionToDfpAds(i,”Standard_Article”))}function appendPageNumberPositionToDfpAds(e,t){const n=[“528×379″,”1100×200″,”1×1”];let a=e||[],o=dom.find(“.ad-splash”),i=dom.find(“section.wrapper”),r=dom.find(“.secondary”),d=dom.find(“.bottom”),s=dom.find(“.primary”),c={IA:{xsMobile:{normal:1,grid:1},mobile:{normal:1,grid:1},tablet:{normal:1,grid:1},desktop:{normal:1,grid:1}},BA:{xsMobile:{normal:1,grid:1},mobile:{normal:1,grid:1},tablet:{normal:1,grid:1},desktop:{normal:1,grid:1}}};a.forEach(e=>{let a,l=””,u=e.dataset.sizes,m=e.classList.value,p=_find(n,e=>u.includes(e)),g=e.parentElement.classList.contains(“image-gallery-mobile-grid-ad”);if(u&&!p||e.setAttribute(“data-name”,e.getAttribute(“data-name”) “/” t),i&&u&&!p){let n,u;if(o&&o.contains(e)?l=”LB”:i&&i.contains(e)?l=”IA”:(r&&r.contains(e)||d&&d.contains(e)||s&&s.contains(e))&&(l=”BA”),c[l]){if(!(u=checkForAdViewport(m)))return;g?(n=c[l][u].grid,c[l][u].grid ):(n=c[l][u].normal,c[l][u].normal ),a=n{e.setAttribute(“data-name”,e.getAttribute(“data-name”) “/” t)})}function injectGoogleScripts(){var e=document.createElement(“script”),t=document.createElement(“script”),n=document.createDocumentFragment();e.src=”//www.googletagservices.com/tag/js/gpt.js”,e.async=”async”,t.src=”//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js”,t.async=”async”,n.appendChild(e),n.appendChild(t),document.getElementsByTagName(“body”)[0].appendChild(n)}appendSectionToDfpAds(),appendPageTypeToDfpAds(),injectGoogleScripts(),DS.controller(“ad”,[“adService”,function(e){return function(t){var n,a,o,i=t.getAttribute(“data-offload”),r=new $visibility.Visible(t,{preloadThreshold:i?window.innerHeight/4:200}),d=!1;function s(){window.innerWidth>=1180&&t.parentElement.classList.contains(“ad-repeat”)&&flaggedComponentsOnPage.length&&(a=getElementsOverlapAmount(t,flaggedComponentsOnPage),o=parseInt(t.parentElement.getAttribute(“data-gap”),10),t.style.marginTop=o 30 a “px”)}function c(){s(),e.refresh(n)}function l(){e.remove(n),d||(d=!0,r.on(“shown”,c))}document.querySelector(‘script[data-name=”concert-ads”]’)||(n=e.create(t),r.preload&&$visibility.isElementNotHidden(t)?(e.addToPageLoadQueue(n),i&&r.on(“hidden”,l)):(r.on(“preload”,function(){!n.slot&&$visibility.isElementNotHidden(t)&&(s(),e.load(n))}),i&&r.on(“hidden”,l)),this.adData=n)}}]);
}, {“4″:4,”5″:5,”66″:66,”67″:67,”68″:68,”69”:69}];
window.modules[“sticky-list.client”] = [function(require,module,exports){“use strict”;const dom=require(4),$gtm=require(3),_get=require(13),stickyContainer=require(“sticky-container.client”);DS.controller(“sticky-list”,[“$window”,function(t){var e=require(243),i=40;function s(s){let n,r=function(t){let s=t[0],n=0,r=e.height(this.contentArea),o=this.contentArea.offsetHeight;if(this.containers&&this.containers.length){if(s.target.offsetHeight){let t=this.breakouts.findIndex(t=>(function(t,e){return t!==document.body&&t.contains(e)})(t,s.target.parentElement));if(t>-1&&this.breakouts[t]){let e=this.breakouts[t].offsetHeight i;this.containers[t].style.marginBottom=`${e}px`}}if(o!==this.currentHeigh){const t=e.rect(this.rightRail,this.contentArea);this.currentHeight=o,this.rightRail.style.height=r-t.top-a(this.rightRail) “px”,this.breakouts.forEach((s,r)=>{let a=e.rect(s,this.contentArea),o=e.intersection(a,t);if(o){let e,s=o.top-t.top-n;n =s o.height i,this.containers[r].style.height=`${s}px`,this.containers[r].style.minHeight=`${s}px`,e=this.breakouts[r].offsetHeight i,this.containers[r].style.marginBottom=`${e}px`}})}}}.bind(this);t.innerWidth{let n=_get(e,”dataset.name”,””),r=n.slice(-1)||”1″,a=[“Image_Gallery”,”Standard_Article”,”Feature”,”One_Column_Article”].find(t=>n.includes(t))||””;this.rightRail.parentElement.classList.contains(“tertiary”)&&a&&(e.dataset.name=parseInt(i,10) se===t)||0;return i.slice(s 1).reduce((t,e)=>t (e.offsetHeight||0),0)||0}return s.prototype={setPins:function(){const t=e.rect(this.rightRail,this.contentArea),i=e.height(this.contentArea),s=i-t.top-a(this.rightRail);let n,o,h,l;if(this.populatePinsList(),s1&&t.classList.add(“multi-children”),l=0;l{const t=Array.from(e.children);let o,a,i=0;for(;i{handleLazyLoad(a)});
}, {“4”: 4, “120”: 120}];
window.modules[“article.client”] = [function(require,module,exports){“use strict”;const $visibility=require(5),$gtm=require(3),ImageZoom=require(81),$sentry=require(82);DS.controller(“article”,[function(){var e=40;function t(t){const i=document.querySelector(“.wrapper > .tertiary”),n=t.querySelector(“.lede-image-wrapper.full-bleed”),r=t.querySelector(“.attribution.full-bleed”),o=t.querySelector(“.article-header”),l=o?o.querySelector(“img”):null,c=function(){let t=o.getBoundingClientRect().height;n&&(t=n.getBoundingClientRect().height 25,r&&(t =r.getBoundingClientRect().height)),i.style.paddingTop=t e “px”};i&&o&&(window.innerWidtht(e)),document.addEventListener(“closeBanner”,function(){i(e)}),$sentry.initializeIDListeners()}}]);
}, {“3″:3,”5″:5,”81″:81,”82”:82}];
window.modules[“tags.client”] = [function(require,module,exports){“use strict”;const _forEach=require(66);DS.controller(“tags”,[function(){function e(e){this.el=e}return e.prototype={events:{“a.more click”:”showAll”},showAll:function(e){var t=e.target,o=this.el.querySelectorAll(“li.hidden”);_forEach(o,function(e){e.classList.remove(“hidden”)}),t.parentNode.removeChild(t),e.preventDefault()}},e}]);
}, {“66”:66}];
window.modules[“memo-pixel.client”] = [function(require,module,exports){“use strict”;(()=>{var e=document.createElement(“script”);e.async=!0,e.type=”text/javascript”,e.src=document.location.protocol “//d16xpr36wrmcmk.cloudfront.net/js/memo.js”,(document.getElementsByTagName(“head”)[0]||document.getElementsByTagName(“body”)[0]).appendChild(e)})(),module.exports=(()=>{});
}, {}];
window.modules[“affiliate-links.client”] = [function(require,module,exports){“use strict”;const dom=require(4),_includes=require(69),_startsWith=require(73),globalClick=require(71),visit=require(72),productSubtags=require(74);var excludedHostnames,skimlinksBaseUrl,skimlinksId,visitState,productUrl,ignoreDataAttribute=”data-affiliate-links-ignore”,article=window.document.querySelector(“article”),isSponsored=article&&”Sponsor Story”===article.getAttribute(“data-type”);function setExcludedHostnames(t){excludedHostnames=(t.getAttribute(“data-excluded-hostnames”)||””).toLowerCase().split(“,”)}function isSkimLink(t){return!!(skimlinksId=t.getAttribute(“data-skimlinks”))}function isExcluded(t){return _includes(excludedHostnames,t)||_startsWith(t,”www.”)&&_includes(excludedHostnames,t.slice(4))||isSponsored}function isUrlProtocol(t){return 0!==t.indexOf(“mailto:”)&&0!==t.indexOf(“javascript:”)}function getTargetHostname(t){return(t.hostname||t.host||t.href||””).toLowerCase()}function convertSkimlinkUrl(t){return(skimlinksBaseUrl=skimlinksBaseUrl||skimlinksId?”//go.redirectingat.com/?xs=1&id=” skimlinksId “&sref=” encodeURIComponent(window.location.href) “&url=”:void 0)&&skimlinksBaseUrl encodeURIComponent(t)}function hasIgnoreAttribute(t){return”true”===t.getAttribute(ignoreDataAttribute)}function convertSkimlink(t){var e,i,r,s=dom.closest(t.target,”a”),n=s&&s.href;n&&n.length&&!t.defaultPrevented&&(i=getTargetHostname(s),!isUrlProtocol(n)||isExcluded(i)||hasIgnoreAttribute(s)||productSubtags.getAffiliate(n)||(e=convertSkimlinkUrl(n))&&(productUrl=n,r=s&&s.getAttribute(“data-track-id”),s.href=productSubtags.ensureSubtag({url:e,productId:r,visitState:visitState,anchorEl:s})))}function revertSkimLink(t){var e=dom.closest(t.target,”a”),i=e&&e.href||””;i.includes(skimlinksBaseUrl)&&i&&i.length&&productUrl&&(e.href=productUrl)}module.exports=(t=>{const e=isSkimLink(t);visit.onceReady(function(t){visitState=t}),e&&(setExcludedHostnames(t),globalClick.addHandler(convertSkimlink,revertSkimLink))});
}, {“4″:4,”69″:69,”71″:71,”72″:72,”73″:73,”74”:74}];
window.modules[“gtm.client”] = [function(require,module,exports){“use strict”;const $gtm=require(3);DS.controller(“gtm”,[function(){return function(t){$gtm.init(t.getAttribute(“data-container-id”),t.getAttribute(“data-site-slug”))}}]);
}, {“3”:3}];
window.modules[“global-nav.client”] = [function(require,module,exports){“use strict”;const dom=require(4),auth0=require(10),signInButton=dom.find(“.user-signin”),signOutButton=dom.find(“.user-signout”),globalNav=dom.find(‘[class^=”global-nav”]’),body=dom.find(“body”),dropdownItems=dom.findAll(“.dropdown-wrap”),gtm=require(3),pageUri=require(160).getPageUri(),subscriptionPromoLinks=dom.findAll(“.persist-params”),searchString=window.location.search||””;function closeDropdowns(e){let t=globalNav.querySelectorAll(“.dropdown.open”);dropdownItems.forEach(function(n){let i=n.querySelector(“.dropdown”);!t||n.contains(e.target)&&27!==e.keyCode||i.classList.remove(“open”)})}function gtmSendReport(e,t,n){let i={eventCategory:”ecommerce”,eventAction:”componentClick”,brand:e,dimension23:”global-nav”,list:pageUri,pageZone:”header”,variant:”nav-link”};”global-nav-link”===n&&(i.eventLabel=t.href),gtm.reportNow(i)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const t=new URLSearchParams(searchString);let n=e.href;if(n.includes(“?”)){const i=n.split(“?”),o=new URLSearchParams(i[1]);for(let e of t.entries())o.set(e[0],e[1]);n=`${i[0]}?${o.toString()}`,e.href=n}else e.href=`${n}?${t.toString()}`}}function init(e){auth0.on(“init”,()=>{signInButton.addEventListener(“click”,function(e){e.preventDefault(),auth0.showLogin()}),signOutButton.addEventListener(“click”,function(e){e.preventDefault(),auth0.logout(),gtmSendReport(“Sign Out”,e.target,”user-info-link”)}),auth0.isAuthenticated()&&e.classList.add(“signed-in”),auth0.isSubscriber()&&e.classList.add(“subscribed”),e.querySelectorAll(“.user-link”).forEach(e=>{e.classList.add(“active”)}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)})}),auth0.on(“login”,()=>{e.classList.add(“signed-in”),auth0.isSubscriber()&&e.classList.add(“subscribed”)}),auth0.on(“logout”,()=>{e.classList.remove(“signed-in”),e.classList.remove(“subscribed”)})}dropdownItems.forEach(function(e){e.addEventListener(“click”,function(){e.querySelector(“.dropdown”).classList.toggle(“open”)})}),body.addEventListener(“click”,closeDropdowns),document.addEventListener(“keydown”,closeDropdowns),globalNav.addEventListener(“click”,function(e){let t=e.target;t.classList.contains(“global-nav-track”)&&gtmSendReport(t.text,t,”global-nav-link”)}),module.exports=init;
}, {“3″:3,”4″:4,”10″:10,”160”:160}];
window.modules[“aaa-module-mounting.legacy”] = [function(require,module,exports){“use strict”;const _pickBy=require(163),_each=require(326),Fingerprint2=require(325),DS=require(324),Eventify=require(188);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value(“Eventify”,Eventify),DS.value(“Fingerprint2”,Fingerprint2),DS.value(“$document”,window.document),DS.value(“$window”,window)}function mountDollarSliceComponents(){DS.service(“components”,[“$document”,”$module”,function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll(‘[data-uri*=”/_components/’ n ‘/”]’),r=e.querySelectorAll(‘[data-uri$=”/_components/’ n ‘”]’);_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get(“components”)}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error(“Error attaching controller to ” o,n)}registerGlobals(),”loading”===document.readyState?document.addEventListener(“DOMContentLoaded”,()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {“163″:163,”188″:188,”324″:324,”325″:325,”326”:326}];
window.modules[“ads.legacy”] = [function(require,module,exports){“use strict”;const _map=require(75),_forEach=require(66),_isString=require(207),_intersectionWith=require(327),_isEqual=require(214),_each=require(326),_debounce=require(124),_sortBy=require(147),page=require(160),visit=require(72);DS.service(“adService”,[“Eventify”,”$cid”,”$document”,”$window”,function(e,t,a,i){var o,n,s,r,d,c,l,u,g,p,h={},m=this,f=[],b=visit.getQueryParamsObject([“utm_campaign”]),w=document.querySelector(‘script[data-type=”ad-a9″]’),v=[],y=!1,_=[],S=document.querySelector(‘script[data-name=”ad-doubleverify”]’);document.querySelector(‘script[data-name=”concert-ads”]’)||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],c=i.googletag,(w||S)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),w&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log(“MESSAGE: Timeout for A9 load exceeded, aborting”))},500)),S&&v.push(new Promise(function(e){y?e():_.push(e)})),u=document.createElement(“script”),g=document.createDocumentFragment(),p=document.getElementsByTagName(“head”)[0],u.src=”https://z.moatads.com/voxprebidheader841653991752/moatheader.js”,g.appendChild(u),p.insertBefore(g,p.firstChild),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?c.defineSlot(o.name,o.sizes,o.id).addService(c.pubads()):c.defineOutOfPageSlot(o.name,o.id).addService(c.pubads())).setTargeting(“adid”,o.id),b.hasOwnProperty(“utm_campaign”)&&t.setTargeting(“utmcamp”,b.utm_campaign),a=m.getAdCount(o.label),t.setTargeting(“label”,o.label “_” o.site “-” a),c.display(o.id),c.pubads().addEventListener(“slotOnload”,function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=T(o),Promise.all(v).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){c.cmd.push(function(){window.apstag.setDisplayBids(),c.pubads().refresh([t],{changeCorrelator:!1})})}):S&&c.pubads().refresh([t],{changeCorrelator:!1}):c.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute(“data-name”),r=e.getAttribute(“data-sizes”),d=e.getAttribute(“data-label”),c=e.getAttribute(“data-site”);n=e.id,r&&r.length?(r=r.split(“,”),a=[],_map(r,function(e){e=e.split(“x”),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add(“oop”),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},h[n]=this},r=function(e){c.cmd.push(function(){var t=o(e);h[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=T(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){c.cmd.push(function(){window.apstag.setDisplayBids(),c.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},c.cmd.push(function(){var e,t,o,n=page.getMeta(“article:tag”),s=page.getMeta(“author”),r=i.location.href,d=(e=a.head.querySelector(“.head-gtm”),t=a.body.querySelector(“.gtm”),e&&”top”===e.getAttribute(“data-gtm”)?”gtmtop”:t&&”bottom”===t.getAttribute(“data-gtm”)?”gtmbottom”:””);o=[],_forEach([n,s,d],function(e){_forEach(e.split(“,”),function(e){(e=e.trim().toLowerCase().replace(/s/g,”-“).replace(/’|’/g,””)).length&&o.push(e)})}),c.pubads().setTargeting(“kw”,o),c.pubads().setTargeting(“entry_group”,o),r=r.slice(r.lastIndexOf(“/”) 1),c.pubads().setTargeting(“pn”,r),c.companionAds().setRefreshUnfilledSlots(!0),c.pubads().enableAsyncRendering(),c.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=””},this.getAdCount=function(e){var t,a=0,i=Object.keys(h);return _each(i,function(i){(t=h[i]).data.loaded&&t.data.label===e&&a }),a},this.getById=function(e){return h[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,”homepageTakeover/TopLeaderboard”:1},t=_sortBy(f,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),S&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals([“ids”,”bsc”,”vlp”],q)}catch(e){q(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),f=[]},10),this.addToPageLoadQueue=function(e){f.push(e),d()});function T(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function q(){y=!0,_forEach(_,function(e){e()})}}]);
}, {“66″:66,”72″:72,”75″:75,”124″:124,”147″:147,”160″:160,”207″:207,”214″:214,”326″:326,”327”:327}];
window.modules[“cid.legacy”] = [function(require,module,exports){“use strict”;DS.service(“$cid”,function(){var r=Math.floor(100*Math.random());return function(){return”cid-” r}});
}, {}];
window.modules[“client.legacy”] = [function(require,module,exports){“use strict”;require(“cid.legacy”),require(“ads.legacy”),require(“facebook.legacy”),require(“aaa-module-mounting.legacy”);
}, {“cid.legacy”:”cid.legacy”,”ads.legacy”:”ads.legacy”,”facebook.legacy”:”facebook.legacy”,”aaa-module-mounting.legacy”:”aaa-module-mounting.legacy”}];
window.modules[“facebook.legacy”] = [function(require,module,exports){“use strict”;DS.service(“facebook”,[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==”function”&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(“Cannot find module ‘” o “‘”);throw f.code=”MODULE_NOT_FOUND”,f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==”function”&&require;for(var o=0;o typeof key === ‘string’ && key.match(/.legacy$/)).forEach(key => window.require(key));
}

function tryToMount (fn, el, name) {
try {
fn (el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice (0, el.outerHTML.indexOf (el.innerHTML));
console.error (`Error initializing controller for” $ {name} “on” $ {elementTag} “`, e);
}
}
/ **
* mount client.js component controllers
* /

function mountComponentModules () {
Object.keys (window.modules) .filter (key => typeof key === ‘string’ && key.match (/ . Client $ /)). ForEach (key => {
let controllerFn = window.require (key);

if (typeof controllerFn === ‘function’) {
const name = key.replace (‘. client’, ”),
instancesSelector = `[data-uri * =” _ components / $ {name} / “]`,
defaultSelector = `[data-uri $ =” _ components $ {name} “]`,
instances = document.querySelectorAll (instancesSelector),
defaults = document.querySelectorAll (defaultSelector);

for (let el of instances) {
tryToMount (controllerFn, el, name);
}

for (let el of defaults) {
tryToMount (controllerFn, el, name);
}
}
});
} // Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the “ value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js

window.process = window.process || {};
window.process.env = window.process.env || {};

if (! window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = ”;
} // note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first

mountLegacyServices ();
mountComponentModules ();
//]]

Ref: https://www.vulture.com

News – OCTA Research: Our data predicted any rise in COVID-19

0
News - OCTA Research: Our data predicted any rise in COVID-19

window._izq.push ([“userProfile”, {“add”: {
“Category”: “News”
}
}]);

(function (a, c, s, u) {‘Insticator’in a || (a.Insticator = {ad: {loadAd: function (b) {Insticator.ad.q.push (b)}, q: [ ]}, helper: {}, embed: {}, version: “4.0”, q: [], load: function (t, o) {Insticator.q.push ({t: t, o: o})} }); var b = c.createElement (s); b.src = u; b.async =! 0; var d = c.getElementsByTagName (s) [0]; d.parentNode.insertBefore (b, d)} ) (Window, Document, ‘Script’, ‘//d3lcz8vpax4lo2.cloudfront.net/ads-code/7bfb7b00-638d-4331-aa02-1a00de86d835.js’)
@media (max-width: 767px) {
.wp-pagenavi {justify-content: normal! important;}

}
# ctcg_frame_65349_0 {display: none;}
#mc_embed_signup .mc-field-group select {padding: 14px 4px! important;}
.mc-field-group.input-group strong {margin-top: 8px;}
.article-header .share-count .share-it {display: none! important;}
.share.counter {display: none;}
.a2a_dd .a2a_count {display: none! important;}
.article-header .share-count .a2a_dd {justify-content: space-around! important;}
! function (c, h, i, m, p) {m = c.createElement (h), p = c.getElementsByTagName (h) [0], m.async = 1, m.src = i, p.parentNode .insertBefore (m, p)} (document, “script”, “https://chimpstatic.com/mcjs-connected/js/users/96b88e4b8fb304ba51edb006e/efc0ee07c1e8f769af549cd2e.js”); (function (w, sd) {var = d.createElement (‘script’); s.src = ‘//cdn.adpushup.com/41918/adpushup.js’; s.type = ‘text / javascript’; s.async = true; (d.getElementsByTagName ( ‘head’) [0] || d.getElementsByTagName (‘body’) [0]). appendChild (s);}) (window, document);

OCTA Research cited on Monday, August 2nd, in the face of criticism from a member of the Department of Health’s expert group that the data they used is in line with pandemic trends.

“I would like to thank my colleague Dr. Defend Guido David, who is mainly responsible for the calculations of the R [reproduction number]. If you look at his calculations, which are the official OCTA calculations for March R values ​​- these were the values ​​we use to urge the government to close earlier to avoid the tragedy that we saw in March and April experienced to prevent – it turns out that these numbers are actually very comparable to the numbers that were published by Imperial College London at the University of Sussex. So you have numbers that OCTA produces that are comparable to international organizations that calculate the same, “said biologist-priest Nicanor Austriaco of OCTA Research in an ANC interview.

He also stated that an absolute value is not as important as the pandemic trend.

“One of the things we keep pointing out when we see an increasing trend in the R, especially when there is a dramatic increase in the R trend, be it 1.12 or 1.16, the fact that it changed from 0.8 a week ago is what we’re looking at, ”he added.

Dr. Edsel Salvana, member of the DOH Technical Advisory Group, criticized OCTA on Monday for “problematic” modeling due to “incomplete and inconsistent” data.

“Our data says it all. We predicted every single increase. When the health ministry basically denied the existence of a spike, we warned of the spike and asked the government to lock it down earlier in early March. It didn’t happen, “said Austriaco.

” These models, which are the data that we produce, have also been consistent with the trends and dynamics of the pandemic over the past 15, 16 months, “he emphasized. </ Austriaco further pointed out that OCTA's data and forecasts are all published and are “subject to peer review”.

“What really stands out is that we unlike many other government agencies around the world have no sense of the predictions and predictions of the DOH. I’ve never seen it published. It is interesting that the criticism is that we are not responsible. Our data is very transparent, “he said.

The OCTA fellow reiterated that the group believes that a collaborative transmission of the highly transmissible Delta-COVID-19 variant already exists in the country,” simply because it is Delta COVID patients exist and the number of Delta COVID patients is increasing, especially in the NCR ”. [National Capital Region]. “

” In his [Salvana] remarks, he indicated that the DOH is conducting all studies to confirm this reality. But I think most of the people who look at the dissemination looking at the data will pretty much conclude that there was a community broadcast even though there has been no formal confirmation of it, ”Austriaco said.

Ref: https://mb.com.ph

News – The metal 3D printing machine market will see outstanding growth from 2021 to 2026

0
News - The metal 3D printing machine market will see outstanding growth from 2021 to 2026

In addition to the impact of Covid-19 on the Metal 3D Printing Machines market, the business intelligence report clarifies the competitive outlook and provides information on product offerings from the major vendors.

The Metal 3D Printing Machines market report covers all of the growth drivers and opportunities driving the profitability graph and also provides valuable insight into the challenges the industry will face in the years to come.

According to the report, the market is projected to have a CAGR of XX% in the period 2021-2026 and reach a valuation of USD XX by the end of the forecast period.

Speaking of recent developments, the COVID-19 pandemic has drastically changed market dynamics, prompting companies to change their entire business structures to amid the changing landscape stay afloat. In this context, the report provides an in-depth analysis of the impact of the crisis on this industry in order to assist stakeholders in formulating action plans to effectively manage market risks.

In addition, the research document provides a detailed assessment of the Industry segmentation to uncover the best sales prospects in this area.

Competitive dashboard: Desktop Metal, EOS, HP, Pollen AM, Renishaw, SLM Solutions, AddUp, Velo3D, TRUMPF, Digital Metal, GE Additive, DMG Mori, Spee3d, Fabrisonic, BeAM and Farsoon Technologies

1. Global Air Terminals Market 2021, by Manufacturer, Region, Type and Application, Forecast to 2026
Read more: https://www.marketstudyreport.com/reports/global-air-terminals-market-2021-by-manufacturers-regions-type-and-application-forecast-to-20262. Global Earthing & Electrical Safety Equipment Market 2021, by Manufacturers, Regions, Type and Application, Forecast to 2026
Read more: https://www.marketstudyreport.com/reports/global-earthing-and-electrical-safety-equipment-market-2021-by-manufacturers-regions-type-and-application-forecast-to-2026

Ashwin has been involved in digital marketing for the past 2 years and has worked on multiple projects in various industries. He likes to post information and knowledge on various topics with the aim of creating online visibility and sharing his posts. His Interest …

The research document on the Retail & Consumer Packaged Goods (CPG) market is intended to provide statistical information such as sales forecast, CAGR, drivers, challenges, product types, application reach, and competitive scenario of this industry that …

The Vehicle Crash Test Barriers market report consists of key data on the CAGR, Compensation Scale, Drivers, Restrictions, Impact of COVID-19, products, applications, and the competitive outlook of this business area.

The Vehicle Crash Test Bar …

The Car Crash Simulator System And Service Market research report provides critical information such as development trends, restraints, CAGR, sales prospect, product type, scope of application, competitive scenario, and COVID-19 impact.

The car …

Latest tweets

Ref: https://www.groundalerts.com

News – Fans are convinced that Reese Witherspoon’s daughter is dating Ryan Phillippe 2.0

0
News - Fans are convinced that Reese Witherspoon's daughter is dating Ryan Phillippe 2.0

Ref: https://www.smooth.com.au

News – BCB announce Bangladesh’s squad for the T20I series with five games against Australia

0
News - BCB announce Bangladesh's squad for the T20I series with five games against Australia

The Bangladesh Cricket Board (BCB) has announced the roster for its T20I series of five games against Australia starting August 3rd.

All games will be behind closed doors at Sher-e-Bangla National Cricket Stadium in Dhaka.

Rubel Hossain, Mosaddek Hossain, Taijul Islam and Mohammad Mithun, who were part of the Bangladesh ODI squad in Zimbabwe, were added to the squad of the Australian T20Is.

The 34-year-old, who returned home after the only series of tests against Zimbabwe was unable to enter the mandatory 10-day quarantine.

Mahmudullah (c), Soumya Sarkar, Naim Sheikh, Shakib Al Hasan, Nurul Hasan Sohan, Afif Hossain, Shamim Hossain, Shaif Uddin, Taskin Ahmed, Shoriful Islam, Nasum Ahmed, Shak Mahedi Hasan, Mustafizur Rahman, Mohammad Mithun, Taijul Islam, Musaddek Hossain Saikat, Rubel Hossain.

Similar title :
Rubel, Taijul to roster for Australia T20Is added
BCB announces Bangladesh’s squad for five T20I series games against Australia

Ref: https://crickettimes.com

News – George Russell didn’t expect to cry after arriving in Budapest

0
News - George Russell didn't expect to cry after arriving in Budapest

After the arrival of the Hungarian Grand Prix this Sunday, Briton George Russell literally shed a tear after scoring his first points for the Williams team

George Russell finished Sunday’s Hungarian Grand Prix in eighth place to score his first points for Team Williams since making his F1 debut with the Grove team in 2019 (he had scored his first points in F1 with Mercedes the last year in Sakhir).

The young Briton couldn’t hide his emotion at having finally managed to score points for Williams after the start of the event, shedding a few tears as he began his series of media interviews.

The young Briton went on to explain in the Hungaroring paddock that he didn’t expect to be so emotional, but that it sums up the journey he and Williams have made since the 2019 season.

“I literally shed a tear, which I didn’t expect. Russell said. “I probably wouldn’t even have shed a tear if I had won my first race in F1, to be honest. This is what it means to me. “

“It means more things that I can’t express in words, thinking about what we’ve been through the past three years. It’s like you’ve been fighting for something for three years and you finally get it. “

“On our side of the garage, the second stint was probably the best stint of my entire career. To keep Danny [Ricciardo] behind, to keep Max [Verstappen] behind, to cut the gap to 20 seconds on the cars in front, that was exceptional. I gave everything I could, like every race, but this time I came home with something. “

After the Hungarian Grand Prix, Team Williams now sit eighth in the constructors’ championship with ten points scored on Sunday.

Cesare Ingrassia is the Publishing Director of the Formula 1 news site, F1only.fr.

A true enthusiast, Cesare Ingrassia is accredited by the FIA ​​and F1 and moves from paddock to paddock to offer you full coverage of each event.

Five drivers were summoned to the Hungarian Grand Prix race marshals after the finish of the event for not respecting …

Here is the starting grid for the 2021 Hungarian Grand Prix, the eleventh round of the season, the start of which will be given this Sunday 1st …

Quadruple world champion Sebastian Vettel has been disqualified from the 2021 Hungarian Grand Prix due to a breach of Article 6.6 of …

Follow the Hungarian Grand Prix live, the eleventh round of the 2021 season, which takes place this Sunday, August 1 on the track …

Mercedes driver Lewis Hamilton had to go to the doctor after the arrival of the Hungarian Grand Prix this Sunday after crossing …

Follow live the second free practice session of the Hungarian Grand Prix, the eleventh round of the 2021 F1 season (from July 30 …

The Ferrari team broke the curfew imposed by Formula 1 on the night of Friday to Saturday in Budapest to allow its …

Follow the qualifying session for the Hungarian Grand Prix, the eleventh round of the 2021 F1 World Championship (July 30 …

© F1only.fr F1 News 24/7 – All Formula 1 news – 2021 – All rights reserved / Reproduction in whole or in part prohibited. F1only.fr has no connection with Formula One Group, the FIA, the FIA ​​Formula 1 World Championship or Formula One Licensing B.V. and its content is neither endorsed nor sponsored by these entities. The terms F1, FORMULA ONE, FORMULA 1, FORMULA ONE and FORMULA 1 and any combination of these terms as well as the logos used in connection with the Formula One World Championship are the property of Formula One Licensing BV They may not be used by in any way that would imply an official link with Formula One Group, the FIA, the FIA ​​Formula 1 World Championship or Formula One Licensing BV The latter reserves the right to act in the event of any infringement of its rights . As a media specializing in F1, F1only.fr is accredited on Formula 1 GPs throughout the season.

Ref: https://f1only.fr

×
Share with your friends