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

Jovem que matou 5 em boate LGBTQIAP+ nos EUA comandava site neonazista

Tiroteio em boate LGBTQIAP+ em Colorado Springs - REUTERS/Kevin Mohatt
Tiroteio em boate LGBTQIAP+ em Colorado Springs Imagem: REUTERS/Kevin Mohatt

Colaboração para o UOL, em Salvador

22/02/2023 22h28Atualizada em 22/02/2023 22h44

Anderson Lee Aldrich, de 22 anos, acusado de matar cinco pessoas e ferir outras 18 em uma boate LGBTQIAP+ no Colorado (EUA), em novembro do ano ado, comandava um site neonazista e proferia insultos homofóbicos e racistas enquanto jogava online.

Segundo a agência de notícias Associated Press, a informação foi dada por uma investigadora hoje (22), em depoimento.

Depoimento da policial:

  • De acordo com a policial Rebecca es, o jovem também postou uma imagem de uma mira de rifle apontada para uma parada do orgulho LGBTQIAP+ e usou um insulto preconceituoso ao se referir a alguém que era gay;
  • A investigadora prestou depoimento no início de uma audiência de três dias para determinar se há evidências suficientes para justificar uma acusação de crime de ódio contra Aldrich no ataque de 19 de novembro;
  • Aldrich, que se identifica como não-binário, istrou o site que incluía o que a investigadora descreveu como um vídeo de treinamento de tiro de "supremacia branca neonazista" glorificando tiroteios em massa;
  • Ainda segundo a agência de notícias, os investigadores também ouviram de um conhecido que Aldrich disse que sua mãe é não-binária e o forçou a ir a clubes LGBTQIAP+.

O que diz a defesa:

  • A defesa de Aldrich nega que ele seja contra a comunidade LGBTQIAP+;
  • Os advogados dizem que o jovem estava drogado, era privado de sono e vinha de uma família abusiva.

O caso

  • Ao menos cinco pessoas morreram e 18 ficaram feridas durante o tiroteio em um bar LGBTQIAP+ no Colorado (oeste dos Estados Unidos), em novembro do ano ado;
  • O vídeo do sistema de vigilância mostrou o jovem entrando no clube vestindo uma camiseta vermelha e colete balístico bege enquanto segurava um rifle. Logo após entrar, Aldrich teria aberto fogo indiscriminadamente;
  • O tiroteio só foi interrompido quando um técnico da Marinha norte-americana agarrou o cano do rifle