Сосёт член на глазах у подруги

Просмотры: 5
Тёмноволосая блядь в фиолетовом топе на коленях перед мужиком, который валяется на спине в комнате с шкафами и полками — чисто домашняя хата. Руки на бедрах, хватает толстый хуй татуированного ебаря обеими лапами, смотрит жадно вниз. Наклоняется ближе, дрочит ствол, губы у головки — слюни уже капают. Глубже заглатывает, держит основание одной рукой, сосёт по яйца, давится, но жрёт сочно, сиськи из топа вываливаются, жопа торчит. Темп ускоряется, хуй блестит от слюней, она мычит от кайфа. Финал — он кончает в рот шлюхе, сперма по губам стекает, блядь слизывает и глотает. Русское домашнее порно, частное, снято на телефон.
0%
👎 0 Всего: 0

Комментарии (0)

Загрузка...
(function() { const overlay = document.querySelector(".preroll-overlay"); const main = document.querySelector(".video-player"); if (main) { try { main.volume = 0.75; } catch (e) {} try { main.muted = false; } catch (e) {} main.addEventListener("loadeddata", () => { main.classList.add("ready"); }); } if (!main) return; if (!overlay) return; const prerollVideo = overlay.querySelector(".preroll-video"); const skipBtn = overlay.querySelector(".preroll-skip"); const resumeBtn = overlay.querySelector(".preroll-resume"); const timerSpan = overlay.querySelector(".preroll-timer"); const clickLayer = overlay.querySelector(".preroll-click-layer"); const soundToggle = overlay.querySelector(".preroll-sound-toggle"); const pauseIndicator = overlay.querySelector(".preroll-pause-indicator"); const adId = overlay.dataset.adId; const src = overlay.dataset.src; const target = overlay.dataset.target; let remaining = Number(overlay.dataset.skip || 15); if (!Number.isFinite(remaining) || remaining < 0) remaining = 15; let countdown = null; let impressionSent = false; let playbackStarted = false; let clicked = false; let finished = false; let triedUnmuted = false; const csrf = (window.getCSRFToken && window.getCSRFToken()) || ""; if (skipBtn) { skipBtn.disabled = true; skipBtn.classList.add("disabled"); } if (timerSpan) timerSpan.textContent = remaining; const postForm = (url, body) => { const params = new URLSearchParams(); Object.entries(body || {}).forEach(([k, v]) => params.append(k, v ?? "")); return fetch(url, { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", "X-CSRFToken": csrf, "X-Requested-With": "XMLHttpRequest", }, credentials: "same-origin", body: params.toString(), }).catch(() => {}); }; const hideSkipTimer = () => { if (timerSpan) { timerSpan.textContent = ""; timerSpan.classList.add("hidden"); } }; const enableSkip = () => { if (!skipBtn) return; skipBtn.disabled = false; skipBtn.classList.remove("disabled"); hideSkipTimer(); }; const startCountdown = () => { if (countdown || remaining <= 0) { enableSkip(); return; } countdown = setInterval(() => { remaining -= 1; if (timerSpan) timerSpan.textContent = Math.max(remaining, 0); if (remaining <= 0) { clearInterval(countdown); countdown = null; enableSkip(); } }, 1000); }; const pauseCountdown = () => { if (countdown) { clearInterval(countdown); countdown = null; } }; const stopPrerollVideo = () => { if (!prerollVideo) return; try { prerollVideo.pause(); } catch (e) {} try { prerollVideo.currentTime = 0; } catch (e) {} prerollVideo.muted = true; try { prerollVideo.removeAttribute("src"); prerollVideo.load(); } catch (e) {} }; const finishAd = () => { if (finished) return; finished = true; pauseCountdown(); stopPrerollVideo(); overlay.classList.add("hidden"); try { main.muted = false; main.volume = 0.75; } catch (e) {} try { main.play().catch(() => {}); } catch (e) {} }; const pauseAd = (showResume = false) => { pauseCountdown(); try { prerollVideo?.pause(); } catch (e) {} if (showResume && resumeBtn) { resumeBtn.hidden = false; resumeBtn.classList.add("show"); } if (pauseIndicator) pauseIndicator.classList.add("show"); }; const resumeAd = () => { if (resumeBtn) { resumeBtn.hidden = true; resumeBtn.classList.remove("show"); } try { prerollVideo?.play().catch(() => {}); } catch (e) {} startCountdown(); if (pauseIndicator) pauseIndicator.classList.remove("show"); }; const markPlaybackStart = () => { if (playbackStarted) return; playbackStarted = true; startCountdown(); if (adId && !impressionSent) { impressionSent = true; postForm("/ads/preroll/impression/", { ad_id: adId }); } }; const startAd = () => { if (!prerollVideo || !src) { finishAd(); return; } main.pause(); main.currentTime = 0; try { main.muted = false; main.volume = 0.75; } catch (e) {} prerollVideo.muted = false; prerollVideo.src = src; prerollVideo.addEventListener("loadeddata", () => { try { prerollVideo.play().then(() => { triedUnmuted = true; }).catch(() => {}); } catch (e) {} }, { once: true }); prerollVideo.addEventListener("ended", finishAd); prerollVideo.addEventListener("error", finishAd); prerollVideo.addEventListener("playing", markPlaybackStart); prerollVideo.addEventListener("play", markPlaybackStart); try { prerollVideo.play().then(() => { triedUnmuted = true; }).catch(() => {}); } catch (e) {} }; const forceMutedFallback = () => { if (!prerollVideo) return; if (!triedUnmuted) { prerollVideo.muted = true; try { prerollVideo.play().catch(() => {}); } catch (e) {} if (soundToggle) soundToggle.textContent = "🔇"; } }; if (skipBtn) { skipBtn.addEventListener("click", (e) => { if (skipBtn.classList.contains("disabled")) return; stopPrerollVideo(); finishAd(); }); } if (clickLayer) { clickLayer.addEventListener("click", () => { const isPaused = resumeBtn && resumeBtn.classList.contains("show"); if (isPaused) { resumeAd(); return; } if (target) { if (adId && !clicked) { clicked = true; postForm("/ads/preroll/click/", { ad_id: adId }); } window.open(target, "_blank"); pauseAd(true); } }); } if (soundToggle) { soundToggle.addEventListener("click", (e) => { e.stopPropagation(); if (!prerollVideo) return; prerollVideo.muted = !prerollVideo.muted; soundToggle.textContent = prerollVideo.muted ? "🔇" : "🔊"; if (!prerollVideo.paused) { try { prerollVideo.play().catch(() => {}); } catch (err) {} } }); } if (resumeBtn) { resumeBtn.addEventListener("click", (e) => { e.preventDefault(); resumeAd(); }); } document.addEventListener("visibilitychange", () => { if (document.hidden) { pauseAd(true); } else if (!finished) { resumeAd(); } }); startAd(); // если браузер заблокировал автоплей со звуком — откат к mute setTimeout(forceMutedFallback, 800); })(); ;(function() { const buttons = document.querySelectorAll(".vote-btn"); const likesEl = document.getElementById("likesCount"); const dislikesEl = document.getElementById("dislikesCount"); const totalEl = document.getElementById("totalVotes"); const percentEl = document.getElementById("ratingPercent"); const likeBar = document.getElementById("ratioLike"); const dislikeBar = document.getElementById("ratioDislike"); const statusEl = document.getElementById("voteStatus"); const ratingBlock = document.querySelector(".rating-block"); const videoEl = document.querySelector(".video-player") || document.querySelector(".video-fallback"); let currentStatus = "none"; const applyOrientation = () => { if (!videoEl) return; const w = videoEl.videoWidth || videoEl.naturalWidth || videoEl.clientWidth; const h = videoEl.videoHeight || videoEl.naturalHeight || videoEl.clientHeight; if (!w || !h) return; if (h > w) { videoEl.classList.add("portrait"); } else { videoEl.classList.remove("portrait"); } }; if (videoEl) { videoEl.addEventListener("loadedmetadata", applyOrientation); if (videoEl.readyState >= 1) applyOrientation(); if (videoEl.complete === true) applyOrientation(); } function updateActive(status) { buttons.forEach(btn => btn.classList.remove("active")); if (status === "liked") { document.querySelector('.vote-btn[data-value="like"]')?.classList.add("active"); statusEl.textContent = "Спасибо за голос!"; } else if (status === "disliked") { document.querySelector('.vote-btn[data-value="dislike"]')?.classList.add("active"); statusEl.textContent = "Дизлайк учтён."; } else { statusEl.textContent = ""; } } function updateBars(likes, dislikes) { const total = Math.max(Number(likes) + Number(dislikes), 0); const likePercent = total > 0 ? Math.round((likes * 100) / total) : 0; const dislikePercent = 100 - likePercent; if (percentEl) percentEl.textContent = likePercent; if (totalEl) totalEl.textContent = total; if (likesEl) likesEl.textContent = likes; if (dislikesEl) dislikesEl.textContent = dislikes; if (likeBar) likeBar.style.width = `${likePercent}%`; if (dislikeBar) dislikeBar.style.width = `${dislikePercent}%`; } const initLikes = Number(ratingBlock?.dataset.likes || likesEl?.textContent || 0); const initDislikes = Number(ratingBlock?.dataset.dislikes || dislikesEl?.textContent || 0); updateBars(initLikes, initDislikes); updateActive(currentStatus); const csrfToken = (window.getCSRFToken && window.getCSRFToken()) || ""; buttons.forEach(btn => { btn.addEventListener("click", () => { const value = btn.getAttribute("data-value"); const formData = new URLSearchParams(); formData.append("value", value); fetch("/porno/soset-chlen-na-glazah-u-podrugi/vote/", { method: "POST", headers: { "X-CSRFToken": csrfToken, "X-Requested-With": "XMLHttpRequest", "Content-Type": "application/x-www-form-urlencoded", }, body: formData.toString(), }) .then(res => { if (!res.ok) { throw new Error("bad status"); } return res.json(); }) .then(data => { updateBars(Number(data.likes), Number(data.dislikes)); currentStatus = data.status; updateActive(currentStatus); }) .catch(() => { statusEl.textContent = "Ошибка отправки"; }); }); }); })(); ;(function() { try { const desc = document.querySelector(".description"); const body = desc?.querySelector(".description-body"); if (!desc || !body) return; const fullText = (body.textContent || "").trim(); const isNarrow = window.matchMedia("(max-width: 900px)").matches; if (!isNarrow || fullText.length <= 40) return; desc.classList.add("collapsible", "collapsed"); const more = document.createElement("span"); more.className = "desc-more"; more.textContent = " … Развернуть"; body.appendChild(more); const toggle = () => { const isCollapsed = desc.classList.toggle("collapsed"); more.textContent = isCollapsed ? " … Развернуть" : " Свернуть"; }; desc.addEventListener("click", toggle); } catch (e) { console.error("desc toggle error", e); } })(); window.activeRecVideo = null; window.resetRecVideo = (vid) => { if (!vid) return; vid.pause(); vid.classList.remove("playing"); vid.currentTime = 0; const wrap = vid.closest(".rec-thumb-wrap"); const img = wrap ? wrap.querySelector(".rec-thumb-img") : null; if (img) img.classList.remove("hidden-thumb"); }; window.initRecPreview = (wrap) => { const videoEl = wrap.querySelector(".rec-hover-preview"); const imgEl = wrap.querySelector(".rec-thumb-img"); if (!videoEl || !videoEl.dataset.previewClip) return; let loaded = false; let shouldPlay = false; videoEl.poster = imgEl ? imgEl.src : ""; const show = () => { videoEl.classList.add("playing"); if (imgEl) imgEl.classList.add("hidden-thumb"); videoEl.play().catch(() => {}); }; videoEl.addEventListener("loadeddata", () => { loaded = true; if (shouldPlay) show(); }); const start = () => { shouldPlay = true; if (!loaded) { videoEl.src = videoEl.dataset.previewClip; videoEl.load(); return; } show(); }; const stop = () => { shouldPlay = false; window.resetRecVideo(videoEl); }; wrap.addEventListener("mouseenter", start); wrap.addEventListener("mouseleave", stop); wrap.addEventListener("touchstart", () => { if (window.activeRecVideo && window.activeRecVideo !== videoEl) window.resetRecVideo(window.activeRecVideo); window.activeRecVideo = videoEl; start(); }, { passive: true }); videoEl.addEventListener("ended", () => window.resetRecVideo(videoEl)); }; // Инициализируем preview для начальных карточек document.querySelectorAll(".rec-thumb-wrap").forEach(window.initRecPreview); // === INFINITE SCROLL ДЛЯ РЕКОМЕНДАЦИЙ === ;(function() { const recGrid = document.getElementById('recGrid'); const recSentinel = document.getElementById('recScrollSentinel'); const recLoader = document.getElementById('recInfiniteScrollLoader'); const recData = document.getElementById('recInfiniteScrollData'); if (!recGrid || !recSentinel || !recLoader || !recData) return; let isRecLoading = false; let recCurrentPage = parseInt(recData.dataset.currentPage) || 1; let recHasNext = recData.dataset.hasNext === 'true'; async function loadNextRecPage() { if (isRecLoading || !recHasNext) return; isRecLoading = true; recLoader.style.display = 'block'; const nextPage = recCurrentPage + 1; const url = new URL(window.location.href); url.searchParams.set('rec_page', nextPage); try { const response = await fetch(url.toString(), { headers: { 'X-Requested-With': 'XMLHttpRequest', }, }); if (!response.ok) throw new Error('Network error'); const data = await response.json(); if (data.html) { recGrid.insertAdjacentHTML('beforeend', data.html); // Инициализируем preview для новых карточек const newWraps = recGrid.querySelectorAll('.rec-thumb-wrap'); newWraps.forEach(window.initRecPreview); } recCurrentPage = data.page; recHasNext = data.has_next; if (!recHasNext) { recSentinel.remove(); recSentinelObserver.disconnect(); // Добавляем сообщение о конце const endMessage = document.createElement('div'); endMessage.id = 'recInfiniteScrollEnd'; endMessage.className = 'rec-infinite-end'; endMessage.style.cssText = 'grid-column: 1 / -1;'; endMessage.innerHTML = `
Все рекомендации загружены
Больше похожих видео нет
`; recGrid.appendChild(endMessage); } } catch (error) { console.error('Rec infinite scroll error:', error); } finally { isRecLoading = false; recLoader.style.display = 'none'; } } const recSentinelObserver = new IntersectionObserver( (entries) => { entries.forEach(entry => { if (entry.isIntersecting && recHasNext && !isRecLoading) { loadNextRecPage(); } }); }, { root: null, rootMargin: '400px', threshold: 0 } ); if (recHasNext) { recSentinelObserver.observe(recSentinel); } })(); // === BANNER AD TRACKING === // === VIDEO ANALYTICS === window.VIDEO_ID = 858; // Динамически подключаем analytics скрипт (БЕЗ async) (function() { const script = document.createElement('script'); script.src = "/static/videos/video_analytics.js"; document.head.appendChild(script); })();