RICHMOND — Rep. Dave Brat (R-Va.) is airing a TV ad that criticizes Democrat Abigail Spanberger’s positions on taxes, health care and “sanctuary cities” — and her campaign calls two out of the three untrue.

Locked in a tight race, both candidates and their allies are spending heavily on TV ads in the central Virginia district, which comprises rural areas and parts of Richmond and its suburbs.

Brat and Republican-aligned interest groups spent $363,275 on commercials last week alone, according to the nonpartisan Virginia Public Access Project. Spanberger and her allies spent $408,728 over the same period, some of it for an ad that features the mother of a diabetic son who criticizes Brat, saying he voted against protections for people with preexisting medical conditions.

The Brat ad says Spanberger would eliminate the tax cuts passed under President Trump, support sanctuary cities and hike health-care spending by $32 trillion, so much that it would “bankrupt Medicare as we know it.”

“What do we really know about Abigail Spanberger and her policies?” the ad begins. “Well, we know she’d eliminate the tax cuts that have helped Virginia families. We know she supports sanctuary cities in Virginia. And we know Spanberger’s health-care plan would bankrupt Medicare as we know it: a $32 trillion spending increase that would double our taxes. ”

Spanberger, a former CIA officer, has been on the record opposing Trump’s tax cuts, but she says she is opposed to sanctuary cities and supports a health-care plan that differs from the one Brat describes.

Spanberger says she wants “Medicare X,” a plan proposed by Sen. Tim Kaine (D-Va.) that would offer Medicare as an option on the health-insurance exchanges for non-elderly Americans. People could buy into a publicly provided insurance plan using the network of Medicare providers, at similar rates.

This is different from the Medicare-for-all plan advanced by Sen. Bernie Sanders (I-Vt.), which is often referred to as “single payer” and would make Medicare the basis for all health insurance. Some estimates put the cost of Sanders’s plan at $32 trillion.

Brat’s campaign notes that during a Democratic primary debate in May, Spanberger said she supported a single-payer system “in principle.”

In the same sentence, however, she said the Medicare X “public option” is the way to go.

“I do in principle support single payer, but I believe in universal coverage, through a public option, is the method that I would pursue,” she said.

The Brat campaign bases the sanctuary cities claim on a comment the blog Blue Virginia attributed to Spanberger last year.

“Ultimately, ‘sanctuary cities’ are a localities decision,” she is quoted saying. “It’s a decision that should be made between the localities and local law enforcement, in terms of what their capabilities are.”

Spanberger’s campaign said that she is opposed to sanctuary cities and that she was referring to a voluntary federal program known as 287(g), a section of the 2009 Immigration and Nationality Act. It deputizes local law enforcement officers to enforce federal immigration laws.

On Monday, Brat rolled out a new spot that said Spanberger was part of “a liberal mob” that shouted him down at a town hall meeting in Chesterfield last year. The ad tries to chip away at Spanberger’s image as a moderate.

Video from the event shows Spanberger sitting in the front row and responding as Brat asked the crowd a series of questions.

“How many people want to see individual income tax rate reductions for you in the room?” he says.

Spanberger shakes her head no.

“How many people want to see tax increases to fund more programs?”

Spanberger nods her head yes. Corporate tax rate reductions? She’s a no. More federal government regulation? She’s a yes.

“Although Abigail Spanberger claims to be above party labels and partisan politics, she can’t hide from the facts in this video: she’s on video visibly joining with a liberal mob trying to shout down Rep. Brat’s town hall in Chesterfield,” Brat spokeswoman Katey Price said in a statement.

In a statement, Spanberger spokesman Justin Jones said, “What this video really shows is Congressman Brat lecturing a room full of sitting people who were unhappy with his AHCA vote to strip protections for those with preexisting conditions and other votes that don’t align with 7th District values.”

Spanberger’s latest ad features Jody Cametas, identified as a Goochland mother and former Brat supporter who broke with the congressman after her 10-year-old was diagnosed with Type 1 diabetes.

“It’s so expensive that so many families are sharing supplies in order to make ends meet,” she says. “I feel betrayed by Dave Brat that voted against protections for preexisting conditions for families like mine. I voted for Dave Brat once. I will not make that mistake again. I’m voting for Abigail Spanberger.”

Price said the Spanberger ad relies on a procedural vote Brat took to bring the bill to the floor. Brat has said that the bill, which passed the House but died in the Senate, protected people with preexisting conditions.

The bill would have prevented insurers from denying coverage, but it would have allowed insurers to charge much higher premiums, independent fact-checkers found at the time.

Each side attempts to raise fears about the other in some of their ads, although Brat also tries to soften his Freedom Caucus image with a puppy-centric spot that shows him and his family frolicking on the floor with an assortment of puppies. “Dave Brat wrote bipartisan legislation to stop a federal agency from conducting cruel medical research on dogs because our tax dollars should never go to pay for something that’s cruel,” a narrator says.

Brat and Spanberger are in a close contest to represent the 7th Congressional District, a longtime GOP stronghold widely seen as within reach of Democrats in the Trump era. Brat won the seat four years ago after pulling off a shocking primary upset over Rep. Eric Cantor, then the House majority leader. The Cook Political Report classifies the race as a toss-up.