PageSourceSearch

https://www.bostonmagazine.com/news/

html bostonmagazine.com collected 2026-10-02 02:14:15 UTC 224,133 bytes, 1,429 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en-US">
3	<head>
4<script>
5    window.ddjskey = "D9F68DAD89670E48567E99279F458A";
6    window.ddoptions = {};
7    </script>
7
8    
8<script src="https://dd.bostonmagazine.com/tags.js" async>
9</script>
9
10
11		<meta name="viewport" content="width=device-width, initial-scale=1" />
12		<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
12<script type="text/javascript">(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]},distributed_tracing:{enabled:true}};(window.NREUM||(NREUM={})).loader_config={agentID:"1134648183",accountID:"2293006",trustKey:"2293006",xpid:"VgQOUlZTDhABVFZaBgEHVl0I",licenseKey:"b9d80a2312",applicationID:"1078100099",browserID:"1134648183"};;/*! For license information please see nr-loader-spa-1.323.0.min.js.LICENSE.txt */
13(()=>{var e={8122(e,t,r){"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),s=0===Object.keys(r).length?e:r;for(let a in s)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):e[a]instanceof Map||e[a]instanceof Set||e[a]instanceof Date||e[a]instanceof RegExp?r[a]=e[a]:"object"==typeof e[a]&&null!==t[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){r[a]||(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555(e,t,r){"use strict";r.d(t,{f:()=>a});var n=r(384),i=r(8122);const s={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0};function a(e){try{return!!e.licenseKey&&!!e.errorBeacon&&!!e.applicationID}catch(e){return!1}}r.d(t,["D",0,e=>(0,i.a)(e,s)])},7699(e,t,r){"use strict";var n=r(860);const i={[n.K7.logging]:!0,[n.K7.genericEvents]:!0,[n.K7.jserrors]:!0,[n.K7.ajax]:!0};r.d(t,["It",0,1e6,"KC",0,i,"qh",0,"SESSION_ERROR"])},9324(e,t,r){"use strict";r.d(t,["A",0,"@newrelic/rrweb","x",0,"1.323.0"])},981(e,t,r){"use strict";r.d(t,["R",0,{AJAX:"AjaxRequest",PA:"PageAction",UA:"UserAction",BP:"BrowserPerformance",WS:"WebSocket",SPV:"SecurityPolicyViolation",JSE:"JavaScriptError",LOG:"Log",PVE:"PageView",PVT:"PageViewTiming",SR:"SessionReplay",ST:"SessionTrace",BI:"BrowserInteraction"}])},9752(e,t,r){"use strict";const n="newrelic-iframe-",i=n+"timing-update",s=n+"api",a=n+"api-response",o=n+"vitals-update",c=n+"ajax";r.d(t,["$8",0,o,"Gi",0,a,"KU",0,c,"Pl",0,n,"cS",0,s,"cr",0,i])},6154(e,t,r){"use strict";var n=r(1863);const i="undefined"!=typeof window&&!!window.document,s="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),o=Boolean("hidden"===a?.document?.visibilityState),c=""+a?.location,d=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=d&&"undefined"==typeof SharedWorker,l=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)();r.d(t,["OF",0,d,"RI",0,i,"WN",0,f,"bv",0,s,"gm",0,a,"lR",0,l,"m",0,c,"mw",0,o,"sb",0,u,"zk",0,()=>{const e=a?.performance?.getEntriesByType?.("navigation")?.[0];if(e&&e.responseStart>0&&e.responseStart<a.performance.now())return e}])},7295(e,t,r){"use strict";r.d(t,{Xv:()=>a,gX:()=>i,iW:()=>s});var n=[];function i(e){if(!e||s(e))return!1;if(0===n.length)return!0;if("*"===n[0].hostname)return!1;for(var t=0;t<n.length;t++){var r=n[t];if(r.hostname.test(e.hostname)&&r.pathname.test(e.pathname))return!1}return!0}function s(e){return void 0===e.hostname}function a(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;if("*"===r)return void(n=[{hostname:"*"}]);0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let s,a;i>0?(s=r.substring(0,i),a=r.substring(i)):(s=r,a="*");let[c]=s.split(":");n.push({hostname:o(c),pathname:o(a,!0)})}}function o(e,t=!1){const r=e.replace(/[.+?^${}()|[\]\\]/g,e=>"\\"+e).replace(/\*/g,".*?");return new RegExp((t?"^":"")+r+"$")}},3241(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(6154);function i(e={}){try{n.gm.dispatchEvent(new CustomEvent("newrelic",{detail:e}))}catch(e){}}},1687(e,t,r){"use strict";r.d(t,{Ak:()=>o,Ze:()=>d,x3:()=>c});var n=r(3241),i=r(3606),s=r(860),a=r(2646);function o(e,t){if(!e)return;const r={staged:!1,priority:s.P3[t]||0};
13e.runtime.drainRegistry.get(t)||e.runtime.drainRegistry.set(t,r)}function c(e,t){if(!e)return;const r=e.runtime.drainRegistry;r&&(r.get(t)&&r.delete(t),l(e,t,!1),r.size&&u(e))}function d(e,t="feature",r=!1){if(e){if(!e.runtime.drainRegistry.get(t)||r)return l(e,t);e.runtime.drainRegistry.get(t).staged=!0,u(e)}}function u(e){if(!e)return;const t=Array.from(e.runtime.drainRegistry);t.every(([e,t])=>t.staged)&&(t.sort((e,t)=>e[1].priority-t[1].priority),t.forEach(([t])=>{e.runtime.drainRegistry.delete(t),l(e,t)}))}function l(e,t,r=!0){if(!e)return;const s=e.ee,o=i.i.handlers;if(s&&!s.aborted&&s.backlog&&o){if((0,n.W)({type:"lifecycle",name:"drain",feature:t}),r){const e=s.backlog[t],r=o[t];if(r){for(let t=0;e&&t<e.length;++t)f(e[t],r);Object.entries(r).forEach(([e,t])=>{Object.values(t||{}).forEach(t=>{t[0]?.on&&t[0].context()instanceof a.y&&!t[0].listeners(e).includes(t[1])&&t[0].on(e,t[1])})})}}s.isolatedBacklog||delete o[t],s.backlog[t]=null,s.emit("drain-"+t,[])}}function f(e,t){var r=e[1];Object.values(t[r]||{}).forEach(t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],s=e[2];n.apply(i,s)}})}},7836(e,t,r){"use strict";var n=r(384),i=r(8990),s=r(2646),a=r(5607);const o="nr@context:".concat(a.W),c=function e(t,r){var n={},a={},u={},l=!1;try{l=16===r.length&&d.initializedAgents?.[r]?.runtime.isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,s){!1!==s&&(s=!0);if(c.aborted&&!i)return;t&&s&&t.emit(e,r,n);var o=h(n);g(e).forEach(e=>{e.apply(o,r)});var d=v()[a[e]];d&&d.push([f,e,r,o]);return o},get:m,listeners:g,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach(([e,n])=>{a[n]=t,t in r||(r[t]=[])})},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach(e=>{delete f.backlog[e]})},isBuffering:function(e){return!!v()[a[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof s.y?e:e?(0,i.I)(e,o,()=>new s.y(o)):new s.y(o)}function p(e,t){n[e]=g(e).concat(t)}function g(e){return n[e]||[]}function m(t){return u[t]=u[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=c),r.d(t,["P",0,o,"ee",0,c])},2646(e,t,r){"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908(e,t,r){"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,s){s?(s.buffer([e],i),s.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(9908);s.on=a;var i=s.handlers={};function s(e,t,r,s){a(s||n.d,i,e,t,r)}function a(e,t,r,i,s){s||(s="feature"),e||(e=n.d);var a=t[s]=t[s]||{};(a[r]=a[r]||[]).push([e,i])}},3878(e,t,r){"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function s(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>s,jT:()=>n,sp:()=>i})},5607(e,t,r){"use strict";const n=(0,r(9566).bz)();r.d(t,["W",0,n])},9566(e,t,r){"use strict";r.d(t,{LA:()=>a,ZF:()=>o,bz:()=>s,el:()=>c});var n=r(6154);function i(e,t){return e?15&e[t]:16*Math.random()|0}function s(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("").map(e=>"x"===e?i(t,r++).toString(16):"y"===e?(3&i()|8).toString(16):e).join("")}function a(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,s=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var o=0;o<e;o++)a.push(i(r,s++).toString(16));return a.join("")}function o(){return a(16)}function c(){return a(32)}},2614(e,t,r){"use strict";r.d(t,["BB",0,18e5,"Wt",0,"NRBA_SESSION::","g",0,{OFF:0,FULL:1,ERROR:2},"iL",0,{SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},"tS",0,{STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},"wk",0,144e5])},733(e,t,r){"use strict";function n(e,t){return function(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}("".concat(String(e),":").concat(String(t)))}r.d(t,{Y:()=>n})},1863(e,t,r){"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},9119(e,t,r){"use strict";r.d(t,{L:()=>s});var n=/([^?#]*)[^#]*(#[^?]*|$).*/,i=/([^?#]*)().*/;function s(e,t){return e?e.replace(t?n:i,"$1$2"):e}},7485(e,t,r){"use strict";r.d(t,{D:()=>i});var n=r(6154);function i(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n.gm?.location?.protocol&&t.host===n.gm?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},7866(e,t,r){"use strict";r.d(t,["Nc",0,/^\s*at Function code \(Function code:\d+:\d+\)\s*/i,"cn",0,/^\s*(?:([^@]*)(?:\(.*?\))?@)?((?:file|http|https|chrome|safari-extension).*?):(\d+)(?::(\d+))?\s*$/i,"fL",0,/^\s*at .+ \(eval at \S+ \((?:(?:file|http|https):[^)]+)?\)(?:, [^:]*:\d+:\d+)?\)$/i,"h3",0,/function (.+?)\s*\(/,"hB",0,/^\s*at (?:((?:\[object object\])?(?:[^(]*\([^)]*\))*[^()]*(?: \[as \S+\])?) )?\(?((?:file|http|https|chrome-extension):.*?)?:(\d+)(?::(\d+))?\)?\s*$/i])},944(e,t,r){"use strict";r.d(t,{R:()=>i});var n=r(3241);function i(e,t){"function"==typeof console.debug&&(console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t),(0,n.W)({drained:null,type:"data",name:"warn",feature:"warn",data:{code:e,secondary:t}}))}},8990(e,t,r){"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389(e,t,r){"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout(()=>{i=clearTimeout(i)},t)),n||(clearTimeout(i),i=setTimeout(()=>{e.apply(this,r)},t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},1910(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(944);const i=new Map;function s(...e){return e.every(e=>{if(i.has(e))return i.get(e);const t="function"==typeof e?e.toString():"",r=t.includes("[native code]"),s=t.includes("nrWrapper");return r||s||(0,n.R)(64,e?.name||t),i.set(e,r),r})}},3304(e,t,r){"use strict";r.d(t,{A:()=>i});var n=r(7836);function i(e){try{return JSON.stringify(e,(()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}})())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},9232(e,t,r){"use strict";r.d(t,["f",0,{MFE:"MFE",BA:"BA"}])},7560(e,t,r){"use strict";r.d(t,{N:()=>a,j:()=>c});var n=r(9119),i=r(944);const s=(0,r(6389).J)(e=>(0,i.R)(80,e));function a(e){if(!Array.isArray(e?.assets)||!e.assets.length)return;
13const t=e.assets.map(o).filter(Boolean);return t.length?{assets:t,scripts:t.filter(e=>e.isScript)}:void 0}function o(e){if(!e||"object"!=typeof e)return;const{matcher:t,type:r}=e;let i="string"==typeof t&&t.endsWith(".js");return void 0!==r&&(!function(e){return"script"===e||"asset"===e}(r)?s(r):i=function(e){return"script"===e}(r)),a=t,"[object RegExp]"===Object.prototype.toString.call(a)?{pattern:t,test:e=>(t.lastIndex=0,t.test((0,n.L)(e))),isScript:i}:"string"==typeof t&&t.length>0?{pattern:t,test:e=>(0,n.L)(e).includes(t),isScript:i}:void s(t);var a}function c(e,t,{scriptsOnly:r=!1}={}){if(!e||!t)return!1;return(r?e.scripts:e.assets).some(e=>e.test(t))}},5718(e,t,r){"use strict";r.d(t,{xo:()=>T,AZ:()=>v,cI:()=>g,Qr:()=>A,QL:()=>y});var n=r(6154),i=r(1863),s=r(9119),a=r(7866);class o{dom=new c;performance=new c;constructor(e){this.url=e,this.claimedBy=new Set}get script(){const e=Math.max(this.dom.start,this.performance.end);return{start:e,end:Math.max(this.dom.end,this.performance.end,e)}}}class c{start=0;end=0;value=void 0}function d(e=()=>{},t){return{get:()=>void 0!==t?t:e(),set:e=>{t=e}}}let u;try{u=v(y())[0]}catch(e){u=v(e)[0]}const l=new Map;let f=[];const h=new WeakMap;function p(e){let t=h.get(e);return t||(t={weighedAssetUrls:new Set,recordManifestScriptWindow:(t,r)=>{t&&(e.scriptStart=e.scriptStart>0?Math.min(e.scriptStart,t):t),r&&(e.scriptEnd=e.scriptEnd>0?Math.max(e.scriptEnd,r):r)}},h.set(e,t)),t}function g(e){return l.get(e)}function m(e){const t=g(e);
13if(t)return t;const r=new o(e);if(l.set(e,r),l.size>1e3){const e=l.keys().next().value;l.delete(e)}return r}if(n.gm.MutationObserver&&n.gm.document){new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{if("SCRIPT"===e.nodeName&&e.src){const t=m((0,s.L)(e.src));t.dom.start=(0,i.t)(),t.dom.value=e;const r=()=>{t.dom.end=(0,i.t)()};["load","error"].forEach(t=>e.addEventListener(t,r,{once:!0}))}})})}).observe(n.gm.document,{childList:!0,subtree:!0})}if(n.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{if((e=>"script"===e.initiatorType||["link","fetch"].includes(e.initiatorType)&&(0,s.L)(e.name).endsWith(".js"))(e)){const t=m((0,s.L)(e.name));t.performance.start=Math.floor(e.startTime),t.performance.end=Math.floor(e.responseEnd),t.performance.value=e}if(!f.length)return;const t=[];f.forEach(({test:r,addedAt:n},s)=>{(r(e)||(0,i.t)()-n>1e4)&&t.push(s)}),f=f.filter((e,r)=>!t.includes(r))})}).observe({type:"resource",buffered:!0})}function v(e){if(!e||"string"!=typeof e)return[];const t=new Set,r=e.split("\n");for(const e of r){const r=e.match(a.cn)||e.match(a.hB)||e.match(a.fL);if(r&&r[2])t.add((0,s.L)(r[2]));else{const r=e.match(/\(([^)]+\.js):\d+:\d+\)/)||e.match(/^\s+at\s+([^\s(]+\.js):\d+:\d+/);r&&r[1]&&t.add((0,s.L)(r[1]))}}return[...t]}function y(){let e;try{const t=Error.stackTraceLimit;Error.stackTraceLimit=50,e=(new Error).stack,Error.stackTraceLimit=t}catch(t){e=(new Error).stack}return e}function b(e,t){return(0,s.L)(e.name)===t}function E(e,t){e.fetchStart=Math.floor(t.startTime),e.fetchEnd=Math.floor(t.responseEnd),e.asset=t.name,e.type=t.initiatorType,w(e,t)}function w(e,t){const r=(0,s.L)(t.name),{weighedAssetUrls:n}=p(e);n.has(r)||(n.add(r),e.totalWeight=(e.totalWeight||0)+(t.transferSize||0),"blocking"===t.renderBlockingStatus?e.renderBlocking=!0:"non-blocking"===t.renderBlockingStatus&&!0!==e.renderBlocking&&(e.renderBlocking=!1))}function R(e,t,r,n,i){if(w(e,t),"scripts"!==i&&"all"!==i)return;if("all"===i||r.isScript){const r=Math.floor(t.startTime),n=Math.floor(t.responseEnd);e.fetchStart=e.fetchStart>0?Math.min(e.fetchStart,r):r,e.fetchEnd=e.fetchEnd>0?Math.max(e.fetchEnd,n):n}if(r.isScript){const r=g((0,s.L)(t.name));if(r){const t=()=>{const{start:t,end:n}=r.script;p(e).recordManifestScriptWindow(t,n)};t(),!r.dom.end&&r.dom.value&&["load","error"].forEach(e=>r.dom.value.addEventListener(e,t,{once:!0}))}n.resolved||(e.asset=t.name,e.type=t.initiatorType,n.resolved=!0)}}function T(e,t){const r=t?.manifest;if(!r||!r.assets.length)return;const s={resolved:!1},a=new Set(r.assets);(n.gm.performance?.getEntriesByType("resource")||[]).forEach(r=>{const n=[...a].find(e=>e.test(r.name));n&&(R(e,r,n,s,t.timingMethod),a.delete(n))}),a.size&&function(e,t,r,s){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:n=>{const i=[...t].find(e=>e.test(n.name));return i&&(R(e,n,i,r,s),t.delete(i)),0===t.size}})}(e,a,s,t.timingMethod)}function A(e){const t=e?.id,r={registeredAt:(0,i.t)(),reportedAt:void 0,fetchStart:0,fetchEnd:0,scriptStart:0,scriptEnd:0,asset:void 0,type:"unknown",totalWeight:0,renderBlocking:void 0},a=y();if(!a)return r;const o=n.gm.performance?.getEntriesByType("navigation")?.[0]?.name||"";try{const e=v(a),c=(e.length>1?e.filter(e=>u!==e):e)[0];if(!c)return r;if(o.includes(c))return r.asset=(0,s.L)(o),r.type="inline",r;r.correlation=g(c);const l=r.correlation?.performance.value||n.gm.performance?.getEntriesByType("resource")?.find(e=>b(e,c));if(l)E(r,l);else{(function(e){if(!e||!n.gm.document)return!1;try{const t=n.gm.document.querySelectorAll('link[rel="preload"][as="script"]');for(const r of t)if((0,s.L)(r.href)===e)return!0}catch(e){}return!1})(c)&&(r.asset=c,r.type="preload"),function(e,t){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:r=>!!b(r,t)&&(E(e,r),!0)})}(r,c)}const h=r.correlation,m=!!t&&!!h?.claimedBy.has(t);h&&t&&h.claimedBy.add(t);const y=()=>{const e=h?.script.start;if(!m||!e)return!1;return r.registeredAt-e>1e4};let w=0,R=0;p(r).recordManifestScriptWindow=(e,t)=>{e&&(w=w>0?Math.min(w,e):e),t&&(R=R>0?Math.max(R,t):t)},Object.defineProperty(r,"scriptStart",d(()=>{const e=y()?r.registeredAt:h?.script.start??r.fetchEnd;return w>0?Math.min(e,w):e})),Object.defineProperty(r,"scriptEnd",d(()=>{const e=y()?r.registeredAt:h?.script.end??r.registeredAt;return R>0?Math.max(e,R):e}))}catch(e){}return r}},5732(e,t,r){"use strict";r.d(t,{$5:()=>m,B5:()=>g,K6:()=>u,M$:()=>
13o,Ms:()=>d,NG:()=>c,Ux:()=>h,YA:()=>p,yx:()=>l});var n=r(5718),i=r(7560),s=r(9119),a=r(9232);function o(e){return e?.type===a.f.MFE}function c(e,t){if(!y(e,t))return;const r=t.runtime.registeredEntities;return r?.find(t=>t.metadata.target.iframeInterfaceId===e)}function d(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities;return r?.filter(t=>String(t.metadata.target.id)===String(e)).map(e=>e.metadata.target)||[]}function u(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=(0,s.L)(e),a=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!1}):!!t.metadata.timings?.asset&&(0,s.L)(t.metadata.timings.asset)===n});return f(a).map(e=>e.metadata.target)}function l(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!0}):!!t.metadata.timings?.asset?.endsWith(e)});return f(n).map(e=>e.metadata.target)}function f(e){if(!e?.length)return e||[];const t=new Map,r=[];for(const n of e){const e=n.metadata?.timings?.asset;if(!e){r.push(n);continue}const i="".concat(e,"::").concat(n.metadata?.target?.id),s=t.get(i);if(s){if(s.metadata.target?.blocked&&!n.metadata.target?.blocked){const e=r.indexOf(s);-1!==e&&(r[e]=n),t.set(i,n)}}else t.set(i,n),r.push(n)}return r}function h(e,t){return v(t)?o(e)?e.attributes:t.agentRef.runtime.v2Target.attributes:{}}function p(e,t){return g(e,t)?{"child.id":e.id,"child.type":e.type,...h(void 0,t)}:{}}function g(e,t){return o(e)&&!!v(t)&&t.agentRef.init.api.register.duplicate_data_to_container}function m(e){if(!e?.runtime)return[];if(!y(!0,e)||!e.runtime.registeredEntities?.length)return[e.runtime.v2Target];const t=[];try{var r=(0,n.AZ)((0,n.QL)());let i=r.length-1;for(;r[i];)t.push(...l(r[i--],e))}catch(e){}const i=function(e){const t=new Set,r=[];for(const n of e){const e=n?.instance;t.has(e)||(t.add(e),r.push(n))}return r}(t);return i.length||i.push(e.runtime.v2Target),i}function v(e){return 2===e?.harvestEndpointVersion}function y(e,t){return!!e&&!!t?.init.api.register.enabled}},5289(e,t,r){"use strict";r.d(t,{GG:()=>a,Qr:()=>c,sB:()=>o});var n=r(3878),i=r(6389);function s(){return"undefined"==typeof document||"complete"===document.readyState}function a(e,t){if(s())return e();const r=(0,i.J)(e),a=setInterval(()=>{s()&&(clearInterval(a),r())},500);(0,n.sp)("load",r,t)}function o(e){if(s())return e();(0,n.DD)("DOMContentLoaded",e)}function c(e){if(s())return e();(0,n.sp)("popstate",e)}},384(e,t,r){"use strict";r.d(t,{Zm:()=>c,bQ:()=>u,dV:()=>d,pV:()=>l});var n=r(6154),i=r(1863),s=r(944),a=r(1910);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function c(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function d(){let e=c();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate||n.gm.setInterval,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket},(0,a.i)(...Object.values(e.o))),e}function u(e,t){let r=c();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t,2===Object.keys(r.initializedAgents).length&&(0,s.R)(69)}function l(){return function(){let e=c();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=c();const t=e.init||{};e.init={...t}}(),d(),function(){let e=c();const t=e.loader_config||{};e.loader_config={...t}}(),c()}r.d(t,["NT",0,o])},2843(e,t,r){"use strict";r.d(t,{G:()=>s,u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)},r,i)}function s(e,t,r){(0,n.sp)("pagehide",e,t,r)}},8139(e,t,r){"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),s=r(8990),a=r(6154);const o={},c=a.gm.XMLHttpRequest,d="addEventListener",u="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e,t){var r=function(e){return(e||n.ee).get("events")}(e);if(o[r.debugId]++)return r;o[r.debugId]=1;var f=(0,i.YM)(r,!0,t);function p(e){f.inPlace(e,[d,u],"-",g)}function g(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,p),c&&h(c.prototype,p),h(a.gm,p)),r.on(d+"-start",function(e,t){var r=e[1];if(null!==r&&("function"==typeof r||"object"==typeof r)&&"newrelic"!==e[0]){var n=(0,s.I)(r,l,function(){var e={object:function(){if("function"!=typeof r.handleEvent)return;return r.handleEvent.apply(r,arguments)},function:r}[typeof r];return e?f(e,"fn-",null,e.name||"anonymous"):r});this.wrapped=e[1]=n}}),r.on(u+"-start",function(e){e[1]=this.wrapped||e[1]}),r}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,d);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},3434(e,t,r){"use strict";r.d(t,{YM:()=>d});var n=r(7836),i=r(5607),s=r(5732);const a="nr@original:".concat(i.W);var o=Object.prototype.hasOwnProperty,c=!1;function d(e,t,r){return e||(e=n.ee),i.inPlace=function(e,t,r,n,s,a){r||(r="");const o="-"===r.charAt(0);for(let c=0;c<t.length;c++){const d=t[c],u=e[d];l(u)||(e[d]=i(u,o?d+r:r,n,d,s,a))}},i.flag=a,i;function i(t,n,i,c,f,h){return l(t)?t:(n||(n=""),nrWrapper[a]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach(function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})}),t}catch(e){u([e],r)}for(var n in e)o.call(e,n)&&(t[n]=e[n])}
13(t,nrWrapper,e),nrWrapper);function nrWrapper(){var a,o,l,p;let g,m;try{o=this,a=[...arguments],m=h?(0,s.$5)(r):[r?.runtime?.v2Target],l="function"==typeof i?i(a,o):i||{}}catch(t){u([t,"",[a,o,c],l],e)}d(n+"start",[a,o,c,m],l,f);const v=performance.now();let y;try{return p=t.apply(o,a),y=performance.now(),p}catch(e){throw y=performance.now(),d(n+"err",[a,o,e,m],l,f),g=e,g}finally{const e=y-v,t={start:v,end:y,duration:e,isLongTask:e>=50,methodName:c,thrownError:g};t.isLongTask&&d("long-task",[t,o,m],l,f),d(n+"end",[a,o,p,m],l,f)}}}function d(r,n,i,s){if(!c||t){var a=c;c=!0;try{e.emit(r,n,i,t,s)}catch(t){u([t,r,n,i],e)}c=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function l(e){return!(e&&"function"==typeof e&&e.apply&&!e[a])}r.d(t,["Jt",0,a])},9300(e,t,r){"use strict";const n=r(860).K7.ajax;r.d(t,["TZ",0,n,"f5",0,"ajaxRequest.id","mo",0,{NONE:"none",FAILURES:"failures",ALL:"all"}])},3333(e,t,r){"use strict";var n=r(981);const i=r(860).K7.genericEvents,s=[n.R.PA,n.R.UA,n.R.BP];r.d(t,["$v",0,{RESOURCES:"experimental.resources",REGISTER:"register"},"TZ",0,i,"Zp",0,["auxclick","click","copy","keydown","paste","scrollend"],"kd",0,s,"qN",0,["focus","blur"]])},6774(e,t,r){"use strict";const n=r(860).K7.jserrors;r.d(t,["T",0,n])},993(e,t,r){"use strict";const n=r(860).K7.logging;r.d(t,["A$",0,{OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},"TZ",0,n,"p_",0,{ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"}])},3785(e,t,r){"use strict";r.d(t,{R:()=>c,b:()=>d});var n=r(9908),i=r(1863),s=r(860),a=r(3969),o=r(993);function c(e,t,r={},c=o.p_.INFO,d=!0,u,l=(0,i.t)()){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,s.K7.metrics,e),(0,n.p)("log",[l,t,r,c,d,u],void 0,s.K7.logging,e)}function d(e){return"string"==typeof e&&Object.values(o.p_).some(t=>t===e.toUpperCase().trim())}},3969(e,t,r){"use strict";const n=r(860).K7.metrics;r.d(t,["TZ",0,n,"XG",0,"storeEventMetrics","xV",0,"storeSupportabilityMetrics"])},6630(e,t,r){"use strict";const n=r(860).K7.pageViewEvent;r.d(t,["T",0,n])},782(e,t,r){"use strict";const n=r(860).K7.pageViewTiming;r.d(t,["T",0,n])},6344(e,t,r){"use strict";var n=r(2614);const i=r(860).K7.sessionReplay,s={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0}
13;r.d(t,["Qb",0,{API:"api",RESUME:"resume",SWITCH_TO_FULL:"switchToFull",INITIALIZE:"initialize",PRELOAD:"preload"},"TZ",0,i,"Vh",0,"errorDuringReplay","_s",0,{DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},"bc",0,{RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},"yP",0,s])},5270(e,t,r){"use strict";r.d(t,{Aw:()=>a,SR:()=>s,rF:()=>o});var n=r(384),i=r(7767);function s(e){return!!(0,n.dV)().o.MO&&(0,i.V)(e)&&!0===e?.session_trace.enabled}function a(e){return!0===e?.session_replay.preload&&s(e)}function o(e,t){try{if("string"==typeof t?.type&&"password"===t.type.toLowerCase())return"*".repeat(e?.length||0);if(void 0!==t?.dataset?.nrUnmask||t?.classList?.contains("nr-unmask"))return e}catch(e){}return"string"==typeof e?e.replace(/[\S]/g,"*"):"*".repeat(e?.length||0)}},3738(e,t,r){"use strict";const n=r(860).K7.sessionTrace,i="-start",s="-end",a="fn"+i,o="fn"+s;r.d(t,["He",0,"bstResource","Kp",0,s,"Lc",0,o,"Rz",0,"pushState","TZ",0,n,"bD",0,"resource","bc",0,{CROSS_TAB:{message:"Session Entity was set to OFF on another tab"},ENTITLEMENTS:{message:"Session Trace is not allowed and will not be started"},RESET:{message:"Session was reset"},SESSION_CHANGED:{message:"Session identifier changed unexpectedly"}},"d3",0,i,"uP",0,a])},3962(e,t,r){"use strict";const n=r(860).K7.softNav;r.d(t,["O2",0,{INITIAL_PAGE_LOAD:"",ROUTE_CHANGE:1,UNSPECIFIED:2},"OV",0,"popstate","Qu",0,{INTERACTION:1,AJAX:2,CUSTOM_END:3,CUSTOM_TRACER:4},"TZ",0,n,"ih",0,{IP:"in progress",PF:"pending finish",FIN:"finished",CAN:"cancelled"},"pP",0,"initialPageLoad","tC",0,["click","keydown","submit"]])},4234(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(1687);class i{constructor(e,t){this.agentRef=e,this.ee=e?.ee,this.featureName=t,this.blocked=!1}deregisterDrain(){(0,n.x3)(this.agentRef,this.featureName)}}},7767(e,t,r){"use strict";var n=r(6154);r.d(t,["V",0,e=>n.RI&&!0===e?.privacy.cookies_enabled])},8362(e,t,r){"use strict";r.d(t,{d:()=>s});var n=r(9566),i=r(1741);class s extends i.W{agentIdentifier=(0,n.LA)(16)}},1741(e,t,r){"use strict";r.d(t,{W:()=>s});var n=r(944),i=r(4261);class s{#e(e,...t){if(this[e]!==s.prototype[e])return this[e](...t);(0,n.R)(35,e)}addPageAction(e,t){return this.#e(i.hG,e,t)}register(e){return this.#e(i.eY,e)}recordCustomEvent(e,t){return this.#e(i.fF,e,t)}setPageViewName(e,t){return this.#e(i.Fw,e,t)}setCustomAttribute(e,t,r){return this.#e(i.cD,e,t,r)}noticeError(e,t){return this.#e(i.o5,e,t)}setUserId(e,t=!1){return this.#e(i.Dl,e,t)}setApplicationVersion(e){return this.#e(i.nb,e)}setErrorHandler(e){return this.#e(i.bt,e)}addRelease(e,t){return this.#e(i.k6,e,t)}log(e,t){return this.#e("log",e,t)}start(){return this.#e("start")}finished(e){return this.#e(i.BL,e)}recordReplay(){return this.#e(i.CH)}pauseReplay(){return this.#e(i.Tb)}addToTrace(e){return this.#e(i.U2,e)}setCurrentRouteName(e){return this.#e(i.PA,e)}interaction(e){return this.#e(i.dT,e)}wrapLogger(e,t,r){return this.#e(i.Wb,e,t,r)}measure(e,t){return this.#e(i.V1,e,t)}consent(e){return this.#e(i.Pv,e)}}},4261(e,t,r){"use strict";r.d(t,["BL",0,"finished","CH",0,"recordReplay","Dl",0,"setUserId","Fw",0,"setPageViewName","PA",0,"setCurrentRouteName","Pv",0,"consent","Tb",0,"pauseReplay","U2",0,"addToTrace","V1",0,"measure","Wb",0,"wrapLogger","bt",0,"setErrorHandler","cD",0,"setCustomAttribute","dT",0,"interaction","eY",0,"register","fF",0,"recordCustomEvent","hG",0,"addPageAction","hw",0,"api-ixn-","k6",0,"addRelease","nb",0,"setApplicationVersion","o5",0,"noticeError"])},1738(e,t,r){"use strict";r.d(t,{U:()=>l,Y:()=>u});var n=r(3241),i=r(9908),s=r(1863),a=r(944),o=r(3969),c=r(8362),d=r(860);function u(e,t,r,s){const u=s||r;!u||u[e]&&u[e]!==c.d.prototype[e]||(u[e]=function(){(0,i.p)(o.xV,["API/"+e+"/called"],void 0,d.K7.metrics,r.ee),(0,n.W)({drained:!!r.runtime?.activatedFeatures,type:"data",name:"api",feature:"api-"+e,data:{}});try{return t.apply(this,arguments)}catch(e){(0,a.R)(23,e)}})}function l(e,t,r,n,a){const o=e.info;null===r?delete o.jsAttributes[t]:o.jsAttributes[t]=r,(a||null===r)&&(0,i.p)("api-"+n,[(0,s.t)(),t,r],void 0,"session",e.ee)}},8374(e,t,r){r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860(e,t,r){"use strict";const n="events",i="jserrors",s="browser/blobs",a="browser/logs",o={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations"},c={[o.pageViewEvent]:1,[o.pageViewTiming]:2,[o.metrics]:3,[o.jserrors]:4,[o.softNav]:5,[o.ajax]:6,[o.sessionTrace]:7,[o.sessionReplay]:8,[o.logging]:9,[o.genericEvents]:10},d={[o.pageViewEvent]:"rum",[o.pageViewTiming]:n,[o.ajax]:n,[o.softNav]:n,[o.metrics]:i,[o.jserrors]:i,[o.sessionTrace]:s,[o.sessionReplay]:s,[o.logging]:a,[o.genericEvents]:"ins"};r.d(t,["$J",0,d,"K7",0,o,"P3",0,c,"XX",0,i,"Yy",0,a,"df",0,s,"hg",0,"connect"])}};const t={};function r(n){const i=t[n];if(void 0!==i)return i.exports;const s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.m=e,r.d=(e,t)=>{if(Array.isArray(t))for(var n=0;n<t.length;){var i=t[n++],s=t[n++];r.o(e,i)?0===s&&n++:0===s?Object.defineProperty(e,i,{enumerable:!0,value:t[n++]}):Object.defineProperty(e,i,{enumerable:!0,get:s})}else for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,n)=>(r.f[n](e,t),t),[])),r.u=e=>({212:"nr-spa-compressor",238:"nr-spa-iframe-message-handler",249:"nr-spa-recorder",478:"nr-spa"}[e]+"-1.323.0.min.js"),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e={},t="NRBA-1.323.0.PROD:";r.l=(n,i,s,a)=>
13{if(e[n])return void e[n].push(i);let o,c;if(void 0!==s){const e=document.getElementsByTagName("script");for(var d=0;d<e.length;d++){const r=e[d];if(r.getAttribute("src")==n||r.getAttribute("data-webpack")==t+s){o=r;break}}}if(!o){c=!0;var u={478:"sha512-ORjtmy+nQMgxbu0os8+oTRa5sPzbinyuWSvpZrrstVLIaHofRRlfODdH+oUmkIgeQpM+vPf3vG/4RzvCsFVh1A==",249:"sha512-o7+K6xC0z3TqynjVxpd+jgiSgqy8rrPeRcUSqt5J0Rqg5Su5CycLMYfpwiM3WBCHiNDrG5aZoXJQ6HRc335XYQ==",212:"sha512-kRvBt1IYQDBnClTEWNaE8sDFqbXXM3Vdyf972Uf4MFbJxl7u3KmdO+jdB1H4achPEoT9YtNXHswaESey6sCH0A==",238:"sha512-U5EGmyYbFVR2UMNAuZJ7fTgVVtPa5b8RPMySDwXo7z3frRdkUJ2x1VAQTLQCeBab8VlGVGRV8FiSHIn/pwN72A=="};o=document.createElement("script"),o.charset="utf-8",r.nc&&o.setAttribute("nonce",r.nc),o.setAttribute("data-webpack",t+s),o.src=n,0!==o.src.indexOf(window.location.origin+"/")&&(o.crossOrigin="anonymous"),u[a]&&(o.integrity=u[a])}e[n]=[i];const l=(t,r)=>{o.onerror=o.onload=null,clearTimeout(f);const i=e[n];if(delete e[n],o.parentNode?.removeChild(o),i?.forEach(e=>e(r)),t)return t(r)},f=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),c&&document.head.appendChild(o)}})(),r.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="https://js-agent.newrelic.com/",(()=>{const e={38:0,788:0};r.f.j=(t,n)=>{let i=r.o(e,t)?e[t]:void 0;if(0!==i)if(i)n.push(i[2]);else{const s=new Promise((r,n)=>i=e[t]=[r,n]);n.push(i[2]=s);const a=r.p+r.u(t),o=new Error,c=n=>{if(r.o(e,t)&&(i=e[t],0!==i&&(e[t]=void 0),i)){const e=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;o.message="Loading chunk "+t+" failed: ("+e+": "+r+")",o.name="ChunkLoadError",o.type=e,o.request=r,i[1](o)}};r.l(a,c,"chunk-"+t,t)}};const t=(t,n)=>{let[i,s,a]=n;var o,c,d=0;if(i.some(t=>0!==e[t])){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);if(a)a(r)}for(t&&t(n);d<i.length;d++)c=i[d],r.o(e,c)&&e[c]&&e[c][0](),e[c]=0},n=self["webpackChunk:NRBA-1.323.0.PROD"]=self["webpackChunk:NRBA-1.323.0.PROD"]||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),(()=>{"use strict";r(8374);var e=r(8362),t=r(860);const n=Object.values(t.K7);var i=r(384),s=r(1741);var a=r(2555),o=r(3333),c=r(9300);const d=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var u=r(2614),l=r(944),f=r(8122);const h="[data-nr-mask]",p=e=>(0,f.a)(e,(()=>{const e={feature_flags:[],experimental:{register:!1,resources:!1,iframe_bridge:!1,iframe_domains:[]},mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,autoStart:!0,capture_payloads:c.mo.NONE},api:{register:{get enabled(){return e.feature_flags.includes(o.$v.REGISTER)||e.experimental.register},set enabled(t){e.experimental.register=t},duplicate_data_to_container:!1,get allow_iframe_bridge(){return e.feature_flags.includes(o.$v.IFRAME_BRIDGE)||e.experimental.iframe_bridge},set allow_iframe_bridge(t){e.experimental.iframe_bridge=t},get iframe_domains(){return e.experimental.iframe_domains},set iframe_domains(t){Array.isArray(t)?e.experimental.iframe_domains=t:(0,l.R)(1,t)}}},browser_consent_mode:{enabled:!1},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1,capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(o.$v.RESOURCES)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:u.wk,inactiveMs:u.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inl
13ine_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){d(t)?e.mask_selector="".concat(t,",").concat(h):""===t||null===t?e.mask_selector=h:(0,l.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){d(t)?e.block_selector+=",".concat(t):""!==t&&(0,l.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,l.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]},web_sockets:{enabled:!1}}})());var g=r(6154),m=r(9324);let v=0;const y={buildEnv:"PROD",distMethod:"CDN",version:m.x,originTime:g.WN},b={consented:!1},E={activatedFeatures:void 0,appMetadata:{},configured:!1,get consented(){return this.session?.state?.consent||b.consented},set consented(e){b.consented=e},customTransaction:void 0,denyList:[],disabled:!1,drainRegistry:new Map,connector:void 0,harvester:void 0,v2Target:void 0,isolatedBacklog:!1,isRecording:!1,loaderType:void 0,maxBytes:3e4,obfuscator:void 0,onerror:void 0,ptid:void 0,releaseIds:{},session:void 0,timeKeeper:void 0,registeredEntities:[],jsAttributesMetadata:{bytes:0},get harvestCount(){return++v},listeningForIframeMessages:!1};var w=r(9232);var R=r(7836),T=r(3241);const A={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0};var S=r(9908),x=r(9752);function O(e,t={},n,o){let{init:c,info:d,loader_config:u,runtime:l={},exposed:h=!0}=t;if(!d){const e=(0,i.pV)();c=e.init,d=e.info,u=e.loader_config}var m;e.init=p(c||{}),e.loader_config=(m=u||{},(0,f.a)(m,A)),d.jsAttributes??={},g.bv&&(d.jsAttributes.isWorker=!0),e.info=(0,a.D)(d);const v=e.init;e.runtime??=(e=>{const t=(0,f.a)(e,E),r=Object.keys(y).reduce((e,t)=>(e[t]={value:y[t],writable:!1,configurable:!0,enumerable:!0},e),{});return Object.defineProperties(t,r)})(l),e.runtime.v2Target??={type:w.f.BA,instance:e.agentIdentifier,get id(){return e.runtime.appMetadata?.agents?.[0]?.entityGuid},get attributes(){return{"entity.guid":this.id,appId:e.info.applicationID}}},v.proxy.assets&&(e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e})(v.proxy.assets),e.runtime.configured||(Object.defineProperty(e,"beacons",{get:()=>[e.info.beacon,e.info.errorBeacon,e.init.proxy.assets,e.init.proxy.beacon].filter(Boolean)}),Object.defineProperty(e.runtime,"denyList",{get:()=>[...e.init.ajax.deny_list||[],...e.init.ajax.block_internal?e.beacons:[]]}),e.runtime.ptid=e.agentIdentifier,function(e){const t=(0,i.pV)();Object.getOwnPropertyNames(s.W.prototype).forEach(r=>{const n=s.W.prototype[r];if("function"!=typeof n||"constructor"===n)return;let i=t[r];e[r]&&!1!==e.exposed&&"micro-agent"!==e.runtime?.loaderType&&(t[r]=(...t)=>{const n=e[r](...t);return i?i(...t):n})})}(e),e.runtime.loaderType=n,e.ee=R.ee.get(e.agentIdentifier),e.exposed=h,(0,T.W)({drained:!!e.runtime.activatedFeatures,type:"lifecycle",name:"initialize",feature:void 0,data:e.config}),e.init.api.register.allow_iframe_bridge&&g.gm.addEventListener("message",t=>{"string"==typeof t.data?.type&&t.data.type.startsWith(x.Pl)&&(0,S.p)("iframe-message",[t],void 0,"IFRAME",e.ee)}),e.runtime.configured=!0)}var _=r(1863),k=r(4261),N=r(1738);var L=r(1687),M=r(4234),P=r(5289),I=r(5270),j=r(7767),C=r(6389),D=r(7699);const B=new WeakSet,H=new WeakMap;class W extends M.W{constructor(e,t){super(e,t),this.abortHandler=void 0,this.featAggregate=void 0,this.loadedSuccessfully=void 0,this.onAggregateImported=new Promise(e=>{this.loadedSuccessfully=e}),this.deferred=Promise.resolve(),!1===e.init[this.featureName].autoStart?this.deferred=new Promise((t,r)=>{this.ee.on("manual-start-all",(0,C.J)(()=>{(0,L.Ak)(e,this.featureName),t()}))}):(0,L.Ak)(e,t)}importAggregator(e,t,n={}){if(this.featAggregate)return;const i=async()=>{if(await this.deferred,this.#t(e),!(0,a.f)(e.info))return(0,l.R)(43),e.ee.abort(),void this.loadedSuccessfully(!1);try{await async function(e,t,n){if(H.has(e))return H.get(e);const i=(async()=>
13{if((0,j.V)(e.init))try{const{setupAgentSession:t}=await r.e(478).then(r.bind(r,8766));t(e)}catch(e){(0,l.R)(20,e),t.emit("internal-error",[e]),(0,S.p)(D.qh,[e],void 0,n,t)}if(e.init.api.register.allow_iframe_bridge)try{const{setupIframeMFEMessageListener:t}=await r.e(238).then(r.bind(r,6417));t(e)}catch(e){(0,l.R)(23,e)}const[{Connector:i},{Harvester:s}]=await Promise.all([r.e(478).then(r.bind(r,6589)),r.e(478).then(r.bind(r,5237))]);e.runtime.connector=new i(e),e.runtime.harvester=new s(e);const a=Object.values(e.features).filter(t=>e.runtime.drainRegistry.has(t.featureName));Promise.all(a.map(e=>e.onAggregateImported)).then(()=>e.runtime.harvester.startTimer())})();H.set(e,i),await i}(e,this.ee,this.featureName)}catch(e){return(0,l.R)(79,e),this.ee.abort(),void this.loadedSuccessfully(!1)}try{if(!this.#r(this.featureName,e.runtime.session,e.init))return this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName),void this.loadedSuccessfully(!1);const{Aggregate:r}=await t();this.featAggregate=new r(e,n),e.runtime.harvester.initializedAggregates.push(this.featAggregate),this.loadedSuccessfully(!0)}catch(e){(0,l.R)(34,e),this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName,!0),this.loadedSuccessfully(!1)}};g.RI?(0,P.GG)(()=>i(),!0):i()}#r(e,r,n){if(this.blocked)return!1;switch(e){case t.K7.sessionReplay:return(0,I.SR)(n)&&!!r;case t.K7.sessionTrace:return!!r;default:return!0}}#t(e){if(!B.has(e)&&(B.add(e),!(0,a.f)(e.info))){const t=(0,i.pV)();let r={...t.info?.jsAttributes};try{r={...r,...e.info?.jsAttributes}}catch(e){}O(e,{...t,info:{...t.info,jsAttributes:r},runtime:e.runtime},e.runtime.loaderType)}}}var U=r(6630);class K extends W{static featureName=U.T;constructor(e){var t;super(e,U.T),this.setupInspectionEvents(),t=e,(0,N.Y)(k.Fw,function(e,r){"string"==typeof e&&("/"!==e.charAt(0)&&(e="/"+e),t.runtime.customTransaction=(r||"http://custom.transaction")+e,(0,S.p)("api-"+k.Fw,[(0,_.t)()],void 0,void 0,t.ee))},t),this.importAggregator(e,()=>e.init.feature_flags.includes("rum_v2")?r.e(478).then(r.bind(r,908)):r.e(478).then(r.bind(r,7927)))}setupInspectionEvents(){const e=(e,t)=>{e&&(0,T.W)({timeStamp:e.timeStamp,loaded:"complete"===e.target.readyState,type:"window",name:t,data:e.target.location+""})};(0,P.sB)(t=>{e(t,"DOMContentLoaded")}),(0,P.GG)(t=>{e(t,"load")}),(0,P.Qr)(t=>{e(t,"navigate")}),this.ee.on(u.tS.UPDATE,(e,t)=>{(0,T.W)({type:"lifecycle",name:"session",data:t})})}}class F extends e.d{constructor(e){var t;(super(),g.gm)?(this.features={},(0,i.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(K),O(this,e,e.loaderType||"agent"),t=this,(0,N.Y)(k.cD,function(e,r,n=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof r)||null===r)return(0,N.U)(t,e,r,k.cD,n);(0,l.R)(40,typeof r)}else(0,l.R)(39,typeof e)},t),function(e){(0,N.Y)(k.Dl,function(t,r=!1){if("string"!=typeof t&&null!==t)return void(0,l.R)(41,typeof t);const n=e.info.jsAttributes["enduser.id"];r&&null!=n&&n!==t?(0,S.p)("api-setUserIdAndResetSession",[t],void 0,"session",e.ee):(0,N.U)(e,"enduser.id",t,k.Dl,!0)},e)}(this),function(e){(0,N.Y)(k.nb,function(t){if("string"==typeof t||null===t)return(0,N.U)(e,"application.version",t,k.nb,!1);(0,l.R)(42,typeof t)},e)}(this),function(e){(0,N.Y)("start",function(){e.ee.emit("manual-start-all")},e)}(this),function(e){(0,N.Y)(k.Pv,function(t=!0){if("boolean"==typeof t){if((0,S.p)("api-"+k.Pv,[t],void 0,"session",e.ee),e.runtime.consented=t,t){const t=e.features.page_view_event;t.onAggregateImported.then(e=>{const r=t.featAggregate;e&&!r.sentRum&&r.sendRum?.()})}}else(0,l.R)(65,typeof t)},e)}(this),this.run()):(0,l.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}get api(){return this}run(){try{const e=function(e){const t={};return n.forEach(r=>{t[r]=!!e[r]?.enabled}),t}(this.init),r=[...this.desiredFeatures],i=this.init.feature_flags.includes("rum_v2");r.sort((e,r)=>t.P3[e.featureName]-t.P3[r.featureName]),r.forEach(r=>{if(!e[r.featureName]&&(i||r.featureName!==t.K7.pageViewEvent))return;const n=function(e){switch(e){case t.K7.ajax:return[t.K7.jserrors];case t.K7.sessionTrace:return[t.K7.ajax,t.K7.pageViewEvent];case t.K7.sessionReplay:return[t.K7.sessionTrace];case t.K7.pageViewTiming:return[t.K7.pageViewEvent];default:return[]}}(r.featureName).filter(e=>!(e in this.features));n.length>0&&(0,l.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)})}catch(e){(0,l.R)(22,e);for(const e in this.features)this.features[e].abortHandler?.();const t=(0,i.Zm)();delete t.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return t.ee.get(this.agentIdentifier).abort(),!1}}}var V=r(2843),z=r(782);class G extends W{static featureName=z.T;constructor(e){super(e,z.T),g.RI&&((0,V.u)(()=>(0,S.p)("docHidden",[(0,_.t)()],void 0,z.T,this.ee),!0),(0,V.G)(()=>(0,S.p)("winPagehide",[(0,_.t)()],void 0,z.T,this.ee)),this.importAggregator(e,()=>r.e(478).then(r.bind(r,9917))))}}var q=r(3969);class Y extends W{static featureName=q.TZ;constructor(e){super(e,q.TZ),this.importAggregator(e,()=>r.e(478).then(r.bind(r,6555)))}}var Z=r(6774),J=r(3878),X=r(3304);class Q{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,X.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function ee(e){return ne(e)?e:new Q(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic,e?.cause)}function te(e){const t="Unhandled Promise Rejection: ";if(!e?.reason)return;if(ne(e.reason)){try{e.reason.message.startsWith(t)||(e.reason.message=t+e.reason.message)}catch(e){}return ee(e.reason)}const r=ee(e.reason);return(r.message||"").startsWith(t)||(r.message=t+r.message),r}function re(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new Q(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic,e.cause);return t.name=SyntaxError.name,t}return ne(e.error)?e.error:ee(e)}function ne(e){return e instanceof Error&&!!e.stack}function ie(e,r,n,i,s=(0,_.t)()){"string"==typeof e&&(e=new Error(e)),(0,S.p)("err",[e,s,!1,r,n.runtime.isRecording,void 0,i],void 0,t.K7.jserrors,n.ee),(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,n.ee)}var se=r(993),ae=r(3785);function oe(e,{customAttributes:t={},level:r=se.p_.INFO}={},n,i,s=(0,_.t)()){(0,ae.R)(n.ee,e,t,r,!1,i,s)}function ce(e,r,n,i,s=(0,_.t)()){(0,S.p)("api-"+k.hG,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}function de(e,r,n,i,s=(0,_.t)()){const{start:a,end:o,customAttributes:c}=r||{},d={customAttributes:c||{}};if("object"!=typeof d.customAttributes||"string"!=typeof e||0===e.length)return void(0,l.R)(57);const u=(e,t)=>
13null==e?t:"number"==typeof e?e:e instanceof PerformanceMark?e.startTime:Number.NaN;if(d.start=u(a,0),d.end=u(o,s),Number.isNaN(d.start)||Number.isNaN(d.end))(0,l.R)(57);else{if(d.duration=d.end-d.start,!(d.duration<0))return(0,S.p)("api-"+k.V1,[d,e,i],void 0,t.K7.genericEvents,n.ee),d;(0,l.R)(58)}}function ue(e,r={},n,i,s=(0,_.t)()){(0,S.p)("api-"+k.fF,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}var le=r(5718);const fe=(e,t)=>e?.nrMfeId===t.id&&(!e?.nrMfeObserved||e?.nrMfeObserved===t.instance),he=e=>{try{return g.gm.CSS.escape(e)}catch(t){return e}},pe=(e,t={})=>{const r=t.id,n=t.instance;if(!e||!r||!n)return!1;try{let r=1===e.nodeType?e:e.parentElement;for(;r?.tagName;){if(fe(r.dataset,t))return r.dataset.nrMfeObserved=n,!0;r=r.parentNode}}catch(e){}return!1},ge=(e,t)=>{const r=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]')),n=(Array.from(r)||[]).find(t=>fe(t.dataset,e));let i=!!n;i&&(n.dataset.nrMfeObserved??=e.instance);const s=new g.gm.MutationObserver(r=>{r.forEach(r=>{r.addedNodes.forEach(r=>{const n=1===r.nodeType?r:null;!i&&fe(n?.dataset,e)&&(s.disconnect(),s.observe(n,{childList:!0,subtree:!0}),i=!0,n.dataset.nrMfeObserved=e.instance),(e=>{try{return e?.textContent?.trim()||["img","video","canvas","svg"].includes(e?.nodeName?.toLowerCase())}catch(e){return!1}})(r)&&(i||pe(r,e))&&t(r,s)})})});return s.observe(n||g.gm.document,{childList:!0,subtree:!0}),s},me=(e,t,r)=>{try{const n=new g.gm.PerformanceObserver(e=>{e.getEntries().forEach(r)});return n.observe(t),e.push(n),n}catch(e){return null}};function ve(e,t){let r,n,i=!1;const s=e=>null==e?e:e-(t?.scriptStart||t?.registeredAt||0),a={fcp:{get value(){const e=s(r);return e>1e4?void 0:e},set value(e){i||(r=e)}},lcp:{get value(){if(void 0!==a.fcp.value)return s(n)},set value(e){i||(n=e)}},cls:{value:void 0},inp:{value:void 0},disconnect:()=>{}};if(!(e&&g.RI&&g.gm.MutationObserver&&g.gm.PerformanceObserver))return a;const o=[];setTimeout(()=>{r||a.disconnect()},1e4);const c=()=>{if(!i){if(null==r){const e=(0,_.t)();if(s(e)>1e4)return void a.disconnect();r=e}n??=(0,_.t)(),a.cls.value??=0}},d=ge(e,(e,t)=>{c(),t.disconnect()});o.push(d);let u=0,l=null;const f=new Set;try{l=new g.gm.ResizeObserver(e=>{i||e.forEach(e=>{try{const t=e.contentRect.width*e.contentRect.height;t>u&&(u=t,a.lcp.value=(0,_.t)()),l.unobserve(e.target)}catch(e){}})})}catch(e){}const h=ge(e,e=>{if(c(),l)try{const t=1===e.nodeType?e:e.parentElement;t&&!f.has(t)&&(f.add(t),"IMG"===t.tagName?t.complete?l.observe(t):t.addEventListener("load",()=>{l.observe(t)},{once:!0}):"VIDEO"===t.tagName?t.readyState>=2?l.observe(t):t.addEventListener("loadeddata",()=>{l.observe(t)},{once:!0}):l.observe(t))}catch(e){}});l&&o.push(l),o.push(h),me(o,{type:"layout-shift",buffered:!0},t=>{i||t.hadRecentInput||(t.sources||[]).some(r=>!!pe(r.node,e)&&(c(),a.cls.value+=t.value,!0))}),me(o,{type:"event",buffered:!0,durationThreshold:40},t=>{!i&&t.interactionId&&pe(t.target,e)&&(void 0===a.inp.value||t.duration>a.inp.value)&&(c(),a.inp.value=t.duration)});const p=["pointerdown","keydown"],m=()=>{p.forEach(e=>{g.gm.removeEventListener(e,v,{passive:!0})})};a.disconnect=()=>{i=!0,o.forEach(e=>{try{e?.disconnect()}catch(e){}}),m(),["visibilitychange","pagehide"].forEach(e=>{g.gm.removeEventListener(e,a.disconnect,{once:!0,passive:!0})})};const v=t=>{pe(t?.target,e)&&((()=>{try{h?.disconnect(),l?.disconnect()}catch(e){}})(),m())};p.forEach(e=>{g.gm.addEventListener(e,v,{passive:!0})}),["visibilitychange","pagehide"].forEach(e=>{g.gm.addEventListener(e,a.disconnect,{once:!0,passive:!0})});const y=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]'));return Array.from(y||[]).some(t=>fe(t.dataset,e))&&c(),a}var ye=r(9566),be=r(7560),Ee=r(9119);const we=["entry","scripts","all"],Re=["name","id","type"],Te=new Map([[ce,"addPageAction"],[oe,"log"],[de,"measure"],[ie,"noticeError"],[ue,"recordCustomEvent"]]),Ae={experimental:(0,C.J)(()=>(0,l.R)(54,"newrelic.register")),disabled:(0,C.J)(()=>(0,l.R)(55)),invalidTarget:(0,C.J)(e=>(0,l.R)(48,e)),deregistered:(0,C.J)(()=>(0,l.R)(68)),invalidTimingMethod:(0,C.J)(e=>(0,l.R)(80,e)),duplicateName:(0,C.J)(e=>(0,l.R)(81,e)),duplicateId:(0,C.J)(e=>(0,l.R)(82,e))};function Se(e){(0,N.Y)(k.eY,function(t){return xe(e,t)},e)}function xe(e,r){Ae.experimental(),r||={},r.instance=(0,ye.LA)(8),r.type=w.f.MFE,r.licenseKey||=e.info.licenseKey,r.blocked=!1,("object"!=typeof r.tags||null===r.tags||Array.isArray(r.tags))&&(r.tags={}),r.parent??={get id(){return e.runtime.appMetadata.agents?.[0].entityGuid},type:w.f.BA},r.manifest=(0,be.N)(r.manifest),void 0===r.timingMethod||we.includes(r.timingMethod)||(Ae.invali
13dTimingMethod(r.timingMethod),r.timingMethod=void 0);const n=(0,le.Qr)(r);r.manifest&&(0,le.xo)(n,r);const i=ve(r,n),s=(0,Ee.L)(""+location),a={};Object.prototype.hasOwnProperty.call(r,"attributes")||Object.defineProperty(r,"attributes",{get:()=>({...a,"source.id":r.id,"source.name":r.name,"source.type":r.type,"parent.type":r.parent?.type||w.f.BA,"parent.id":r.parent?.id})}),Object.entries(r.tags).forEach(([e,t])=>{Re.includes(e)||(a["source.".concat(e)]=t)});let o=()=>{};const c=e.runtime.registeredEntities,d=e=>{r.blocked=!0,o=e};function u(e){return"string"==typeof e&&!!e.trim()&&e.trim().length<501}e.init.api.register.enabled||d(Ae.disabled),u(r.id)&&u(r.name)||d(()=>Ae.invalidTarget(r)),c.forEach(e=>{try{const{name:t,id:n}=e.metadata.target;t===r.name&&n!==r.id&&Ae.duplicateName(r),n===r.id&&t!==r.name&&Ae.duplicateId(r)}catch(e){}});const f={addPageAction:(t,n={})=>m(ce,[t,{...a,...n},e],r),deregister:()=>{p(),d(Ae.deregistered)},log:(t,n={})=>m(oe,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),measure:(t,n={})=>m(de,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),noticeError:(t,n={})=>m(ie,[t,{...a,...n},e],r),recordCustomEvent:(t,n={})=>m(ue,[t,{...a,...n},e],r),setApplicationVersion:e=>g("application.version",e),setCustomAttribute:(e,t)=>g(e,t),setUserId:e=>g("enduser.id",e),metadata:{get customAttributes(){return a},target:r,timings:n,vitals:i,events:{latestTimestamp:void 0}}},h=()=>(r.blocked&&o(),r.blocked);function p(){if(n.reportedAt)return;n.reportedAt=(0,_.t)(),i.disconnect(),n.fcp=i.fcp,n.lcp=i.lcp,n.cls=i.cls,n.inp=i.inp;const e=n.fetchEnd-n.fetchStart,t=n.scriptEnd-n.scriptStart,r={assetUrl:n.asset,assetType:n.type,registerUrl:s,deregisterUrl:(0,Ee.L)(""+location),pageUrl:void 0,currentUrl:void 0,timeAlive:n.reportedAt-n.registeredAt,timeToBeRequested:n.fetchStart,timeToExecute:t,timeToFetch:e,timeToLoad:e+t,t
13imeToRegister:n.registeredAt,totalWeight:n.totalWeight,...void 0!==n.renderBlocking&&{renderBlocking:n.renderBlocking},...i.fcp.value>=0&&{"vitals.fcp.value":i.fcp.value},...i.lcp.value>=0&&{"vitals.lcp.value":i.lcp.value},...i.cls.value>=0&&{"vitals.cls.value":i.cls.value},...i.inp.value>=0&&{"vitals.inp.value":i.inp.value}};f.recordCustomEvent("MicroFrontEndTiming",r)}h()||(c.push(f),(0,V.G)(p));const g=(e,t)=>{h()||(a[e]=t)},m=(r,n,i)=>{if(h()&&r!==xe)return;const s=f.metadata.events.latestTimestamp??(0,_.t)();f.metadata.events.latestTimestamp=void 0;const a=Te.get(r)||"unknown";(0,S.p)(q.xV,["API/register/".concat(a,"/called")],void 0,t.K7.metrics,e.ee);try{return r(...n,i,s)}catch(e){(0,l.R)(50,e)}};return f}class Oe extends W{static featureName=Z.T;constructor(e){var t;super(e,Z.T),t=e,(0,N.Y)(k.o5,(e,r)=>ie(e,r,t),t),function(e){(0,N.Y)(k.bt,function(t){e.runtime.onerror=t},e)}(e),function(e){let t=0;(0,N.Y)(k.k6,function(e,r){++t>10||(this.runtime.releaseIds[e.slice(-200)]=(""+r).slice(-200))},e)}(e),Se(e);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(t,r)=>{this.abortHandler&&(0,S.p)("ierr",[ee(t),(0,_.t)(),!0,{},e.runtime.isRecording,r],void 0,this.featureName,this.ee)}),g.gm.addEventListener("unhandledrejection",t=>{this.abortHandler&&(0,S.p)("err",[te(t),(0,_.t)(),!1,{unhandledPromiseRejection:1},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),g.gm.addEventListener("error",t=>{this.abortHandler&&(0,S.p)("err",[re(t),(0,_.t)(),!1,{},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e,()=>r.e(478).then(r.bind(r,9377)))}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var _e=r(8990);let ke=1;function Ne(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===g.gm?0:(0,_e.I)(e,"nr@id",function(){return ke++})}function Le(e){if("string"==typeof e)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,X.A)(e).length}catch(e){return}}}var Me=r(8139),Pe=r(3434),Ie=r(5732);const je={},Ce=["open","send","setRequestHeader"];function De(e,t){var r=e||R.ee;const n=function(e){return(e||R.ee).get("xhr")}(r);if(void 0===g.gm.XMLHttpRequest)return n;if(je[n.debugId]++)return n;je[n.debugId]=1,(0,Me.u)(r,t);var i=(0,Pe.YM)(n,void 0,t),s=g.gm.XMLHttpRequest,a=g.gm.MutationObserver,o=g.gm.Promise,c=g.gm.setInterval,d="readystatechange",u=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],f=[],h=g.gm.XMLHttpRequest=function(e){const r=new s(e),a=n.context(r);a.targets=(0,Ie.$5)(t);try{n.emit("new-xhr",[r],a),r.addEventListener(d,(o=a,function(){var e=this;e.readyState>3&&!o.resolved&&(o.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,u,"fn-",E)}),(0,J.jT)(!1))}catch(e){(0,l.R)(15,e);try{n.emit("internal-error",[e])}catch(e){}}var o;return r};function p(e,t){i.inPlace(t,["onreadystatechange"],"fn-",E)}if(function(e,t){for(var r in e)t[r]=e[r]}(s,h),h.prototype=s.prototype,i.inPlace(h.prototype,Ce,"-xhr-",E),n.on("send-xhr-start",function(e,t){p(e,t),function(e){f.push(e),a&&(m?m.then(b):c?c(b):(v=-v,y.data=v))}(t)}),n.on("open-xhr-start",p),a){var m=o&&o.resolve();if(!c&&!o){var v=1,y=document.createTextNode(v);new a(b).observe(y,{characterData:!0})}}else r.on("fn-end",function(e){e[0]&&e[0].type===d||b()});function b(){for(var e=0;e<f.length;e++)p(0,f[e]);f.length&&(f=[])}function E(e,t){return t}return n}var Be="fetch-",He=Be+"body-",We=["arrayBuffer","blob","json","text","formData"],Ue=g.gm.Request,Ke=g.gm.Response,Fe="prototype";const Ve={};function ze(e,t){const r=function(e){return(e||R.ee).get("fetch")}(e);if(!(Ue&&Ke&&g.gm.fetch))return r;if(Ve[r.debugId]++)return r;function n(e,n,i){var s=e[n];"function"==typeof s&&(e[n]=function(){var e=[...arguments];const n={},a=(0,Ie.$5)(t);var o;r.emit(i+"before-start",[e],n),n[R.P]&&n[R.P].dt&&(o=n[R.P].dt);var c=s.apply(this,e);return r.emit(i+"start",[e,o],c),c.then(function(e){return r.emit(i+"end",[null,e,a],c),e},function(e){throw r.emit(i+"end",[e,void 0,a],c),e})})}
13return Ve[r.debugId]=1,We.forEach(e=>{n(Ue[Fe],e,He),n(Ke[Fe],e,He)}),n(g.gm,"fetch",Be),r.on(Be+"end",function(e,n,i){var s=this;if(s.targets=i||[t.runtime.v2Target],n){var a=n.headers.get("content-length");null!==a&&(s.rxSize=a),r.emit(Be+"done",[null,n],s)}else r.emit(Be+"done",[e],s)}),r}var Ge=r(7485);class qe{constructor(e){this.agentRef=e}generateTracePayload(e){const t=this.agentRef.loader_config;if(!this.shouldGenerateTrace(e)||!t)return null;var r=(t.accountID||"").toString()||null,n=(t.agentID||"").toString()||null,i=(t.trustKey||"").toString()||null;if(!r||!n)return null;var s,a=(0,ye.ZF)(),o=(0,ye.el)(),c=Date.now();this.agentRef.runtime?.timeKeeper?.ready&&(s=Math.floor(this.agentRef.runtime.timeKeeper.correctAbsoluteTimestamp(c)));var d={spanId:a,traceId:o,timestamp:c,timestampCorrected:s};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(d.traceContextParentHeader=this.generateTraceContextParentHeader(a,o),d.traceContextStateHeader=this.generateTraceContextStateHeader(a,s??c,r,n,i)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(d.newrelicHeader=this.generateTraceHeader(a,o,s??c,r,n,i)),d}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,s){if(!("function"==typeof g.gm?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return s&&n!==s&&(a.d.tk=s),btoa((0,X.A)(a))}shouldGenerateTrace(e){return this.agentRef.init?.distributed_tracing?.enabled&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1;const r=this.agentRef.init?.distributed_tracing;if(e.sameOrigin)t=!0;else if(r?.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,Ge.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}excludeNewrelicHeader(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.cors_use_tracecontext_headers}}var Ye=r(7295);function Ze(e){return"string"==typeof e?e:e instanceof(0,i.dV)().o.REQ?e.url:g.gm?.URL&&e instanceof URL?e.href:void 0}function $e(e,t){var r=(0,Ge.D)(t),n=e.params||e;n.hostname=r.hostname,n.port=r.port,n.protocol=r.protocol,n.host=r.hostname+":"+r.port,n.pathname=r.pathname,e.parsedOrigin=r,e.sameOrigin=r.sameOrigin}var Je=["load","error","abort","timeout"],Xe=Je.length,Qe=(0,i.dV)().o.REQ,et=(0,i.dV)().o.XHR;const tt="X-NewRelic-App-Data",rt="internal-error";class nt extends W{static featureName=c.TZ;constructor(e){super(e,c.TZ),this.dt=new qe(e),this.handler=(e,t,r,n)=>(0,S.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};g.gm?.performance?.getEntriesByType("resource").forEach(r=>{if(r.initiatorType in e&&0!==r.responseStatus){const n={status:r.responseStatus},i={rxSize:r.transferSize,duration:Math.floor(r.duration),cbTime:0};$e(n,r.name),this.handler("xhr",[n,i,r.startTime,r.responseEnd,e[r.initiatorType]],void 0,t.K7.ajax)}})}catch(e){}ze(this.ee,e),De(this.ee,e),function(e,r,n,i){const s=[c.mo.ALL,c.mo.FAILURES].includes(e.init.ajax?.capture_payloads);function a(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=A,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},t.latestLongtaskEnd=0,e.addEventListener("load",function(r){O(t,e)},(0,J.jT)(!1)),g.lR||e.addEventListener("progress",function(e){t.lastSize=e.loaded},(0,J.jT)(!1))}function o(e){this.params={method:e[0]},$e(this,e[1]),this.metrics={}}function d(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var n=i.generateTracePayload(this.parsedOrigin);if(n){var s=!1;n.newrelicHeader&&(r.setRequestHeader("newrelic",n.newrelicHeader),s=!0),n.traceContextParentHeader&&(r.setRequestHeader("traceparent",n.traceContextParentHeader),n.traceContextStateHeader&&r.setRequestHeader("tracestate",n.traceContextStateHeader),s=!0),s&&(this.dt=n)}}function u(e,t){s&&e.length>=2&&(this.requestHeaders??={},this.requestHeaders[e[0].toLowerCase()]=e[1])}function l(e,t){var n=this.metrics,i=e[0],s=this;if(n&&i){var a=Le(i);a&&(n.txSize=a)}this.startTime=(0,_.t)(),this.requestBody=i,this.listener=function(e){try{"abort"!==e.type||s.loadCaptureCalled||(s.params.aborted=!0),("load"
13!==e.type||s.called===s.totalCbs&&(s.onloadCalled||"function"!=typeof t.onload)&&"function"==typeof s.end)&&s.end(t)}catch(e){try{r.emit(rt,[e])}catch(e){}}};for(var o=0;o<Xe;o++)t.addEventListener(Je[o],this.listener,(0,J.jT)(!1))}function f(e,t,r){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof r.onload||"function"!=typeof this.end||this.end(r)}function h(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function p(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function m(){this.endTime=(0,_.t)()}function v(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-added",[e[1],e[2]],t)}function y(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-removed",[e[1],e[2]],t)}function b(e,t,r){t instanceof et&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,_.t)()))}function E(e,t){this.xhrCbStart&&r.emit("xhr-cb-time",[(0,_.t)()-this.xhrCbStart,this.onload,t],t)}function w(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&g.RI&&(t=""+g.gm.location.href):e[0]&&e[0].url?t=e[0].url:g.gm?.URL&&e[0]&&e[0]instanceof URL?t=e[0].href:"function"==typeof e[0].toString&&(t=e[0].toString()),"string"==typeof t&&0!==t.length){t&&(this.parsedOrigin=(0,Ge.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var n=i.generateTracePayload(this.parsedOrigin);if(n&&(n.newrelicHeader||n.traceContextParentHeader))if(e[0]&&e[0].headers)o(e[0].headers,n)&&(this.dt=n);else{var s={};for(var a in r)s[a]=r[a];s.headers=new Headers(r.headers||{}),o(s.headers,n)&&(this.dt=n),e.length>1?e[1]=s:e.push(s)}}function o(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function R(e,t){this.params={},this.metrics={},this.startTime=(0,_.t)(),this.dt=t;let[r,n={}]=e;$e(this,Ze(r));const i=(""+(r&&r instanceof Qe&&r.method||n.method||"GET")).toUpperCase();this.params.method=i,this.txSize=Le(n.body||r?.body)||0;try{var a=n.headers||r?.headers;if(s&&a)if(this.requestHeaders??={},a instanceof Headers)a.forEach(function(e,t){this.requestHeaders[t.toLowerCase()]=e}.bind(this));else if("object"==typeof a)for(var o in a)this.requestHeaders[o.toLowerCase()]=a[o]}catch(e){}this.requestBody=n.body||r?.body}function T(e,t){if(this.endTime=(0,_.t)(),this.params||(this.params={}),(0,Ye.iW)(this.params))return;this.params.status=t?t.status:0;const n=()=>{const e=+this.rxSize,t=null==this.rxSize||isNaN(e)?void 0:e,r={txSize:this.txSize,rxSize:t,duration:this.endTime-this.startTime},n=[this.params,r,this.startTime,this.endTime,"fetch"];this.targets.forEach(e=>x(n,this,e))};t&&s?t.clone().text().then(e=>{this.responseBody=e,this.rxSize&&"0"!==this.rxSize&&0!==this.rxSize||void 0===e||0===this.params.status||(this.rxSize=Le(e)),t?.headers&&(this.responseHeaders={},t.headers.forEach(function(e,t){this.responseHeaders[t.toLowerCase()]=e}.bind(this)))}).catch(e=>{r.emit(rt,[e])}).finally(()=>{n()}):n()}function A(e){const t=this.params,n=this.metrics;if(this.ended)return;this.ended=!0;for(let t=0;t<Xe;t++)e.removeEventListener(Je[t],this.listener,!1);if(t.aborted)return;if((0,Ye.iW)(t))return;if(n.duration=this.endTime-this.startTime,this.loadCaptureCalled||4!==e.readyState?null==t.status&&(t.status=0):O(this,e),n.cbTime=this.cbTime,s){try{this.responseBody=e.responseText}catch(t){this.responseBody=e.response}if((!n.rxSize||0===n.rxSize)&&void 0!==this.responseBody&&0!==t.status){const e=Le(this.responseBody);void 0!==e&&(n.rxSize=e)}try{this.responseHeaders=function(e){const t={};return e?(e.split("\r\n").forEach(function(e){const r=e.indexOf(": ");if(r>0){const n=e.substring(0,r),i=e.substring(r+2);t[n.toLowerCase()]=i}}),t):t}(e.getAllResponseHeaders())}catch(e){r.emit(rt,[e])}}const i=[t,n,this.startTime,this.endTime,"xhr"];this.targets.forEach(e=>x(i,this,e))}function x(e,r,i){n("xhr",[...e,i],r,t.K7.ajax)}function O(e,n){e.params.status=n.status;var i=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?Le(e.response):"text"===r||""===r||void 0===r?Le(e.responseText):void 0}(n,e.lastSize);if(void 0!==i&&0!==n.status&&(e.metrics.rxSize=i),e.sameOrigin&&n.getAllResponseHeaders().indexOf(tt)>=0){var s=n.getResponseHeader(tt);s&&((0,S.p)("sm",["Ajax/CrossApplicationTracing/Header/Seen"],void 0,t.K7.metrics,r),e.params.cat=s.split(", ").pop())}e.loadCaptureCalled=!0}r.on("new-xhr",a),r.on("open-xhr-start",o),r.on("open-xhr-end",d),r.on("send-xhr-start",l),r.on("setRequestHeader-xhr-start",u),r.on("xhr-cb-time",f),r.on("xhr-load-added",h),r.on("xhr-load-removed",p),r.on("xhr-resolved",m),r.on("addEventListener-end",v),r.on("removeEventListener-end",y),r.on("fn-end",E),r.on("fetch-before-start",w),r.on("fetch-start",R),r.on("fn-start",b),r.on("fetch-done",T)}(e,this.ee,this.handler,this.dt),this.importAggregator(e,()=>r.e(478).then(r.bind(r,3845)))}}const it={},st=["pushState","replaceState"];function at(e,t){const r=function(e){return(e||R.ee).get("history")}(e);return!g.RI||it[r.debugId]++||(it[r.debugId]=1,(0,Pe.YM)(r,void 0,t).inPlace(window.history,st,"-")),r}var ot=r(3738);function ct(e){(0,N.Y)(k.BL,function(r=Date.now()){const n=r-g.WN;n<0&&(0,l.R)(62,r),(0,S.p)(q.XG,[k.BL,{time:n}],void 0,t.K7.metrics,e.ee),e.addToTrace({name:k.BL,start:r,origin:"nr"}),(0,S.p)("api-"+k.hG,[n,k.BL],void 0,t.K7.genericEvents,e.ee)},e)}const{He:dt,bD:ut,d3:lt,Kp:ft,TZ:ht,Lc:pt,uP:gt,Rz:mt}=ot;class vt extends W{static featureName=ht;constructor(e){var n;super(e,ht),n=e,(0,N.Y)(k.U2,function(e){if(!(e&&"object"==typeof e&&e.name&&e.start))return;const r={n:e.name,s:e.start-g.WN,e:(e.end||e.start)-g.WN,o:e.origin||"",t:"api"};r.s<0||r.e<0||r.e<r.s?(0,l.R)(61,{start:r.s,end:r.e}):(0,S.p)("bstApi",[r],void 0,t.K7.sessionTrace,n.ee)},n),ct(e);
13if(!(0,j.V)(e.init))return void this.deregisterDrain();const i=this.ee;let s;at(i,e),this.eventsEE=(0,Me.u)(i,e),this.eventsEE.on(gt,function(e,t){this.bstStart=(0,_.t)()}),this.eventsEE.on(pt,function(e,r){(0,S.p)("bst",[e[0],r,this.bstStart,(0,_.t)()],void 0,t.K7.sessionTrace,i)}),i.on(mt+lt,function(e){this.time=(0,_.t)(),this.startPath=location.pathname+location.hash}),i.on(mt+ft,function(e){(0,S.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,t.K7.sessionTrace,i)});try{s=new PerformanceObserver(e=>{const r=e.getEntries();(0,S.p)(dt,[r],void 0,t.K7.sessionTrace,i)}),s.observe({type:ut,buffered:!0})}catch(e){}this.importAggregator(e,()=>r.e(478).then(r.bind(r,6974)),{resourceObserver:s})}}var yt=r(733),bt=r(6344);class Et extends W{static featureName=bt.TZ;#i;recorder;constructor(e){var n;let i;super(e,bt.TZ),n=e,(0,N.Y)(k.CH,function(){(0,S.p)(k.CH,[],void 0,t.K7.sessionReplay,n.ee)},n),function(e){(0,N.Y)(k.Tb,function(){(0,S.p)(k.Tb,[],void 0,t.K7.sessionReplay,e.ee)},e)}(e);const s="".concat(u.Wt).concat((0,yt.Y)(e.info.licenseKey,e.info.applicationID));try{i=JSON.parse(localStorage.getItem(s))}catch(e){}(0,I.SR)(e.init)&&this.ee.on(k.CH,()=>this.#s()),this.#a(i)&&this.importRecorder().then(e=>{e.startRecording(bt.Qb.PRELOAD,i?.sessionReplayMode)}),this.abortHandler=this.#n,this.importAggregator(this.agentRef,()=>r.e(478).then(r.bind(r,6167)),this),this.ee.on("err",e=>{this.blocked||this.agentRef.runtime.isRecording&&(this.errorNoticed=!0,(0,S.p)(bt.Vh,[e],void 0,this.featureName,this.ee))})}#a(e){return e&&(e.sessionReplayMode===u.g.FULL||e.sessionReplayMode===u.g.ERROR)||(0,I.Aw)(this.agentRef.init)}importRecorder(){return this.recorder?Promise.resolve(this.recorder):(this.#i??=Promise.all([r.e(478),r.e(249)]).then(r.bind(r,4866)).then(({Recorder:e})=>(this.recorder=new e(this),this.recorder)).catch(e=>{throw this.ee.emit("internal-error",[e]),this.blocked=!0,e}),this.#i)}#s(){this.blocked||(this.featAggregate?this.featAggregate.mode!==u.g.FULL&&this.featAggregate.initializeRecording(u.g.FULL,!0,bt.Qb.API):this.importRecorder().then(()=>{this.recorder.startRecording(bt.Qb.API,u.g.FULL)}))}#n(){this.recorder?.stopRecording()}}var wt=r(3962);class Rt extends W{static featureName=wt.TZ;constructor(e){if(super(e,wt.TZ),function(e){const r=e.ee.get("tracer");function n(){}(0,N.Y)(k.dT,function(e){return(new n).get("object"==typeof e?e:{})},e);const i=n.prototype={createTracer:function(n,i){var s={},a=this,o="function"==typeof i;return(0,S.p)(q.xV,["API/createTracer/called"],void 0,t.K7.metrics,e.ee),function(){if(r.emit((o?"":"no-")+"fn-start",[(0,_.t)(),a,o],s),o)try{return i.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw r.emit("fn-err",[arguments,this,t],s),t}finally{r.emit("fn-end",[(0,_.t)()],s)}}}};["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach(r=>{N.Y.apply(this,[r,function(){return(0,S.p)(k.hw+r,[performance.now(),...arguments],this,t.K7.softNav,e.ee),this},e,i])}),(0,N.Y)(k.PA,function(){(0,S.p)(k.hw+"routeName",[performance.now(),...arguments],void 0,t.K7.softNav,e.ee)},e)}(e),!g.RI||!(0,i.dV)().o.MO)return;const n=at(this.ee,e);try{this.removeOnAbort=new AbortController}catch(e){}wt.tC.forEach(e=>{(0,J.sp)(e,e=>{c(e)},!0,this.removeOnAbort?.signal)}
13);const s=()=>(0,S.p)("newURL",[(0,_.t)(),""+window.location],void 0,this.featureName,this.ee);n.on("pushState-end",s),n.on("replaceState-end",s),(0,J.sp)(wt.OV,e=>{c(e),(0,S.p)("newURL",[e.timeStamp,""+window.location],void 0,this.featureName,this.ee)},!0,this.removeOnAbort?.signal);let a=!1;const o=new((0,i.dV)().o.MO)((e,t)=>{a||(a=!0,requestAnimationFrame(()=>{(0,S.p)("newDom",[(0,_.t)()],void 0,this.featureName,this.ee),a=!1}))}),c=(0,C.s)(e=>{"loading"!==document.readyState&&((0,S.p)("newUIEvent",[e],void 0,this.featureName,this.ee),o.observe(document.body,{attributes:!0,childList:!0,subtree:!0,characterData:!0}))},100,{leading:!0});this.abortHandler=function(){this.removeOnAbort?.abort(),o.disconnect(),this.abortHandler=void 0},this.importAggregator(e,()=>r.e(478).then(r.bind(r,4393)),{domObserver:o})}}var Tt=r(981);const At={},St=new Set;function xt(e){return"string"==typeof e?{type:"string",size:(new TextEncoder).encode(e).length}:e instanceof ArrayBuffer?{type:"ArrayBuffer",size:e.byteLength}:e instanceof Blob?{type:"Blob",size:e.size}:e instanceof DataView?{type:"DataView",size:e.byteLength}:ArrayBuffer.isView(e)?{type:"TypedArray",size:e.byteLength}:{type:"unknown",size:0}}class Ot{constructor(e,t){this.timestamp=(0,_.t)(),this.currentUrl=(0,Ee.L)(window.location.href),this.socketId=(0,ye.LA)(8),this.requestedUrl=(0,Ee.L)(e),this.requestedProtocols=Array.isArray(t)?t.join(","):t||"",this.openedAt=void 0,this.protocol=void 0,this.extensions=void 0,this.binaryType=void 0,this.messageOrigin=void 0,this.messageCount=0,this.messageBytes=0,this.messageBytesMin=0,this.messageBytesMax=0,this.messageTypes=void 0,this.sendCount=0,this.sendBytes=0,this.sendBytesMin=0,this.sendBytesMax=0,this.sendTypes=void 0,this.closedAt=void 0,this.closeCode=void 0,this.closeReason="unknown",this.closeWasClean=void 0,this.connectedDuration=0,this.hasErrors=void 0}}class _t extends W{static featureName=o.TZ;constructor(e){super(e,o.TZ);const n=e.init.feature_flags.includes("websockets")||e.init.web_sockets?.enabled,s=!e.init.feature_flags.includes("no_spv"),a=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.performance.resources.enabled,e.init.user_actions.enabled,n,s];var c;let d;if(c=e,(0,N.Y)(k.hG,(e,t)=>ce(e,t,c),c),function(e){(0,N.Y)(k.fF,(t,r)=>ue(t,r,e),e)}(e),ct(e),Se(e),function(e){(0,N.Y)(k.V1,(t,r)=>de(t,r,e),e)}(e),this.removeOnAbort=new AbortController,this.abortHandler=()=>{this.removeOnAbort.abort(),this.abortHandler=void 0},n){const u=function(e,t){if(!(0,i.dV)().o.WS)return e;const r=e.get("websockets");if(At[r.debugId]++)return r;At[r.debugId]=1,(0,V.G)(()=>{const e=(0,_.t)();St.forEach(t=>{t.nrData.closedAt=e,t.nrData.closeCode=1001,t.nrData.closeReason="Page navigating away",t.nrData.closeWasClean=!1,t.nrData.openedAt&&(t.nrData.connectedDuration=e-t.nrData.openedAt),r.emit("ws",[t.nrData,t.targets],t)})});
13class n extends WebSocket{static name=Tt.R.WS;static toString(){return"function WebSocket() { [native code] }"}toString(){return"[object WebSocket]"}get[Symbol.toStringTag](){return n.name}#o(e){(e.__newrelic??={}).socketId=this.nrData.socketId,this.nrData.hasErrors??=!0}constructor(...e){super(...e),this.nrData=new Ot(e[0],e[1]),this.targets=(0,Ie.$5)(t),this.addEventListener("open",()=>{this.nrData.openedAt=(0,_.t)(),["protocol","extensions","binaryType"].forEach(e=>{this.nrData[e]=this[e]}),St.add(this)}),this.addEventListener("message",e=>{const{type:t,size:r}=xt(e.data);this.nrData.messageOrigin??=(0,Ee.L)(e.origin),this.nrData.messageCount++,this.nrData.messageBytes+=r,this.nrData.messageBytesMin=Math.min(this.nrData.messageBytesMin||1/0,r),this.nrData.messageBytesMax=Math.max(this.nrData.messageBytesMax,r),(this.nrData.messageTypes??"").includes(t)||(this.nrData.messageTypes=this.nrData.messageTypes?"".concat(this.nrData.messageTypes,",").concat(t):t)}),this.addEventListener("close",e=>{this.nrData.closedAt=(0,_.t)(),this.nrData.closeCode=e.code,e.reason&&(this.nrData.closeReason=e.reason),this.nrData.closeWasClean=e.wasClean,this.nrData.connectedDuration=this.nrData.closedAt-this.nrData.openedAt,St.delete(this),r.emit("ws",[this.nrData,this.targets],this)})}addEventListener(e,t,...r){const n=this,i="function"==typeof t?function(...e){try{return t.apply(this,e)}catch(e){throw n.#o(e),e}}:t?.handleEvent?{handleEvent:function(...e){try{return t.handleEvent.apply(t,e)}catch(e){throw n.#o(e),e}}}:t;return super.addEventListener(e,i,...r)}send(e){if(this.readyState===WebSocket.OPEN){const{type:t,size:r}=xt(e);this.nrData.sendCount++,this.nrData.sendBytes+=r,this.nrData.sendBytesMin=Math.min(this.nrData.sendBytesMin||1/0,r),this.nrData.sendBytesMax=Math.max(this.nrData.sendBytesMax,r),(this.nrData.sendTypes??"").includes(t)||(this.nrData.sendTypes=this.nrData.sendTypes?"".concat(this.nrData.sendTypes,",").concat(t):t)}try{return super.send(e)}catch(e){throw this.#o(e),e}}close(...e){try{super.close(...e)}catch(e){throw this.#o(e),e}}}return g.gm.WebSocket=n,r}(this.ee,e);u.on("ws",(e,t)=>{(0,S.p)("ws-complete",[e,t],void 0,this.featureName,this.ee)})}if(s){if("function"==typeof g.gm.ReportingObserver){const l=new g.gm.ReportingObserver(e=>{e.forEach(e=>{(0,S.p)("spv",[kt(e),(0,_.t)()],void 0,t.K7.genericEvents,this.ee)}),l.disconnect()},{types:["csp-violation"],buffered:!0});l.observe()}g.gm.addEventListener("securitypolicyviolation",e=>{(0,S.p)("spv",[kt(e),e.timeStamp],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal))}if(g.RI){if(ze(this.ee,e),De(this.ee,e),d=at(this.ee,e),e.init.user_actions.enabled){function f(t){const r=(0,Ge.D)(t);return e.beacons.includes(r.hostname+":"+r.port)}function h(){d.emit("navChange")}o.Zp.forEach(e=>(0,J.sp)(e,e=>(0,S.p)("ua",[e],void 0,this.featureName,this.ee),!0)),o.qN.forEac
13h(e=>{const t=(0,C.s)(e=>{(0,S.p)("ua",[e],void 0,this.featureName,this.ee)},500,{leading:!0});(0,J.sp)(e,t)}),g.gm.addEventListener("error",()=>{(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal)),this.ee.on("open-xhr-start",(e,r)=>{f(e[1])||r.addEventListener("readystatechange",()=>{2===r.readyState&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(void 0,this.removeOnAbort.signal))}),this.ee.on("fetch-start",e=>{e.length>=1&&!f(Ze(e[0]))&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)}),d.on("pushState-end",h),d.on("replaceState-end",h),window.addEventListener("hashchange",h,(0,J.jT)(!0,this.removeOnAbort.signal)),window.addEventListener("popstate",h,(0,J.jT)(!0,this.removeOnAbort.signal))}if(e.init.performance.resources.enabled&&g.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{(0,S.p)("browserPerformance.resource",[e],void 0,this.featureName,this.ee)})}).observe({type:"resource",buffered:!0})}}a.some(e=>e)?this.importAggregator(e,()=>r.e(478).then(r.bind(r,8019))):this.deregisterDrain()}}function kt(e){const t=e.body??e;return{blockedUrl:t.blockedURL??e.blockedURI,documentUrl:t.documentURL??e.documentURI,effectiveDirective:t.effectiveDirective,originalPolicy:t.originalPolicy,sourceFile:t.sourceFile,statusCode:t.statusCode,lineNumber:t.lineNumber,columnNumber:t.columnNumber,disposition:"reporting"===t.disposition?"report":t.disposition,sample:t.sample,referrer:t.referrer}}var Nt=r(2646);const Lt=new Map;function Mt(e,t,r,n,i=!0,s){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const a=function(e){return(e||R.ee).get("logger")}(e),o=(0,Pe.YM)(a,void 0,s),c=new Nt.y(R.P);c.level=n.level,c.customAttributes=n.customAttributes,c.autoCaptured=i;const d=t[r]?.[Pe.Jt]||t[r];return Lt.set(d,c),o.inPlace(t,[r],"wrap-logger-",()=>Lt.get(d),void 0,!0),a}var Pt=r(1910);class It extends W{static featureName=se.TZ;constructor(e){var t;super(e,se.TZ),t=e,(0,N.Y)("log",(e,r)=>oe(e,r,t),t),function(e){(0,N.Y)(k.Wb,(t,r,{customAttributes:n={},level:i=se.p_.INFO}={})=>{Mt(e.ee,t,r,{customAttributes:n,level:i},!1,e)},e)}(e),Se(e);const n=this.ee;["log","error","warn","info","debug","trace"].forEach(t=>{(0,Pt.i)(g.gm.console[t]),Mt(n,g.gm.console,t,{level:"log"===t?"info":t},void 0,e)}),this.ee.on("wrap-logger-end",function([t],r,i,s=[e.runtime.v2Target]){const{level:a,customAttributes:o,autoCaptured:c}=this;s.forEach(e=>{(0,ae.R)(n,t,o,a,c,e)})}),this.importAggregator(e,()=>r.e(478).then(r.bind(r,5288)))}}new F({features:[nt,K,G,vt,Et,Y,Oe,_t,It,Rt],loaderType:"spa"})})()})();</script>
13
14		<meta content="utf-8" http-equiv="encoding">
15				
15<script type="text/javascript" id="OptanonWrapper">
16			/**
17			 * Delete all cookies except whitelisted ones
18			 */
19			function deleteUnconsentedCookies() {
20				// Get all cookies
21				const cookies = document.cookie.split(';');
22
23				// Get whitelisted cookies from PHP
24				const whitelistedCookies = ["wordpress_logged_in","wordpress_logged_in_*","wordpress_sec_*","OptanonConsent","OptanonAlertBoxClosed","eupubconsent-v2","OneTrustWPCCPANotice","OneTrustGroupConsent","gform_*","gf_csrf_token_*","ep_auth_token","wp-query-monitor-*","wp_fail2ban_*","srm_redirect_*"];
25
26				// Get all domains to try
27				const domain  = window.location.hostname;
28				const domains = domain.split('.');
29				const paths   = ['/', ''];
30
31				// Try to delete each cookie
32				cookies.forEach(cookie => {
33					const cookieName = cookie.split('=')[0].trim();
34
35					// Check if cookie matches any whitelist pattern
36					const isWhitelisted = whitelistedCookies.some(pattern => {
37						const regexPattern = pattern
38							.replace(/\./g, '\\.')
39							.replace(/\*/g, '.*');
40						return new RegExp('^' + regexPattern + '$').test(cookieName);
41					});
42
43					if (!isWhitelisted) {
44
45						// Try every combination of domain and path
46						domains.forEach((d, i) => {
47							const domainPart = '.' + domains.slice(i).join('.');
48							paths.forEach(path => {
49								// Try with domain
50								document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=${domainPart}; path=${path}`;
51								// Try without domain
52								document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${path}`;
53								// Try with exact domain
54								document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=${domain}; path=${path}`;
55							});
56						});
57					}
58				});
59			}
60			/**
61			 * OptanonWrapper callback function. We use the OptanonWrapper function to listen
62			 * for a user event and determine script behavior based on the user event.
63			 *
64			 * @return void
65			 */
66			function OptanonWrapper() {
67
68				// Get all registered script IDs from js_onetrust_handles.
69				const scriptIds = ["mc-datalayer-yaml","gpt","mc-ads","mc-hubspot-subscription-form","mc-integrations-hubspot","mc-integrations-hubspot-legacy","metrocorp-ads-secondary","nativo-tracking"];
70
71				// These will be needed for the fetch request, to delete HttpOnly cookies.
72				const ajaxurl = 'https://www.bostonmagazine.com/wp-admin/admin-ajax.php';
73				const nonce = 'bfb54cd2b2';
74
75
76				// OneTrust event listener that fires when a user confirms consent preferences in the banner.
77				Optanon.OnConsentChanged( function() {
78
79					// Get the active groups from a OneTrust global.
80					const activeGroups = window.OnetrustActiveGroups;
81					const hasDeclinedCategories = !activeGroups.includes('C0002') ||
82						!activeGroups.includes('C0003') ||
83						!activeGroups.includes('C0004');
84
85					// if any category is declined, disable all OT registered scripts.
86					if (hasDeclinedCategories) {
87						// Disable all tracked scripts
88						scriptIds.forEach(id => {
89							const script = document.getElementById(id);
90							if (script) {
91								script.type = 'text/plain';
92							}
93						});
94						// Delete all client side cookies except whitelisted ones.
95						deleteUnconsentedCookies();
96
97						// Server request to delete server side (HttpOnly) cookies.
98						fetch(ajaxurl, {
99							method: 'POST',
100							credentials: 'same-origin',
101							headers: {
102								'Content-Type': 'application/x-www-form-urlencoded',
103							},
104							body: new URLSearchParams({
105								action: 'delete_unconsented_cookies',
106								nonce: nonce
107							})
108						});
109					}
110				});
111			}
112		</script>
112
113				
113<script type="text/javascript" id="ot-inserter">
114			(function() {
115				const otUrl    = 'https://cdn.cookielaw.org/scripttemplates/otSDKStub.js';
116				const otScript = document.createElement('script');
117				otScript.async = true;
118				otScript.type  = 'text/javascript';
119				otScript.src   = otUrl;
120				otScript.setAttribute('id', 'onetrustSDK');
121				otScript.setAttribute('charset', 'UTF-8');
122				otScript.setAttribute('data-domain-script', '01947541-75bb-7dce-8570-43f9ca73af23');
123				const otNode = document.getElementById('ot-inserter');
124				otNode.parentNode.insertBefore(otScript, otNode.nextSibling);
125			})();
126		</script>
126
127		<link rel="preconnect" href="https://securepubads.g.doubleclick.net" /><link rel="preconnect" href="https://www.googleadservices.com" /><link rel="preconnect" href="https://s.ntv.io" /><link rel="preconnect" href="https://ib.adnxs.com" /><link rel="preconnect" href="https://ap.lijit.com" />	<!-- Below is a recommended list of pre-connections, which allow the network to establish each connection quicker, speeding up response times and improving ad performance. -->
128	<link rel="preconnect" href="https://a.pub.network/" crossorigin />
129	<link rel="preconnect" href="https://b.pub.network/" crossorigin />
130	<link rel="preconnect" href="https://c.pub.network/" crossorigin />
131	<link rel="preconnect" href="https://d.pub.network/" crossorigin />
132	<link rel="preconnect" href="https://btloader.com/" crossorigin />
133	<link rel="preconnect" href="https://api.btloader.com/" crossorigin />
134	<link rel="preconnect" href="https://cdn.confiant-integrations.net" crossorigin />
135	<!-- Below is a link to a CSS file that accounts for Cumulative Layout Shift, a new Core Web Vitals subset that Google uses to help rank your site in search -->
136	<!-- The file is intended to eliminate the layout shifts that are seen when ads load into the page. If you don't want to use this, simply remove this file -->
137	<!-- To find out more about CLS, visit https://web.dev/vitals/ -->
138	<link rel="stylesheet" href="https://a.pub.network/bostonmagazine-com/cls.css">
139		
139<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
140	var freestar = freestar || {};
141	freestar.queue = freestar.queue || [];
142	freestar.config = freestar.config || {};
143	freestar.config.enabled_slots = [];
144	freestar.config.targeting = [
145		{
146		"bostonmagazine_banner-1": {
147			"pos": ["1"],
148		}
149	},
150	{
151		"bostonmagazine_banner-2": {
152			"pos": ["2"],
153		}
154	},
155	{
156		"bostonmagazine_banner-3": {
157			"pos": ["3"],
158		}
159	},
160	{
161		"bostonmagazine_rail-1": {
162			"pos": ["1"],
163		}
164	},
165	{
166		"bostonmagazine_rail-2": {
167			"pos": ["2"],
168		}
169	},
170	{
171		"bostonmagazine_rail-3": {
172			"pos": ["3"],
173		}
174	},
175	{
176		"bostonmagazine_curated_module-1": {
177			"pos": ["1"],
178		}
179	},
180	{
181		"bostonmagazine_curated_module-2": {
182			"pos": ["2"],
183		}
184	},
185	{
186		"bostonmagazine_curated_module-3": {
187			"pos": ["3"],
188		}
189	},
190		];
191	freestar.initCallback = function () { (freestar.config.enabled_slots.length === 0) ? freestar.initCallbackCalled = false : freestar.newAdSlots(freestar.config.enabled_slots) }
192	</script>
192
193	
193<script src="https://a.pub.network/bostonmagazine-com/pubfig.min.js" data-cfasync="false" async type="text/plain" class="optanon-category-C0004"></script>
193
194	<style>
195	#pmLink {
196		visibility: hidden;
197		text-decoration: none;
198		cursor: pointer;
199		background: transparent;
200		border: none;
201	}
202
203	#pmLink:hover {
204		visibility: visible;
205		color: grey;
206	}
207	</style>
208			
208<script type="text/plain" class="optanon-category-C0004">
209			freestar.config.disabledProducts = {
210				superflex: true
211			};
212		</script>
212
213		<link rel="preconnect" href="https://www.bostonmagazine.com/" /><link rel="preconnect" href="https://s.ntv.io/" /><meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1, noarchive' />
214
215	<!-- This site is optimized with the Yoast SEO Premium plugin v27.9 (Yoast SEO v27.9) - https://yoast.com/product/yoast-seo-premium-wordpress/ -->
216	<title>City Life Archives - Boston Magazine</title>
217	<meta name="description" content="Discover the news about Boston from the people who know the city best. Boston Magazine&#039;s news section will keep you up to date on the most relevant politics, weather, sports, policies, neighborhoods, and more." />
218	<link rel="canonical" href="https://www.bostonmagazine.com/news/" />
219	<link rel="next" href="https://www.bostonmagazine.com/news/page/2/" />
220	<meta property="og:locale" content="en_US" />
221	<meta property="og:type" content="article" />
222	<meta property="og:title" content="City Life Archives" />
223	<meta property="og:url" content="https://www.bostonmagazine.com/news/" />
224	<meta property="og:site_name" content="Boston Magazine" />
225	<meta name="twitter:card" content="summary_large_image" />
226	<!-- / Yoast SEO Premium plugin. -->
227
228
229<link rel='dns-prefetch' href='//securepubads.g.doubleclick.net' />
230<link rel='dns-prefetch' href='//s.ntv.io' />
231<link rel='dns-prefetch' href='//use.typekit.net' />
232<link rel='dns-prefetch' href='//p.typekit.net' />
233<link rel='preconnect' href='https://use.typekit.net' />
234<link rel='preconnect' href='https://p.typekit.net' />
235<link rel="alternate" type="application/rss+xml" title="Boston Magazine &raquo; City Life Vertical Feed" href="https://www.bostonmagazine.com/news/feed/" />
236<style id="wp-img-auto-sizes-contain-inline-css">
237img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
238/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
239</style>
240<style id="wp-emoji-styles-inline-css">
241
242	img.wp-smiley, img.emoji {
243		display: inline !important;
244		border: none !important;
245		box-shadow: none !important;
246		height: 1em !important;
247		width: 1em !important;
248		margin: 0 0.07em !important;
249		vertical-align: -0.1em !important;
250		background: none !important;
251		padding: 0 !important;
252	}
253/*# sourceURL=wp-emoji-styles-inline-css */
254</style>
255
256<style id="global-styles-inline-css">
257:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: var(--wp--custom--color--black);--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: var(--wp--custom--color--white);--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--red: var(--wp--custom--color--red);--wp--preset--color--gray-ads: var(--wp--custom--color--gray-ads);--wp--preset--color--gray-lightest: var(--wp--custom--color--gray-lightest);--wp--preset--color--gray-medium: var(--wp--custom--color--gray-medium);--wp--preset--color--gray-ghost: var(--wp--custom--color--gray-ghost);--wp--preset--color--gray: var(--wp--custom--color--gray);--wp--preset--color--twitter-blue: var(--wp--custom--color--twitter-blue);--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
257--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: var(--wp--custom--font--size--014);--wp--preset--font-size--medium: var(--wp--custom--font--size--018);--wp--preset--font-size--large: var(--wp--custom--font--size--024);--wp--preset--font-size--x-large: var(--wp--custom--font--size--028);--wp--preset--font-size--x-small: var(--wp--custom--font--size--012);--wp--preset--font-size--normal: var(--wp--custom--font--size--016);--wp--preset--font-size--xx-large: var(--wp--custom--font--size--036);--wp--preset--font-size--xxx-large: var(--wp--custom--font--size--042);--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);--wp--custom--color--white: #fff;--wp--custom--color--black: #000;--wp--custom--color--red: #d2232a;--wp--custom--color--gray-ads: #DEDFDE;--wp--custom--color--gray-lightest: #ddd;--wp--custom--color--gray-medium: #bbbdbf;--wp--custom--color--gray-ghost: #FAFAFA;--wp--custom--color--gray: #5A5A5A;--wp--custom--color--twitter-blue: #1dcaff;--wp--custom--color--captions: #909090;--wp--custom--font--family--primary: 'ivypresto-display', serif;--wp--custom--font--family--secondary: 'Helvetica', sans-serif;--wp--custom--font--family--tertiary: 'Georgia', serif;--wp--custom--font--size--012: 0.75rem;--wp--custom--font--size--014: 0.875rem;--wp--custom--font--size--016: 1rem;--wp--custom--font--size--018: 1.125rem;--wp--custom--font--size--024: 1.5rem;--wp--custom--font--size--028: 1.75rem;--wp--custom--font--size--032: 2rem;--wp--custom--font--size--036: 2.25rem;--wp--custom--font--size--042: 2.625rem;--wp--custom--font--weight--regular: 400;--wp--custom--font--weight--medium: 500;--wp--custom--font--weight--semi-bold: 600;--wp--custom--font--weight--bold: 700;}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }.wp-site-blocks { padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom); }.has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }.has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) { padding-right: 0; padding-left: 0; }.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) > .alignfull { margin-left: 0; margin-right: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: 24px; margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: 24px; }:root :where(.is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.is-layout-flow) > *{margin-block-start: 24px;margin-block-end: 0;}:root :where(.is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.is-layout-constrained) > *{margin-block-start: 24px;margin-block-end: 0;}:root :where(.is-layout-flex){gap: 24px;}:root :where(.is-layout-grid){gap: 24px;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained >
257 :where(:not(.alignleft):not(.alignright):not(.alignfull)){margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{--wp--style--root--padding-top: 0px;--wp--style--root--padding-right: 0px;--wp--style--root--padding-bottom: 0px;--wp--style--root--padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-red-color{color: var(--wp--preset--color--red) !important;}.has-gray-ads-color{color: var(--wp--preset--color--gray-ads) !important;}.has-gray-lightest-color{color: var(--wp--preset--color--gray-lightest) !important;}.has-gray-medium-color{color: var(--wp--preset--color--gray-medium) !important;}.has-gray-ghost-color{color: var(--wp--preset--color--gray-ghost) !important;}.has-gray-color{color: var(--wp--preset--color--gray) !important;}.has-twitter-blue-color{color: var(--wp--preset--color--twitter-blue) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-red-background-color{background-color: var(--wp--preset--color--red) !important;}.has-gray-ads-background-color{background-color: var(--wp--preset--color--gray-ads) !important;}.has-gray-lightest-background-color{background-color: var(--wp--preset--color--gray-lightest) !important;}.has-gray-medium-background-color{background-color: var(--wp--preset--color--gray-medium) !important;}.has-gray-ghost-background-color{background-color: var(--wp--preset--color--gray-ghost) !important;}.has-gray-background-color{background-color: var(--wp--preset--color--gray) !important;}.has-twitter-blue-background-color{background-color: var(--wp--preset--color--twitter-blue) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-red-border-color{border-color: var(--wp--preset--color--red) !important;}.has-gray-ads-border-color{border-color: var(--wp--preset--color--gray-ads) !important;}.has-gray-lightest-border-color{border-color: var(--wp--preset--color--gray-lightest) !important;}.has-gray-medium-border-color{border-color: var(--wp--preset--color--gray-medium) !important;}.has-gray-ghost-border-color{border-color: var(--wp--preset--color--gray-ghost) !important;}.has-gray-border-color{border-color: var(--wp--preset--color--gray) !important;}.has-twitter-blue-border-color{border-color: var(--wp--preset--color--twitter-blue) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
257.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-x-small-font-size{font-size: var(--wp--preset--font-size--x-small) !important;}.has-normal-font-size{font-size: var(--wp--preset--font-size--normal) !important;}.has-xx-large-font-size{font-size: var(--wp--preset--font-size--xx-large) !important;}.has-xxx-large-font-size{font-size: var(--wp--preset--font-size--xxx-large) !important;}
258/*# sourceURL=global-styles-inline-css */
259</style>
260
261<link rel='stylesheet' id='metro_typekit-css' href='https://use.typekit.net/fhn8jjz.css?ver=7.1.2' media='all' />
262<link rel='stylesheet' id='bostonmagazine-css' href='https://bomag.o0bc.com/wp-content/themes/metrocorp/dist/css/boston.min.css?ver=1790714179' media='all' />
263<link rel='stylesheet' id='METROCORP_BLOCK_EDITOR_frontend-css' href='https://bomag.o0bc.com/wp-content/mu-plugins/metrocorp-block-editor/dist/css/frontend.css?ver=24b99fd25b7c352eb6fc' media='all' />
264<link rel='stylesheet' id='tablepress-default-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/css/build/default.css?ver=3.2.1-BGMP' media='all' />
265<link rel='stylesheet' id='tablepress-datatables-buttons-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.buttons.css?ver=3.2.1-BGMP' media='all' />
266<link rel='stylesheet' id='tablepress-datatables-fixedheader-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.fixedheader.css?ver=3.2.1-BGMP' media='all' />
267<link rel='stylesheet' id='tablepress-datatables-fixedcolumns-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.fixedcolumns.css?ver=3.2.1-BGMP' media='all' />
268<link rel='stylesheet' id='tablepress-datatables-scroll-buttons-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.scroll-buttons.css?ver=3.2.1-BGMP' media='all' />
269<link rel='stylesheet' id='tablepress-responsive-tables-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/responsive-tables.css?ver=3.2.1-BGMP' media='all' />
270<link rel='stylesheet' id='tablepress-datatables-columnfilterwidgets-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.columnfilterwidgets.css?ver=3.2.1-BGMP' media='all' />
271<link rel='stylesheet' id='tablepress-datatables-serverside-processing-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.serverside-processing.css?ver=3.2.1-BGMP' media='all' />
272<script id="gpt-js-extra">
273var mcAds = {"advertiserSlug":"","currentSite":"bostonmagazine","gptNetworkID":"/61381659/site195.tmus/","hasBannerThree":"true","isArchive":"false","isGeodir":"false","isSingle":"","postType":"post","slots":{"banner-1":{"adUnit":"banner","adSizes":"[[728, 90], [320, 100], [970, 250], [320, 50], [970, 90]]","id":"banner-1","mapping":"bannerOneMapping","hasSettings":true,"targeting":{"pos":"1"},"isRefresh":"true","isLazy":"false","isPrebid":"true"},"banner-2":{"adUnit":"banner","adSizes":"[[728, 90], [320, 100], [970, 250], [300, 250], [320, 50], [970, 90]]","id":"banner-2","mapping":"bannerMapping","hasSettings":true,"targeting":{"pos":"2"},"isRefresh":"true","isLazy":"true","isPrebid":"true"},"banner-3":{"adUnit":"banner","adSizes":"[[728, 90], [320, 100], [970, 250], [300, 250], [320, 50], [970, 90], [1,1]]","id":"banner-3","mapping":"bannerMapping","hasSettings":true,"targeting":{"pos":"3"},"isRefresh":"true","isLazy":"true","isPrebid":"true"},"adslot_0":{"adUnit":"native_river","adSizes":"fluid","id":"adslot_0","targeting":{"pos":"1"}},"adslot_1":{"adUnit":"native_river","adSizes":"fluid","id":"adslot_1","targeting":{"pos":"2"}},"adslot_2":{"adUnit":"native_river","adSizes":"fluid","id":"adslot_2","targeting":{"pos":"3"}},"curated_module-1":{"adUnit":"curated_module","adSizes":"fluid","id":"curated_module-1","hasSettings":true,"targeting":{"pos":"1"},"isRefresh":"false","isLazy":"true","isPrebid":"false"},"curated_module-2":{"adUnit":"curated_module","adSizes":"fluid","id":"curated_module-2","hasSettings":true,"targeting":{"pos":"2"},"isRefresh":"false","isLazy":"true","isPrebid":"false"},"rail-1":{"adUnit":"rail","adSizes":"[[320, 100], [320, 50], [300, 250], [300, 600], [1,1]]","id":"rail-1","mapping":"railMapping","hasSettings":true,"targeting":{"pos":"1"},"isRefresh":"true","isLazy":"true","isPrebid":"true"},"rail-2":{"adUnit":"rail","adSizes":"[[320, 100], [320, 50], [300, 250], [300, 600], [1,1]]","id":"rail-2","mapping":"railMapping","hasSettings":true,"targeting":{"pos":"2"},"isRefresh":"true","isLazy":"true","isPrebid":"true"},"rail-3":{"adUnit":"rail","adSizes":"[[320, 100], [320, 50], [300, 250], [300, 600], [1,1]]","id":"rail-3","mapping":"railMapping","hasSettings":true,"targeting":{"pos":"3"},"isRefresh":"true","isLazy":"true","isPrebid":"true"},"toprailsponsor-1":{"adUnit":"toprailsponsor","adSizes":"[[300, 150], [300, 90], [1,1]]","id":"toprailsponsor-1","mapping":"toprailMapping","targeting":{"pos":"1"}},"interstitial":{"adUnit":"interstitial","id":"interstitial","outOfPage":true},"skin":{"adUnit":"skin","adSizes":"[1, 1]","id":"skin"},"ad-reveal":{"adUnit":"ad-reveal","adSizes":"[[1300, 500], [780, 300], [360, 585]]","id":"ad-reveal","hasSettings":true,"mapping":"adrevealMapping","isRefresh":"false","isLazy":"false","isPrebid":"false"},"bottom-anchor":{"adUnit":"BOTTOM_ANCHOR","id":"bottom-anchor","isMobile":true,"outOfPage":true,"outOfPageFormat":"BOTTOM_ANCHOR","targeting":{"test":"outofpage"}}},"slotsFired":[],"slotsViewed":[],"targeting":{"vertical":"news","cat":[],"environment":"production","post_type":"section","vertical-landing":"news-171017"},"debug":""};
274//# sourceURL=gpt-js-extra
275</script>
vendor: 1 bytes, line 275
275
276<script type="text/plain" src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"  id="gpt" class="optanon-category-C0004"></script>
276<script type="text/plain" src="https://bomag.o0bc.com/wp-content/mu-plugins/metrocorp-ads/dist/js/metrocorp-ads.js?ver=1.0.0"  id="mc-ads" class="optanon-category-C0004"></script>
276<script type="text/plain" src="https://s.ntv.io/serve/load.js"  id="nativo-tracking" class="optanon-category-C0004"></script>
276<link rel="https://api.w.org/" href="https://www.bostonmagazine.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.bostonmagazine.com/wp-json/wp/v2/mc-tax-vertical/171017" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.bostonmagazine.com/xmlrpc.php?rsd" />
277<meta name="generator" content="WordPress 7.1.2" />
278<link rel='preload' href='https://www.bostonmagazine.com/wp-content/themes/metrocorp/dist/fonts/FoundersGrotesk/FoundersGroteskX-CondensedWeb-Medium.woff' as='font' type='font/woff' crossorigin>
279<link rel='preload' href='https://www.bostonmagazine.com/wp-content/themes/metrocorp/dist/fonts/inter/inter-v12-latin-regular.woff2' as='font' type='font/woff' crossorigin>
280<link rel='preload' href='https://www.bostonmagazine.com/wp-content/themes/metrocorp/dist/fonts/inter/inter-v12-latin-500.woff2' as='font' type='font/woff' crossorigin>
281<link rel='preload' href='https://www.bostonmagazine.com/wp-content/themes/metrocorp/dist/fonts/inter-v12-latin-600.woff2' as='font' type='font/woff' crossorigin>
282<link rel='preload' href='https://www.bostonmagazine.com/wp-content/themes/metrocorp/dist/fonts/inter-v12-latin-700.woff2' as='font' type='font/woff' crossorigin>
283<script type="application/ld+json">{
284    "@context": "http:\/\/schema.org",
285    "@type": "WebPage",
286    "publisher": {
287        "@type": "Organization",
288        "name": "Boston Magazine",
289        "logo": {
290            "@type": "ImageObject",
291            "url": "https:\/\/www.bostonmagazine.com\/wp-content\/themes\/metrocorp-bostonmagazine\/images\/logo-bostonmag.png"
292        }
293    },
294    "mainEntityOfPage": {
295        "@type": "WebPage",
296        "@id": "https:\/\/www.bostonmagazine.com\/news"
297    }
298}</script>
298<meta name="google-site-verification" content="0XaV9QKUdAM56rDbamBZ6GVmS2NqzAhSO1DgPDye__o" /><link rel="icon" href="https://bomag.o0bc.com/wp-content/uploads/sites/2/2017/10/cropped-boston-magazine-favicon-32x32.png" sizes="32x32" />
299<link rel="icon" href="https://bomag.o0bc.com/wp-content/uploads/sites/2/2017/10/cropped-boston-magazine-favicon-192x192.png" sizes="192x192" />
300<link rel="apple-touch-icon" href="https://bomag.o0bc.com/wp-content/uploads/sites/2/2017/10/cropped-boston-magazine-favicon-180x180.png" />
301<meta name="msapplication-TileImage" content="https://bomag.o0bc.com/wp-content/uploads/sites/2/2017/10/cropped-boston-magazine-favicon-270x270.png" />
302<script type="text/javascript">
303	window.dataLayer = window.dataLayer || [];
304</script>
304
305
306<script type="text/javascript">
307	window.gtag = window.gtag || function() {
308		window.dataLayer.push( arguments );
309	};
310
311	/**
312	 * Read the consent state OneTrust stores in the OptanonConsent cookie.
313	 *
314	 * @return {?string} The raw groups value, or null when nothing is stored.
315	 */
316	function mcStoredConsentGroups() {
317		var cookie = document.cookie.match( /(?:^|;\s*)OptanonConsent=([^;]*)/ );
318
319		if ( ! cookie ) {
320			return null;
321		}
322
323		try {
324			var groups = decodeURIComponent( cookie[1] ).match( /groups=([^&]*)/ );
325			return groups && groups[1] ? groups[1] : null;
326		} catch ( e ) {
327			return null;
328		}
329	}
330
331	/**
332	 * Map OneTrust categories onto Consent Mode v2 signals.
333	 *
334	 * Reads either the cookie format ( C0002:1 ) or the OnetrustActiveGroups
335	 * format ( ,C0001,C0002, ) so the default and update commands cannot
336	 * drift apart.
337	 *
338	 * @param {string} groups The category string to read.
339	 * @return {Object} Consent Mode v2 signals.
340	 */
341	function mcConsentSignals( groups ) {
342		var isActive = function( category ) {
343			return -1 !== groups.indexOf( category + ':1' ) ||
344				-1 !== groups.indexOf( ',' + category + ',' );
345		};
346
347		var advertising = isActive( 'C0004' ) ? 'granted' : 'denied';
348
349		return {
350			analytics_storage: isActive( 'C0002' ) ? 'granted' : 'denied',
351			ad_storage: advertising,
352			ad_user_data: advertising,
353			ad_personalization: advertising
354		};
355	}
356
357	function mcUpdateGoogleConsent() {
358		window.gtag( 'consent', 'update', mcConsentSignals( window.OnetrustActiveGroups || '' ) );
359	}
360
361	var mcStoredGroups   = mcStoredConsentGroups();
362	var mcDefaultConsent = mcStoredGroups ? mcConsentSignals( mcStoredGroups ) : {
363		analytics_storage: 'denied',
364		ad_storage: 'denied',
365		ad_user_data: 'denied',
366		ad_personalization: 'denied'
367	};
368
369	mcDefaultConsent.wait_for_update = 1000;
370
371	window.gtag( 'consent', 'default', mcDefaultConsent );
372
373	window.addEventListener( 'OneTrustGroupsUpdated', mcUpdateGoogleConsent );
374
375	if ( window.OnetrustActiveGroups ) {
376		mcUpdateGoogleConsent();
377	}
378</script>
378
379
380<script type="text/javascript">dataLayer.push({"content_type":"non-post","post_id":"non-post"}); var gtmLoaded=true;</script>
380
381<!-- Google Tag Manager -->
382<noscript>
383<iframe data-src="//www.googletagmanager.com/ns.html?id=GTM-WFHFBM" height="0" width="0" class="optanon-category-C0004" style="display:none;visibility:hidden"></iframe></noscript>
384<script type="text/javascript">
385if ( typeof dataLayer[0].gaReferer === 'undefined' ) {
386	var referrer = document.referrer, siteURL = window.location.origin;
387	if ( ! referrer || referrer.indexOf( siteURL ) === 0 ) {
388		dataLayer[0].gaReferer = null;
389	} else {
390		dataLayer[0].gaReferer = referrer;
391	}
392}
393
394dataLayer.push({
395	'gtm.start': new Date().getTime(),
396	event: 'gtm.js'
397});
398</script>
vendor: 1 bytes, line 398
398
399<script async type="text/javascript" src="https://www.googletagmanager.com/gtm.js?id=GTM-WFHFBM"></script>
399<!-- End Google Tag Manager -->
400<!-- Start of HubSpot Embed Code -->
401<script type="text/plain" class="optanon-category-C0004" id="hs-script-loader" async defer src="//js.hs-scripts.com/43837035.js"></script>
401
402<!-- End of HubSpot Embed Code -->
403<meta name="p:domain_verify" content="3a9adbe7c6bf24035a0284a21da2840a"/>
404	</head>
405	<body class="archive tax-mc-tax-vertical term-news term-171017 wp-theme-metrocorp wp-child-theme-metrocorp-bostonmagazine current-site-bostonmagazine">
406	<div class="hat-nav container">
407	<nav class="hat-nav__menu">
408		<ul class="hat-nav__list">
409			<li>
410				<a href="https://www.bostonglobe.com/" data-track-name="BDCHatNav_BG">The Boston Globe</a>
411			</li>
412			<li>
413				<a href="https://www.boston.com/" data-track-name="BDCHatNav_BDC">Boston.com</a>
414			</li>
415			<li>
416				<a href="https://www.bostonmagazine.com/" class="active">Boston Magazine</a>
417			</li>
418			<li>
419				<a href="https://www.boston.com/tag/the-b-side/" data-track-name="BDCHatNav_BSide">B-Side</a>
420			</li>
421		</ul>
422	</nav>
423</div>
424			<div align="center" data-freestar-ad="__360x585 __1300x500" id="bostonmagazine_ad-reveal" class="gpt-ad">
425	
425<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
426	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_ad-reveal", slotId: "bostonmagazine_ad-reveal" });
427	</script>
427
428	</div><div id="under-reveal"></div><div class="header-navigation-spacer"></div>
429<div class="header-navigation js-header-menu-full" id="js-header-navigation">
430	<div class="container header-navigation-inner">
431		<div class="navigation-logo">
432			<a href="//www.bostonmagazine.com" aria-label="Boston Magazine" >
433				<svg class="mc-icon bostonmagazine-logo" aria-hidden="true"><title>Boston Magazine</title><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-bostonmagazine-logo"></svg>			</a>
434		</div>
435		<button
436			id="js-mobile-menu-toggle"
437			class="mobile-menu-toggle"
438			aria-hidden="true"
439			aria-label="Toggle navigation menu"
440			aria-expanded="false"
441			aria-controls="js-header-navigation-wrapper"
442		>
443			<svg class="mc-icon hamburger" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-hamburger"></svg>			<svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg>		</button>
444
445		<div class="header-menu-wrapper" id="js-header-navigation-wrapper">
446
447			<div class="header-menu"><ul id="menu-primary-menu" class="menu-header-main"><li id="menu-item-2933157" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2933157"><a href="https://www.bostonmagazine.com/issues/">Magazine</a></li>
448<li id="menu-item-2417140" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2417140"><a href="/find-it-boston-search/">Find It / Boston</a>
449<ul class="sub-menu">
450	<li id="menu-item-2417143" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2417143"><a href="/find-a-doctor/">Doctors</a></li>
451	<li id="menu-item-2417146" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2417146"><a href="/dentists/">Dentists</a></li>
452	<li id="menu-item-2669250" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2669250"><a href="/lawyers/">Lawyers</a></li>
453	<li id="menu-item-2763054" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2763054"><a href="/senior-living/">Senior Living</a></li>
454	<li id="menu-item-2452224" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2452224"><a href="/wedding/">Wedding Experts</a></li>
455	<li id="menu-item-2464168" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2464168"><a href="/private-schools/">Private Schools</a></li>
456	<li id="menu-item-2477508" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2477508"><a href="/home-design/">Home Design Experts</a></li>
457	<li id="menu-item-2511746" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2511746"><a href="/real-estate-agents/">Real Estate Agents</a></li>
458</ul>
459</li>
460<li id="menu-item-2351177" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical current-menu-item menu-item-has-children menu-item-2351177"><a href="https://www.bostonmagazine.com/news" aria-current="page">City Life</a>
461<ul class="sub-menu">
462	<li id="menu-item-2667249" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2667249"><a href="/fashion-style/">Style</a></li>
463	<li id="menu-item-2351199" class="no-children menu-item menu-item-type-custom menu-item-object-custom menu-item-2351199"><a href="/education/">Education</a></li>
464	<li id="menu-item-2429289" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2429289"><a href="/private-schools/">Find a Private School</a></li>
465</ul>
466</li>
467<li id="menu-item-2351186" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351186"><a href="https://www.bostonmagazine.com/restaurants">Restaurants</a>
468<ul class="sub-menu">
469	<li id="menu-item-2593122" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2593122"><a href="/best-restaurants-in-boston/">50 Best Restaurants</a></li>
470</ul>
471</li>
472<li id="menu-item-2351180" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vert
472ical menu-item-has-children menu-item-2351180"><a href="https://www.bostonmagazine.com/health">Wellness</a>
473<ul class="sub-menu">
474	<li id="menu-item-2351202" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2351202"><a href="https://www.bostonmagazine.com/health">Be Well Boston</a></li>
475	<li id="menu-item-2351205" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351205"><a href="/dentists/">Find a Dentist</a></li>
476	<li id="menu-item-2351206" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351206"><a href="/find-a-doctor/">Find a Doctor</a></li>
477</ul>
478</li>
479<li id="menu-item-2456643" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2456643"><a href="/weddings/">Weddings</a>
480<ul class="sub-menu">
481	<li id="menu-item-2593127" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2593127"><a href="https://www.bostonmagazine.com/weddings">Guides &#038; Advice</a></li>
482	<li id="menu-item-2351247" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351247"><a href="/weddings/2026/01/06/best-of-boston-weddings-2026/">Best of Boston Weddings</a></li>
483	<li id="menu-item-2351214" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351214"><a href="/wedding/">Find a Wedding Expert</a></li>
484	<li id="menu-item-2351244" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351244"><a href="/category/real-weddings/">Real Weddings</a></li>
485	<li id="menu-item-2757961" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2757961"><a href="/bubblybrunch">Bubbly Brunch Event</a></li>
486</ul>
487</li>
488<li id="menu-item-2351189" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351189"><a href="https://www.bostonmagazine.com/property">Home &amp; Property</a>
489<ul class="sub-menu">
490	<li id="menu-item-2593129" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2593129"><a href="https://www.bostonmagazine.com/property">Properties &#038; News</a></li>
491	<li id="menu-item-2477503" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2477503"><a href="/home-design/">Find a Home Design Expert</a></li>
492	<li id="menu-item-2511748" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2511748"><a href="/realestate-agents/">Find a Real Estate Agent</a></li>
493	<li id="menu-item-2351251" class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351251"><a href="/tag/home-design">Home Design</a></li>
494	<li id="menu-item-2351253" class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351253"><a href="/property/2024/11/14/best-of-boston-home-2025/">Best of Boston Home</a></li>
495</ul>
496</li>
497<li id="menu-item-2351183" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351183"><a href="https://www.bostonmagazine.com/arts-entertainment">Things To Do</a>
498<ul class="sub-menu">
499	<li id="menu-item-2351248" class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351248"><a href="https://www.bostonmagazine.com/things-to-do/weekend/">Things To Do This Weekend</a></li>
500	<li id="menu-item-2351220" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2351220"><a href="https://www.bostonmagazine.com/arts-entertainment">Arts &amp; Entertainment</a></li>
501	<li id="menu-item-2351223" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351223"><a href="/events/">Boston magazine Events</a></li>
502	<li id="menu-item-2803594" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2803594"><a href="https://www.bostonmagazine.com/bestofbostonsoiree/">Best of Boston Soiree 2026</a></li>
503</ul>
504</li>
505<li id="menu-item-2351197" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2351197"><a href="/travel/">Travel</a>
506<ul class="sub-menu">
507	<li id="menu-item-2806575" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2806575"><a href="http://bostonmagazine.com/travelawards">New England Travel Awards</a></li>
508</ul>
509</li>
510<li id="menu-item-174761" class="menuBes menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-174761"><a href="/best-of-boston/">Best of Boston</a>
511<ul class="sub-menu">
512	<li id="menu-item-2734635" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2734635"><a href="/best-of-boston/">Latest Winners</a></li>
513</ul>
514</li>
515</ul></div>
516			<div class="header-tablet-elements">
517				<div class="header-subscribe">
518					<div class="thin-line">
519						<span class="screen-reader-text">Subscribe</span>
520						<svg class="mc-icon bostonmagazine-subscribe" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-bostonmagazine-subscribe"></svg>					</div>
521					<ul id="menu-top-left" class="menu-header-subscribe"><li id="menu-item-2351233" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351233"><a href="https://w1.buysub.com/pubs/PB/BOS/BOS_sub.jsp?cds_page_id=270289&#038;cds_mag_code=BOS&#038;id=1732211763015&#038;lsid=43261101552083486&#038;vid=6">ALL ACCESS</a></li>
522<li id="menu-item-2655360" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2655360"><a href="/newsletters">NEWSLETTERS</a></li>
523<li id="menu-item-2351235" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351235"><a href="https://bostonglobemedia.cloud.buysub.com">MY ACCOUNT</a></li>
524</ul>				</div>
525
526				<div class="header-social">
527					<div class="thin-line">
528						<span class="screen-reader-text">Follow</span>
529						<svg class="mc-icon bostonmagazine-follow" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-bostonmagazine-follow"></svg>					</div>
530					<ul id="menu-social" class="menu-header-social"><li id="menu-item-2351226" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351226"><a target="_blank" href="https://www.facebook.com/bostonmagazine"><span class="screen-reader-text">Facebook</span></a></li>
531<li id="menu-item-2351228" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351228"><a target="_blank" href="https://www.instagram.com/bostonmagazine/"><span class="screen-reader-text">Instagram</span></a></li>
532<li id="menu-item-2351231" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351231"><a target="_blank" href="https://www.twitter.com/bostonmagazine"><span class="screen-reader-text">Twitter</span></a></li>
533</ul>				</div>
534			</div>
535
536		</div>
537					<div class="header-search">
538				<div class="search-form-wrapper" id="js-search-form-wrapper" aria-hidden="true">
539					<form role="search" method="get" class="search-form" action="https://www.bostonmagazine.com/">
540	<label>
541		<span class="screen-reader-text">Search for:</span>
542		<input type="search" class="search-field"
543			placeholder="Search …"
544			value="" name="s"
545			title="Search for:" />
546	</label>
547	<button type="submit">
548		<svg class="mc-icon icon-search" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-icon-search"></svg>		<span class="screen-reader-text">Search</span>
549	</button>
550</form>
551				</div>
552				<button id="js-toggle-search" aria-expanded="false" aria-controls="js-search-form-wrapper">
553					<svg class="mc-icon icon-search" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-icon-search"></svg>					<svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg>				</button>
554			</div>
555			</div>
556</div>
557		</div>
558		<header class="site-header" role="banner" id="js-header">
559
560			<div class="site-header-inner container">
561
562				<div class="header-social">
563					<div class="thin-line">
564						<span class="screen-reader-text">Follow</span>
565						<svg class="mc-icon bostonmagazine-follow" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-bostonmagazine-follow"></svg>					</div>
566					<ul id="menu-social-1" class="menu-header-social"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351226"><a target="_blank" href="https://www.facebook.com/bostonmagazine"><span class="screen-reader-text">Facebook</span></a></li>
567<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351228"><a target="_blank" href="https://www.instagram.com/bostonmagazine/"><span class="screen-reader-text">Instagram</span></a></li>
568<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351231"><a target="_blank" href="https://www.twitter.com/bostonmagazine"><span class="screen-reader-text">Twitter</span></a></li>
569</ul>				</div>
570
571				<div class="header-logo">
572	<div itemscope itemtype="https://schema.org/Organization">	<a href="https://www.bostonmagazine.com/news" aria-label="Boston Magazine">
573		<svg class="mc-icon bostonmagazine-section-news" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-bostonmagazine-section-news"></svg>	</a>
574	<span class="section-front-tagline"></span></div></div>
575
576				<div class="header-subscribe">
577					<div class="thin-line">
578						<span class="screen-reader-text">Subscribe</span>
579						<svg class="mc-icon bostonmagazine-subscribe" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-bostonmagazine-subscribe"></svg>					</div>
580					<ul id="menu-top-left-1" class="menu-header-subscribe"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351233"><a href="https://w1.buysub.com/pubs/PB/BOS/BOS_sub.jsp?cds_page_id=270289&#038;cds_mag_code=BOS&#038;id=1732211763015&#038;lsid=43261101552083486&#038;vid=6">ALL ACCESS</a></li>
581<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2655360"><a href="/newsletters">NEWSLETTERS</a></li>
582<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351235"><a href="https://bostonglobemedia.cloud.buysub.com">MY ACCOUNT</a></li>
583</ul>				</div>
584
585			</div>
586		</header>
587			
588		<div class="mobile-section-front">
589				<a href="https://www.bostonmagazine.com/news">
590			<svg class="mc-icon bostonmagazine-section-news" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-bostonmagazine-section-news"></svg>		</a>
591		<span class="section-front-tagline">
592					</span>
593	</div>
594	
595			<div class="header-navigation-secondary container"><ul id="menu-primary-menu-1" class="menu-topics"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2933157"><a href="https://www.bostonmagazine.com/issues/">Magazine</a></li>
596<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2417140"><a href="/find-it-boston-search/">Find It / Boston</a>
597<ul class="sub-menu">
598	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2417143"><a href="/find-a-doctor/">Doctors</a></li>
599	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2417146"><a href="/dentists/">Dentists</a></li>
600	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2669250"><a href="/lawyers/">Lawyers</a></li>
601	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2763054"><a href="/senior-living/">Senior Living</a></li>
602	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2452224"><a href="/wedding/">Wedding Experts</a></li>
603	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2464168"><a href="/private-schools/">Private Schools</a></li>
604	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2477508"><a href="/home-design/">Home Design Experts</a></li>
605	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2511746"><a href="/real-estate-agents/">Real Estate Agents</a></li>
606</ul>
607</li>
608<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vert
608ical current-menu-item menu-item-has-children menu-item-2351177"><a href="https://www.bostonmagazine.com/news" aria-current="page">City Life</a>
609<ul class="sub-menu">
610	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2667249"><a href="/fashion-style/">Style</a></li>
611	<li class="no-children menu-item menu-item-type-custom menu-item-object-custom menu-item-2351199"><a href="/education/">Education</a></li>
612	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2429289"><a href="/private-schools/">Find a Private School</a></li>
613</ul>
614</li>
615<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351186"><a href="https://www.bostonmagazine.com/restaurants">Restaurants</a>
616<ul class="sub-menu">
617	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2593122"><a href="/best-restaurants-in-boston/">50 Best Restaurants</a></li>
618</ul>
619</li>
620<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351180"><a href="https://www.bostonmagazine.com/health">Wellness</a>
621<ul class="sub-menu">
622	<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2351202"><a href="https://www.bostonmagazine.com/health">Be Well Boston</a></li>
623	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351205"><a href="/dentists/">Find a Dentist</a></li>
624	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351206"><a href="/find-a-doctor/">Find a Doctor</a></li>
625</ul>
626</li>
627<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2456643"><a href="/weddings/">Weddings</a>
628<ul class="sub-menu">
629	<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2593127"><a href="https://www.bostonmagazine.com/weddings">Guides &#038; Advice</a></li>
630	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351247"><a href="/weddings/2026/01/06/best-of-boston-weddings-2026/">Best of Boston Weddings</a></li>
631	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351214"><a href="/wedding/">Find a Wedding Expert</a></li>
632	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351244"><a href="/category/real-weddings/">Real Weddings</a></li>
633	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2757961"><a href="/bubblybrunch">Bubbly Brunch Event</a></li>
634</ul>
635</li>
636<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351189"><a href="https://www.bostonmagazine.com/property">Home &amp; Property</a>
637<ul class="sub-menu">
638	<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2593129"><a href="https://www.bostonmagazine.com/property">Properties &#038; News</a></li>
639	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2477503"><a href="/home-design/">Find a Home Design Expert</a></li>
640	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2511748"><a href="/realestate-agents/">Find a Real Estate Agent</a></li>
641	<li class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351251"><a href="/tag/home-design">Home Design</a></li>
642	<li class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351253"><a href="/property/2024/11/14/best-of-boston-home-2025/">Best of Boston Home</a></li>
643</ul>
644</li>
645<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351183"><a href="https://www.bostonmagazine.com/arts-entertainment">Things To Do</a>
646<ul class="sub-menu">
647	<li class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351248"><a href="https://www.bostonmagazine.com/things-to-do/weekend/">Things To Do This Weekend</a></li>
648	<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vert
648ical menu-item-2351220"><a href="https://www.bostonmagazine.com/arts-entertainment">Arts &amp; Entertainment</a></li>
649	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351223"><a href="/events/">Boston magazine Events</a></li>
650	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2803594"><a href="https://www.bostonmagazine.com/bestofbostonsoiree/">Best of Boston Soiree 2026</a></li>
651</ul>
652</li>
653<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2351197"><a href="/travel/">Travel</a>
654<ul class="sub-menu">
655	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2806575"><a href="http://bostonmagazine.com/travelawards">New England Travel Awards</a></li>
656</ul>
657</li>
658<li class="menuBes menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-174761"><a href="/best-of-boston/">Best of Boston</a>
659<ul class="sub-menu">
660	<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2734635"><a href="/best-of-boston/">Latest Winners</a></li>
661</ul>
662</li>
663</ul></div>	
664			<div style="width:1px;height:1px;margin:-1px 0 0 0;padding:0;display:block;">
665			<div align="center" data-freestar-ad="" id="bostonmagazine_skin" class="gpt-ad">
666	
666<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
667	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_skin", slotId: "bostonmagazine_skin" });
668	</script>
668
669	</div>		</div>
670	
671	<div align="center" data-freestar-ad="" id="bostonmagazine_interstitial" class="gpt-ad out-of-page">
672	
672<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
673	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_interstitial", slotId: "bostonmagazine_interstitial" });
674	</script>
674
675	</div><div align="center" data-freestar-ad="" id="bostonmagazine_bottom-anchor" class="gpt-ad out-of-page">
676	
676<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
677	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_bottom-anchor", slotId: "bostonmagazine_bottom-anchor" });
678	</script>
678
679	</div>
680
681	<div align="center" data-freestar-ad="__320x100 __970x250" id="bostonmagazine_banner-1" class="gpt-ad advertisement container">
682	
682<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
683	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_banner", slotId: "bostonmagazine_banner-1" });
684	</script>
684
685	</div>
686	<div class="list-post" style="display:none" aria-hidden="true">
687	<a href="https://www.bostonmagazine.com/scrapertrap" class="post-image-link"><img width="400" height="250" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="attachment-image-list size-image-list wp-post-image" alt=""></a>
688
689	<div class="list-post-card">
690		<a href="https://www.bostonmagazine.com/scrapertrap" class="post-slug">I'm a scraper</a>
691		<div class="post-title">
692			<a href="https://www.bostonmagazine.com/scrapertrap">This search result is here to prevent scraping</a>
693		</div>
694		<div class="post-excerpt">
695			<p>If you're a human and see this, please ignore it. If you're a scraper, please click the link below :-)
696  Note that clicking the link below will block access to this site for 24 hours.</p>
697		</div>
698		<span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/scrapertrap" class="byline">I'm a scraper</a></span>
699	</div>
700</div>
701
702		<div class="content-with-sidebar">
703		<div class="featured-post">
704
705			<a href="https://www.bostonmagazine.com/news/best-public-high-schools-boston-2026-2027-chart/" class="post-image-link">
706				<img width="300" height="200" src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-300x200.jpg" class="attachment-thumbnail size-thumbnail" alt="Stone archway above a doorway with the words &quot;PUBLIC SCHOOL&quot; carved into it, set in a brick building with three white-framed windows above." sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 969px) calc( ( ( 100vw - 30px ) / 3 * 2 ) - 35px ), 605px" srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-600x400.jpg 600w" data-no-lazy="true" decoding="async" fetchpriority="high" />			</a>
707			<div class="featured-post-card">
708				<a href="https://www.bostonmagazine.com/category/news/" class="post-slug">News</a>				<h2 class="post-title">
709					<a href="https://www.bostonmagazine.com/news/best-public-high-schools-boston-2026-2027-chart/">
710						The Top Public High Schools in Greater Boston, Ranked for 2026					</a>
711				</h2>
712				<div class="post-excerpt">
713					<p>
714						<p><span class="s1">We crunched the numbers to come up with our guide to the region’s top-performing schools. Does your town make the grade?</span></p>
715					</p>
716				</div>
717			</div>
718		</div>
719		<div class="trending-widget">
720	<div align="center" data-freestar-ad="__300x150 __300x150" id="bostonmagazine_toprailsponsor-1" class="gpt-ad toprail-bewell">
721	
721<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
722	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_toprailsponsor", slotId: "bostonmagazine_toprailsponsor-1" });
723	</script>
723
724	</div>
725			<h2 class="title-line">Trending</h2>
726		
727		<ol>
728							<li>
729					<h3 class="trending-post-title post-title">
730						<a href="https://www.bostonmagazine.com/news/2026/09/29/massachusetts-best-state-data/">
731							We&#8217;re No. 1! Obviously.						</a>
732					</h3>
733				</li>
734								<li>
735					<h3 class="trending-post-title post-title">
736						<a href="https://www.bostonmagazine.com/news/2026/09/29/best-dentists-greater-boston/">
737							Our All-New List of Top Dentists in Greater Boston Is Here						</a>
738					</h3>
739				</li>
740								<li>
741					<h3 class="trending-post-title post-title">
742						<a href="https://www.bostonmagazine.com/news/2026/09/13/boston-greek-restaurant-feud-lawsuit-xenia-krasi/">
743							Inside Demetri Tsolakis&#8217;s Legal Battle With His Former Boss						</a>
744					</h3>
745				</li>
746								<li>
747					<h3 class="trending-post-title post-title">
748						<a href="https://www.bostonmagazine.com/news/therians-identity/">
749							Meet the Kids Who Identify as Animals						</a>
750					</h3>
751				</li>
752								<li>
753					<h3 class="trending-post-title post-title">
754						<a href="https://www.bostonmagazine.com/news/2026/09/23/jonathan-tucker-boston/">
755							Jonathan Tucker Would Like a Word With TD Garden&#8217;s Owner						</a>
756					</h3>
757				</li>
758						</ol>
759			
760</div>
761
762	</div>
763	<div class="container">
764		<hr class="double">
765		<div class="grid-content">
766									<div class="grid-post">
767							<a href="https://www.bostonmagazine.com/news/2026/09/01/is-college-still-worth-it/" class="post-image-link">
768								<img width="300" height="200" class="attachment-thumbnail size-thumbnail lazyload" alt="A blue graduation cap with a tassel, featuring the words &quot;NOW WHAT?&quot; written in white on the top, set against a white background with the word &quot;Boston&quot; partially visible in large blue letters behind it." decoding="async" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-300x200.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-600x400.jpg 600w" data-sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 969px) calc( ( ( 100vw - 30px ) / 3 ) - 35px ), 605px" />							</a>
769							<div class="grid-post-card">
770								<a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a>								<h2 class="post-title">
771									<a href="https://www.bostonmagazine.com/news/2026/09/01/is-college-still-worth-it/">
772										The Great College Reckoning: Is Higher Education Still Worth It?									</a>
773								</h2>
774							</div>
775						</div>
776												<div class="grid-post">
777							<a href="https://www.bostonmagazine.com/education/2026/08/09/private-school-admissions/" class="post-image-link">
778								<img width="300" height="200" class="attachment-thumbnail size-thumbnail lazyload" alt="" decoding="async" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-300x200.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-600x400.jpg 600w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat.jpg 900w" data-sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 969px) calc( ( ( 100vw - 30px ) / 3 ) - 35px ), 605px" />							</a>
779							<div class="grid-post-card">
780								<a href="https://www.bostonmagazine.com/category/opinion/personal-essay/" class="post-slug">Personal Essay</a>								<h2 class="post-title">
781									<a href="https://www.bostonmagazine.com/education/2026/08/09/private-school-admissions/">
782										What It Actually Takes to Apply to Private School									</a>
783								</h2>
784							</div>
785						</div>
786												<div class="grid-post">
787							<a href="https://www.bostonmagazine.com/news/top-hospitals-greater-boston/" class="post-image-link">
788								<img width="300" height="200" class="attachment-thumbnail size-thumbnail lazyload" alt="" decoding="async" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-300x200.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-600x400.jpg 600w" data-sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 969px) calc( ( ( 100vw - 30px ) / 3 ) - 35px ), 605px" />							</a>
789							<div class="grid-post-card">
790								<a href="https://www.bostonmagazine.com/category/guides/" class="post-slug">Guides</a>								<h2 class="post-title">
791									<a href="https://www.bostonmagazine.com/news/top-hospitals-greater-boston/">
792										Greater Boston&#8217;s Top Hospitals for Surgery, By Procedure and Specialty									</a>
793								</h2>
794							</div>
795						</div>
796								</div>
797
798					<hr class="solid">
799		
800	</div>
801
802	
803	
804	<div class="container find-a-pro-container">
805	<div class="find-a-pro js-opened bdocs-open" id="js-find-a-pro">
806		<h2 class="find-a-pro-title h2-dirmod-boston"><span><em>Find It Boston</em>What you need, when you need it.</span></h2>
807		<div class="find-a-pro-inner">
808			<ul class="ul-bostonmagazine">
809				<li><button class="js-directory-toggle" aria-expanded="true" aria-controls="js-find-a-pro-overlay-9"><span class="button">Doctors</span></button>						<div class="find-a-pro-overlay js-expanded" id="js-find-a-pro-overlay-9" aria-hidden="false">
810						<div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine">
811
812						<button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-9" aria-expanded="true"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button>
813						<div class="js-directory-form">
814<form id="directory-search-form_9" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/find-a-doctor/" method="get">
815
816						<div class="directory-search-form__search-input s text">
817														<label class="search-input-label" for="s_9"><span class="visually-hidden">Search For...</span>
818				
819				<input id="s_9" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search For..." autocomplete="off"/>									</label>
820				
821			</div>					<div class="directory-search-form__search-input cat select">
822														<label class="search-input-label" for="cat_9"><span class="visually-hidden">Specialty</span>
823				
824				<select name="cat[]" id="cat_9" class="postform header-search-select header-search-select--cat"><option value="0" selected="">Specialty</option><option value="370">Addiction Psychiatry</option><option value="376">Adolescent Medicine</option><option value="325">Allergy &amp; Immunology</option><option value="1254">Anesthesiology</option><option value="1246">Anti-Aging Regenerative Medicine</option><option value="1653">Bariatric Surgery</option><option value="408">Cardiac Electrophysiology</option><option value="423">Cardiovascular Disease</option><option value="437">Child &amp; Adolescent Psychiatry</option><option value="442">Child Neurology</option><option value="445">Clinical Genetics</option><option value="460">Colon &amp; Rectal Surgery</option><option value="23">Dermatology</option><option value="478">Developmental-Behavioral Pediatrics</option><option value="1222">Diabetes &amp; Metabolism</option><option value="480">Diagnostic Radiology</option><option value="1261">Emergency Medicine</option><option value="1219">Endocrinology</option><option value="1264">Facial Plastic Surgery/Otolaryngology</option><option value="114">Family Medicine</option><option value="1234">Female Hair Loss</option><option value="496">Gastroenterology</option><option value="499">Geriatric Medicine</option><option value="502">Geriatric Psychiatry</option><option value="505">Gynecologic Oncology</option><option value="512">Hand Surgery</option><option value="513">Hematology</option><option value="866">Hospice &amp; Palliative Medicine</option><option value="515">Infectious Disease</option><option value="1243">Integrative Gastroenterology</option><option value="54">Internal Medicine</option><option value="516">Interventional Cardiology</option><option value="517">Maternal &amp; Fetal Medicine</option><option value="520">Medical Oncology</option><option value="839">Neonatal-Perinatal Medicine</option><option value="529">Nephrology</option><option value="533">Neurological Surgery</option><option value="536">Neurology</option><option value="538">Neuroradiology</option><option value="760">Nuclear Medicine</option><option value="215">Obstetrics &amp; Gynecology</option><option value="540">Ophthalmology</option><option value="971">Orthopedic Surgery</option><option value="1737">Other</option><option value="547">Otolaryngology</option><option value="549">Pain Medicine</option><option value="78">Pathology</option><option value="1014">
824Pediatric Allergy &amp; Immunology</option><option value="1265">Pediatric Anesthesiology</option><option value="553">Pediatric Cardiology</option><option value="1270">Pediatric Critical Care Medicine</option><option value="1252">Pediatric Dermatology</option><option value="1253">Pediatric Emergency Medicine</option><option value="555">Pediatric Endocrinology</option><option value="556">Pediatric Gastroenterology</option><option value="558">Pediatric Hematology-Oncology</option><option value="1646">Pediatric Infectious Diseases</option><option value="560">Pediatric Nephrology</option><option value="1648">Pediatric Neurological Surgery</option><option value="1649">Pediatric Orthopedic Surgery</option><option value="563">Pediatric Otolaryngology</option><option value="565">Pediatric Pulmonology</option><option value="1659">Pediatric Radiology</option><option value="1656">Pediatric Rehabilitation Medicine</option><option value="568">Pediatric Rheumatology</option><option value="571">Pediatric Surgery</option><option value="576">Pediatric Urology</option><option value="1228">
824Pediatrics</option><option value="582">Physical Medicine &amp; Rehabilitation</option><option value="183">Plastic Surgery</option><option value="1267">Podiatry</option><option value="589">Psychiatry</option><option value="592">Pulmonary Disease</option><option value="594">Radiation Oncology</option><option value="963">Reproductive Endocrinology/Infertility</option><option value="597">Rheumatology</option><option value="603">Sleep Medicine</option><option value="1000">Sports Medicine</option><option value="178">Surgery</option><option value="1647">Surgical Oncology</option><option value="608">Thoracic &amp; Cardiac Surgery</option><option value="1644">Thoracic Surgery</option><option value="996">Urogynecology/Female Pelvic Medicine &amp; Reconstructive Surgery</option><option value="619">Urology</option><option value="624">Vascular &amp; Interventional Radiology</option><option value="627">Vascular Surgery</option></select>									</label>
825				
826			</div>			
827	
828	<input class="directory-search-form__submit-button" type="submit" value="Find" />
829
830	<a href="https://www.bostonmagazine.com/find-a-doctor" class="directory-search-form__see-all">See All</a>
831</form>
832</div><div class="bdoctors-search-sponsor-hm" id="hmbg-bdocs">
833	<a href="https://www.massgeneralbrigham.org/" id="find-mme-specialist" target="_blank">
834		<span class="search-sponsor-cta-text">Find a specialist Today</span>
835		<em>Brought to you by</em>
836		<img src="https://www.bostonmagazine.com/wp-content/uploads/sites/2/2020/12/300x250-mgb.png" alt="Mass General Brigham - logo"/>
837	</a>
838</div>
839							</div>
840						</div>
841						<!-- .find-a-pro-overlay -->
842						</li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-28"><span class="button">Weddings</span></button>						<div class="find-a-pro-overlay" id="js-find-a-pro-overlay-28" aria-hidden="true">
843						<div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine">
844
845						<button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-28" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button>
846						<div class="js-directory-form">
847<form id="directory-search-form_28" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/wedding/" method="get">
848
849	
850		<div class="directory-search-form__search-input">
851						<label class="search-input-label" for="search-input_28">
852				<span class="visually-hidden">
853					Search for...				</span>
854				<input id="search-input_28" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search for..."/>
855		</div>
856
857	
858	
859	<input class="directory-search-form__submit-button" type="submit" value="Find" />
860
861	<a href="https://www.bostonmagazine.com/wedding" class="directory-search-form__see-all">See All</a>
862</form>
863</div>							</div>
864						</div>
865						<!-- .find-a-pro-overlay -->
866						</li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-19"><span class="button">Dentists</span></button>						<div class="find-a-pro-overlay" id="js-find-a-pro-overlay-19" aria-hidden="true">
867						<div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine">
868
869						<button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-19" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button>
870						<div class="js-directory-form">
871<form id="directory-search-form_19" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/dentists/" method="get">
872
873						<div class="directory-search-form__search-input cat select">
874														<label class="search-input-label" for="cat_19"><span class="visually-hidden">Specialty</span>
875				
876				<select name="cat[]" id="cat_19" class="postform header-search-select header-search-select--cat"><option value="0" selected="">Specialty</option><option value="2454">Airway Dentistry</option><option value="87">Cosmetic Dentistry</option><option value="2393">Dental Anesthesiology</option><option value="2098">Dental Implants</option><option value="38">Endodontics</option><option value="2448">Functional Wellness</option><option value="29">General Dentistry</option><option value="2103">Implant Dentistry</option><option value="809">Oral and Maxillofacial Surgery</option><option value="2101">Oral Medicine</option><option value="2400">Oral Pathology</option><option value="99">Orthodontics</option><option value="115">
876Pediatric Dentistry</option><option value="68">Periodontics</option><option value="336">Prosthodontics</option><option value="2451">Sleep Dentistry</option><option value="2460">TMD</option><option value="2457">TMJ</option></select>									</label>
877				
878			</div>					<div class="directory-search-form__search-input mc_city select">
879														<label class="search-input-label" for="mc_city_19"><span class="visually-hidden">Location</span>
880				
881				<select name="mc_city[]" id="mc_city_19" class="postform header-search-select header-search-select--mc_city"><option value="0" selected="">Location</option><option value="acton">Acton</option><option value="amesbury">Amesbury</option><option value="andover">Andover</option><option value="arlington">Arlington</option><option value="ashland">Ashland</option><option value="bedford">Bedford</option><option value="bellingham">Bellingham</option><option value="belmont">Belmont</option><option value="beverly">Beverly</option><option value="billerica">Billerica</option><option value="boston">Boston</option><option value="braintree">Braintree</option><option value="brighton">Brighton</option><option value="brockton">Brockton</option><option value="brookline">Brookline</option><option value="burlington">Burlington</option><option value="cambridge">Cambridge</option><option value="canton">Canton</option><option value="chelmsford">Chelmsford</option><option value="chestnut-hill">Chestnut Hill</option><option value="cohasset">Cohasset</option><option value="concord">Concord</option><option value="danvers">Danvers</option><option value="dedham">Dedham</option><option value="dover">Dover</option><option value="easton">Easton</option><option value="everett">Everett</option><option value="foxboro">Foxboro</option><option value="framingham">Framingham</option><option value="franklin">Franklin</option><option value="hanover">Hanover</option><option value="haverhill">Haverhill</option><option value="hingham">Hingham</option><option value="holliston">Holliston</option><option value="hopkinton">Hopkinton</option><option value="hudson">Hudson</option><option value="ipswich">Ipswich</option><option value="lawrence">Lawrence</option><option value="lexington">Lexington</option><option value="lincoln">Lincoln</option><option value="littleton">Littleton</option><option value="lowell">Lowell</option><option value="lynn">Lynn</option><option value="lynnfield">Lynnfield</option><option value="malborough">Malborough</option><option value="malden">Malden</option><option value="mansfield">Mansfield</option><option value="marblehead">Marblehead</option><option value="marlborough">Marlborough</option><option value="marshfield">Marshfield</option><option value="maynard">Maynard</option><option value="medfield">Medfield</option><option value="medford">Medford</option><option value="melrose">Melrose</option><option value="methuen">Methuen</option><option value="middleboro">Middleboro</option><option value="middleton">Middleton</option><option value="milford">Milford</option><option value="milton">Milton</option><option value="natick">Natick</option><option value="needham">Needham</option><option value="needham-heights">Needham Heights</option><option value="newburyport">Newburyport</option><option value="newton">Newton</option><option value="newton-center">Newton Center</option><option value="newton-centre">Newton Centre</option><option value="newton-highlands">Newton Highlands</option><option value="newtonville">Newtonville</option><option value="north-andover">North Andover</option><option value="north-chelmsford">North Chelmsford</option><option value="north-easton">North Easton</option><option value="north-quincy">North Quincy</option><option value="north-reading">North Reading</option><option value="norwell">Norwell</option><option value="norwood">Norwood</option><option value="peabody">Peabody</option><option value="plainville">Plainville</option><option value="plymouth">Plymouth</option><option value="quincy">Quincy</option><option value="raynham">Raynham</option><option value="reading">Reading</option><option value="revere">Revere</option><option value="salem">Salem</option><option value="salisbury">Salisbury</option><option value="saugus">Saugus</option><option value="sharon">Sharon</option><option value="sherborn">Sherborn</option><option value="somerville">Somerville</option><option value="south-easton">South Easton</option><option value="south-weymouth">South Weymouth</option><option value="southborough">Southborough</option><option value="stoneham">Stoneham</option><option value="stoughton">Stoughton</option><option value="stow">Stow</option><option value="sudbury">Sudbury</option><option value="swampscott">Swampscott</option><option value="taunton">Taunton</option><option value="tewksbury">Tewksbury</option><option value="waban">Waban</option><option value="wakefield">Wakefield</option><option value="walpole">Walpole</option><option value="waltham">Waltham</option><option value="watertown">Watertown</option><option value="wayland">Wayland</option><option value="wellesley">Wellesley</option><option value="wellesley-hills">Wellesley Hills</option><option value="west-newton">West Newton</option><option value="west-roxbury">West Roxbury</option><option value="westford">Westford</option><option value="weston">Weston</option><option value="westwood">
881Westwood</option><option value="weymouth">Weymouth</option><option value="wilmington">Wilmington</option><option value="winchester">Winchester</option><option value="woburn">Woburn</option><option value="wrentham">Wrentham</option></select>									</label>
882				
883			</div>					<div class="directory-search-form__search-input s text">
884														<label class="search-input-label" for="s_19"><span class="visually-hidden">Search For...</span>
885				
886				<input id="s_19" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search For..." autocomplete="off"/>									</label>
887				
888			</div>			
889	
890	<input class="directory-search-form__submit-button" type="submit" value="Find" />
891
892	<a href="https://www.bostonmagazine.com/dentists" class="directory-search-form__see-all">See All</a>
893</form>
894</div>							</div>
895						</div>
896						<!-- .find-a-pro-overlay -->
897						</li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-43"><span class="button">Schools</span></button>						<div class="find-a-pro-overlay" id="js-find-a-pro-overlay-43" aria-hidden="true">
898						<div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine">
899
900						<button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-43" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button>
901						<div class="js-directory-form">
902<form id="directory-search-form_43" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/private-schools/" method="get">
903
904	
905		<div class="directory-search-form__search-input">
906						<label class="search-input-label" for="search-input_43">
907				<span class="visually-hidden">
908					Search for...				</span>
909				<input id="search-input_43" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search for..."/>
910		</div>
911
912	
913	
914	<input class="directory-search-form__submit-button" type="submit" value="Find" />
915
916	<a href="https://www.bostonmagazine.com/private-schools" class="directory-search-form__see-all">See All</a>
917</form>
918</div>							</div>
919						</div>
920						<!-- .find-a-pro-overlay -->
921						</li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-47"><span class="button">Home Design</span></button>						<div class="find-a-pro-overlay" id="js-find-a-pro-overlay-47" aria-hidden="true">
922						<div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine">
923
924						<button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-47" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button>
925						<div class="js-directory-form">
926<form id="directory-search-form_47" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/home-design/" method="get">
927
928	
929		<div class="directory-search-form__search-input">
930						<label class="search-input-label" for="search-input_47">
931				<span class="visually-hidden">
932					Search for...				</span>
933				<input id="search-input_47" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search for..."/>
934		</div>
935
936	
937	
938	<input class="directory-search-form__submit-button" type="submit" value="Find" />
939
940	<a href="https://www.bostonmagazine.com/home-design" class="directory-search-form__see-all">See All</a>
941</form>
942</div>							</div>
943						</div>
944						<!-- .find-a-pro-overlay -->
945						</li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-51"><span class="button">Real Estate</span></button>						<div class="find-a-pro-overlay" id="js-find-a-pro-overlay-51" aria-hidden="true">
946						<div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine">
947
948						<button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-51" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button>
949						<div class="js-directory-form">
950<form id="directory-search-form_51" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/real-estate-agents/" method="get">
951
952	
953		<div class="directory-search-form__search-input">
954						<label class="search-input-label" for="search-input_51">
955				<span class="visually-hidden">
956					Search for...				</span>
957				<input id="search-input_51" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search for..."/>
958		</div>
959
960	
961	
962	<input class="directory-search-form__submit-button" type="submit" value="Find" />
963
964	<a href="https://www.bostonmagazine.com/real-estate-agents" class="directory-search-form__see-all">See All</a>
965</form>
966</div>							</div>
967						</div>
968						<!-- .find-a-pro-overlay -->
969						</li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-67"><span class="button">Lawyers</span></button>						<div class="find-a-pro-overlay" id="js-find-a-pro-overlay-67" aria-hidden="true">
970						<div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine">
971
972						<button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-67" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button>
973						<div class="js-directory-form">
974<form id="directory-search-form_67" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/lawyers/" method="get">
975
976						<div class="directory-search-form__search-input cat select">
977														<label class="search-input-label" for="cat_67"><span class="visually-hidden">Specialty</span>
978				
979				<select name="cat[]" id="cat_67" class="postform header-search-select header-search-select--cat"><option value="0" selected="">Specialty</option><option value="127">Antitrust Law</option><option value="102">Appellate Law</option><option value="117">Arbitration And Mediation</option><option value="161">Attorneys for Nonprofits</option><option value="143">Aviation</option><option value="115">Banking And Financial</option><option value="88">Bankruptcy And Workout</option><option value="122">Business Law</option><option value="79">Civil Law Litigation</option><option value="50">Civil Rights</option><option value="47">Class Action</option><option value="105">Commercial Litigation</option><option value="99">Construction</option><option value="164">Consumer Debt</option><option value="84">Corporate Counsel</option><option value="31">Corporate Law</option><option value="55">
979Criminal Defense</option><option value="23">Criminal Defense/White Collar</option><option value="107">Education</option><option value="57">Elder Law</option><option value="136">Eminent Domain</option><option value="315">Energy/Oil and Gas</option><option value="320">Family Law</option><option value="63">First Amendment and Media</option><option value="167">Gaming Law</option><option value="128">Government And Administrative</option><option value="159">Healthcare Law</option><option value="93">Immigration Law</option><option value="110">Insurance</option><option value="87">Intellectual Property Rights</option><option value="341">International Law</option><option value="96">Labor And Employment</option><option value="317">Land Use/Environmental</option><option value="155">Medical Malpractice (Defense)</option><option value="153">Medical Malpractice (Plaintiff)</option><option value="40">Personal Injury</option><option value="116">Product Liability</option><option value="158">Professional Malpractice (Non-Medical Defense)</option><option value="337">Real Estate (Commercial)</option><option value="340">Real Estate (Residential)</option><option value="90">Securities Law</option><option value="137">Sports Law</option><option value="71">Tax Law</option><option value="162">Technology/Virtual</option><option value="45">Trusts and Estates</option><option value="62">Whistleblowers</option><option value="168">Workers&#039; Compensation</option></select>									</label>
980				
981			</div>					<div class="directory-search-form__search-input s text">
982														<label class="search-input-label" for="s_67"><span class="visually-hidden">Search</span>
983				
984				<input id="s_67" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search" autocomplete="off"/>									</label>
985				
986			</div>			
987	
988	<input class="directory-search-form__submit-button" type="submit" value="Find" />
989
990	<a href="https://www.bostonmagazine.com/lawyers" class="directory-search-form__see-all">See All</a>
991</form>
992</div><div class="bdoctors-search-sponsor-hm" id="hmbg-bdocs">
993	<a href="https://www.rubinrudman.com/2024-boston-magazines-top-lawyers-list/?utm_source=bostonmagazine&utm_campaign=findit-lawyers&utm_term=dec2024" id="find-mme-specialist" target="_blank">
994		<span class="search-sponsor-cta-text">Find a lawyer Today</span>
995		<em>Brought to you by</em>
996		<img src="https://www.bostonmagazine.com/wp-content/uploads/sites/2/2024/12/rubin-rudman-homepage-placement.png" id="logo-lawyers" alt="Rubin and Rudman - logo"/>
997	</a>
998</div>
999							</div>
1000						</div>
1001						<!-- .find-a-pro-overlay -->
1002						</li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-69"><span class="button">Mortgages</span></button>						<div class="find-a-pro-overlay" id="js-find-a-pro-overlay-69" aria-hidden="true">
1003						<div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine">
1004
1005						<button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-69" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button>
1006						<div class="js-directory-form">
1007<form id="directory-search-form_69" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/mortgage-lenders/" method="get">
1008
1009	
1010		<div class="directory-search-form__search-input">
1011						<label class="search-input-label" for="search-input_69">
1012				<span class="visually-hidden">
1013					Search for...				</span>
1014				<input id="search-input_69" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search for..."/>
1015		</div>
1016
1017	
1018	
1019	<input class="directory-search-form__submit-button" type="submit" value="Find" />
1020
1021	<a href="https://www.bostonmagazine.com/mortgage-lenders" class="directory-search-form__see-all">See All</a>
1022</form>
1023</div>							</div>
1024						</div>
1025						<!-- .find-a-pro-overlay -->
1026						</li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-74"><span class="button">Senior Living</span></button>						<div class="find-a-pro-overlay" id="js-find-a-pro-overlay-74" aria-hidden="true">
1027						<div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine">
1028
1029						<button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-74" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button>
1030						<div class="js-directory-form">
1031<form id="directory-search-form_74" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/senior-living/" method="get">
1032
1033						<div class="directory-search-form__search-input s text">
1034														<label class="search-input-label" for="s_74"><span class="visually-hidden">Search For...</span>
1035				
1036				<input id="s_74" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search For..." autocomplete="off"/>									</label>
1037				
1038			</div>					<div class="directory-search-form__search-input cat select">
1039														<label class="search-input-label" for="cat_74"><span class="visually-hidden">Category</span>
1040				
1041				<select name="cat[]" id="cat_74" class="postform header-search-select header-search-select--cat"><option value="0" selected="">Category</option><option value="140">Assisted Living</option><option value="139">Home Healthcare</option><option value="21">Independent Living</option><option value="122">Memory Care</option><option value="182">Personal Care</option></select>									</label>
1042				
1043			</div>			
1044	
1045	<input class="directory-search-form__submit-button" type="submit" value="Find" />
1046
1047	<a href="https://www.bostonmagazine.com/senior-living" class="directory-search-form__see-all">See All</a>
1048</form>
1049</div>							</div>
1050						</div>
1051						<!-- .find-a-pro-overlay -->
1052						</li>			</ul>
1053		</div>
1054	</div>
1055</div>
1056
1057	<div align="center" data-freestar-ad="__320x100 __970x250" id="bostonmagazine_banner-2" class="gpt-ad advertisement container">
1058	
1058<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
1059	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_banner", slotId: "bostonmagazine_banner-2" });
1060	</script>
1060
1061	</div>
1062	<div class="container">
1063	<h2 class="title-line">Latest Stories</h2>	<div class="content-with-sidebar">
1064
1065		<div class="list-content">
1066			<div class="list-post">
1067
1068	<a href="https://www.bostonmagazine.com/news/2026/09/29/massachusetts-best-state-data/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="Massachusetts license plate with the custom text &quot;NUMBAH 1!&quot; in red letters, featuring the phrases &quot;The Spirit of America&quot; and &quot;MASSHOLE&quot; on the frame. The plate has an October registration sticker and a blue sticker with the number 26." decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_BostonMagazineOctober2026-cover-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_BostonMagazineOctober2026-cover-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_BostonMagazineOctober2026-cover-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_BostonMagazineOctober2026-cover-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_BostonMagazineOctober2026-cover-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px )  / 3 ), (max-width: 1023px) calc( ( 100vw - 30px )  / 3 ), 217px" /></a>
1069	<div class="list-post-card">
1070		<a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a>		<h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/29/massachusetts-best-state-data/"><p>We&#8217;re No. 1! Obviously.</p></a></h2>
1071		<div class="post-excerpt">
1072			<p>
1073			<p>Sure, Massachusetts gives us plenty to complain about. But from schools and healthcare to sports and Dunkin’, here are 61 reasons we’re still awfully hard to beat.</p>
1074</p>
1075		</div>
1076		<span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/david-s-bernstein/" class="byline">David S. Bernstein</a></span>	</div>
1077</div>
1078<div class="list-post">
1079
1080	<a href="https://www.bostonmagazine.com/news/2026/09/29/best-dentists-greater-boston/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="A dentist wearing blue scrubs and gloves is examining a female patient with long blonde hair seated in a dental chair. The dentist is holding a dental mirror and an instrument while the patient has her mouth open. The dental office is clean and modern with white cabinets and dental equipment visible." decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_GettyImages-2227218644-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_GettyImages-2227218644-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_GettyImages-2227218644-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_GettyImages-2227218644-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_GettyImages-2227218644-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px )  / 3 ), (max-width: 1023px) calc( ( 100vw - 30px )  / 3 ), 217px" /></a>
1081	<div class="list-post-card">
1082		<a href="https://www.bostonmagazine.com/category/news/" class="post-slug">News</a>		<h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/29/best-dentists-greater-boston/"><p>Our All-New List of Top Dentists in Greater Boston Is Here</p></a></h2>
1083		<div class="post-excerpt">
1084			<p>
1085			<p class="p1"><span class="s1">Our just-released list of the </span><span class="s2">796 best dentists</span><span class="s1"> in the region—from generalists to orthodontists to pediatric specialists—as chosen by their peers.</span></p>
1086</p>
1087		</div>
1088		<span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/ibostoni-magazine-staff/" class="byline">Boston magazine staff</a></span>	</div>
1089</div>
1090<div class="list-post">
1091
1092	<a href="https://www.bostonmagazine.com/news/therians-identity/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_therians_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_therians_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_therians_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_therians_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_therians_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px )  / 3 ), (max-width: 1023px) calc( ( 100vw - 30px )  / 3 ), 217px" /></a>
1093	<div class="list-post-card">
1094		<a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a>		<h2 class="post-title"><a href="https://www.bostonmagazine.com/news/therians-identity/"><p>Meet the Kids Who Identify as Animals</p></a></h2>
1095		<div class="post-excerpt">
1096			<p>
1097			<p class="p1">
1097A rising subculture of kids says they don’t feel entirely human. Here’s what their parents are learning to do with that.</p>
1098</p>
1099		</div>
1100			</div>
1101</div>
1102<div align="center" data-freestar-ad="__336x280 __605x271" id="bostonmagazine_native_river-0" class="gpt-ad native-river">
1103	
1103<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
1104	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_native_river", slotId: "bostonmagazine_native_river-0" });
1105	</script>
1105
1106	</div><div class="list-post">
1107
1108	<a href="https://www.bostonmagazine.com/news/2026/09/24/why-do-we-call-it-a-packie/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_backpage_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_backpage_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_backpage_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_backpage_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_backpage_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px )  / 3 ), (max-width: 1023px) calc( ( 100vw - 30px )  / 3 ), 217px" /></a>
1109	<div class="list-post-card">
1110		<a href="https://www.bostonmagazine.com/category/opinion/humor/" class="post-slug">Humor</a>		<h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/24/why-do-we-call-it-a-packie/"><p>Why Do We Call It a &#8220;Packie&#8221; When the Rest of the Country Calls It a &#8220;Liquor Store&#8221;?</p></a></h2>
1111		<div class="post-excerpt">
1112			<p>
1113			<p>The term comes from an 1890 Supreme Court decision allowing liquor to be shipped across state lines to &#8220;package stores.&#8221;</p>
1114</p>
1115		</div>
1116		<span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/steve-calechman/" class="byline">Steve Calechman</a></span>	</div>
1117</div>
1118<div class="list-post">
1119
1120	<a href="https://www.bostonmagazine.com/arts-entertainment/2026/09/23/jonathan-tucker-boston/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_hub_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_hub_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_hub_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_hub_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_hub_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px )  / 3 ), (max-width: 1023px) calc( ( 100vw - 30px )  / 3 ), 217px" /></a>
1121	<div class="list-post-card">
1122		<a href="https://www.bostonmagazine.com/category/qa/" class="post-slug">Q&amp;A</a>		<h2 class="post-title"><a href="https://www.bostonmagazine.com/arts-entertainment/2026/09/23/jonathan-tucker-boston/"><p>Jonathan Tucker Is Very Good at Playing Cops. He&#8217;s Also Being Sued Over a Weed Store.</p></a></h2>
1123		<div class="post-excerpt">
1124			<p>
1125			<p>The Charlestown native danced with Boston Ballet as a kid and currently plays a Boston police officer on Netflix’s <em>
1125I Will Find You</em>. His local cannabis dispensaries are also going to court over their name. He’d like to talk about the last one.</p>
1126</p>
1127		</div>
1128		<span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/jonathan-soroff/" class="byline">Jonathan Soroff</a></span>	</div>
1129</div>
1130<div class="nativo-section-front-1"></div><div class="list-post">
1131
1132	<a href="https://www.bostonmagazine.com/news/2026/09/20/networking-after-50-awkward/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat-600x400.jpg 600w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat.jpg 900w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px )  / 3 ), (max-width: 1023px) calc( ( 100vw - 30px )  / 3 ), 217px" /></a>
1133	<div class="list-post-card">
1134		<a href="https://www.bostonmagazine.com/category/opinion/personal-essay/" class="post-slug">Personal Essay</a>		<h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/20/networking-after-50-awkward/"><p>A Wildly Inefficient Man’s Guide to Networking</p></a></h2>
1135		<div class="post-excerpt">
1136			<p>
1137			<p>The career coach said it’s never too late to reconnect with colleagues. Our columnist, 30-plus years into his professional life, decided to find out.</p>
1138</p>
1139		</div>
1140		<span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/steve-calechman/" class="byline">Steve Calechman</a></span>	</div>
1141</div>
1142		</div>
1143
1144		<div class="advertisement-side">
1145			<div class="sticky"><div align="center" data-freestar-ad="__336x280 __300x600" id="bostonmagazine_rail-1" class="gpt-ad freestar-sticky">
1146	
1146<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
1147	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_rail", slotId: "bostonmagazine_rail-1" });
1148	</script>
1148
1149	</div></div>		</div>
1150	</div>
1151</div>
1152
1153	<div class="container post-article-container">
1154	<hr class="double">
1155	<div class="newsletter">
1156		<h2 class="newsletter-title">
1157			Get a compelling long read and must-have lifestyle tips in your inbox every Sunday morning — great with coffee!		</h2>
1158		<div class="newsletter-inner">
1159			<div class="hbspt-form js-hubspot-newsletter"></div>
1160		</div>
1161	</div>
1162</div>
1163
1164		<div class="three-column-module container">
1165		<h2 class="title-line">In This Section</h2>
1166		<div class="grid-content with-separator">
1167			<div class="grid-post"><a href="https://www.bostonmagazine.com/news/best-public-high-schools-boston-2026-2027-chart/" class="grid-post-card-link"><span class="post-image-link"><img class="lazyload" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_GettyImages-184996589.jpg" alt="The Top Public High Schools in Greater Boston, Ranked" /></span><h3 class="post-title">The Top Public High Schools in Greater Boston, Ranked</h3></a><div class="guide-list"><p>We crunched the numbers to come up with our annual guide to the top-performing schools in the region.</p>
1168</div></div><div class="grid-post"><a href="https://www.bostonmagazine.com/boston-power-list-2026/" class="grid-post-card-link"><span class="post-image-link"><img class="lazyload" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/05/1200x800_150-featured-image.jpg" alt="The 150 Most Influential Bostonians" /></span><h3 class="post-title">The 150 Most Influential Bostonians</h3></a><div class="guide-list"><p><span style="font-weight: 400">Power looks different in every town. </span>Ours comes with lab coats, a Bakemas cookie, and 351 town names in alphabetical order.</p>
1169</div></div><div class="grid-post"><div align="center" data-freestar-ad="__372x409 __300x390" id="bostonmagazine_curated_module-1" class="gpt-ad">
1170	
1170<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
1171	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_curated_module", slotId: "bostonmagazine_curated_module-1" });
1172	</script>
1172
1173	</div></div>		</div>
1174	</div>
1175	
1176	<div class="container">
1177	<hr class="double">	<div class="content-with-sidebar">
1178
1179		<div class="list-content">
1180			<div class="list-post">
1181
1182	<a href="https://www.bostonmagazine.com/news/2026/09/13/boston-greek-restaurant-feud-lawsuit-xenia-krasi/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_fea_greekfeud_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_fea_greekfeud_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_fea_greekfeud_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_fea_greekfeud_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_fea_greekfeud_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px )  / 3 ), (max-width: 1023px) calc( ( 100vw - 30px )  / 3 ), 217px" /></a>
1183	<div class="list-post-card">
1184		<a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a>		<h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/13/boston-greek-restaurant-feud-lawsuit-xenia-krasi/"><p>Inside Boston&#8217;s Great Greek Restaurant Feud</p></a></h2>
1185		<div class="post-excerpt">
1186			<p>
1187			<p>George Aboujaoude hired Demetri Tsolakis, and together they built one of the Seaport’s first great restaurants. Then Tsolakis went out on his own and built one of the best Greek restaurant groups in America. Now they’re battling in court—and neither of them is backing down.</p>
1188</p>
1189		</div>
1190		<span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/wyndham-lewis/" class="byline">Wyndham Lewis</a></span>	</div>
1191</div>
1192<div class="list-post">
1193
1194	<a href="https://www.bostonmagazine.com/education/2026/09/08/why-you-should-have-college-roommates/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_college_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_college_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_college_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_college_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_college_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px )  / 3 ), (max-width: 1023px) calc( ( 100vw - 30px )  / 3 ), 217px" /></a>
1195	<div class="list-post-card">
1196		<a href="https://www.bostonmagazine.com/category/opinion/" class="post-slug">Opinion</a>		<h2 class="post-title"><a href="https://www.bostonmagazine.com/education/2026/09/08/why-you-should-have-college-roommates/"><p>Why You Should Have Roommates in College</p></a></h2>
1197		<div class="post-excerpt">
1198			<p>
1199			<p>As loneliness among students reaches crisis levels, one writer’s case for not rooming alone—and the real education that happens after midnight.</p>
1200</p>
1201		</div>
1202		<span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/john-d-spooner/" class="byline">John D. Spooner</a></span>	</div>
1203</div>
1204<div align="center" data-freestar-ad="__336x280 __605x271" id="bostonmagazine_native_river-1" class="gpt-ad native-river">
1205	
1205<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
1206	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_native_river", slotId: "bostonmagazine_native_river-1" });
1207	</script>
1207
1208	</div><div class="list-post">
1209
1210	<a href="https://www.bostonmagazine.com/news/2026/09/03/ed-markey-interview-2026/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="An older man with white hair wearing a dark blue suit, white shirt, and blue patterned tie is standing behind a wooden podium, smiling and pointing forward. The background includes an American flag and blurred elements suggesting a formal setting." srcset="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/03/GettyImages-2206451078.jpg" data-srcset="" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px )  / 3 ), (max-width: 1023px) calc( ( 100vw - 30px )  / 3 ), 217px" /></a>
1211	<div class="list-post-card">
1212		<a href="https://www.bostonmagazine.com/category/qa/" class="post-slug">Q&amp;A</a>		<h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/03/ed-markey-interview-2026/"><p>Ed Markey Is a “Walking, Talking Antidepressant&#8221;</p></a></h2>
1213		<div class="post-excerpt">
1214			<p>
1215			<p>The Senator would rather talk about Donald Trump than his 2026 primary challenger.</p>
1216</p>
1217		</div>
1218		<span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/jonathan-soroff/" class="byline">Jonathan Soroff</a></span>	</div>
1219</div>
1220<div class="list-post">
1221
1222	<a href="https://www.bostonmagazine.com/news/2026/09/01/is-college-still-worth-it/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="A blue graduation cap with a tassel, featuring the words &quot;NOW WHAT?&quot; written in white on the top, set against a white background with the word &quot;Boston&quot; partially visible in large blue letters behind it." decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px )  / 3 ), (max-width: 1023px) calc( ( 100vw - 30px )  / 3 ), 217px" /></a>
1223	<div class="list-post-card">
1224		<a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a>		<h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/01/is-college-still-worth-it/"><p>The Great College Reckoning: Is Higher Education Still Worth It?</p></a></h2>
1225		<div class="post-excerpt">
1226			<p>
1227			<p>The deal was simple: pay for the degree, get a good job. But now AI, school closures, and a shrinking number of students are breaking that contract—and no American city has more riding on what happens next than ours.</p>
1228</p>
1229		</div>
1230		<span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/jason-schwartz/" class="byline">Jason Schwartz</a></span>	</div>
1231</div>
1232<div class="nativo-section-front-2"></div><div class="list-post">
1233
1234	<a href="https://www.bostonmagazine.com/news/best-public-high-schools-boston-2026-2027-chart/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="Stone archway above a doorway with the words &quot;PUBLIC SCHOOL&quot; carved into it, set in a brick building with three white-framed windows above." decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px )  / 3 ), (max-width: 1023px) calc( ( 100vw - 30px )  / 3 ), 217px" /></a>
1235	<div class="list-post-card">
1236		<a href="https://www.bostonmagazine.com/category/news/" class="post-slug">News</a>		<h2 class="post-title"><a href="https://www.bostonmagazine.com/news/best-public-high-schools-boston-2026-2027-chart/"><p>The Top Public High Schools in Greater Boston, Ranked for 2026</p></a></h2>
1237		<div class="post-excerpt">
1238			<p>
1239			<p><span class="s1">We crunched the numbers to come up with our guide to the region’s top-performing schools. Does your town make the grade?</span></p>
1240</p>
1241		</div>
1242			</div>
1243</div>
1244		</div>
1245
1246		<div class="advertisement-side">
1247			<div class="sticky"><div align="center" data-freestar-ad="__336x280 __300x600" id="bostonmagazine_rail-2" class="gpt-ad freestar-sticky">
1248	
1248<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
1249	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_rail", slotId: "bostonmagazine_rail-2" });
1250	</script>
1250
1251	</div></div>		</div>
1252	</div>
1253</div>
1254
1255		<div class="three-column-module container">
1256		<h2 class="title-line"></h2>
1257		<div class="grid-content with-separator">
1258			<div class="grid-post"><a href="https://www.bostonmagazine.com/best-of-boston/" class="grid-post-card-link"><span class="post-image-link"><img class="lazyload" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/06/Best-of-Boston-2026.jpg" alt="Best of Boston 2026" /></span><h3 class="post-title">Best of Boston 2026</h3></a><div class="guide-list"><p>Our annual group love letter to the 250-plus things that are absolutely superlative about this city.</p>
1259</div></div><div class="grid-post"><a href="https://www.bostonmagazine.com/tag/the-salty-cod/" class="grid-post-card-link"><span class="post-image-link"><img class="lazyload" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2025/01/Driveway-Shovelerfeat.jpg" alt="The Salty Cod: A Column" /></span><h3 class="post-title">The Salty Cod: A Column</h3></a><div class="guide-list"><p>Humorist Steve Calechman grapples with your uniquely New England dilemmas.</p>
1260</div></div><div class="grid-post"><div align="center" data-freestar-ad="__372x409 __300x390" id="bostonmagazine_curated_module-2" class="gpt-ad">
1261	
1261<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
1262	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_curated_module", slotId: "bostonmagazine_curated_module-2" });
1263	</script>
1263
1264	</div></div>		</div>
1265	</div>
1266	
1267	<div class="container">
1268	<hr class="double">	<div class="content-with-sidebar">
1269
1270		<div class="list-content">
1271			<div class="list-post">
1272
1273	<a href="https://www.bostonmagazine.com/news/2026/08/23/massachusetts-state-flag/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_flags_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_flags_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_flags_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_flags_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_flags_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px )  / 3 ), (max-width: 1023px) calc( ( 100vw - 30px )  / 3 ), 217px" /></a>
1274	<div class="list-post-card">
1275		<a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a>		<h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/08/23/massachusetts-state-flag/"><p>Why Can&#8217;t Massachusetts Make a Good State Flag?</p></a></h2>
1276		<div class="post-excerpt">
1277			<p>
1278			<p>Maine rebranded itself with one of the country’s most beloved flags. Massachusetts has held two commissions and produced reports, surveys, scoring systems, finalists, and no flags. What gives?</p>
1279</p>
1280		</div>
1281		<span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/jason-schwartz/" class="byline">Jason Schwartz</a></span>	</div>
1282</div>
1283<div class="list-post">
1284
1285	<a href="https://www.bostonmagazine.com/news/2026/08/16/cape-cod-rescue-story-wellfleet-navy-wreck/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_capecod_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_capecod_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_capecod_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_capecod_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_capecod_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px )  / 3 ), (max-width: 1023px) calc( ( 100vw - 30px )  / 3 ), 217px" /></a>
1286	<div class="list-post-card">
1287		<a href="https://www.bostonmagazine.com/category/opinion/personal-essay/" class="post-slug">Personal Essay</a>		<h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/08/16/cape-cod-rescue-story-wellfleet-navy-wreck/"><p>Adrift off Wellfleet: A Cape Cod Coming-of-Age Story</p></a></h2>
1288		<div class="post-excerpt">
1289			<p>
1290			<p>Four teenagers set out for a sunken Navy wreck off Eastham. The trip did not go as planned.</p>
1291</p>
1292		</div>
1293		<span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/beth-mccullough-kerner/" class="byline">Beth McCullough-Kerner</a></span>	</div>
1294</div>
1295<div align="center" data-freestar-ad="__336x280 __605x271" id="bostonmagazine_native_river-2" class="gpt-ad native-river">
1296	
1296<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
1297	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_native_river", slotId: "bostonmagazine_native_river-2" });
1298	</script>
1298
1299	</div><div class="list-post">
1300
1301	<a href="https://www.bostonmagazine.com/education/2026/08/09/private-school-admissions/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-600x400.jpg 600w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat.jpg 900w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px )  / 3 ), (max-width: 1023px) calc( ( 100vw - 30px )  / 3 ), 217px" /></a>
1302	<div class="list-post-card">
1303		<a href="https://www.bostonmagazine.com/category/opinion/personal-essay/" class="post-slug">Personal Essay</a>		<h2 class="post-title"><a href="https://www.bostonmagazine.com/education/2026/08/09/private-school-admissions/"><p>What It Actually Takes to Apply to Private School</p></a></h2>
1304		<div class="post-excerpt">
1305			<p>
1306			<p>The admissions race means SSAT tutors, educational consultants, Zoom meetings, and mahjong nights. For one mom, at least, the actual acceptance was the easiest part.</p>
1307</p>
1308		</div>
1309		<span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/brittany-kooienga/" class="byline">Brittany Kooienga</a></span>	</div>
1310</div>
1311<div class="nativo-section-front-3"></div><div class="list-post">
1312
1313	<a href="https://www.bostonmagazine.com/news/top-hospitals-greater-boston/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px )  / 3 ), (max-width: 1023px) calc( ( 100vw - 30px )  / 3 ), 217px" /></a>
1314	<div class="list-post-card">
1315		<a href="https://www.bostonmagazine.com/category/guides/" class="post-slug">Guides</a>		<h2 class="post-title"><a href="https://www.bostonmagazine.com/news/top-hospitals-greater-boston/"><p>Greater Boston&#8217;s Top Hospitals: Our First Directory Is Here</p></a></h2>
1316		<div class="post-excerpt">
1317			<p>
1318			<p>Our inaugural guide to the region&#8217;s most excellent care.</p>
1319</p>
1320		</div>
1321			</div>
1322</div>
1323<span class="pagination"><span class="page-numbers current">1</span><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/2/"> 2 </a><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/3/"> 3 </a><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/4/"> 4 </a><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/5/"> 5 </a><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/6/"> 6 </a><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/7/"> 7 </a><a href=https://www.bostonmagazine.com/news/page/2/ class="next page-numbers" > > </a><a href=https://www.bostonmagazine.com/news/page/15/ class="last page-numbers"> >> </a></span><div class="post-navigation"></div>		</div>
1324
1325		<div class="advertisement-side">
1326			<div class="sticky"><div align="center" data-freestar-ad="__336x280 __300x600" id="bostonmagazine_rail-3" class="gpt-ad freestar-sticky">
1327	
1327<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
1328	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_rail", slotId: "bostonmagazine_rail-3" });
1329	</script>
1329
1330	</div></div>		</div>
1331	</div>
1332</div>
1333
1334	<div align="center" data-freestar-ad="__320x100 __970x250" id="bostonmagazine_banner-3" class="gpt-ad advertisement container">
1335	
1335<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
1336	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_banner", slotId: "bostonmagazine_banner-3" });
1337	</script>
1337
1338	</div>
1339
1340
1341<footer class="site-footer" role="contentinfo" id="js-footer">
1342	<div class="footer-navigation"><ul id="menu-footer-menu" class="menu-footer-main container"><li id="menu-item-174641" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-174641"><a href="https://www.bostonmagazine.com/about/">About</a></li>
1343<li id="menu-item-203231" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-203231"><a href="https://www.bostonmagazine.com/contact/">Contact</a></li>
1344<li id="menu-item-461741" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-461741"><a href="https://www.bostonmagazine.com/masthead/">Masthead</a></li>
1345<li id="menu-item-174651" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-174651"><a href="https://w1.buysub.com/pubs/BM/BOS/BOS_sub.jsp?cds_page_id=270289&#038;cds_mag_code=BOS&#038;id=1739901742813&#038;lsid=50491202228084314&#038;vid=1">Subscribe</a></li>
1346<li id="menu-item-174671" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-174671"><a href="/boston-magazine-media-kit/">Advertise</a></li>
1347<li id="menu-item-174661" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-174661"><a href="https://bostonglobemedia.cloud.buysub.com">Customer Service</a></li>
1348<li id="menu-item-2323712" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2323712"><a href="https://www.bostonmagazine.com/careers/">Careers and Internships at Boston Magazine</a></li>
1349<li id="menu-item-174681" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-174681"><a href="https://www.bostonglobe.com/about/help/privacy-policy/">Privacy Policy</a></li>
1350<li id="menu-item-2796278" class="ot-info-display menu-item menu-item-type-custom menu-item-object-custom menu-item-2796278"><a href="#">Your Privacy Choices</a></li>
1351</ul></div>	<div class="site-footer-inner container">
1352		<a href="https://www.bostonmagazine.com" class="footer-logo" aria-label="Boston Magazine">
1353			<span><svg class="mc-icon bostonmagazine-logo" aria-hidden="true"><title>Boston Magazine</title><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790714179#mc-icon-bostonmagazine-logo"></svg></span>
1354		</a>
1355		<ul id="menu-social-2" class="menu-footer-social"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351226"><a target="_blank" href="https://www.facebook.com/bostonmagazine"><span class="screen-reader-text">Facebook</span></a></li>
1356<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351228"><a target="_blank" href="https://www.instagram.com/bostonmagazine/"><span class="screen-reader-text">Instagram</span></a></li>
1357<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351231"><a target="_blank" href="https://www.twitter.com/bostonmagazine"><span class="screen-reader-text">Twitter</span></a></li>
1358</ul>		<p class="footer-copyright">&copy;2026 Boston Globe Media Partners, LLC</p>
1359	</div>
1360	</footer>
1361
1362<div class="container" id="gutter-container"></div>
1363
1364<script type="speculationrules">
1365{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/sites/2/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/metrocorp-bostonmagazine/*","/wp-content/themes/metrocorp/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
1366</script>
1366
1367<button id="pmLink">Privacy Manager</button>		
1367<script type="text/javascript" id="ot-manage-links">
1368			const otDisplayClassEl = document.getElementsByClassName("ot-info-display");
1369			for ( const otLinkEl of otDisplayClassEl ) {
1370				let otLinks = otLinkEl.getElementsByTagName("a");
1371				for ( const otLinkEl of otLinks ) {
1372					let otLinkElAttr = otLinkEl.getAttribute("href")
1373					if( otLinkElAttr === "#" ) {
1374						otLinkEl.addEventListener( "click", function() {
1375							OneTrust.ToggleInfoDisplay();
1376							event.preventDefault();
1377						});
1378					}
1379				}
1380			}
1381		</script>
1381
1382		
1382<script id="mc-breaking-news-banner-script-js" src="https://bomag.o0bc.com/wp-content/mu-plugins/metrocorp-breakingnewsbanner/assets/js/breaking-news-bar.js?ver=1"></script>
vendor: 1 bytes, line 1382
1382
1383<script id="metrocorp-js-extra">
1384var mcGlobal = {"isSingle":"","directoryName":"Boston Magazine"};
1385//# sourceURL=metrocorp-js-extra
1386</script>
vendor: 1 bytes, line 1386
1386
1387<script id="metrocorp-js" src="https://bomag.o0bc.com/wp-content/themes/metrocorp/dist/js/metrocorp.min.js?ver=1790714179" defer></script>
vendor: 1 bytes, line 1387
1387
1388<script id="metrocorp-secondary-js" src="https://bomag.o0bc.com/wp-content/themes/metrocorp/dist/js/metrocorp-secondary.min.js?ver=1790714179" defer></script>
vendor: 1 bytes, line 1388
1388
1389<script type="text/plain" src="https://bomag.o0bc.com/wp-content/mu-plugins/metrocorp-ads//dist/js/metrocorp-ads-secondary.js?ver=88982254c2d846b515d0"  id="metrocorp-ads-secondary" class="optanon-category-C0004"></script>
1389<script type="text/plain" src="//js.hsforms.net/forms/v2.js?ver=1.0.0"  id="mc-integrations-hubspot" class="optanon-category-C0004"></script>
1389<script id="mc-hubspot-subscription-form-js-extra">
1390var mcHubSpot = {"portalId":"43837035","formId":"bfc3022c-8482-4600-8cb5-1f8e1b257cd2","isSingle":"false","title":"","vertical":""};
1391//# sourceURL=mc-hubspot-subscription-form-js-extra
1392</script>
vendor: 1 bytes, line 1392
1392
1393<script type="text/plain" src="https://bomag.o0bc.com/wp-content/mu-plugins/metrocorp-hubspot/assets/js/metrocorp-hubspot-subscription-form.js?ver=1790714175"  id="mc-hubspot-subscription-form" class="optanon-category-C0004"></script>
1393<script id="wp-emoji-settings" type="application/json">
1394{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://cdn10.bostonmagazine.com/wp-includes/js/wp-emoji-release.min.js?ver=7.1.2"}}
1395</script>
vendor: 1 bytes, line 1395
1395
1396<script type="module">
1397/*! This file is auto-generated */
1398var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
1399//# sourceURL=https://www.bostonmagazine.com/wp-includes/js/wp-emoji-loader.min.js
1400</script>
1400
1401<!-- Start of AdCellerant Embed Code -->
1402<script src="https://js.adsrvr.org/up_loader.1.1.0.js" type="text/plain" class="optanon-category-C0004"></script>
vendor: 1 bytes, line 1402
1402
1403<script type="text/plain" class="optanon-category-C0004">
1404	function initAdCellerant() {
1405		if (typeof ttd_dom_ready === 'undefined') {
1406			setTimeout(initAdCellerant, 100);
1407			return;
1408		}
1409		
1410		ttd_dom_ready(function() {
1411			if (typeof TTDUniversalPixelApi === 'function') {
1412				var universalPixelApi = new TTDUniversalPixelApi();
1413				universalPixelApi.init("1qqfa0h", ["g7kke2y"], "https://insight.adsrvr.org/track/up");
1414			}
1415		});
1416	}
1417	initAdCellerant();
1418</script>
1418
1419<!-- End of AdCellerant Embed Code -->
1420
1421	<div align="center" data-freestar-ad="" id="bostonmagazine_bottom-anchor" class="gpt-ad">
1422	
1422<script data-cfasync="false" type="text/plain" class="optanon-category-C0004">
1423	freestar.config.enabled_slots.push({ placementName: "bostonmagazine_bottom-anchor", slotId: "bostonmagazine_bottom-anchor" });
1424	</script>
1424
1425	</div>
1426<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"b9d80a2312","applicationID":"1078100099","transactionName":"ZFNbMkJTVxVYVRcMDV0ZehNDRlYLFmICHUIeFlQFHUZYHhRABhcWWlVYCg==","queueTime":0,"applicationTime":220,"atts":"SBRMRApJREobV0FfGU5L","errorBeacon":"bam.nr-data.net","agent":""}</script>
1426</body>
1427</html>
1428
1429<!-- plugin=object-cache-pro client=phpredis metric#hits=6732 metric#misses=207 metric#hit-ratio=97.0 metric#bytes=2594971 metric#prefetches=0 metric#store-reads=187 metric#store-writes=5 metric#store-hits=520 metric#store-misses=5 metric#sql-queries=3 metric#ms-total=267.64 metric#ms-cache=92.16 metric#ms-cache-avg=0.4825 metric#ms-cache-ratio=34.4 -->

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