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

Rio: Carlos Bolsonaro marca presença na Câmara, mas aparece em vídeo no DF

O vereador Carlos Bolsonaro (dir.) durante a nomeação de André Mendonça no gabinete presidencial, no Palácio do Planalto - Reprodução/Twitter
O vereador Carlos Bolsonaro (dir.) durante a nomeação de André Mendonça no gabinete presidencial, no Palácio do Planalto Imagem: Reprodução/Twitter

Igor Mello

Do UOL, no Rio

02/12/2021 19h00Atualizada em 03/12/2021 17h11

Vereador da cidade do Rio de Janeiro, Carlos Bolsonaro (Republicanos-RJ), filho do presidente Jair Bolsonaro (PL), registrou presença na sessão da Câmara Municipal, mas foi flagrado em Brasília acompanhando a gravação de um vídeo no gabinete de seu pai, em Brasília.

Ricardo Barros publicou o vídeo em seu perfil no Twitter às 16h01 — um minuto depois do horário marcado para o início da sessão na Câmara do Rio. As imagens mostram Bolsonaro e o vice-presidente Hamilton Mourão (PRTB) assinando a nomeação de André Mendonça, também presente, ao Supremo Tribunal Federal. O encontro ocorreu no Gabinete da Presidência. Carlos Bolsonaro aparece ao fundo mexendo no celular, ao lado de um militar.

Apesar de ter registrado presença e feito na plataforma de vídeo usada pela Câmara do Rio para a participação remota dos vereadores, Carlos Bolsonaro só abriu sua câmera às 18h03, exatos 30 minutos após o UOL procurá-lo pelo telefone de seu gabinete e por email para ouvi-lo sobre o vídeo.

Segundo a reportagem apurou, o vereador não havia aparecido na plenária até então. Participar das plenárias com a câmera sempre fechada é uma prática incomum entre os colegas, mas rotineiramente adotada pelo filho do presidente.

Após ser questionado pelo UOL, Carlos Bolsonaro abriu a câmera durante sessão da Câmara do Rio - Reprodução/ Rio TV Câmara - Reprodução/ Rio TV Câmara
Após ser questionado pelo UOL, Carlos Bolsonaro abriu a câmera durante sessão da Câmara do Rio
Imagem: Reprodução/ Rio TV Câmara

Quatro minutos depois de sua aparição, a sessão plenária foi encerrada. O vereador não respondeu às perguntas enviadas pelo UOL, que tratavam sobre sua participação remota na sessão e sobre o flagrante no vídeo publicado por Ricardo Barros.

O sistema remoto da Câmara do Rio não possui nenhum mecanismo para garantir que apenas os vereadores possam confirmar presença nas sessões ou participar das votações, como reconhecimento facial ou uso de biometria, segundo o UOL apurou. Por isso, é tecnicamente possível que outras pessoas utilizem o aplicativo no lugar dos vereadores. Não é possível saber se foi o próprio vereador ou outra pessoa que fez na plataforma.

Aparição nos últimos minutos

Carlos não participou de nenhuma das votações do dia, exceto a última — o PLC (Projeto de Lei Complementar) 43/2021. A matéria —que acabou aprovada — era especialmente simbólica porque introduzia na legislação municipal as regras criadas na MP da Liberdade Econômica, uma das principais vitórias do governo Bolsonaro no Congresso.

Apesar de ser um tema caro para o clã Bolsonaro, Carlos não fez nenhuma defesa do projeto durante a sessão. Nem sequer votou em um requerimento que pedia a retirada do PLC de pauta.

A MP da Liberdade Econômica é frequentemente mencionada pelo presidente como um dos legados de seu governo. Ele citou o tema em ao menos oito discursos oficiais desde o início de 2020, segundo levantamento feito na página oficial da Presidência. Entre eles, o pronunciamento em cadeia de rádio e TV de 2 de junho deste ano