;(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

Reconstituição da morte de Marielle terá tiros reais, testemunha-chave e secretário de Segurança

15.mar.2018 - Polícia no local do assassinato da vereadora Marielle Franco (PSOL), no Rio - José Lucena/Futura Press/Folhapress
15.mar.2018 - Polícia no local do assassinato da vereadora Marielle Franco (PSOL), no Rio Imagem: José Lucena/Futura Press/Folhapress

Luis Kawaguti

Do UOL, no Rio

08/05/2018 04h00

Peritos da polícia do Rio de Janeiro usarão tiros reais e levarão à reconstituição do assassinato de Marielle Franco (PSOL) e de seu motorista Anderson Gomes na quinta-feira (10) a única sobrevivente do ataque, uma assessora da vereadora, cuja identidade é preservada. O secretário de Segurança, o general de divisão Richard Nunes, acompanhará pessoalmente o trabalho dos peritos na região central do Rio de Janeiro.

O principal objetivo da reconstituição será “consolidar os depoimentos das testemunhas do crime”, segundo uma fonte ligada à investigação. Em outras palavras, a reconstituição quer verificar se, na prática, o que as testemunhas relataram seria realmente viável.

Se forem corroborados pelos peritos na reconstituição, os relatos das testemunhas terão mais valor em um eventual processo judicial se os culpados forem identificados.

Leia também:

Um dos relatos mais importantes é o da assessora de Marielle, que estava no carro na hora do ataque, na noite de 14 de março, e sobreviveu. A mulher não foi atingida pelos tiros e chegou a deixar o país com seu marido após prestar depoimento à polícia.

Logo após o crime, ela havia dito a uma emissora de TV que ouviu uma rajada de tiros --o que teria gerado um barulho forte e rápido. Ela disse também que segurou o volante do carro e puxou o freio de mão. Afirmou ainda que, em princípio, não havia se dado conta que a vereadora e o motorista estavam mortos.

A polícia deve fazer disparos reais usando uma submetralhadora de calibre 9 mm semelhante à que os policiais acreditam que foi usada no assassinato.

Também deve ser reconstituído o trajeto que Marielle, Anderson e a assessora fizeram de carro desde uma reunião política na rua dos Inválidos, na Lapa, até o local do ataque, na rua Joaquim Palhares, no bairro do Estácio.

A reconstituição deve acontecer no período noturno, para reproduzir as mesmas condições de visibilidade da noite do crime. Os policiais que primeiro chegaram ao local do crime também participariam da simulação.

A resolução do caso é considerada crucial por ter impacto na sensação geral de segurança no Rio de Janeiro. O desfecho da investigação também deve ter impacto político significativo na intervenção federal e no governo Temer, segundo fontes da intervenção ouvidas pela reportagem.