;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

UOL Esporte Histórias

Podcast de investigação sobre histórias marcantes do esporte


Sobre meninos e porcos - Epísódio 3: 'Sangue derramado'

Do UOL, em São Paulo

08/12/2021 04h00

Em 1988, a Mancha Verde era sediada um barracão tosco de madeira nos fundos do Parque Antarctica, o antigo estádio do Palmeiras. Isso mudaria graças a uma armação de Cleo Sóstenes, o presidente que viraria herói e mártir da organizada naquele mesmo ano.

Alguns meses antes de ser assassinado, Cleo colocou fogo no barracão da torcida, culpou organizadas rivais e inflamou os membros da Mancha a reerguerem a sede com as próprias mãos, mas dessa vez de alvenaria.

A história é lembrada pelos antigos torcedores da Mancha no terceiro episódio de "Sobre "meninos e porcos", a terceira temporada do podcast "UOL Esporte Histórias", lançado hoje.

"O Cleo não gostava muito desse barraco de madeira, era uma coisa meio derrubada", conta Marco Barney, um torcedor que na época tinha 12 anos e fazia parte da "Mancha Mirim", a versão infantil da torcida. "Aí num belo dia, um dia de semana que não tinha ninguém por lá, à noite, foi lá e meteu gasolina, meteu fogo no barraco."

Ep3 - Reprodução - Reprodução
Capa do episódio 3 de Sobre Meninos e Porcos
Imagem: Reprodução

"Qual era a intenção dele? Sempre que ele falava em fazer uma sede decente, ninguém fazia nada. Então pra galera se coçar, ele meteu fogo no barraco e culpou os nossos rivais", lembra Barney. De acordo com a versão apresentada por Cleo, o incêndio havia sido obra da torcida Independente, a maior organizada do São Paulo, que na época vivia uma rixa intensa com os palmeirenses. Mas não havia provas do envolvimento dos são-paulinos com o incêndio. Mesmo sem acreditar na história, os palmeirenses se mobilizaram.

"O fato é que a gente arregaçou as mangas, inflamados pelo Cleo, que era um líder nato. Cada um chegou com uma contribuição de alguma forma, conseguimos construir nossa primeira sede de alvenaria mesmo, de tijolo, bonitinha e tal."

A história mostra a capacidade de mobilização do fundador e então presidente da entidade. Cleo, nascido no Sergipe, cresceu nos arredores do estádio do Palmeiras e virou a principal liderança da Mancha, fundada em 1983. Cinco anos depois, acabou assassinado a tiros na frente da sede que ajudou a construir. Foi o primeiro torcedor organizado morto no Brasil. O crime, cercado de mistérios até hoje, é o ponto de partida de "Sobre meninos e porcos", que também conta outras histórias das torcidas dos anos 80.

Sobre meninos e porcos

"Sobre Meninos e Porcos" é a terceira temporada do premiado podcast UOL Esporte Histórias, que conta a história de como as torcidas organizadas saíram da festa e chegaram à violência. O relato é centrado no assassinato de Cleo Sóstenes nos anos 1980, considerado o marco da chegada das armas de fogo às brigas de torcida. Você pode conhecer essa história, que os repórteres Adriano Wilkson e Daniel Lisboa investigam há um ano, em um podcast de seis episódios:

Os podcasts do UOL estão disponíveis em uol.com.br/podcasts e em todas as plataformas de distribuição. Você pode ouvir UOL Esporte Histórias, por exemplo, no Spotify, na Apple Podcasts e no YouTube.