<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://nitro.rusff.me/export.php?type=rss" rel="self" type="application/rss+xml" />
		<title>2th</title>
		<link>http://nitro.rusff.me/</link>
		<description>2th</description>
		<language>ru-ru</language>
		<lastBuildDate>Sun, 31 May 2026 01:03:21 +0300</lastBuildDate>
		<generator>MyBB/mybb.ru</generator>
		<item>
			<title>тест</title>
			<link>http://nitro.rusff.me/viewtopic.php?pid=85#p85</link>
			<description>&lt;p&gt;&lt;a href=&quot;https://upforme.ru/uploads/001c/84/76/5/439548.png&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://upforme.ru/uploads/001c/84/76/5/439548.png&lt;/a&gt;&lt;/p&gt;
						&lt;p&gt;[html]&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;&amp;lt;html lang=&amp;quot;ru&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;lt;title&amp;gt;Раскраска — адаптивная под любые пропорции&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;lt;style&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; * {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; box-sizing: border-box;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; user-select: none;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; body {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; background: transparent;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; margin: 0;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; min-height: 100vh;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; display: flex;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; justify-content: center;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; align-items: center;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; padding: 20px;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; font-family: system-ui, &#039;Segoe UI&#039;, &#039;Roboto&#039;, sans-serif;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; .coloring-main {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; display: flex;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; flex-direction: column;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; align-items: center;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; gap: 16px;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; .canvas-area {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; background: transparent;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; padding: 0;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; display: flex;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; justify-content: center;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; canvas {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; display: block;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; cursor: pointer;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; background: white;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; border: 2px solid black;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; max-width: 100%;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; height: auto;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; width: auto;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; .tools-panel {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; background: transparent;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; padding: 0;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; display: flex;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; flex-wrap: wrap;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; justify-content: center;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; align-items: center;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; gap: 8px;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; #fullColorPicker {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; width: 44px;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; height: 44px;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; border: 1px solid black;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; cursor: pointer;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; background: #cccccc;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; padding: 0;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; .tool-btn {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; background: #d0d0d0;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; border: 1px solid black;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; font-weight: bold;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; padding: 6px 12px;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; cursor: pointer;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; font-family: inherit;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; font-size: 0.85rem;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; transition: 0.05s linear;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; white-space: nowrap;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; color: black;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; .tool-btn.active {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; background: #a0a0a0;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; color: white;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; border-color: black;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; .action-btn {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; background: #c0c0c0;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; border: 1px solid black;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; font-weight: bold;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; padding: 6px 12px;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; cursor: pointer;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; font-family: inherit;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; font-size: 0.85rem;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; white-space: nowrap;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; color: black;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; .info-stats {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; background: #e0e0e0;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; border: 1px solid black;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; padding: 6px 12px;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; font-weight: bold;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; font-size: 0.85rem;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; text-align: center;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; white-space: nowrap;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; color: black;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; @media (max-width: 720px) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; .tools-panel {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; gap: 6px;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; .tool-btn, .action-btn, .info-stats {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; padding: 4px 8px;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; font-size: 0.75rem;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; #fullColorPicker {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; width: 36px;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; height: 36px;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;coloring-main&amp;quot;&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;lt;div class=&amp;quot;canvas-area&amp;quot;&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;lt;canvas id=&amp;quot;coloringCanvas&amp;quot;&amp;gt;&amp;lt;/canvas&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;lt;div class=&amp;quot;tools-panel&amp;quot;&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;lt;input type=&amp;quot;color&amp;quot; id=&amp;quot;fullColorPicker&amp;quot; value=&amp;quot;#E34234&amp;quot;&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;lt;button id=&amp;quot;brushModeBtn&amp;quot; class=&amp;quot;tool-btn active&amp;quot;&amp;gt;Кисть&amp;lt;/button&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;lt;button id=&amp;quot;eyedropperBtn&amp;quot; class=&amp;quot;tool-btn&amp;quot;&amp;gt;Пипетка&amp;lt;/button&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;lt;button id=&amp;quot;resetBtn&amp;quot; class=&amp;quot;action-btn&amp;quot;&amp;gt;Сбросить всё&amp;lt;/button&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;lt;div class=&amp;quot;info-stats&amp;quot; id=&amp;quot;statsDisplay&amp;quot;&amp;gt;Осталось: --&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;script&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; (function(){&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; // Элементы&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; const canvas = document.getElementById(&#039;coloringCanvas&#039;);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; const ctx = canvas.getContext(&#039;2d&#039;);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; // Глобальные переменные&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; let currentColor = &amp;quot;#E34234&amp;quot;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; let currentTool = &amp;quot;brush&amp;quot;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; let imageLoaded = false;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; let originalImageData = null;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; let contourMask = null;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; let segmentMap = null;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; let segmentColors = [];&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; let segmentCount = 0;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; let currentWidth = 0, currentHeight = 0;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; const STORAGE_KEY = &amp;quot;coloring_progress_v6&amp;quot;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; // &amp;#128317;&amp;#128317;&amp;#128317; СЮДА ВСТАВЬТЕ СВОЮ ССЫЛКУ НА ИЗОБРАЖЕНИЕ &amp;#128317;&amp;#128317;&amp;#128317;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; const DEFAULT_IMAGE_URL = &amp;quot;https://upforme.ru/uploads/001c/84/76/5/41563.png&amp;quot;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; // &amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&amp;#128316;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; // ---------- ЗАГРУЗКА ИЗОБРАЖЕНИЯ ----------&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; function loadImageFromData(imgElement) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const imgW = imgElement.width;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const imgH = imgElement.height;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; // Ограничиваем отображаемый размер до 800px по большей стороне&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const maxDimension = 800;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; let displayW = imgW;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; let displayH = imgH;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if (imgW &amp;gt; maxDimension || imgH &amp;gt; maxDimension) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const scale = maxDimension / Math.max(imgW, imgH);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; displayW = Math.floor(imgW * scale);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; displayH = Math.floor(imgH * scale);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; canvas.width = imgW;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; canvas.height = imgH;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; canvas.style.width = `${displayW}px`;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; canvas.style.height = `${displayH}px`;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; currentWidth = imgW;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; currentHeight = imgH;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; ctx.clearRect(0, 0, imgW, imgH);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; ctx.drawImage(imgElement, 0, 0, imgW, imgH);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; originalImageData = ctx.getImageData(0, 0, imgW, imgH);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; contourMask = new Uint8Array(imgW * imgH);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; segmentMap = new Uint32Array(imgW * imgH);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; detectSegmentsAndContours();&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; loadProgressFromStorage();&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; imageLoaded = true;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; drawColoring();&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; updateStats();&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; console.log(`&amp;#9989; Изображение загружено: ${imgW}x${imgH}, сегментов: ${segmentCount}`);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; function loadImageFromUrl(url) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const img = new Image();&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; img.crossOrigin = &amp;quot;Anonymous&amp;quot;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; img.onload = function() {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; loadImageFromData(img);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; };&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; img.onerror = () =&amp;gt; {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; console.error(&amp;quot;&amp;#10060; Не удалось загрузить картинку по URL. Проверьте ссылку и CORS.&amp;quot;);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; // Создаём тестовое изображение-заглушку&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const testCanvas = document.createElement(&#039;canvas&#039;);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const testCtx = testCanvas.getContext(&#039;2d&#039;);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; testCanvas.width = 600;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; testCanvas.height = 400;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; testCtx.fillStyle = &amp;quot;white&amp;quot;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; testCtx.fillRect(0, 0, 600, 400);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; testCtx.fillStyle = &amp;quot;black&amp;quot;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; testCtx.fillRect(50, 50, 500, 300);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; testCtx.fillStyle = &amp;quot;white&amp;quot;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; testCtx.fillRect(100, 100, 400, 200);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const testImg = new Image();&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; testImg.onload = () =&amp;gt; loadImageFromData(testImg);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; testImg.src = testCanvas.toDataURL();&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; };&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; img.src = url;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; // ---------- АНАЛИЗ КОНТУРОВ ----------&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; function detectSegmentsAndContours() {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(!originalImageData) return;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const data = originalImageData.data;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const width = currentWidth, height = currentHeight;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; contourMask.fill(0);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; for(let i = 0; i &amp;lt; width * height; i++) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const idx = i * 4;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const r = data[idx];&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const g = data[idx+1];&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const b = data[idx+2];&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const a = data[idx+3];&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(a &amp;gt; 200 &amp;amp;&amp;amp; (r + g + b) &amp;lt; 150) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; contourMask[i] = 1;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; segmentMap.fill(0);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; segmentColors = [];&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; segmentCount = 0;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; function isFillable(x, y) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(x &amp;lt; 0 || x &amp;gt;= width || y &amp;lt; 0 || y &amp;gt;= height) return false;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; return contourMask[y * width + x] === 0;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; function floodFill(startX, startY, newId) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const stack = [{x: startX, y: startY}];&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; while(stack.length) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const {x, y} = stack.pop();&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(x &amp;lt; 0 || x &amp;gt;= width || y &amp;lt; 0 || y &amp;gt;= height) continue;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const idx = y * width + x;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(segmentMap[idx] !== 0) continue;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(!isFillable(x, y)) continue;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; segmentMap[idx] = newId;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; stack.push({x: x+1, y}, {x: x-1, y}, {x, y: y+1}, {x, y: y-1});&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; for(let y = 0; y &amp;lt; height; y++) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; for(let x = 0; x &amp;lt; width; x++) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const idx = y * width + x;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(segmentMap[idx] === 0 &amp;amp;&amp;amp; isFillable(x, y)) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; segmentCount++;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; floodFill(x, y, segmentCount);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; segmentColors[segmentCount] = &amp;quot;#FFFFFF&amp;quot;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; // ---------- СОХРАНЕНИЕ ПРОГРЕССА ----------&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; function saveProgressToStorage() {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(!imageLoaded || segmentCount === 0) return;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const progress = [];&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; for(let i = 1; i &amp;lt;= segmentCount; i++) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; progress.push(segmentColors[i]);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const saveData = { &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; version: 6, &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; colors: progress, &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; width: currentWidth, &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; height: currentHeight,&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; timestamp: Date.now() &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; };&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; localStorage.setItem(STORAGE_KEY, JSON.stringify(saveData));&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; function loadProgressFromStorage() {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(!segmentCount) return;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const raw = localStorage.getItem(STORAGE_KEY);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(!raw) return;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; try {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const data = JSON.parse(raw);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if (data.version === 6 &amp;amp;&amp;amp; data.width === currentWidth &amp;amp;&amp;amp; data.height === currentHeight &amp;amp;&amp;amp; Array.isArray(data.colors)) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const savedColors = data.colors;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; for(let i = 1; i &amp;lt;= Math.min(segmentCount, savedColors.length); i++) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(savedColors[i-1] &amp;amp;&amp;amp; savedColors[i-1] !== &amp;quot;#FFFFFF&amp;quot;) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; segmentColors[i] = savedColors[i-1];&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; console.log(&amp;quot;&amp;#9989; Восстановлены цвета из сохранения&amp;quot;);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; } catch(e) {}&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; // ---------- ОТРИСОВКА ----------&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; function drawColoring() {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(!originalImageData) return;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const width = currentWidth, height = currentHeight;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; ctx.fillStyle = &amp;quot;white&amp;quot;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; ctx.fillRect(0, 0, width, height);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; for(let i = 0; i &amp;lt; width * height; i++) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const segId = segmentMap[i];&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(segId &amp;gt; 0 &amp;amp;&amp;amp; segmentColors[segId]) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const hex = segmentColors[segId];&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const r = parseInt(hex.slice(1,3), 16);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const g = parseInt(hex.slice(3,5), 16);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const b = parseInt(hex.slice(5,7), 16);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const x = i % width;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const y = Math.floor(i / width);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; ctx.fillStyle = `rgb(${r},${g},${b})`;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; ctx.fillRect(x, y, 1, 1);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const data = originalImageData.data;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; for(let y = 0; y &amp;lt; height; y++) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; for(let x = 0; x &amp;lt; width; x++) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const idx = (y * width + x) * 4;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const r = data[idx];&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const g = data[idx+1];&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const b = data[idx+2];&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const a = data[idx+3];&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(a &amp;gt; 200 &amp;amp;&amp;amp; (r + g + b) &amp;lt; 150) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; ctx.fillStyle = `rgb(${r},${g},${b})`;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; ctx.fillRect(x, y, 1, 1);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; // ---------- ЛОГИКА ЗАЛИВКИ ----------&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; function fillSegment(segId, color) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(segId &amp;gt; 0 &amp;amp;&amp;amp; segmentColors[segId] !== color) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; segmentColors[segId] = color;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; drawColoring();&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; saveProgressToStorage();&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; updateStats();&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; function getSegmentAtPixel(x, y) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(x &amp;gt;= 0 &amp;amp;&amp;amp; x &amp;lt; currentWidth &amp;amp;&amp;amp; y &amp;gt;= 0 &amp;amp;&amp;amp; y &amp;lt; currentHeight) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; return segmentMap[y * currentWidth + x];&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; return 0;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; function pickColorAtPixel(x, y) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(!imageLoaded) return;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const pixel = ctx.getImageData(x, y, 1, 1).data;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const hex = `#${((1 &amp;lt;&amp;lt; 24) + (pixel[0] &amp;lt;&amp;lt; 16) + (pixel[1] &amp;lt;&amp;lt; 8) + pixel[2]).toString(16).slice(1)}`;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; currentColor = hex;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; document.getElementById(&#039;fullColorPicker&#039;).value = hex;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; function handleCanvasClick(e) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(!imageLoaded) return;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const rect = canvas.getBoundingClientRect();&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const scaleX = canvas.width / rect.width;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const scaleY = canvas.height / rect.height;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; let mx = (e.clientX - rect.left) * scaleX;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; let my = (e.clientY - rect.top) * scaleY;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; mx = Math.min(Math.max(0, mx), currentWidth - 1);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; my = Math.min(Math.max(0, my), currentHeight - 1);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const xf = Math.floor(mx);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const yf = Math.floor(my);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(currentTool === &amp;quot;eyedropper&amp;quot;) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; pickColorAtPixel(xf, yf);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; } else {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const segId = getSegmentAtPixel(xf, yf);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(segId &amp;gt; 0) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; fillSegment(segId, currentColor);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; } else {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; alert(&amp;quot;&amp;#10060; Это контур. Кликни строго внутри области.&amp;quot;);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; function countRemainingSegments() {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; let remain = 0;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; for(let i = 1; i &amp;lt;= segmentCount; i++) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(segmentColors[i] === &amp;quot;#FFFFFF&amp;quot;) remain++;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; return remain;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; function updateStats() {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(!imageLoaded) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; document.getElementById(&#039;statsDisplay&#039;).innerHTML = &amp;quot;Осталось: --&amp;quot;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; return;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; const remaining = countRemainingSegments();&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; document.getElementById(&#039;statsDisplay&#039;).innerHTML = `Осталось: ${remaining}`;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(remaining === 0) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; document.getElementById(&#039;statsDisplay&#039;).style.background = &amp;quot;#b0d0b0&amp;quot;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; } else {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; document.getElementById(&#039;statsDisplay&#039;).style.background = &amp;quot;#e0e0e0&amp;quot;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; function resetColoring() {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(!imageLoaded) return;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; for(let i = 1; i &amp;lt;= segmentCount; i++) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; segmentColors[i] = &amp;quot;#FFFFFF&amp;quot;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; drawColoring();&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; saveProgressToStorage();&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; updateStats();&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; // ---------- ПЕРЕКЛЮЧЕНИЕ РЕЖИМОВ ----------&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; const brushBtn = document.getElementById(&#039;brushModeBtn&#039;);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; const eyedropperBtn = document.getElementById(&#039;eyedropperBtn&#039;);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; function setTool(tool) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; currentTool = tool;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if(tool === &amp;quot;brush&amp;quot;) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; brushBtn.classList.add(&#039;active&#039;);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; eyedropperBtn.classList.remove(&#039;active&#039;);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; canvas.style.cursor = &amp;quot;pointer&amp;quot;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; } else {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; eyedropperBtn.classList.add(&#039;active&#039;);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; brushBtn.classList.remove(&#039;active&#039;);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; canvas.style.cursor = &amp;quot;crosshair&amp;quot;;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; brushBtn.addEventListener(&#039;click&#039;, () =&amp;gt; setTool(&amp;quot;brush&amp;quot;));&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; eyedropperBtn.addEventListener(&#039;click&#039;, () =&amp;gt; setTool(&amp;quot;eyedropper&amp;quot;));&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; const colorPicker = document.getElementById(&#039;fullColorPicker&#039;);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; colorPicker.addEventListener(&#039;input&#039;, (e) =&amp;gt; {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; currentColor = e.target.value;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; setTool(&amp;quot;brush&amp;quot;);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; });&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; canvas.addEventListener(&#039;click&#039;, handleCanvasClick);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; document.getElementById(&#039;resetBtn&#039;).addEventListener(&#039;click&#039;, resetColoring);&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; // Загружаем изображение по умолчанию&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; loadImageFromUrl(DEFAULT_IMAGE_URL);&lt;br /&gt;&amp;#160; &amp;#160; })();&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;[/html]&lt;br /&gt;[hideprofile]&lt;/p&gt;</description>
			<author>mybb@mybb.ru (имя фамилия)</author>
			<pubDate>Sun, 31 May 2026 01:03:21 +0300</pubDate>
			<guid>http://nitro.rusff.me/viewtopic.php?pid=85#p85</guid>
		</item>
		<item>
			<title>боссфайт</title>
			<link>http://nitro.rusff.me/viewtopic.php?pid=84#p84</link>
			<description>&lt;p&gt;&amp;#9876;&amp;#65039; имя фамилия ударил&amp;#160; ECS #2 «Крысиный король» : 32 урона.&lt;br /&gt;HP: 13754 / 15000&lt;/p&gt;</description>
			<author>mybb@mybb.ru (имя фамилия)</author>
			<pubDate>Mon, 18 May 2026 12:01:08 +0300</pubDate>
			<guid>http://nitro.rusff.me/viewtopic.php?pid=84#p84</guid>
		</item>
		<item>
			<title>123</title>
			<link>http://nitro.rusff.me/viewtopic.php?pid=57#p57</link>
			<description>&lt;p&gt;тест&lt;/p&gt;
						&lt;p&gt;[assign=1|2|3|4::1|2|3::608928]&lt;/p&gt;</description>
			<author>mybb@mybb.ru (имя фамилия)</author>
			<pubDate>Sat, 04 Apr 2026 00:41:22 +0300</pubDate>
			<guid>http://nitro.rusff.me/viewtopic.php?pid=57#p57</guid>
		</item>
		<item>
			<title>Тестовое сообщение</title>
			<link>http://nitro.rusff.me/viewtopic.php?pid=32#p32</link>
			<description>&lt;div class=&quot;hvmask&quot; id=&quot;block-1&quot;&gt;&lt;p&gt;[nick]Жасмин[/nick][status]где-то на белом свете[/status][sign]оу оу оу[/sign][lz]&amp;lt;a href=&amp;quot;ссылка на анкету&amp;quot;&amp;gt;&amp;lt;text&amp;gt;ЛЕЛЯ, 54 &amp;lt;/text&amp;gt;&amp;lt;/a&amp;gt; &amp;lt;br&amp;gt; ваш текст не наш[/lz]&lt;/p&gt;&lt;/div&gt;</description>
			<author>mybb@mybb.ru (Malina Былина)</author>
			<pubDate>Tue, 03 Mar 2026 05:11:24 +0300</pubDate>
			<guid>http://nitro.rusff.me/viewtopic.php?pid=32#p32</guid>
		</item>
		<item>
			<title>важная тема</title>
			<link>http://nitro.rusff.me/viewtopic.php?pid=21#p21</link>
			<description>&lt;p&gt;&lt;span style=&quot;display: block; text-align: center&quot;&gt;&lt;/span&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (Malina Былина)</author>
			<pubDate>Wed, 04 Feb 2026 12:18:32 +0300</pubDate>
			<guid>http://nitro.rusff.me/viewtopic.php?pid=21#p21</guid>
		</item>
		<item>
			<title>закрытая тема</title>
			<link>http://nitro.rusff.me/viewtopic.php?pid=20#p20</link>
			<description>&lt;p&gt;&lt;span style=&quot;display: block; text-align: right&quot;&gt;&lt;/span&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (Malina Былина)</author>
			<pubDate>Wed, 04 Feb 2026 12:15:21 +0300</pubDate>
			<guid>http://nitro.rusff.me/viewtopic.php?pid=20#p20</guid>
		</item>
		<item>
			<title>темы</title>
			<link>http://nitro.rusff.me/viewtopic.php?pid=19#p19</link>
			<description>&lt;p&gt;[html]&amp;lt;!--HTML--&amp;gt;&amp;lt;div class=&amp;quot;news-zag&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;center&amp;gt;&amp;lt;text&amp;gt;Супер важные новости за 26.01-01.02&amp;lt;/text&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-telo&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;br&amp;gt;&lt;br /&gt;.....//.....//.....///....&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;br&amp;gt;&lt;br /&gt;Иногда мне кажется, что рано или поздно под дверьми радиостанции окажется целая армада людей, готовых разнести мою охрану и забрать всё самое-самое ценное, однако... Однако этого до сих пор не случилось. Признавайтесь, вам просто нравится слушать мой трёп, когда этот эфир на очередном повторе забивает тишину вашей комнатушки?&lt;br /&gt;&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;br&amp;gt;&lt;br /&gt;С чего я вообще об этом задумался? С того, что уже вторую неделю наблюдаю скопление людей на улицах. Чем &amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/profile.php?id=433&amp;quot;&amp;gt;Lenor Safe&amp;lt;/a&amp;gt;, &amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/profile.php?id=436&amp;quot;&amp;gt;Edward Dewinter&amp;lt;/a&amp;gt;, &amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/profile.php?id=434&amp;quot;&amp;gt;Connor Hale&amp;lt;/a&amp;gt;, &amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/profile.php?id=435&amp;quot;&amp;gt;Tammy Woods&amp;lt;/a&amp;gt; и &amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/profile.php?id=432&amp;quot;&amp;gt;Thomas Chamberlain&amp;lt;/a&amp;gt; не отряд боевого назначения, собранный из случайных прохожих, что решили позариться на блага цивилизации, хранящиеся на вершине Манхэттена в моей студии? Нет? Вы не такие? Ну, это мы ещё посмотрим... Жизнь в Нью-Йорке никого не щадит.&lt;br /&gt;&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;br&amp;gt;&lt;br /&gt;Вот ворвётесь вы ко мне без приглашения, а у нас тут... &amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/viewtopic.php?id=2043#p424180&amp;quot;&amp;gt;Ремонт&amp;lt;/a&amp;gt; затевается. Да, я стабильно продолжаю переделывать рубку от камня к камню, от дощечки к дощечке, чтобы не скрипела и не крошилась. Расточительство - скажете вы, фэншуй для сохранения здравомыслия - отвечу я. Если не развлекать себя &amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/viewtopic.php?id=66&amp;amp;p=19#p423992&amp;quot;&amp;gt;маленькими радостями&amp;lt;/a&amp;gt;, то вполне можно забыть, каким человеком ты &amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/viewtopic.php?id=1932&amp;amp;p=3#p423351&amp;quot;&amp;gt;являешься&amp;lt;/a&amp;gt;, и утонуть в пучине безнравственности и отчаяния. Оно вам надо? Я ведь &amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/viewtopic.php?id=1138&amp;amp;p=18#p427514&amp;quot;&amp;gt;задал вопрос&amp;lt;/a&amp;gt;, думайте! Мне кажется, что совершенно точно - не нужно. Давайте не будем уподобляться бандитам и рейдерам. Я вам даже... Сейчас-сейчас... Музычку найду нужную, чтобы скрасить денёк-другой.&lt;/p&gt;
						&lt;p&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;Этот парень даже не нуждается в представлении. Без лишних слов, &amp;lt;a href=&amp;quot;https://www.youtube.com/watch?v=wIqa9uVnXCQ&amp;quot;&amp;gt;Queen - I Want To Break Free&amp;lt;/a&amp;gt;. На такой славной ноте и закончим.&lt;br /&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;А теперь расходимся, чтобы увидеться снова уже в следующий понедельник.&lt;br /&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;..//...//...//.../....&amp;lt;br&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-naz&amp;quot;&amp;gt;Флудеры&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-pannel&amp;quot;&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-face&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/profile.php?id=367&amp;quot; title=&amp;quot;Долорес&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://upforme.ru/uploads/001c/0f/f1/77/729031.png&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-face&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/profile.php?id=434&amp;quot; title=&amp;quot;Коннор&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://upforme.ru/uploads/001c/0f/f1/77/151678.png&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-face&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/profile.php?id=141&amp;quot; title=&amp;quot;Джейми&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://upforme.ru/uploads/001c/0f/f1/77/546575.jpg&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-face&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/profile.php?id=5&amp;quot; title=&amp;quot;Харди&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://upforme.ru/uploads/001c/0f/f1/77/499282.png&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-face&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/profile.php?id=174&amp;quot; title=&amp;quot;Корри&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://upforme.ru/uploads/001c/0f/f1/77/991311.png&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-naz&amp;quot;&amp;gt;Постописцы&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-pannel&amp;quot;&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-face&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/profile.php?id=300&amp;quot; title=&amp;quot;Сансет - 10 постов&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://upforme.ru/uploads/001c/0f/f1/77/26792.png&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-face&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/profile.php?id=367&amp;quot; title=&amp;quot;Долорес - 5 постов&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://upforme.ru/uploads/001c/0f/f1/77/818664.png&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-face&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/profile.php?id=345&amp;quot; title=&amp;quot;Соломон - 5 постов&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://upforme.ru/uploads/001c/0f/f1/77/173769.png&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-face&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/profile.php?id=5&amp;quot; title=&amp;quot;Харди - 5 постов&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://upforme.ru/uploads/001c/0f/f1/77/987408.png&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-face&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/profile.php?id=233&amp;quot; title=&amp;quot;Питер - 5 постов&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;https://upforme.ru/uploads/001c/0f/f1/77/972287.png&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-post-ep&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;center&amp;gt;&amp;lt;text&amp;gt;Лучший пост:&amp;#160; &amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/viewtopic.php?id=1975#p424533&amp;quot; style=&amp;quot;color:#c0d4d6&amp;quot;&amp;gt;Рэймонд&amp;lt;/a&amp;gt;&amp;lt;/text&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-post-ep&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;center&amp;gt;&amp;lt;text&amp;gt;Лучший эпизод: &amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/viewtopic.php?id=2045&amp;quot; style=&amp;quot;color:#c0d4d6&amp;quot;&amp;gt;Shutter Island&amp;lt;/a&amp;gt;&amp;lt;/text&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;div class=&amp;quot;news-naz&amp;quot;&amp;gt;Цитата&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;news-cit&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;center&amp;gt;взять за правило: утром проснулся, в топотыки зашел (с) &amp;lt;a href=&amp;quot;https://pulseofny.rusff.me/profile.php?id=412&amp;quot; style=&amp;quot;color:#7eb3b7&amp;quot;&amp;gt;Джин&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;[/html]&lt;/p&gt;</description>
			<author>mybb@mybb.ru (Malina Былина)</author>
			<pubDate>Wed, 04 Feb 2026 10:23:29 +0300</pubDate>
			<guid>http://nitro.rusff.me/viewtopic.php?pid=19#p19</guid>
		</item>
	</channel>
</rss>
