Connect with us

New Hampshire

$18.5M Rye home: Straws Point now boasts top 2 highest-priced home sales in NH history

Published

on

.5M Rye home: Straws Point now boasts top 2 highest-priced home sales in NH history


RYE — Straws Point has produced another member of the exclusive eight-figures single-family home club.

A five-bedroom, nine-bathroom residence on the Atlantic Ocean at 17 Straws Point has sold for $18.5 million, the second-highest-priced single-family home sale in New Hampshire history, according to Seacoast Board of Realtors statistician John Rice. 

In December 2022, the nearby home at 30 Straws Point sold for $25 million in an off-market closing, more than doubling the state record at the time, according to Rice. 

The waterfront Rye neighborhood has now claimed the top two spots in New Hampshire.

Advertisement

“I think this price point says more about the location and quality of the construction,” said Jim Giampa, co-owner of Carey and Giampa Realtors, whose firm brokered the transaction. “Just because a home is in the Seacoast region doesn’t mean it will command big dollars unless the location and property are exceptional. This area has plenty of room for buyers and sellers in all price ranges.”

The owner of 17 Straws Point originally listed the property last August for $25 million, attempting to fetch the same total as its former neighbors at 30 Straws Point. A listing price drop then brought the property down to $22 million. 

What is known about buyers of Straws Point homes in Rye

County deed records show the buyer of 17 Straws Point is Granite Shoals LLC. State business records do not identify the owner of the LLC, which was created at the start of May. Portsmouth attorney Douglas MacDonald is listed as its registered agent.

The seller of the estate was 17 Straws Point LLC, for which Michael Millward is the principal, according to state records.

Advertisement

More Seacoast real estate news: Newington home sells for record $5.25M while still under construction

A deed for the sale was filed with the county on Friday, May 17. 

A non-disclosure agreement prevented Giampa from identifying the buyers of 17 Straws Point. Giampa also represented the buyers of 30 Straws Point, Mary Lou and Peter LeSaffre, in late 2022.

“This is a really special home that was designed and constructed to take advantage of the amazing ocean views from Kittery to the Isle of Shoals to Cape Ann,” he said of the property. “Most of the custom features were crafted on-site by Houghton Builders so the quality of construction is extraordinary. It is equipped with everything you could want in an oceanfront estate (with) a gym, movie theater, wine cellar, infinity pool and more.”

The 17 Straws Point residence was built over the span of two years and was completed in 2018. The 10,000-plus-square-foot house contains a pool table, a wet bar, a fireplace, cathedral ceilings, a bathhouse, an outdoor patio and an elevator.

Advertisement

Rye property records show the town’s last assessment of the home valued it at almost $7.1 million.

Rice, statistician for the Seacoast Board of Realtors, cited New England Real Estate Network data to identify 17 Straws Point as the second-highest-selling single-family home in state history. He cautioned that those records do not account for properties sold by homeowners without the assistance of a licensed broker. 

Annual taxes on the property exceeded $48,000 in 2022, according to the listing. 

“Each room in this architectural gem showcases meticulous attention to detail, radiating sophistication and class,” the listing adds.

According to Rice, the current third-highest-priced single-family home sale in New Hampshire came in June 2023, when a Meredith residence on Lake Winnipesaukee sold for $14 million in an off-market deal.

Advertisement



Source link

New Hampshire

NH Supreme Court overturns conviction of man for voting in two states in 2016 election

Published

on

NH Supreme Court overturns conviction of man for voting in two states in 2016 election


NH Supreme Court overturns conviction of man for voting in two states in 2016 election

Advertisement

DOZENS OF LOCAL BUSINESSES. THE STATE SUPREME COURT HAS JUST OVERTURNED THE CONVICTION OF A MAN WHO. PROSECUTORS SAID VOTED IN THE 2016 GENERAL ELECTION IN MASSACHUSETTS AND IN NEW HAMPSHIRE. RICHARD ROSEN WAS CONVICTED IN 2024 ON A FELONY COUNT OF WRONGFUL VOTING, WHILE YESTERDAY’S RULING CONCLUDED THAT THE TRIAL COURT MADE A MISTAKE BY EXCLUDING EVIDENCE ABOUT ANOTHER MAN WHO ALLEGEDLY CONFESSED TO REPEATEDLY CASTING VOTES IN ROSEN’S NAME IN MASSACHUSETTS, PROSECUTORS WERE ALLOWED TO MENTION EVIDENCE OF SIX PRIOR INSTANCES IN WHICH VOTES WERE CAST IN ROSEN’S NAMES. IN BOTH STATES, THE STATE SUPREME COURT SAID. DOING SO DESPITE ROS

Advertisement

NH Supreme Court overturns conviction of man for voting in two states in 2016 election

Updated: 8:19 PM EDT Apr 10, 2026

Editorial Standards

Advertisement

The New Hampshire Supreme Court has overturned the conviction of a man who prosecutors say voted in the 2016 general election in Massachusetts and New Hampshire.Richard Rosen was convicted in 2024 on a felony count of wrongful voting.Thursday’s ruling concluded that the trial court made a mistake by excluding evidence about another man who allegedly confessed to repeatedly casting votes in Rosen’s name in Massachusetts.Prosecutors were allowed to mention evidence of six prior instances in which votes were cast in Rosen’s name in both states. The New Hampshire Supreme Court said that withholding evidence about another person voting in Rosen’s name unfairly prejudiced the jury.

The New Hampshire Supreme Court has overturned the conviction of a man who prosecutors say voted in the 2016 general election in Massachusetts and New Hampshire.

Advertisement

Richard Rosen was convicted in 2024 on a felony count of wrongful voting.

Thursday’s ruling concluded that the trial court made a mistake by excluding evidence about another man who allegedly confessed to repeatedly casting votes in Rosen’s name in Massachusetts.

Prosecutors were allowed to mention evidence of six prior instances in which votes were cast in Rosen’s name in both states.

Advertisement

The New Hampshire Supreme Court said that withholding evidence about another person voting in Rosen’s name unfairly prejudiced the jury.

Advertisement

`;
}

function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=” + Date.now();
}
}

function initializeWeatherBox(container) {
var containerId = container.getAttribute(“data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;

function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});

Advertisement

clickedElement.classList.add(‘open’);
clickedElement.setAttribute(‘aria-selected’, ‘true’);

container.querySelectorAll(‘[data-content-id]’).forEach(function(content) {
content.style.display = ‘none’;
content.setAttribute(‘hidden’, ‘true’);
});

var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}

function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}

var location = { zip: window.DEFAULT_ZIPCODE };

Advertisement

try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}

var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;

if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}

function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;

var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);

Advertisement

if (weatherData.alerts_count > 0) {
weatherWatchHeader.className=”weather-watch-header has-alerts”;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, “https://www.wmur.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘mobile-weather’, “https://www.wmur.com/alerts”);”);
}
} else {
weatherWatchHeader.className=”weather-watch-header”;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}

function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;

var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}

var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className=”weather-grid–current-icon weather-current-icon icon icon-weather-” + weatherData.current.icon_name;
}

var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}

Advertisement

var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}

var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}

updateWeatherBackground(weatherData.current.icon_name);
}
}

function updateWeatherBackground(iconName) {
try {
var bgPath = weatherImages.backgrounds[iconName] || weatherImages.backgrounds.unknown;
container.style.backgroundImage=”url(” + bgPath + ‘)’;
} catch (e) {
console.log(‘Error updating weather background:’, e);
}
}

function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;

Advertisement

if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html=””;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);

for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex

`;
}

function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=” + Date.now();
}
}

function initializeWeatherBox(container) {
var containerId = container.getAttribute(“data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;

Advertisement

function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});

clickedElement.classList.add(‘open’);
clickedElement.setAttribute(‘aria-selected’, ‘true’);

container.querySelectorAll(‘[data-content-id]’).forEach(function(content) {
content.style.display = ‘none’;
content.setAttribute(‘hidden’, ‘true’);
});

var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}

function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}

Advertisement

var location = { zip: window.DEFAULT_ZIPCODE };

try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}

var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;

if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}

function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;

Advertisement

var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);

if (weatherData.alerts_count > 0) {
weatherWatchHeader.className=”weather-watch-header has-alerts”;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, “https://www.wmur.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘sidelist-weather’, “https://www.wmur.com/alerts”);”);
}
} else {
weatherWatchHeader.className=”weather-watch-header”;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}

function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;

var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}

var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className=”weather-grid–current-icon weather-current-icon icon icon-weather-” + weatherData.current.icon_name;
}

Advertisement

var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}

var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}

var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}

updateWeatherBackground(weatherData.current.icon_name);
}
}

function updateWeatherBackground(iconName) {
try {
var bgPath = weatherImages.backgrounds[iconName] || weatherImages.backgrounds.unknown;
container.style.backgroundImage=”url(” + bgPath + ‘)’;
} catch (e) {
console.log(‘Error updating weather background:’, e);
}
}

Advertisement

function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;

if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html=””;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);

for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex

Loading more articles…



Source link

Advertisement
Continue Reading

New Hampshire

Meditation In Merrimack | Paddle Plunge | Debo Ray Performs | Antiques Road Show: NH Patch Weekender

Published

on

Meditation In Merrimack | Paddle Plunge | Debo Ray Performs | Antiques Road Show: NH Patch Weekender


MERRIMACK, NH — Here is the latest roundup of events around New Hampshire featured on Patch’s news and community websites.

The latest weather can be found here. So, get out.

And do not forget: Event listings are free on one Patch site. You can share your calendar listing on other community sites for a modest fee, starting at 25 cents per day. To get started, visit the Events link on the front page of all Patch sites. Statewide calendar roundups are published on Mondays, Wednesdays, and Fridays.





Source link

Advertisement
Continue Reading

New Hampshire

In rare move, House votes for review of lawmaker’s ‘hate-filled’ social media posts

Published

on

In rare move, House votes for review of lawmaker’s ‘hate-filled’ social media posts


In a rare move, the New Hampshire House voted to initiate possible disciplinary proceedings against Republican Rep. Travis Corcoran Thursday over a series of inflammatory social media posts. The decision comes as partisan tensions and caustic behavior continue to flare in the House.

At issue for Corcoran — who maintains a busy schedule of social media traffic — are recent posts on X, in which he called for a “final solution” in response to a karaoke night invitation from a Jewish lawmaker, and another in which he talked of deporting a fellow lawmaker who was born in the Philippines: “She has to go back,” he wrote.

House Speaker Sherman Packard had condemned the posts earlier, and on Thursday the full House moved to send Corcoran’s case to the Legislative Administration Committee for what Packard described as “review and report.”

Read more: Why it’s so hard to police bad behavior in the NH House

Advertisement

The referral came at the request of the House’s top Democrat, Rep. Alexis Simpson of Exeter. Such referrals are rare: The Legislative Administration Committee hasn’t been asked to consider sanctioning a lawmaker since 2017.

But Corcoran’s online conduct, which often includes inflammatory and offensive posts, has been under scrutiny in Concord for some time. A letter Packard sent Corcoran this week indicated his office has been receiving complaints about his social media activity for more than a year.

“Your verified public writings are negative, targeted and purposely written to leave a hate-filled interpretation,” Packard wrote Corcoran. “In sum, your statements are disrespectful, inappropriate and unworthy of the dignity of our state legislature.”

The “Letter of Caution” Packard sent Corcoran followed Corcoran’s failure to respond to voice messages left by a bipartisan panel of lawmakers tasked with reviewing public complaints about members of the Legislature.

Records from the House clerk’s office show the group, formed in 2019, has sent nine caution letters to lawmakers over the years, taking up a range of conduct issues.

Advertisement

They include rude behavior by a lawmaker at a state DMV office; another lawmaker telling members of the public to ‘shut up;’ and another being dismissive to people weighing in on legislation who are not from New Hampshire.

But several of the letters involve lawmakers’ behavior on social media. One admonished a lawmaker for posting the address of an antagonistic voter on Facebook. Another letter tells a longtime lawmaker that a bipartisan review panel “was unanimously disappointed that you defended your use of the hashtag ‘NHGOPTaliban.’ ”

According to several advisory group’s members, Corcoran has apologized for being non-responsive to the group’s phone calls, but on Thursday he seemed disinclined to back away from his social media posts, or explain himself.

“My only comment for NPR, is that NPR is regime media, the end,” Corcoran said when asked by an NHPR reporter about the House’s action Thursday.

Precedent would suggest Corcoran’s political future will likely fall to voters in his hometown of Weare to decide, as the Legislature rarely censures its members. Lawmakers facing scandal sometimes choose to resign, but the last time the House voted to expel a member was in 1913 and involved bribery allegations. The House’s top Republican says Corcoran’s case boils down to speech rights.

Advertisement

“We’ll see what happens,” said House Majority Leader Jason Osborne. “I think at the end of the day, everyone realizes that members have free speech, and you might not like all of it.”

Behind the headlines you read on our website, there’s a dedicated team of journalists working hard to bring you local news you can trust. On any given day, that can look like:

  • • Reporters hustling to track down sources, get the facts and hold powerful officials accountable
  • • Producers coordinating interviews with people who offer perspectives that go beyond soundbites
  • • Editors carefully vetting our stories to make sure they’re accurate, fair and easy to follow

I believe that journalists, when we do our jobs well, can play a crucial role in connecting people and making communities stronger. But we can’t do this work without you.

Your donations, in any amount, can help keep independent journalism vibrant in New Hampshire — and accessible to everyone, no paywall required.

Sincerely,
Dan Barrick
News Director





Source link

Advertisement
Continue Reading

Trending