/*M!999999\- enable the sandbox mode */ 
-- MariaDB dump 10.19  Distrib 10.11.16-MariaDB, for Linux (x86_64)
--
-- Host: localhost    Database: communitymarketp_market
-- ------------------------------------------------------
-- Server version	10.11.16-MariaDB-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Dumping data for table `n36ic_modules`
--
-- WHERE:  id IN (311,312,313,314,316,318)

LOCK TABLES `n36ic_modules` WRITE;
/*!40000 ALTER TABLE `n36ic_modules` DISABLE KEYS */;
INSERT INTO `n36ic_modules` (`id`, `asset_id`, `title`, `note`, `content`, `ordering`, `position`, `checked_out`, `checked_out_time`, `publish_up`, `publish_down`, `published`, `module`, `access`, `showtitle`, `params`, `client_id`, `language`) VALUES (311,518,'CMPTV MAIN CONTENT DISPLAY LIVE TV ','','<!-- CMPTV MAIN DISPLAY MODULE - RESIZED TO 1125x 632 -->\r\n<div id=\"cmptvMainZoneDynamic\" style=\"\r\n  width:100%;\r\n  aspect-ratio:1125/632;\r\n   position:relative;\r\n  overflow:hidden;\r\n  background:#000;\r\n  font-family:Arial, Helvetica, sans-serif;\r\n  box-sizing:border-box;\r\n\">\r\n\r\n  <!-- Always-visible background layers -->\r\n  <div id=\"cmptvBgLayerA\" style=\"\r\n    position:absolute;\r\n    inset:0;\r\n    background:\r\n      linear-gradient(to bottom, rgba(0,0,0,0.18), rgba(0,0,0,0.50)),\r\n      url(\'https://communitymarketplace.ca/images/pagephotos/8/1206/4164f13a985c86ebdd410146.jpg\') center center / cover no-repeat;\r\n    opacity:1;\r\n    transform:scale(1.06);\r\n    z-index:1;\r\n    will-change:opacity, transform, background-image, background-position;\r\n  \"></div>\r\n\r\n  <div id=\"cmptvBgLayerB\" style=\"\r\n    position:absolute;\r\n    inset:0;\r\n    background:\r\n      linear-gradient(to bottom, rgba(0,0,0,0.18), rgba(0,0,0,0.50)),\r\n      url(\'https://communitymarketplace.ca/images/pagephotos/8/1206/4139689b84da4e31786ce97e.jpg\') center center / cover no-repeat;\r\n    opacity:0;\r\n    transform:scale(1.10);\r\n    z-index:2;\r\n    will-change:opacity, transform, background-image, background-position;\r\n  \"></div>\r\n\r\n  <!-- Title -->\r\n  <div id=\"cmptvMainHeadline\" style=\"\r\n    position:absolute;\r\n    bottom:143px;\r\n    left:2%;\r\n    width:95%;\r\n    height:40px;\r\n    background-color:rgba(0,102,204,0.48);\r\n    color:#fff;\r\n    font-size:28px;\r\n    font-weight:bold;\r\n    text-transform:uppercase;\r\n    padding:0 19px;\r\n    line-height:40px;\r\n    text-align:left;\r\n    text-shadow:1px 1px 4px #000;\r\n    white-space:nowrap;\r\n    overflow:hidden;\r\n    text-overflow:ellipsis;\r\n    box-sizing:border-box;\r\n    z-index:10;\r\n    opacity:0;\r\n    clip-path:inset(0 100% 0 0);\r\n    will-change:opacity, clip-path;\r\n  \">\r\n    <span style=\"position:relative; top:2px; display:block;\">Loading title...</span>\r\n  </div>\r\n\r\n  <!-- Description -->\r\n  <div id=\"cmptvMainDescription\" style=\"\r\n    position:absolute;\r\n    bottom:32px;\r\n    left:2%;\r\n    width:95%;\r\n    height:97px;\r\n    min-height:97px;\r\n    max-height:97px;\r\n    background-color:rgba(255,255,255,0.52);\r\n    color:#000;\r\n    font-size:35px;\r\n    font-weight:500;\r\n    padding:5px 19px 5px 19px;\r\n    line-height:41px;\r\n    letter-spacing:-0.2px;\r\n    overflow:hidden;\r\n    box-sizing:border-box;\r\n    z-index:10;\r\n    display:-webkit-box;\r\n    -webkit-line-clamp:2;\r\n    -webkit-box-orient:vertical;\r\n    opacity:0;\r\n    clip-path:inset(0 100% 0 0);\r\n    will-change:opacity, clip-path;\r\n  \">Loading description...</div>\r\n</div>\r\n\r\n<script>\r\n(function () {\r\n  const posts = [\r\n    {\r\n      title: \"MARKETPLACE EVENT AT LA FITNESS OSHAWA\",\r\n      desc: \"Marketplace Event at LA Fitness Oshawa was a huge success and created strong community visibility for local support initiatives.\",\r\n      images: [\r\n        \"https://communitymarketplace.ca/images/pagephotos/8/1206/4164f13a985c86ebdd410146.jpg\",\r\n        \"https://communitymarketplace.ca/images/pagephotos/8/1206/4139689b84da4e31786ce97e.jpg\",\r\n        \"https://communitymarketplace.ca/images/pagephotos/8/1206/9890959785f3e1d236d5d41a.jpg\",\r\n        \"https://communitymarketplace.ca/images/pagephotos/8/1206/708dceb9699df3549516f337.jpg\"\r\n      ]\r\n    },\r\n  ];\r\n\r\n  const POST_DURATION = 15000;\r\n  const IMAGE_OVERLAP_FADE = 520;\r\n\r\n  /* Slower bar gradient travel */\r\n  const TEXT_REVEAL_IN_TITLE = 2200;\r\n  const TEXT_REVEAL_IN_DESC = 2500;\r\n  const TEXT_REVEAL_OUT_TITLE = 1900;\r\n  const TEXT_REVEAL_OUT_DESC = 2200;\r\n\r\n  /* Strong bar fade */\r\n  const TEXT_FADE_IN_TITLE = 1450;\r\n  const TEXT_FADE_IN_DESC = 1650;\r\n  const TEXT_FADE_OUT_TITLE = 1200;\r\n  const TEXT_FADE_OUT_DESC = 1400;\r\n\r\n  const bgA = document.getElementById(\"cmptvBgLayerA\");\r\n  const bgB = document.getElementById(\"cmptvBgLayerB\");\r\n  const titleBox = document.getElementById(\"cmptvMainHeadline\");\r\n  const titleSpan = titleBox.querySelector(\"span\");\r\n  const descBox = document.getElementById(\"cmptvMainDescription\");\r\n\r\n  let showingA = true;\r\n  let postIndex = 0;\r\n  let imageStepTimer = null;\r\n  let postTimer = null;\r\n  let motionSeed = 0;\r\n\r\n  const motionPatterns = [\r\n    { start: 1.14, end: 1.03, pos: \"46% 48%\" },\r\n    { start: 1.03, end: 1.14, pos: \"54% 52%\" },\r\n    { start: 1.12, end: 1.04, pos: \"50% 42%\" },\r\n    { start: 1.04, end: 1.13, pos: \"50% 58%\" },\r\n    { start: 1.13, end: 1.05, pos: \"42% 50%\" },\r\n    { start: 1.05, end: 1.13, pos: \"58% 50%\" },\r\n    { start: 1.15, end: 1.04, pos: \"47% 45%\" },\r\n    { start: 1.04, end: 1.15, pos: \"53% 55%\" }\r\n  ];\r\n\r\n  function preloadImages() {\r\n    const seen = {};\r\n    posts.forEach(post => {\r\n      (post.images || []).forEach(url => {\r\n        if (!url || seen[url]) return;\r\n        seen[url] = true;\r\n        const img = new Image();\r\n        img.src = url;\r\n      });\r\n    });\r\n  }\r\n\r\n  function truncateText(text, maxChars) {\r\n    if (!text) return \"\";\r\n    const clean = String(text).replace(/\\s+/g, \" \").trim();\r\n    if (clean.length <= maxChars) return clean;\r\n    return clean.substring(0, maxChars).replace(/\\s+\\S*$/, \"\") + \"...\";\r\n  }\r\n\r\n  function makeBg(url, pos) {\r\n    return \"linear-gradient(to bottom, rgba(0,0,0,0.18), rgba(0,0,0,0.50)), url(\'\" + url + \"\') \" + pos + \" / cover no-repeat\";\r\n  }\r\n\r\n  function getVisibleLayer() {\r\n    return showingA ? bgA : bgB;\r\n  }\r\n\r\n  function getHiddenLayer() {\r\n    return showingA ? bgB : bgA;\r\n  }\r\n\r\n  function nextMotion() {\r\n    const pattern = motionPatterns[motionSeed % motionPatterns.length];\r\n    motionSeed++;\r\n    return pattern;\r\n  }\r\n\r\n  function instantSetVisible(url, slotDuration) {\r\n    const visible = getVisibleLayer();\r\n    const hidden = getHiddenLayer();\r\n    const motion = nextMotion();\r\n\r\n    visible.style.transition = \"none\";\r\n    visible.style.background = makeBg(url, motion.pos);\r\n    visible.style.opacity = \"1\";\r\n    visible.style.transform = \"scale(\" + motion.start + \")\";\r\n    void visible.offsetWidth;\r\n    visible.style.transition = \"transform \" + slotDuration + \"ms ease-out\";\r\n    visible.style.transform = \"scale(\" + motion.end + \")\";\r\n\r\n    hidden.style.transition = \"none\";\r\n    hidden.style.opacity = \"0\";\r\n  }\r\n\r\n  function transitionToImage(url, slotDuration) {\r\n    const visible = getVisibleLayer();\r\n    const hidden = getHiddenLayer();\r\n    const motionIn = nextMotion();\r\n    const motionOut = nextMotion();\r\n\r\n    hidden.style.transition = \"none\";\r\n    hidden.style.background = makeBg(url, motionIn.pos);\r\n    hidden.style.opacity = \"0\";\r\n    hidden.style.transform = \"scale(\" + motionIn.start + \")\";\r\n    void hidden.offsetWidth;\r\n\r\n    hidden.style.transition =\r\n      \"opacity \" + IMAGE_OVERLAP_FADE + \"ms ease-in-out, transform \" + slotDuration + \"ms ease-out\";\r\n    hidden.style.opacity = \"1\";\r\n    hidden.style.transform = \"scale(\" + motionIn.end + \")\";\r\n\r\n    visible.style.transition =\r\n      \"opacity \" + IMAGE_OVERLAP_FADE + \"ms ease-in-out, transform \" + slotDuration + \"ms ease-out\";\r\n    visible.style.opacity = \"1\";\r\n    visible.style.transform = \"scale(\" + motionOut.end + \")\";\r\n\r\n    setTimeout(() => {\r\n      visible.style.transition = \"none\";\r\n      visible.style.opacity = \"0\";\r\n      showingA = !showingA;\r\n    }, IMAGE_OVERLAP_FADE + 30);\r\n  }\r\n\r\n  function revealTextLeftToRight() {\r\n    titleBox.style.transition = \"none\";\r\n    descBox.style.transition = \"none\";\r\n\r\n    titleBox.style.opacity = \"0\";\r\n    descBox.style.opacity = \"0\";\r\n    titleBox.style.clipPath = \"inset(0 100% 0 0)\";\r\n    descBox.style.clipPath = \"inset(0 100% 0 0)\";\r\n    void titleBox.offsetWidth;\r\n\r\n    titleBox.style.transition =\r\n      \"clip-path \" + TEXT_REVEAL_IN_TITLE + \"ms ease-in-out, opacity \" + TEXT_FADE_IN_TITLE + \"ms ease-in-out\";\r\n    descBox.style.transition =\r\n      \"clip-path \" + TEXT_REVEAL_IN_DESC + \"ms ease-in-out, opacity \" + TEXT_FADE_IN_DESC + \"ms ease-in-out\";\r\n\r\n    titleBox.style.opacity = \"1\";\r\n    descBox.style.opacity = \"1\";\r\n    titleBox.style.clipPath = \"inset(0 0 0 0)\";\r\n    descBox.style.clipPath = \"inset(0 0 0 0)\";\r\n  }\r\n\r\n  function hideTextBackToStart(cb) {\r\n    titleBox.style.transition =\r\n      \"clip-path \" + TEXT_REVEAL_OUT_TITLE + \"ms ease-in-out, opacity \" + TEXT_FADE_OUT_TITLE + \"ms ease-in-out\";\r\n    descBox.style.transition =\r\n      \"clip-path \" + TEXT_REVEAL_OUT_DESC + \"ms ease-in-out, opacity \" + TEXT_FADE_OUT_DESC + \"ms ease-in-out\";\r\n\r\n    titleBox.style.clipPath = \"inset(0 100% 0 0)\";\r\n    descBox.style.clipPath = \"inset(0 100% 0 0)\";\r\n    titleBox.style.opacity = \"0\";\r\n    descBox.style.opacity = \"0\";\r\n\r\n    setTimeout(() => {\r\n      if (cb) cb();\r\n    }, TEXT_REVEAL_OUT_DESC + 140);\r\n  }\r\n\r\n  function setPostText(post) {\r\n    titleSpan.textContent = truncateText(post.title || \"Community Update\", 90);\r\n    descBox.textContent = truncateText(post.desc || \"Latest community update.\", 108);\r\n  }\r\n\r\n  function schedulePostImages(post) {\r\n    if (imageStepTimer) {\r\n      clearInterval(imageStepTimer);\r\n      imageStepTimer = null;\r\n    }\r\n\r\n    const images = Array.isArray(post.images) && post.images.length ? post.images : [posts[0].images[0]];\r\n    const count = images.length;\r\n    const perImageSlot = POST_DURATION / count;\r\n\r\n    instantSetVisible(images[0], perImageSlot);\r\n\r\n    if (count === 1) return;\r\n\r\n    let imgIndex = 0;\r\n    imageStepTimer = setInterval(() => {\r\n      imgIndex = (imgIndex + 1) % count;\r\n      transitionToImage(images[imgIndex], perImageSlot);\r\n    }, perImageSlot);\r\n  }\r\n\r\n  function startPost(idx, isInitial) {\r\n    const post = posts[idx];\r\n    if (!post) return;\r\n\r\n    if (isInitial) {\r\n      setPostText(post);\r\n      schedulePostImages(post);\r\n      setTimeout(revealTextLeftToRight, 240);\r\n    } else {\r\n      hideTextBackToStart(() => {\r\n        setPostText(post);\r\n        schedulePostImages(post);\r\n        setTimeout(revealTextLeftToRight, 320);\r\n      });\r\n    }\r\n  }\r\n\r\n  function nextPost() {\r\n    postIndex = (postIndex + 1) % posts.length;\r\n    startPost(postIndex, false);\r\n  }\r\n\r\n  preloadImages();\r\n  startPost(postIndex, true);\r\n  postTimer = setInterval(nextPost, POST_DURATION);\r\n})();\r\n</script>',1,'',NULL,NULL,'2025-08-22 15:57:14',NULL,1,'mod_custom',1,1,'{\"prepare_content\":0,\"backgroundimage\":\"\",\"layout\":\"_:default\",\"moduleclass_sfx\":\"\",\"cache\":1,\"cache_time\":900,\"cachemode\":\"static\",\"module_tag\":\"div\",\"bootstrap_size\":\"0\",\"header_tag\":\"h3\",\"header_class\":\"\",\"style\":\"0\"}',0,'*');
INSERT INTO `n36ic_modules` (`id`, `asset_id`, `title`, `note`, `content`, `ordering`, `position`, `checked_out`, `checked_out_time`, `publish_up`, `publish_down`, `published`, `module`, `access`, `showtitle`, `params`, `client_id`, `language`) VALUES (312,519,'CMPTV HEADLINES LIVE TV','','<!-- ENTERPRISE HEADLINE ZONE: 1025x384px / AUTO-FIT TEXT -->\r\n<div id=\"rssHeadlineZone\" style=\"\r\n  width:100%;\r\n  aspect-ratio:1025/384;\r\n   background:#000;\r\n  color:#fff;\r\n  font-family:Arial, Helvetica, sans-serif;\r\n  position:relative;\r\n  overflow:hidden;\r\n  box-sizing:border-box;\r\n  padding:4px 28px 22px 14px;\r\n\">\r\n  <div id=\"rssHeadlineContent\" style=\"\r\n    width:100%;\r\n    height:100%;\r\n    opacity:0;\r\n    transition:opacity 0.9s ease-in-out;\r\n    display:flex;\r\n    flex-direction:column;\r\n    justify-content:center;\r\n    box-sizing:border-box;\r\n  \">\r\n    Loading events...\r\n  </div>\r\n</div>\r\n\r\n<script>\r\n(function () {\r\n  const headlines = [\r\n    {\r\n      title: \"MEMBER APPRECIATION DAY MARKET\",\r\n      dateTime: \"Sat, Nov 25, 2025 — 12:30 PM to 3:00 PM\",\r\n      location: \"1189 Ritson Rd N #4a, Oshawa, Ontario\",\r\n      organizer: \"L.A. Fitness Oshawa\"\r\n    },\r\n    {\r\n      title: \"LOCAL BUSINESS NETWORKING NIGHT\",\r\n      dateTime: \"Tue, Dec 5, 2025 — 6:00 PM to 9:00 PM\",\r\n      location: \"Durham Event Centre, Whitby\",\r\n      organizer: \"Canada’s Marketplace\"\r\n    }\r\n  ];\r\n\r\n  const display = document.getElementById(\"rssHeadlineContent\");\r\n  let i = 0;\r\n\r\n  function escapeHtml(str) {\r\n    return String(str || \"\").replace(/[&<>\"\']/g, function (m) {\r\n      return ({\r\n        \"&\": \"&amp;\",\r\n        \"<\": \"&lt;\",\r\n        \">\": \"&gt;\",\r\n        \'\"\': \"&quot;\",\r\n        \"\'\": \"&#039;\"\r\n      })[m];\r\n    });\r\n  }\r\n\r\n  function buildLayout(e) {\r\n    display.innerHTML = `\r\n      <div id=\"headlineFitWrap\" style=\"\r\n        width:100%;\r\n        height:100%;\r\n        display:flex;\r\n        flex-direction:column;\r\n        justify-content:center;\r\n        gap:8px;\r\n        overflow:hidden;\r\n      \">\r\n        <div class=\"fit-line title-line\" style=\"\r\n          font-weight:700;\r\n          text-transform:uppercase;\r\n          white-space:nowrap;\r\n          overflow:visible;\r\n          text-overflow:clip;\r\n          line-height:1.0;\r\n          letter-spacing:0;\r\n          text-shadow:0 2px 4px rgba(0,0,0,0.55);\r\n        \">${escapeHtml(e.title)}</div>\r\n\r\n        <div class=\"fit-line datetime-line\" style=\"\r\n          font-weight:500;\r\n          white-space:nowrap;\r\n          overflow:hidden;\r\n          text-overflow:ellipsis;\r\n          line-height:1.05;\r\n          text-shadow:0 2px 4px rgba(0,0,0,0.45);\r\n        \">${escapeHtml(e.dateTime)}</div>\r\n\r\n        <div class=\"fit-line location-line\" style=\"\r\n          font-weight:500;\r\n          white-space:nowrap;\r\n          overflow:hidden;\r\n          text-overflow:ellipsis;\r\n          line-height:1.05;\r\n          text-shadow:0 2px 4px rgba(0,0,0,0.45);\r\n        \">${escapeHtml(e.location)}</div>\r\n\r\n        <div class=\"fit-line organizer-line\" style=\"\r\n          font-weight:500;\r\n          white-space:nowrap;\r\n          overflow:hidden;\r\n          text-overflow:ellipsis;\r\n          line-height:1.05;\r\n          text-shadow:0 2px 4px rgba(0,0,0,0.45);\r\n        \">Organized by: ${escapeHtml(e.organizer)}</div>\r\n      </div>\r\n    `;\r\n  }\r\n\r\n  function fitHeadlineBlock() {\r\n    const wrap = document.getElementById(\"headlineFitWrap\");\r\n    if (!wrap) return;\r\n\r\n    const title = wrap.querySelector(\".title-line\");\r\n    const dateTime = wrap.querySelector(\".datetime-line\");\r\n    const location = wrap.querySelector(\".location-line\");\r\n    const organizer = wrap.querySelector(\".organizer-line\");\r\n\r\n    const maxSizes = {\r\n      title: 56,\r\n      dateTime: 46,\r\n      location: 42,\r\n      organizer: 38\r\n    };\r\n\r\n    const minSizes = {\r\n      title: 16,\r\n      dateTime: 18,\r\n      location: 16,\r\n      organizer: 15\r\n    };\r\n\r\n    const ratios = {\r\n      dateTime: maxSizes.dateTime / maxSizes.title,\r\n      location: maxSizes.location / maxSizes.title,\r\n      organizer: maxSizes.organizer / maxSizes.title\r\n    };\r\n\r\n    let titleSize = maxSizes.title;\r\n\r\n    function applySizes(base) {\r\n      const dt = Math.max(minSizes.dateTime, Math.round(base * ratios.dateTime));\r\n      const loc = Math.max(minSizes.location, Math.round(base * ratios.location));\r\n      const org = Math.max(minSizes.organizer, Math.round(base * ratios.organizer));\r\n\r\n      title.style.fontSize = base + \"px\";\r\n      dateTime.style.fontSize = dt + \"px\";\r\n      location.style.fontSize = loc + \"px\";\r\n      organizer.style.fontSize = org + \"px\";\r\n\r\n      const dynamicGap = Math.max(4, Math.round(base * 0.14));\r\n      wrap.style.gap = dynamicGap + \"px\";\r\n    }\r\n\r\n    applySizes(titleSize);\r\n\r\n    while (titleSize > minSizes.title) {\r\n      const fitsHeight = wrap.scrollHeight <= wrap.clientHeight;\r\n      const fitsTitleWidth = title.scrollWidth <= title.clientWidth;\r\n      const fitsDateWidth = dateTime.scrollWidth <= dateTime.clientWidth;\r\n      const fitsLocationWidth = location.scrollWidth <= location.clientWidth;\r\n      const fitsOrganizerWidth = organizer.scrollWidth <= organizer.clientWidth;\r\n\r\n      if (fitsHeight && fitsTitleWidth && fitsDateWidth && fitsLocationWidth && fitsOrganizerWidth) {\r\n        break;\r\n      }\r\n\r\n      titleSize -= 1;\r\n      applySizes(titleSize);\r\n    }\r\n\r\n    if (title.scrollWidth > title.clientWidth) {\r\n      title.style.letterSpacing = \"-0.3px\";\r\n\r\n      while (titleSize > minSizes.title && title.scrollWidth > title.clientWidth) {\r\n        titleSize -= 1;\r\n        applySizes(titleSize);\r\n      }\r\n    }\r\n  }\r\n\r\n  function showNext() {\r\n    const e = headlines[i];\r\n    display.style.opacity = 0;\r\n\r\n    setTimeout(() => {\r\n      buildLayout(e);\r\n      fitHeadlineBlock();\r\n      display.style.opacity = 1;\r\n      i = (i + 1) % headlines.length;\r\n    }, 900);\r\n  }\r\n\r\n  window.addEventListener(\"resize\", function () {\r\n    fitHeadlineBlock();\r\n  });\r\n\r\n  showNext();\r\n  setInterval(showNext, 12000);\r\n})();\r\n</script>',1,'',49,'2026-07-07 00:08:54',NULL,NULL,1,'mod_custom',1,1,'{\"prepare_content\":0,\"backgroundimage\":\"\",\"layout\":\"_:default\",\"moduleclass_sfx\":\"\",\"cache\":1,\"cache_time\":900,\"cachemode\":\"static\",\"module_tag\":\"div\",\"bootstrap_size\":\"0\",\"header_tag\":\"h3\",\"header_class\":\"\",\"style\":\"0\"}',0,'*');
INSERT INTO `n36ic_modules` (`id`, `asset_id`, `title`, `note`, `content`, `ordering`, `position`, `checked_out`, `checked_out_time`, `publish_up`, `publish_down`, `published`, `module`, `access`, `showtitle`, `params`, `client_id`, `language`) VALUES (313,520,'CMPTV Date Time Clock Logo LIVE TV','','<div id=\"cmptv-logo-clock-banner\" style=\"\r\n  position: relative;\r\n  width: 700px;\r\n  height: 90px;\r\n  margin: 0 auto;\r\n  overflow: hidden;\r\n  background: #000;\r\n\">\r\n  <!-- OPTIONAL BACKGROUND IMAGE -->\r\n  <div id=\"cmptv-banner-bg\" style=\"\r\n    position: absolute;\r\n    inset: 0;\r\n    background-repeat: no-repeat;\r\n    background-position: center center;\r\n    background-size: cover;\r\n    z-index: 1;\r\n    pointer-events: none;\r\n  \"></div>\r\n\r\n  <!-- LOGO -->\r\n  <img id=\"cmptv-banner-logo\" src=\"\" alt=\"CMPTV Logo\" style=\"\r\n    position: absolute;\r\n    display: block;\r\n    z-index: 2;\r\n    pointer-events: none;\r\n  \">\r\n\r\n  <!-- OPTIONAL DARK OVERLAY -->\r\n  <div id=\"cmptv-banner-overlay\" style=\"\r\n    position: absolute;\r\n    inset: 0;\r\n    z-index: 3;\r\n    pointer-events: none;\r\n  \"></div>\r\n\r\n  <!-- CLOCK -->\r\n  <div id=\"clock-banner-time\" style=\"\r\n    position: absolute;\r\n    font-family: Arial, sans-serif;\r\n    font-weight: bold;\r\n    line-height: 1;\r\n    color: #ffffff;\r\n    white-space: nowrap;\r\n    z-index: 4;\r\n    pointer-events: none;\r\n  \">\r\n    Loading...\r\n  </div>\r\n</div>\r\n\r\n<script>\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n\r\n  /* =========================================================\r\n     CMPTV LOGO & CLOCK CUSTOM MODULE CONTROLS\r\n     Change only these values for quick adjustments\r\n     ========================================================= */\r\n\r\n  const SETTINGS = {\r\n    /* BANNER */\r\n    bannerWidth: 680,\r\n    bannerHeight: 100,\r\n    bannerBackgroundColor: \"#000000\",\r\n\r\n    /* OPTIONAL BACKGROUND IMAGE */\r\n    useBackgroundImage: false,\r\n    backgroundImage: \"\",\r\n    backgroundSize: \"cover\",         // cover | contain | 680px 100px\r\n    backgroundPositionX: 0,          // + right, - left\r\n    backgroundPositionY: 0,          // + down, - up\r\n    backgroundOpacity: 1,\r\n\r\n    /* LOGO */\r\n    logoImage: \"https://mycommunitytv.org/images/give-back-gift-cards-745-x-120-px-1.png\",\r\n    logoWidth: 680,                  // exact px width\r\n    logoHeight: 100,                 // exact px height\r\n    logoX: -20,                        // + right, - left\r\n    logoY: +5,                        // + down, - up\r\n    logoOpacity: 1,\r\n    logoFit: \"contain\",              // contain | cover | fill\r\n    logoAnchorX: \"left\",             // left | center | right\r\n    logoAnchorY: \"top\",              // top | center | bottom\r\n\r\n    /* OVERLAY FOR READABILITY */\r\n    useOverlay: false,\r\n    overlayColor: \"rgba(0,0,0,0.20)\",\r\n\r\n    /* CLOCK */\r\n    showClock: true,\r\n    clockX: 170,                     // + right, - left\r\n    clockY: 6,                       // + down, - up\r\n    clockFontSize: 35.5,\r\n    clockFontFamily: \"Arial, sans-serif\",\r\n    clockFontWeight: \"bold\",\r\n    clockColor: \"#ffffff\",\r\n    clockShadow: \"2px 2px 5px rgba(0,0,0,0.7)\",\r\n    clockLetterSpacing: \"0px\",\r\n    clockAlign: \"left\",              // left | center | right\r\n\r\n    /* DATE / TIME FORMAT */\r\n    use12Hour: true,\r\n    showWeekday: true,\r\n    showMonth: true,\r\n    showDay: true,\r\n    showYear: false,\r\n    showTime: true,\r\n    showSeconds: false,\r\n    showAMPM: true,\r\n\r\n    /* TEXT STYLE */\r\n    monthFormat: \"short\",            // short | long | numeric\r\n    weekdayFormat: \"short\",          // short | long\r\n    separator1: \", \",\r\n    separator2: \", \",\r\n\r\n    /* TIMEZONE / LOCALE */\r\n    locale: undefined,               // undefined = browser/site default, or \"en-CA\"\r\n    timeZone: undefined              // undefined = browser/site default, or \"America/Toronto\"\r\n  };\r\n\r\n  const banner = document.getElementById(\"cmptv-logo-clock-banner\");\r\n  const bg = document.getElementById(\"cmptv-banner-bg\");\r\n  const logo = document.getElementById(\"cmptv-banner-logo\");\r\n  const overlay = document.getElementById(\"cmptv-banner-overlay\");\r\n  const clock = document.getElementById(\"clock-banner-time\");\r\n\r\n  function applyBannerSettings() {\r\n    banner.style.width = SETTINGS.bannerWidth + \"px\";\r\n    banner.style.height = SETTINGS.bannerHeight + \"px\";\r\n    banner.style.background = SETTINGS.bannerBackgroundColor;\r\n\r\n    if (SETTINGS.useBackgroundImage && SETTINGS.backgroundImage) {\r\n      bg.style.backgroundImage = `url(\"${SETTINGS.backgroundImage}\")`;\r\n      bg.style.backgroundSize = SETTINGS.backgroundSize;\r\n      bg.style.backgroundPosition =\r\n        `calc(50% + ${SETTINGS.backgroundPositionX}px) calc(50% + ${SETTINGS.backgroundPositionY}px)`;\r\n      bg.style.opacity = SETTINGS.backgroundOpacity;\r\n      bg.style.display = \"block\";\r\n    } else {\r\n      bg.style.display = \"none\";\r\n    }\r\n\r\n    overlay.style.background = SETTINGS.useOverlay ? SETTINGS.overlayColor : \"transparent\";\r\n  }\r\n\r\n  function getAnchorBaseX() {\r\n    if (SETTINGS.logoAnchorX === \"center\") return (SETTINGS.bannerWidth - SETTINGS.logoWidth) / 2;\r\n    if (SETTINGS.logoAnchorX === \"right\") return SETTINGS.bannerWidth - SETTINGS.logoWidth;\r\n    return 0;\r\n  }\r\n\r\n  function getAnchorBaseY() {\r\n    if (SETTINGS.logoAnchorY === \"center\") return (SETTINGS.bannerHeight - SETTINGS.logoHeight) / 2;\r\n    if (SETTINGS.logoAnchorY === \"bottom\") return SETTINGS.bannerHeight - SETTINGS.logoHeight;\r\n    return 0;\r\n  }\r\n\r\n  function applyLogoSettings() {\r\n    logo.src = SETTINGS.logoImage;\r\n    logo.style.width = SETTINGS.logoWidth + \"px\";\r\n    logo.style.height = SETTINGS.logoHeight + \"px\";\r\n    logo.style.left = (getAnchorBaseX() + SETTINGS.logoX) + \"px\";\r\n    logo.style.top = (getAnchorBaseY() + SETTINGS.logoY) + \"px\";\r\n    logo.style.opacity = SETTINGS.logoOpacity;\r\n    logo.style.objectFit = SETTINGS.logoFit;\r\n  }\r\n\r\n  function formatParts(now) {\r\n    const parts = [];\r\n\r\n    if (SETTINGS.showWeekday) {\r\n      const weekday = now.toLocaleDateString(SETTINGS.locale, {\r\n        weekday: SETTINGS.weekdayFormat,\r\n        timeZone: SETTINGS.timeZone\r\n      });\r\n      parts.push(weekday);\r\n    }\r\n\r\n    const dateBits = [];\r\n\r\n    if (SETTINGS.showMonth) {\r\n      let monthValue;\r\n      if (SETTINGS.monthFormat === \"numeric\") {\r\n        monthValue = now.toLocaleDateString(SETTINGS.locale, {\r\n          month: \"numeric\",\r\n          timeZone: SETTINGS.timeZone\r\n        });\r\n      } else {\r\n        monthValue = now.toLocaleDateString(SETTINGS.locale, {\r\n          month: SETTINGS.monthFormat,\r\n          timeZone: SETTINGS.timeZone\r\n        });\r\n      }\r\n      dateBits.push(monthValue);\r\n    }\r\n\r\n    if (SETTINGS.showDay) {\r\n      const dayValue = now.toLocaleDateString(SETTINGS.locale, {\r\n        day: \"numeric\",\r\n        timeZone: SETTINGS.timeZone\r\n      });\r\n      dateBits.push(dayValue);\r\n    }\r\n\r\n    if (SETTINGS.showYear) {\r\n      const yearValue = now.toLocaleDateString(SETTINGS.locale, {\r\n        year: \"numeric\",\r\n        timeZone: SETTINGS.timeZone\r\n      });\r\n      dateBits.push(yearValue);\r\n    }\r\n\r\n    if (dateBits.length) {\r\n      parts.push(dateBits.join(\" \"));\r\n    }\r\n\r\n    if (SETTINGS.showTime) {\r\n      const timeOptions = {\r\n        hour: \"numeric\",\r\n        minute: \"2-digit\",\r\n        hour12: SETTINGS.use12Hour,\r\n        timeZone: SETTINGS.timeZone\r\n      };\r\n\r\n      if (SETTINGS.showSeconds) {\r\n        timeOptions.second = \"2-digit\";\r\n      }\r\n\r\n      let timeString = now.toLocaleTimeString(SETTINGS.locale, timeOptions);\r\n\r\n      if (!SETTINGS.showAMPM && SETTINGS.use12Hour) {\r\n        timeString = timeString.replace(/\\s?(AM|PM)$/i, \"\");\r\n      }\r\n\r\n      parts.push(timeString);\r\n    }\r\n\r\n    if (parts.length === 3) {\r\n      return parts[0] + SETTINGS.separator1 + parts[1] + SETTINGS.separator2 + parts[2];\r\n    }\r\n\r\n    if (parts.length === 2) {\r\n      return parts[0] + SETTINGS.separator1 + parts[1];\r\n    }\r\n\r\n    if (parts.length === 1) {\r\n      return parts[0];\r\n    }\r\n\r\n    return \"\";\r\n  }\r\n\r\n  function updateClock() {\r\n    if (!SETTINGS.showClock) {\r\n      clock.style.display = \"none\";\r\n      return;\r\n    }\r\n\r\n    const now = new Date();\r\n    const output = formatParts(now);\r\n\r\n    clock.style.display = \"block\";\r\n    clock.textContent = output || \"Time Unavailable\";\r\n    clock.style.left = SETTINGS.clockX + \"px\";\r\n    clock.style.top = SETTINGS.clockY + \"px\";\r\n    clock.style.fontSize = SETTINGS.clockFontSize + \"px\";\r\n    clock.style.fontFamily = SETTINGS.clockFontFamily;\r\n    clock.style.fontWeight = SETTINGS.clockFontWeight;\r\n    clock.style.color = SETTINGS.clockColor;\r\n    clock.style.textShadow = SETTINGS.clockShadow;\r\n    clock.style.letterSpacing = SETTINGS.clockLetterSpacing;\r\n    clock.style.textAlign = SETTINGS.clockAlign;\r\n  }\r\n\r\n  applyBannerSettings();\r\n  applyLogoSettings();\r\n  updateClock();\r\n\r\n  setInterval(updateClock, SETTINGS.showSeconds ? 1000 : 15000);\r\n});\r\n</script>',1,'cmp',49,'2026-07-06 22:08:55',NULL,NULL,1,'mod_custom',1,1,'{\"prepare_content\":0,\"backgroundimage\":\"\",\"layout\":\"_:default\",\"moduleclass_sfx\":\"\",\"cache\":1,\"cache_time\":900,\"cachemode\":\"static\",\"module_tag\":\"div\",\"bootstrap_size\":\"0\",\"header_tag\":\"h3\",\"header_class\":\"\",\"style\":\"0\"}',0,'*');
INSERT INTO `n36ic_modules` (`id`, `asset_id`, `title`, `note`, `content`, `ordering`, `position`, `checked_out`, `checked_out_time`, `publish_up`, `publish_down`, `published`, `module`, `access`, `showtitle`, `params`, `client_id`, `language`) VALUES (314,521,'CMPTV WEATHER LIVE TV','','<!-- CMPTV WEATHER MODULE (745 x 120) -->\r\n<div id=\"cmptvWeather\" style=\"\r\n  width: 745px;\r\n  height: 120px;\r\n  background:#08488D;\r\n  overflow:hidden;\r\n  position:relative;\r\n\">\r\n\r\n  <!-- TOP VIEW -->\r\n  <div id=\"weatherTop\" style=\"\r\n    position:absolute;\r\n    inset:0;\r\n    opacity:1;\r\n    transition:opacity 1s ease-in-out;\r\n  \">\r\n    <img id=\"weatherImgTop\"\r\n      src=\"https://w.bookcdn.com/weather/picture/3_2015_1_1_0a4d94_750_ffffff_333333_08488D_1_ffffff_333333_0_6.png?scode=2&domid=w209&anc_id=55640\"\r\n      style=\"\r\n        width:100%;\r\n        display:block;\r\n      \">\r\n  </div>\r\n\r\n  <!-- BOTTOM VIEW -->\r\n  <div id=\"weatherBottom\" style=\"\r\n    position:absolute;\r\n    inset:0;\r\n    opacity:0;\r\n    transition:opacity 1s ease-in-out;\r\n  \">\r\n    <img id=\"weatherImgBottom\"\r\n      src=\"https://w.bookcdn.com/weather/picture/3_2015_1_1_0a4d94_750_ffffff_333333_08488D_1_ffffff_333333_0_6.png?scode=2&domid=w209&anc_id=55640\"\r\n      style=\"\r\n        width:100%;\r\n        display:block;\r\n      \">\r\n  </div>\r\n\r\n</div>\r\n\r\n<script>\r\n(function(){\r\n\r\n  const top = document.getElementById(\"weatherTop\");\r\n  const bottom = document.getElementById(\"weatherBottom\");\r\n\r\n  const imgTop = document.getElementById(\"weatherImgTop\");\r\n  const imgBottom = document.getElementById(\"weatherImgBottom\");\r\n\r\n  const WEATHER_URL = imgTop.src;\r\n\r\n  let showingTop = true;\r\n\r\n  /*\r\n    MANUAL IMAGE ALIGNMENT CONTROLS\r\n    Negative value = move image UP\r\n    Positive value = move image DOWN\r\n  */\r\n  const TOP_IMAGE_OFFSET_Y = -10;      // requested: top image up by 5px\r\n  const BOTTOM_IMAGE_OFFSET_Y = -152; // requested: bottom image up by 10px from previous -120\r\n\r\n  function applyImageOffsets() {\r\n    imgTop.style.transform = \"translateY(\" + TOP_IMAGE_OFFSET_Y + \"px)\";\r\n    imgBottom.style.transform = \"translateY(\" + BOTTOM_IMAGE_OFFSET_Y + \"px)\";\r\n  }\r\n\r\n  function swap(){\r\n    if(showingTop){\r\n      top.style.opacity = 0;\r\n      bottom.style.opacity = 1;\r\n    } else {\r\n      top.style.opacity = 1;\r\n      bottom.style.opacity = 0;\r\n    }\r\n    showingTop = !showingTop;\r\n  }\r\n\r\n  function refreshWeather(){\r\n    const fresh = WEATHER_URL + \"&t=\" + Date.now();\r\n    imgTop.src = fresh;\r\n    imgBottom.src = fresh;\r\n  }\r\n\r\n  imgTop.onload = applyImageOffsets;\r\n  imgBottom.onload = applyImageOffsets;\r\n\r\n  applyImageOffsets();\r\n\r\n  setInterval(swap, 60000);            // 1 min switch\r\n  setInterval(refreshWeather, 300000); // 5 min refresh\r\n\r\n})();\r\n</script>',37,'',49,'2026-07-06 22:11:48',NULL,NULL,1,'mod_custom',1,1,'{\"prepare_content\":0,\"backgroundimage\":\"\",\"layout\":\"_:default\",\"moduleclass_sfx\":\"\",\"cache\":1,\"cache_time\":900,\"cachemode\":\"static\",\"module_tag\":\"div\",\"bootstrap_size\":\"0\",\"header_tag\":\"h3\",\"header_class\":\"\",\"style\":\"0\"}',0,'*');
INSERT INTO `n36ic_modules` (`id`, `asset_id`, `title`, `note`, `content`, `ordering`, `position`, `checked_out`, `checked_out_time`, `publish_up`, `publish_down`, `published`, `module`, `access`, `showtitle`, `params`, `client_id`, `language`) VALUES (316,523,'CMPTV Announcement Ticker LIVE TV','','<div id=\"ticker-container-wrapper\" style=\"width:100%; height:60px; background-color:#000 !important; overflow:hidden; position:relative; font-family:Arial, sans-serif; border-top:2px solid #333; border-bottom:4px solid #333;\">\r\n\r\n  <style>\r\n    @keyframes final-scroll-left {\r\n      0%   { transform: translateX(100%); }\r\n      100% { transform: translateX(-100%); }\r\n    }\r\n  </style>\r\n\r\n  <div id=\"ticker-content-scroller\" style=\"\r\n    /* --- INLINE STYLES TO OVERRIDE TEMPLATE --- */\r\n    position: absolute;\r\n    white-space: nowrap;\r\n    font-weight: bold;\r\n    font-size: 48px;\r\n    color: #fff !important;\r\n    padding: 2px 0;\r\n    /* --- ANIMATION PROPERTIES --- */\r\n    animation-name: final-scroll-left;\r\n    animation-duration: 520s;\r\n    animation-timing-function: linear;\r\n    animation-iteration-count: infinite;\r\n  \">\r\n    <span class=\"ticker-item\" style=\"display: inline-block; padding: 0 30px; color: #fff !important;\">\r\n      • <span class=\"light-grey-text\" style=\"color: #ccc !important;\">YOUR OWN COMMUNITY TV:</span> Ask us how to start a channel for your town.\r\n    </span>\r\n    <span class=\"ticker-item\" style=\"display: inline-block; padding: 0 30px; color: #fff !important;\">\r\n      • <span class=\"light-grey-text\" style=\"color: #ccc !important;\">BROADCAST YOUR CAUSE:</span> We provide the tools to share your community\'s story.\r\n    </span>\r\n    <span class=\"ticker-item\" style=\"display: inline-block; padding: 0 30px; color: #fff !important;\">\r\n      • <span class=\"light-grey-text\" style=\"color: #ccc !important;\">GIVE BACK GIFT CARDS:</span> Support local schools & charities with every purchase.\r\n    </span>\r\n    <span class=\"ticker-item\" style=\"display: inline-block; padding: 0 30px; color: #fff !important;\">\r\n      • <span class=\"light-grey-text\" style=\"color: #ccc !important;\">LEVEL UP FOR LOCAL:</span> Get exclusive deals while supporting your local economy.\r\n    </span>\r\n    <span class=\"ticker-item\" style=\"display: inline-block; padding: 0 30px; color: #fff !important;\">\r\n      • <span class=\"light-grey-text\" style=\"color: #ccc !important;\">COMMUNITY HEROES:</span> Thank you to our local contractors for giving back.\r\n    </span>\r\n    <span class=\"ticker-item\" style=\"display: inline-block; padding: 0 30px; color: #fff !important;\">\r\n      • <span class=\"light-grey-text\" style=\"color: #ccc !important;\">YOUR OWN COMMUNITY TV:</span> Ask us how to start a channel for your town.\r\n    </span>\r\n    <span class=\"ticker-item\" style=\"display: inline-block; padding: 0 30px; color: #fff !important;\">\r\n      • <span class=\"light-grey-text\" style=\"color: #ccc !important;\">BROADCAST YOUR CAUSE:</span> We provide the tools to share your community\'s story.\r\n    </span>\r\n    <span class=\"ticker-item\" style=\"display: inline-block; padding: 0 30px; color: #fff !important;\">\r\n      • <span class=\"light-grey-text\" style=\"color: #ccc !important;\">GIVE BACK GIFT CARDS:</span> Support local schools & charities with every purchase.\r\n    </span>\r\n    <span class=\"ticker-item\" style=\"display: inline-block; padding: 0 30px; color: #fff !important;\">\r\n      • <span class=\"light-grey-text\" style=\"color: #ccc !important;\">LEVEL UP FOR LOCAL:</span> Get exclusive deals while supporting your local economy.\r\n    </span>\r\n    <span class=\"ticker-item\" style=\"display: inline-block; padding: 0 30px; color: #fff !important;\">\r\n      • <span class=\"light-grey-text\" style=\"color: #ccc !important;\">COMMUNITY HEROES:</span> Thank you to our local contractors for giving back.\r\n    </span>\r\n  </div>\r\n</div>',35,'',NULL,NULL,NULL,NULL,1,'mod_custom',1,1,'{\"prepare_content\":0,\"backgroundimage\":\"\",\"layout\":\"_:default\",\"moduleclass_sfx\":\"\",\"cache\":1,\"cache_time\":900,\"cachemode\":\"static\",\"module_tag\":\"div\",\"bootstrap_size\":\"0\",\"header_tag\":\"h3\",\"header_class\":\"\",\"style\":\"0\"}',0,'*');
INSERT INTO `n36ic_modules` (`id`, `asset_id`, `title`, `note`, `content`, `ordering`, `position`, `checked_out`, `checked_out_time`, `publish_up`, `publish_down`, `published`, `module`, `access`, `showtitle`, `params`, `client_id`, `language`) VALUES (318,525,'CMPTV OFFERS LIVE TV','','<!-- OFFER ZONE MODULE (795x446px with fade image rotation) -->\r\n<div id=\"offerZone\" style=\"\r\n  width: 100%;\r\n  max-width: 795px;\r\n  height: 446px;\r\n  background-color: #000;\r\n  position: relative;\r\n  overflow: hidden;\r\n\">\r\n</div>\r\n\r\n<script>\r\n  const offerFeedURL = \"https://communitymarketplace.ca/rss-proxy.php?url=\" + encodeURIComponent(\"https://lafitnessoshawa.givebackpromotions.org/la-fitness-oshawa-sponsors/sponsor-offers?task=directoryrss.getOffersRss\");\r\n  const zone = document.getElementById(\"offerZone\");\r\n  let images = [];\r\n  let current = 0;\r\n\r\n  function createImageElement(src, index) {\r\n    const img = document.createElement(\"img\");\r\n    img.src = src;\r\n    img.style.cssText = \"position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;opacity:\" + (index === 0 ? 1 : 0) + \";transition:opacity 1s ease-in-out;\";\r\n    return img;\r\n  }\r\n\r\n  function rotateImages() {\r\n    const total = images.length;\r\n    if (total < 2) return;\r\n    images[current].style.opacity = 0;\r\n    current = (current + 1) % total;\r\n    images[current].style.opacity = 1;\r\n  }\r\n\r\n  async function loadRSSImages() {\r\n    try {\r\n      const res = await fetch(offerFeedURL);\r\n      const text = await res.text();\r\n      const parser = new DOMParser();\r\n      const xml = parser.parseFromString(text, \"text/xml\");\r\n      const items = xml.querySelectorAll(\"item\");\r\n\r\n      items.forEach((item, index) => {\r\n        // Try enclosure element first (standard RSS image format)\r\n        const enclosure = item.querySelector(\"enclosure\");\r\n        let imgSrc = enclosure ? enclosure.getAttribute(\"url\") : null;\r\n\r\n        // Fallback: look for img tag in description\r\n        if (!imgSrc) {\r\n          const desc = item.querySelector(\"description\");\r\n          if (desc) {\r\n            const match = desc.textContent.match(/<img[^>]+src=[\"x27]([^\"x27]+)/);\r\n            if (match) imgSrc = match[1];\r\n          }\r\n        }\r\n\r\n        if (imgSrc) {\r\n          const img = createImageElement(imgSrc, index);\r\n          zone.appendChild(img);\r\n          images.push(img);\r\n        }\r\n      });\r\n\r\n      if (images.length > 1) {\r\n        setInterval(rotateImages, 15000);\r\n      }\r\n    } catch (e) {\r\n      console.error(\"RSS feed error:\", e);\r\n    }\r\n  }\r\n\r\n  document.addEventListener(\"DOMContentLoaded\", loadRSSImages);\r\n</script>',34,'',NULL,NULL,NULL,NULL,1,'mod_custom',1,1,'{\"prepare_content\":0,\"backgroundimage\":\"\",\"layout\":\"_:default\",\"moduleclass_sfx\":\"\",\"cache\":1,\"cache_time\":900,\"cachemode\":\"static\",\"module_tag\":\"div\",\"bootstrap_size\":\"0\",\"header_tag\":\"h3\",\"header_class\":\"\",\"style\":\"0\"}',0,'*');
/*!40000 ALTER TABLE `n36ic_modules` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2026-07-07 21:44:33
