Concebido para ultrapassar os limites, o Galaxy Watch Ultra suporta até 55 °C de calor, 9000 m de altitude, pressão de água de 10 ATM e funciona de forma fluída com um novo e poderoso processador de 3nm. Vá mais longe com uma bateria que dura até 100 horas no modo de poupança de energia. O novo BioActive Sensor acompanha-o de perto e a Galaxy AI fornece as informações, orientando-o a ultrapassar os seus limites.
, , , , , ,
Titânio
Um Galaxy Watch Ultra está a rodar lentamente enquanto a sua estrutura em titânio brilha.
Informações de saúde powered by Galaxy AI
É apresentado o texto “Galaxy AI is here” por cima de um Galaxy Watch Ultra. À medida que o medidor de energia sobe no ecrã e pára em “94”, surgem à volta do relógio cartões com diferentes métricas de saúde: pontuação do sono, passos e nível de açúcar no sangue.
Resistente à água
10 ATM IP68
Resistência à água 10 ATM
Um Galaxy Watch Ultra é visto meio submerso na água do mar em movimento, com gotículas de água visíveis no relógio.
Vida útil da bateria de longa duração
Um Galaxy Watch Ultra é visto com um número que vai até “100 horas” para representar a duração máxima da bateria no modo de poupança de energia. Quando o ecrã muda para acompanhamento do Triatlo, há outro número que sobe para '48 horas' para representar a duração máxima da bateria no Modo de poupança de energia em exercício.
O Galaxy Watch mais resistente de sempre ,
Partes de um dispositivo Galaxy Watch desmontado estão a ser montadas em pleno ar. O ambiente muda de rajadas de vento para chuva e depois para geada, mostrando a forte durabilidade do relógio.
Design Compacto preparado para o impacto
O nosso processador de smartwatch mais poderoso
Titânio + design compacto
Vidro de cristal de Safira
Quick Button
BioActive Sensor
GPS de Frequência Dupla
Sistema dinâmico de encaixe.
O nosso processador de smartwatch mais poderoso
Potência de processamento de próxima geração melhorada suportada pela Galaxy AI..
Titânio + Design compacto
Uma estrutura duradoura e leve para situações extremas. ,
A vista lateral do Galaxy Watch Ultra com pontos posicionados nas partes a serem destacadas. .
Vidro de cristal de Safira
Ecrã de cristal de Safira, construído para resistir a poeira, neve, chuva e muito mais.
O vidro de Safira brilha e encaixa-se lentamente num dispositivo Galaxy Watch Ultra.
Quick Button
Botão personalizável para arranques e paragens rápidos.
O Quick Button num Galaxy Watch Ultra é premido uma vez e o mosaico Multidesportos aparece no ecrã.
BioActive Sensor
Sensores avançados, incluindo monitorização de precisão de RH powered by IA.
As luzes LED são emitidas pelo BioActive Sensor na parte traseira de um Galaxy Watch Ultra.
GPS de Frequência Dupla
Incorporando bandas de frequência L1 e L5 para precisão exata.
Luzes que representam a eletricidade, convergem em torno de um chip.
Sistema dinâmico de encaixe
Um elegante corpo de relógio que se integra perfeitamente na bracelete.
Uma extremidade da bracelete desportiva é fixada ao corpo de um Galaxy Watch Ultra e libertada à medida que o botão de libertação é pressionado.
Bateria de alta resistência
Quer esteja a escalar penhascos ou a caminhar durante dias, ultrapasse os limites sem se preocupar com o recarregamento. Alterne rapidamente entre modos - o modo de poupança de energia para monitorizar treinos ou o modo de poupança de energia para utilização a longo prazo. Esteja preparado para qualquer emoção que surja. , , , ,
Modo de poupança de energia
até 100 horas
Modo de poupança de energia para Exercício
até 48 horas
Um Galaxy Watch Ultra está a exibir um ecrã de mosaico Multi-Sports com a distância mostrada para nadar, andar de bicicleta e correr. É apresentada a duração máxima da bateria para cada modo de bateria. "Até 100 horas" para o modo de poupança de energia e "Até 48 horas" para o modo de poupança de energia para Exercício.
Aventure-se no azul
As aventuras no oceano estão a chamar, desde apanhar grandes ondas no Oceano Pacífico, até explorar os recifes de coral no Mar das Caraíbas. Escute o chamamento com um relógio pronto para a água.
Resistência à água
10 ATM / IP68
Padrão Militar
MIL-STD 810H
Drenagem de água fácil Bracelete Desportiva
Tracking
Natação, esqui aquático, caiaque ou windsurf. O Galaxy Watch Ultra acompanha tudo e muito mais.
Frequência cardíaca
O BioActive Sensor melhorado consegue acompanhar mesmo quando está a apanhar as ondas.
Bloqueio de água
Ligue e desligue facilmente e verifique o seu progresso mesmo no modo Bloqueio de Água.
Conquiste novas alturas
O Galaxy Watch Ultra resiste ao frio, por isso não deixe que temperaturas geladas ou as condições desafiantes das montanhas o impeçam de explorar.
Temperatura de funcionamento
-20 °C a 55 °C
Resistência à altitude
9000 m
Bracelete de Tecido durável e flexível
Comece a sua jornada
Utilize a orientação baseada em dados GPX para navegar até aos destinos. ,
Rota
Obtenha mais do que apenas direções passo a passo. Encontre o seu caminho com orientações detalhadas, incluindo altitude.
Seguir de volta
Pronto para voltar atrás? Regresse em segurança ao ponto onde começou com um simples clique.
A sua sirene de segurança imediata
Se tiver problemas, prima e mantenha premido o quick button durante 5 segundos para ativar uma sirene poderosa para obter ajuda. Um som de 86 decibéis penetrante pode ser ouvido até 180 metros de distância, atravessando uma floresta de árvores. Quando o GPS não é suficiente para si, o relógio está lá com um SOS. Deteta quedas, oferece SOS através do botão de início e fornece acesso instantâneo a informações médicas. , , ,
Deteção de quedas
Chamada SOS
Mantenha premido durante 5 segundos
Até 86dB
Até 180 m
Mantenha premido durante 5 segundos
Domine o deserto
O Galaxy Watch Ultra prospera no calor, adapta-se a ambientes escuros e iluminados pelo sol e ajuda a traçar o seu caminho, permitindo-lhe movimentar-se facilmente em areia e desfiladeiros.
Temperatura de funcionamento
-20 °C a 55 °C
Resistência ao pó
IP68
Bracelete de Tecido
Trace o seu próprio caminho
Saia da estrada e crie o seu próprio caminho. Ande de bicicleta através de desfiladeiros inexplorados e faça as suas rotas pessoais para regressar. A sua aventura repleta de surpresas e reviravoltas.
Uma pessoa a andar de bicicleta num trilho rochoso está a captar a cena à frente e a usar um Galaxy Watch Ultra no pulso. Outra pessoa está a andar de bicicleta à sua frente.
Corrida
Acompanhe o seu ritmo contra recordes passados e obtenha atualizações em tempo real para se esforçar. ,
Rota
Obtenha mais do que apenas direções curva a curva. Navegue com orientação detalhada e regresse em segurança com Seguir de volta. ,
Zona de Frequência Cardíaca personalizada
Monitorize a sua Zona de Frequência Cardíaca adaptada às suas capacidades para garantir um treino de qualidade.
Não deixe que a escuridão diminua a sua aventura
Mantenha-se no caminho certo, mesmo no escuro. Quando a noite cai, o ecrã muda automaticamente para o modo noturno, preservando a sua visão noturna. Continue a sua aventura durante a noite sem perder um vislumbre da Via Láctea. ,
Um Galaxy Watch Ultra é visto à luz do dia. À medida que a noite cai e o céu fica escuro, o mostrador do relógio do Modo Noturno brilha no ecrã do relógio.
Multidesportos, várias formas
Prepare-se para vencer no triatlo. Alterne o treino sem interrupções, mesmo naqueles momentos de alta pressão, enquanto monitoriza cada passo do percurso.
Bracelete Híbrida
Quick Button para uma transição desportiva rápida
Salte diretamente para os seus desportos de resistência favoritos, como triatlo, duatlo, aquatlo e muito mais com o novo mosaico Multidesportos ao pressionar o Quick Button. Demasiado fácil? Crie o seu melhor desafio para ultrapassar os seus limites. ,
Um Galaxy Watch Ultra está a exibir um ecrã de seguimento de treino. Quando o Quick Button é premido durante muito tempo, o ecrã muda para um ecrã de Transição e passa para um ecrã de seguimento de Ciclismo.
Multisport
Inicie o triatlo, o duatlo, o aquatlo, ou crie o seu próprio desafio.
Objetivos
Alcance um objetivo, seja recompensado com um distintivo para motivação extra.
Resultados do treino
Verifique os seus registos finais e calorias queimadas no final dos seus treinos.
GPS de frequência dupla. Preparado para a selva de betão
O nosso GPS mais preciso de sempre num Galaxy Watch mantém-no no caminho certo, mesmo através de edifícios densamente povoados. Incorporando bandas de frequência L1 e L5, o Galaxy Watch Ultra acompanha-o com precisão. , ,
A Galaxy AI chegou
Monitorize o Energy Score para atingir os seus objetivos
Descubra o potencial do seu corpo com Energy Score. A Galaxy AI analisa os principais indicadores da sua condição geral e dá-lhe uma pontuação diária. Como está a sua pontuação hoje? Pronto para se desafiar? Se não for o caso, ajuste o seu sono, faça exercício e muito mais para pôr o seu corpo em forma para o estimular.
Um texto “A Galaxy AI chegou” é mostrado acima de um Galaxy Watch Ultra. À medida que o Energy Score sobe no ecrã e para em "94", aparecem cartões com diferentes métricas de saúde à volta do relógio.
Potencie o seu ciclismo com FTP personalizado
Maximize a sua potência de pedalada e percorra uma milha extra. A Galaxy AI estima rapidamente a Functional Threshold Power (Limite de Potência Funcional) com base na sua frequência cardíaca no prazo de 10 minutos após uma viagem. Defina a intensidade do seu treino de acordo com o seu FTP e atinja o seu desempenho máximo.
Descanso de campeão. Desempenho de uma lenda
O melhor desempenho começa com um sono de qualidade. Mantenha-se a par das fases do seu sono, duração, frequência cardíaca, oxigénio no sangue e até mesmo ressonar. Depois, receba coaching sobre formas de compreender melhor o seu padrão de sono. , , ,
Fases do sono
Frequência cardíaca
Fique mais tranquilo com a deteção do risco de apneia do sono
Dormir bem e em segurança. O Galaxy Watch Ultra monitoriza o seu comportamento de sono e ajuda a detetar potenciais problemas de sono. Pela primeira vez no Galaxy Watch, oferece a funcionalidade Apneia do sono.
* A funcionalidade Apneia do sono requer que o Galaxy Watch Ultra seja emparelhado com um smartphone Samsung Galaxy com Android OS 9.0 ou posterior e a versão mais recente da aplicação Samsung Health Monitor.
* A funcionalidade Apneia do sono apenas está atualmente disponível em alguns países selecionados. A funcionalidade Apneia do sono requer pelo menos 2 dias de dados do sono num período de 10 dias (os dois dias não têm necessariamente de ser consecutivos, mas têm de ser registados nesses 10 dias).
* Não deve ser usada na deteção, diagnóstico ou tratamento de qualquer condição médica ou doença. O resultado da deteção de apneia do sono é apenas para sua referência pessoal. Consulte um profissional médico para aconselhamento.
* A funcionalidade Apneia do sono requer que o Galaxy Watch Ultra seja emparelhado com um smartphone Samsung Galaxy com Android OS 9.0 ou posterior e a versão mais recente da aplicação Samsung Health Monitor.
* A funcionalidade Apneia do sono apenas está atualmente disponível em alguns países selecionados. A funcionalidade Apneia do sono requer pelo menos 2 dias de dados do sono num período de 10 dias (os dois dias não têm necessariamente de ser consecutivos, mas têm de ser registados nesses 10 dias).
* A funcionalidade Apneia do sono apenas está atualmente disponível em alguns países selecionados. A funcionalidade Apneia do sono requer pelo menos 2 dias de dados do sono num período de 10 dias (os dois dias não têm necessariamente de ser consecutivos, mas têm de ser registados nesses 10 dias).
Controlo de saúde? Basta olhar para o seu pulso
Mantenha um estilo de vida saudável adicionando um controlo rápido à sua rotina de exercício físico, desde a pressão arterial até à Análise de Bioimpedância Elétrica.
Mantenha um estilo de vida saudável adicionando um controlo rápido à sua rotina de exercício físico, desde a pressão arterial até à Análise de Bioimpedância Elétrica. Se detetar um ritmo cardíaco irregular, faça um ECG diretamente no seu pulso para examinar o seu ritmo cardíaco em maior detalhe.
A GUI do ECG que está a ser medido pode ser vista, com o tempo de medição e o bpm a mudar. Por baixo dos números, encontra-se um gráfico em movimento que ilustra o batimento cardíaco.
Mantenha o controlo da sua pressão arterial
Abrace cada emoção com tranquilidade. Verifique os seus sinais vitais em movimento com leituras instantâneas da pressão arterial na ponta dos dedos. , , , ,
Meça o seu crescimento com a BIA
Maximize os ganhos, minimize as suposições. Com a Análise de Bioimpedância Elétrica (BIA ) no seu relógio, fique atento à composição do seu corpo regularmente e atinja os seus objetivos de fitness. , ,
* Os alertas de HR destinam-se apenas a objetivos gerais de bem-estar e fitness. Não visam a deteção, diagnóstico, tratamento, monitorização ou gestão de qualquer condição médica ou doença. Informações de saúde obtidas com o dispositivo e a aplicação não devem ser consideradas aconselhamento médico. Os utilizadores devem procurar aconselhamento médico.
* Não se destina a fornecer uma notificação sobre cada episódio de ritmo irregular, nem a quaisquer fins de diagnóstico ou outras condições cardíacas. Não se destina a utilizadores com menos de 22 anos. Os utilizadores não devem interpretar os resultados nem tomar medidas clínicas com base nas medições do dispositivo sem consultar um profissional de saúde qualificado. A função da aplicação PPG não é substituir os métodos tradicionais de diagnóstico ou tratamento.
* A aplicação ECG não se destina a ser utilizada por pessoas com menos de 22 anos, nem a substituir métodos tradicionais de diagnóstico ou tratamento. Os utilizadores não devem interpretar os resultados nem tomar medidas clínicas com base nas medições do dispositivo sem consultar um profissional de saúde qualificado. Consulte https://www.samsung.com/pt/apps/samsung-health-monitor/ para obter mais informações e as atualizações mais recentes sobre os países de serviço.
A disponibilidade da funcionalidade Notificação de Ritmo Cardíaca Irregular (IHRN) pode variar consoante o país ou a região. Devido a restrições nacionais na obtenção de aprovação/registo como um Software as a medical device (Software como dispositivo médico) (SaMD), funciona apenas em relógios e smartphones comprados nos países onde o serviço está atualmente disponível (no entanto, o serviço pode ser restrito quando os utilizadores viajam para países onde o serviço não está disponível). Não se destina a fornecer uma notificação sobre cada episódio de ritmo irregular sugestivo de AFib, e a ausência de uma notificação não se destina a indicar que não está presente qualquer processo patológico. Não se destina a utilizadores com arritmias conhecidas nem a utilizadores com menos de 22 anos. Os utilizadores não devem interpretar os resultados nem tomar medidas clínicas com base nas previsões feitas sem consultar um profissional de saúde qualificado.
*A Notificação de Ritmo Cardíaca Irregular está disponível nos seguintes países** (a partir de final de julho de 2024). EUA, Coreia, EAU, Indonésia, Hong Kong, Rússia, Geórgia, Azerbaijão, Panamá, Guatemala, República Dominica, Costa Rica, Equador e Argentina - disponíveis no Galaxy Watch4 e modelos lançados mais tarde (excluindo o Galaxy Fit ). Serviço indisponível noutros territórios ou regiões, a menos que especificado abaixo da lista de países.
* A funcionalidade IHRN pode estar disponível no futuro noutros países ou regiões, sujeita ao processo regulamentar em cada país ou região.
* A disponibilidade de ECG pode variar por país ou região. Devido a restrições nacionais na obtenção de aprovação/registo como um Software as a medical device (Software como dispositivo médico) (SaMD), a aplicação ECG funciona apenas em relógios e smartphones comprados nos países onde o serviço está atualmente disponível (no entanto, o serviço pode ser restrito quando os utilizadores viajam para países onde o serviço não está disponível). Consulte https://www.samsung.com/apps/samsung-health-monitor para obter mais informações e as atualizações mais recentes sobre os países de serviço. Não se destina a utilizadores de pessoas com menos de 22 anos. Os utilizadores não devem interpretar os resultados nem tomar medidas clínicas com base nas medições do dispositivo sem consultar um profissional de saúde qualificado.
Harmonizar o seu percurso de saúde
Aceda e faça a gestão de informações abrangentes sobre a sua saúde e bem-estar geral através da Samsung Health app nos seus dispositivos Samsung Galaxy. Integre insights detalhados para se esforçar para alcançar os seus objetivos de bem-estar.
Responda aos seus amigos de forma instantânea com o tom certo. A Galaxy AI analisa mensagens anteriores no seu chat e oferece sugestões de resposta rápidas que correspondem ao estado de espírito. , ,
Duplo Toque para permanecer em ação
Capte fotografias, atenda chamadas ou silencie alarmes, tudo com apenas um Duplo Toque. O Galaxy Watch Ultra é ainda mais poderoso quando emparelhado com outros dispositivos Samsung Galaxy. Mantenha o controlo, mantenha-se ligado. ,
Braceletes para tudo. One UI para tudo
Prepare-se para cada expedição com uma gama de opções de braceletes para todas as situações. Com a nova One UI, alimentada por um processador totalmente novo, o Galaxy Watch Ultra oferece-lhe soluções para todas as suas emoções fortes.
O Galaxy Watch Ultra suporta temperaturas entre -20 °C e 55 °C enquanto é usado no pulso, com base nos resultados de testes de laboratório internos realizados pela Samsung. O desempenho real pode variar dependendo do ambiente em que é usado. Em temperaturas muito altas ou baixas, o carregamento pode ser bloqueado, determinadas funções podem ser automaticamente encerradas ou indisponíveis, ou o relógio pode ser desligado automaticamente por motivos de segurança. Além disso, o desempenho da bateria pode ser adversamente afetado a baixas temperaturas.
No modo de poupança de energia, algumas funcionalidades, como a ligação Wi-Fi, o gesto de acordar e outras, podem ficar indisponíveis. Podem existir restrições à velocidade de processador, à utilização da rede em segundo plano e aos serviços de localização.
No modo de bateria normal, quando o modo de poupança de energia ou o modo de poupança de energia para Exercício está desligado, a duração da bateria é de até 60 horas com o Always On Display ativado e de até 80 horas com o Always On Display desativado..
A duração da bateria baseia-se nos resultados de testes laboratoriais internos para cenários de padrões de utilização típicos realizados pela Samsung. A duração real da bateria pode variar dependendo de diferentes padrões de utilização, do modelo do dispositivo ou do fabricante da bateria.
O Galaxy Watch Ultra é resistente à água durante 10 minutos em água com uma profundidade de 100 metros de acordo com a norma ISO22810. O teste foi realizado em 5% de água salgada e 4ppm de água com cloro. O Galaxy Watch Ultra é resistente à água com uma classificação IP68 baseada nas condições de teste de laboratório para submersão em até 1,5 metros de água doce durante até 30 minutos. Não é adequado para atividades aquáticas de alta pressão e mergulho. Pode ser utilizado para atividades em águas rasas, como nadar numa piscina ou oceano. A resistência à água não é permanente e pode diminuir ao longo do tempo. Consulte o manual do utilizador para obter mais informações, incluindo instruções de cuidados/utilização.
O Galaxy Watch Ultra obteve a Certificação MIL-STD-810H: Temperatura alta/baixa, altitude, humidade, imersão, nevoeiro salino, pó, vibração, queda, etc. MIL-STD-810H é uma forma padronizada de testes concebidos pelas forças militares dos EUA para avaliar com precisão as limitações do dispositivo. A utilização no mundo real pode variar de acordo com as condições ambientais específicas utilizadas nos testes. Condições extremas não garantidas.
O titânio de grau aeroespacial é parcialmente aplicado nas áreas da cobertura frontal e traseira da estrutura metálica, excluindo o ecrã e os botões físicos. As restantes peças da estrutura são uma mistura de plástico e titânio de Grau 2.
Em comparação com as séries anteriores do Galaxy Watch..
Valor típico testado sob condições de laboratório de terceiros. O valor típico é o valor médio estimado considerando a diferença na capacidade da bateria entre as amostras de bateria testadas segundo a norma IEC 61960. A capacidade típica é de 590mAh. A duração real da bateria pode variar consoante a rede, o ambiente, os padrões de utilização e outros fatores.
Quando no modo de poupança de energia para Exercício, algumas funcionalidades, tais como ligação de rede/Bluetooth, controlo IoT e outras, podem ficar indisponíveis.
As braceletes de Watch adicionais são vendidas separadamente.
A Bracelete de Tecido é vendida separadamente.
Fornecido quando o ficheiro de itinerário no formato GPX é importado para caminhadas e ciclismo e o itinerário é definido como objetivo nas definições do Samsung Health.
Para utilizar a funcionalidade Seguir de volta, a mesma tem de estar ativada antes de cada sessão de treino de caminhadas ou ciclismo nas definições do Samsung Health..
A sirene emite até 86 decibéis e pode ser ouvida a uma distância de até 180 metros. O volume e o alcance do som podem variar dependendo do ambiente.
A duração durante a qual a sirene pode ser ativada pode variar dependendo da duração da bateria.
Para notificar um contacto de emergência, é necessário ter ligação à rede. A precisão do GPS pode ser afetada por obstruções ao sinal de satélite, tais como edifícios.
O Galaxy Watch Ultra é resistente ao pó com uma classificação IP68 baseada nas condições do teste de laboratório efetuado por terceiros: 2 kg de pó de talco (diâmetro máximo de 0,05 mm) por metro cúbico foram soprados para dentro de uma câmara de teste que aloja o dispositivo (a pressão do ar dentro do dispositivo foi mantida abaixo do ar circundante) durante 2 horas. A resistência ao pó pode variar consoante as condições de utilização reais.
Corrida está disponível apenas para corridas ao ar livre e ciclismo ao ar livre. Para medições comparativas, é necessário executar no mesmo caminho que o caminho pré-gerado. O utilizador pode comparar selecionando um dos registos de até 14 dias.
A comparação de registos através de Corrida só está disponível quando se inicia no mesmo local que o ponto de início do registo anterior. Será convertido automaticamente para o modo de corrida, se os pontos de partida forem diferentes.
Personalização da zona de frequência cardíaca ativada ao selecionar a atividade ao ar livre. É necessário trabalhar consistentemente durante mais de 10 minutos com velocidade de 4 km/h ou mais rápida.
O modo noturno só está disponível em determinados mostradores de relógio.
A Bracelete Híbrida é vendida separadamente.
A precisão do GPS pode variar dependendo do ambiente de rede e de outros fatores.
A função GPS requer ligação à Internet. Pode ser utilizado em modelos LTE sem smartphone emparelhado.
O Energy Score está disponível em telefones Android (Android 11 ou superior) e requer a aplicação Samsung Health (v6.27 ou superior). É necessário iniciar sessão na Samsung account. A disponibilidade do serviço pode variar por país ou região. Para verificar o Energy Score, os dados de saúde monitorizados do Samsung Galaxy Watch ou Samsung Galaxy Ring devem ser sincronizados com a aplicação Samsung Health. Necessita de pelo menos os dados de atividade e de sono do dia anterior, e dados de frequência cardíaca durante o sono. Não deve ser usado na deteção, diagnóstico ou tratamento de qualquer condição médica. O resultado é apenas para sua referência pessoal. Consulte um profissional médico para aconselhamento.
Requer a aplicação Samsung Health versão 6.24 ou posterior.
O Galaxy Watch Ultra tem de ser emparelhado com um smartphone Samsung Galaxy com Android 11.
As funcionalidades de seguimento do sono destinam-se apenas a objetivos gerais de bem-estar e fitness. Não visa a deteção, diagnóstico, ou tratamento de condição médica ou perturbação do sono. As medições são apenas para sua referência pessoal. Consulte um profissional médico para aconselhamento.
O Sleep Coaching requer dados do sono de pelo menos 7 dias, incluindo 2 dias de descanso.
Para leituras precisas da pressão arterial, é necessária uma calibração a cada 4 semanas pelo monitor da PA e braçadeira do braço. Requer um smartphone Samsung Galaxy com versão Android 9.0 ou superior.
A disponibilidade da aplicação Pressão arterial pode variar por país ou região. Devido a restrições nacionais na obtenção de aprovação/registo como um Software as a medical device (Software como dispositivo médico) (SaMD), a aplicação Pressão arterial funciona apenas em relógios e smartphones comprados nos países onde o serviço está atualmente disponível (no entanto, o serviço pode ser restrito quando os utilizadores viajam para países onde o serviço não está disponível). Consulte https://www.samsung.com/apps/samsung-health-monitor para obter mais informações e as atualizações mais recentes sobre os países de serviço. Não se destina a ser utilizado por pessoas com menos de 22 anos de idade.
Os utilizadores devem medir a pressão sanguínea apenas em repouso, segundo o método utilizado com a braçadeira tradicional, e evitar medir a pressão enquanto praticam exercício físico, fumam ou bebem. A aplicação de Pressão Arterial não se destina a quaisquer fins de diagnóstico relacionados com hipertensão ou outras condições cardíacas, nem a utilizadores com menos de 22 anos. Os utilizadores não devem interpretar os resultados nem tomar medidas clínicas com base nas medições do dispositivo sem consultar um profissional de saúde qualificado. A função da aplicação de Pressão Arterial não é substituir os métodos tradicionais de diagnóstico ou tratamento.
Não deve ser usado na deteção, diagnóstico ou tratamento. Visa apenas objetivos gerais de bem-estar e fitness.
A Composição corporal está disponível apenas nos modelos da série Samsung Galaxy Watch4 e nos Galaxy Watch lançados posteriormente. A Composição corporal não deve ser utilizada se tiver um pacemaker ou outros dispositivos médicos implantados, ou se estiver grávida. Informações de saúde obtidas com o dispositivo e a aplicação não devem ser consideradas aconselhamento médico. Os resultados da medição podem não ser exatos se tiver menos de 20 anos. As medições são apenas para sua referência pessoal. Consulte um profissional médico para aconselhamento.
Os smartphones compatíveis e as funcionalidades disponíveis podem variar com o país/região ou a operadora.
O Galaxy Watch Ultra tem de ser emparelhado com um smartphone Samsung Galaxy com Android 11.
Imagem simulada para fins ilustrativos. A UX/UI real pode ser diferente.
As Sugestões de resposta só estão disponíveis no Galaxy Watch7 e Galaxy Watch Ultra. O relógio requer a versão mais recente do Wear OS instalada e tem de ser emparelhado com o Galaxy Z Flip6 a executar a One UI 6.1.1 ou superior, a partir de julho de 2024.
A disponibilidade do serviço pode variar consoante o idioma e a aplicação. A precisão dos resultados não é garantida.
O Duplo Toque está desativado por predefinição. Para utilizar a funcionalidade, esta tem de estar ativada no Relógio ou na Samsung Galaxy Wearable app.
O Galaxy Watch Ultra tem de ser emparelhado com um smartphone Samsung Galaxy com One UI 6.1 ou superior.
A bracelete de Tecido e a bracelete Híbrida são vendidas separadamente.
Para controlar a função Multidesporto utilizando o Quick Button, a função deve ser configurada nas definições do Quick Button.
")).attr("data-swiper-slide-index") || e.attr("data-swiper-slide-index", t), i.cache && (this.virtual.cache[t] = e), e) }, appendSlide: function (e) { if ("object" == typeof e && "length" in e) for (var t = 0; t < e.length; t += 1)e[t] && this.virtual.slides.push(e[t]); else this.virtual.slides.push(e); this.virtual.update(!0) }, prependSlide: function (e) { var s, a, t = this.activeIndex, i = t + 1, r = 1; if (Array.isArray(e)) { for (var n = 0; n < e.length; n += 1)e[n] && this.virtual.slides.unshift(e[n]); i = t + e.length, r = e.length } else this.virtual.slides.unshift(e); this.params.virtual.cache && (s = this.virtual.cache, a = {}, Object.keys(s).forEach(function (e) { var t = s[e], i = t.attr("data-swiper-slide-index"); i && t.attr("data-swiper-slide-index", parseInt(i, 10) + 1), a[parseInt(e, 10) + r] = t }), this.virtual.cache = a), this.virtual.update(!0), this.slideTo(i, 0) }, removeSlide: function (e) { if (null != e) { var t = this.activeIndex; if (Array.isArray(e)) for (var i = e.length - 1; 0 <= i; --i)this.virtual.slides.splice(e[i], 1), this.params.virtual.cache && delete this.virtual.cache[e[i]], e[i] < t && --t, t = Math.max(t, 0); else this.virtual.slides.splice(e, 1), this.params.virtual.cache && delete this.virtual.cache[e], e < t && --t, t = Math.max(t, 0); this.virtual.update(!0), this.slideTo(t, 0) } }, removeAllSlides: function () { this.virtual.slides = [], this.params.virtual.cache && (this.virtual.cache = {}), this.virtual.update(!0), this.slideTo(0, 0) } }, y = { name: "virtual", params: { virtual: { enabled: !1, slides: [], cache: !0, renderSlide: null, renderExternal: null, addSlidesBefore: 0, addSlidesAfter: 0 } }, create: function () { U.extend(this, { virtual: { update: w.update.bind(this), appendSlide: w.appendSlide.bind(this), prependSlide: w.prependSlide.bind(this), removeSlide: w.removeSlide.bind(this), removeAllSlides: w.removeAllSlides.bind(this), renderSlide: w.renderSlide.bind(this), slides: this.params.virtual.slides, cache: {} } }) }, on: { beforeInit: function () { var e; this.params.virtual.enabled && (this.classNames.push(this.params.containerModifierClass + "virtual"), U.extend(this.params, e = { watchSlidesProgress: !0 }), U.extend(this.originalParams, e), this.params.initialSlide || this.virtual.update()) }, setTranslate: function () { this.params.virtual.enabled && this.virtual.update() } } }, K = { handle: function (e) { var t = this.rtlTranslate, i = (e = e.originalEvent ? e.originalEvent : e).keyCode || e.charCode; if (!this.allowSlideNext && (this.isHorizontal() && 39 === i || this.isVertical() && 40 === i || 34 === i)) return !1; if (!this.allowSlidePrev && (this.isHorizontal() && 37 === i || this.isVertical() && 38 === i || 33 === i)) return !1; if (!(e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || c.activeElement && c.activeElement.nodeName && ("input" === c.activeElement.nodeName.toLowerCase() || "textarea" === c.activeElement.nodeName.toLowerCase()))) { if (this.params.keyboard.onlyInViewport && (33 === i || 34 === i || 37 === i || 39 === i || 38 === i || 40 === i)) { var s = !1; if (0 < this.$el.parents("." + this.params.slideClass).length && 0 === this.$el.parents("." + this.params.slideActiveClass).length) return; var a = j.innerWidth, r = j.innerHeight, n = this.$el.offset(); t && (n.left -= this.$el[0].scrollLeft); for (var o = [[n.left, n.top], [n.left + this.width, n.top], [n.left, n.top + this.height], [n.left + this.width, n.top + this.height]], l = 0; l < o.length; l += 1) { var h = o[l]; 0 <= h[0] && h[0] <= a && 0 <= h[1] && h[1] <= r && (s = !0) } if (!s) return } this.isHorizontal() ? (33 !== i && 34 !== i && 37 !== i && 39 !== i || (e.preventDefault ? e.preventDefault() : e.returnValue = !1), (34 !== i && 39 !== i || t) && (33 !== i && 37 !== i || !t) || this.slideNext(), (33 !== i && 37 !== i || t) && (34 !== i && 39 !== i || !t) || this.slidePrev()) : (33 !== i && 34 !== i && 38 !== i && 40 !== i || (e.preventDefault ? e.preventDefault() : e.returnValue = !1), 34 !== i && 40 !== i || this.slideNext(), 33 !== i && 38 !== i || this.slidePrev()), this.emit("keyPress", i) } }, enable: function () { this.keyboard.enabled || (C(c).on("keydown", this.keyboard.handle), this.keyboard.enabled = !0) }, disable: function () { this.keyboard.enabled && (C(c).off("keydown", this.keyboard.handle), this.keyboard.enabled = !1) } }, E = { name: "keyboard", params: { keyboard: { enabled: !1, onlyInViewport: !0 } }, create: function () { U.extend(this, { keyboard: { enabled: !1, enable: K.enable.bind(this), disable: K.disable.bind(this), handle: K.handle.bind(this) } }) }, on: { init: function () { this.params.keyboard.enabled && this.keyboard.enable() }, destroy: function () { this.keyboard.enabled && this.keyboard.disable() } } }; function A() { for (var i, e = [], t = arguments.length; t--;)e[t] = arguments[t]; i = (i = 1 === e.length && e[0].constructor && e[0].constructor === Object ? e[0] : (r = e[0], e[1])) || {}, i = U.extend({}, i), r && !i.el && (i.el = r), d.call(this, i), Object.keys(F).forEach(function (t) { Object.keys(F[t]).forEach(function (e) { A.prototype[e] || (A.prototype[e] = F[t][e]) }) }); var s, a, r, n = this, o = (void 0 === n.modules && (n.modules = {}), Object.keys(n.modules).forEach(function (e) { var t, e = n.modules[e]; e.params && (t = Object.keys(e.params)[0], "object" == typeof (e = e.params[t])) && null !== e && t in i && "enabled" in e && (!0 === i[t] && (i[t] = { enabled: !0 }), "object" != typeof i[t] || "enabled" in i[t] || (i[t].enabled = !0), i[t] || (i[t] = { enabled: !1 })) }), U.extend({}, R)), l = (n.useModulesParams(o), n.params = U.extend({}, o, G, i), n.originalParams = U.extend({}, n.params), n.passedParams = U.extend({}, i), (n.$ = C)(n.params.el)); if (r = l[0]) return 1 < l.length ? (s = [], l.each(function (e, t) { t = U.extend({}, i, { el: t }); s.push(new A(t)) }), s) : (r.swiper = n, l.data("swiper", n), r && r.shadowRoot && r.shadowRoot.querySelector ? (a = C(r.shadowRoot.querySelector("." + n.params.wrapperClass))).children = function (e) { return l.children(e) } : a = l.children("." + n.params.wrapperClass), U.extend(n, { $el: l, el: r, $wrapperEl: a, wrapperEl: a[0], classNames: [], slides: C(), slidesGrid: [], snapGrid: [], slidesSizesGrid: [], isHorizontal: function () { return "horizontal" === n.params.direction }, isVertical: function () { return "vertical" === n.params.direction }, rtl: "rtl" === r.dir.toLowerCase() || "rtl" === l.css("direction"), rtlTranslate: "horizontal" === n.params.direction && ("rtl" === r.dir.toLowerCase() || "rtl" === l.css("direction")), wrongRTL: "-webkit-box" === a.css("display"), activeIndex: 0, realIndex: 0, isBeginning: !0, isEnd: !1, translate: 0, previousTranslate: 0, progress: 0, velocity: 0, animating: !1, allowSlideNext: n.params.allowSlideNext, allowSlidePrev: n.params.allowSlidePrev, touchEvents: (o = b.pointerEvents ? ["pointerdown", "pointermove", "pointerup"] : ["mousedown", "mousemove", "mouseup"], n.touchEventsTouch = { start: (r = ["touchstart", "touchmove", "touchend", "touchcancel"])[0], move: r[1], end: r[2], cancel: r[3] }, n.touchEventsDesktop = { start: o[0], move: o[1], end: o[2] }, b.touch || !n.params.simulateTouch ? n.touchEventsTouch : n.touchEventsDesktop), touchEventsData: { isTouched: void 0, isMoved: void 0, allowTouchCallbacks: void 0, touchStartTime: void 0, isScrolling: void 0, currentTranslate: void 0, startTranslate: void 0, allowThresholdMove: void 0, formElements: "input, select, option, textarea, button, video", lastClickTime: U.now(), clickTimeout: void 0, velocities: [], allowMomentumBounce: void 0, isTouchEvent: void 0, startMoving: void 0 }, allowClick: !0, allowTouchMove: n.params.allowTouchMove, touches: { startX: 0, startY: 0, currentX: 0, currentY: 0, diff: 0 }, imagesToLoad: [], imagesLoaded: 0 }), n.useModules(), n.params.init && n.init(), n) } var S = { lastScrollTime: U.now(), lastEventBeforeSnap: void 0, recentWheelEvents: [], event: function () { return -1 < j.navigator.userAgent.indexOf("firefox") ? "DOMMouseScroll" : ((t = "onwheel" in c) || ((e = c.createElement("div")).setAttribute("onwheel", "return;"), t = "function" == typeof e.onwheel), (t = !t && c.implementation && c.implementation.hasFeature && !0 !== c.implementation.hasFeature("", "") ? c.implementation.hasFeature("Events.wheel", "3.0") : t) ? "wheel" : "mousewheel"); var e, t }, normalize: function (e) { var t = 0, i = 0, s = 0, a = 0; return "detail" in e && (i = e.detail), "wheelDelta" in e && (i = -e.wheelDelta / 120), "wheelDeltaY" in e && (i = -e.wheelDeltaY / 120), "wheelDeltaX" in e && (t = -e.wheelDeltaX / 120), "axis" in e && e.axis === e.HORIZONTAL_AXIS && (t = i, i = 0), s = 10 * t, a = 10 * i, "deltaY" in e && (a = e.deltaY), "deltaX" in e && (s = e.deltaX), e.shiftKey && !s && (s = a, a = 0), (s || a) && e.deltaMode && (1 === e.deltaMode ? (s *= 40, a *= 40) : (s *= 800, a *= 800)), { spinX: t = s && !t ? s < 1 ? -1 : 1 : t, spinY: i = a && !i ? a < 1 ? -1 : 1 : i, pixelX: s, pixelY: a } }, handleMouseEnter: function () { this.mouseEntered = !0 }, handleMouseLeave: function () { this.mouseEntered = !1 }, handle: function (e) { var t = e, i = this, s = i.params.mousewheel; if (i.params.cssMode && t.preventDefault(), !i.mouseEntered && !s.releaseOnEdges) return !0; t.originalEvent && (t = t.originalEvent); var a = 0, r = i.rtlTranslate ? -1 : 1, n = S.normalize(t); if (s.forceToAxis) if (i.isHorizontal()) { if (!(Math.abs(n.pixelX) > Math.abs(n.pixelY))) return !0; a = n.pixelX * r } else { if (!(Math.abs(n.pixelY) > Math.abs(n.pixelX))) return !0; a = n.pixelY } else a = Math.abs(n.pixelX) > Math.abs(n.pixelY) ? -n.pixelX * r : -n.pixelY; if (0 === a) return !0; if (s.invert && (a = -a), i.params.freeMode) { var o = { time: U.now(), delta: Math.abs(a), direction: Math.sign(a) }, r = i.mousewheel.lastEventBeforeSnap, n = r && o.time < r.time + 500 && o.delta <= r.delta && o.direction === r.direction; if (!n) { i.mousewheel.lastEventBeforeSnap = void 0, i.params.loop && i.loopFix(); var l, h, r = i.getTranslate() + a * s.sensitivity, s = i.isBeginning, d = i.isEnd; if ((r = r >= i.minTranslate() ? i.minTranslate() : r) <= i.maxTranslate() && (r = i.maxTranslate()), i.setTransition(0), i.setTranslate(r), i.updateProgress(), i.updateActiveIndex(), i.updateSlidesClasses(), (!s && i.isBeginning || !d && i.isEnd) && i.updateSlidesClasses(), i.params.freeModeSticky && (clearTimeout(i.mousewheel.timeout), i.mousewheel.timeout = void 0, 15 <= (l = i.mousewheel.recentWheelEvents).length && l.shift(), s = l.length ? l[l.length - 1] : void 0, d = l[0], l.push(o), s && (o.delta > s.delta || o.direction !== s.direction) ? l.splice(0) : 15 <= l.length && o.time - d.time < 500 && 1 <= d.delta - o.delta && o.delta <= 6 && (h = 0 < a ? .8 : .2, i.mousewheel.lastEventBeforeSnap = o, l.splice(0), i.mousewheel.timeout = U.nextTick(function () { i.slideToClosest(i.params.speed, !0, void 0, h) }, 0)), i.mousewheel.timeout || (i.mousewheel.timeout = U.nextTick(function () { i.mousewheel.lastEventBeforeSnap = o, l.splice(0), i.slideToClosest(i.params.speed, !0, void 0, .5) }, 500))), n || i.emit("scroll", t), i.params.autoplay && i.params.autoplayDisableOnInteraction && i.autoplay.stop(), r === i.minTranslate() || r === i.maxTranslate()) return !0 } } else { s = { time: U.now(), delta: Math.abs(a), direction: Math.sign(a), raw: e }, d = i.mousewheel.recentWheelEvents, n = (2 <= d.length && d.shift(), d.length ? d[d.length - 1] : void 0); if (d.push(s), (!n || s.direction !== n.direction || s.delta > n.delta) && i.mousewheel.animateSlider(s), i.mousewheel.releaseScroll(s)) return !0 } return t.preventDefault ? t.preventDefault() : t.returnValue = !1, !1 }, animateSlider: function (e) { return 6 <= e.delta && U.now() - this.mousewheel.lastScrollTime < 60 || (e.direction < 0 ? this.isEnd && !this.params.loop || this.animating || (this.slideNext(), this.emit("scroll", e.raw)) : this.isBeginning && !this.params.loop || this.animating || (this.slidePrev(), this.emit("scroll", e.raw)), this.mousewheel.lastScrollTime = (new j.Date).getTime(), !1) }, releaseScroll: function (e) { var t = this.params.mousewheel; if (e.direction < 0) { if (this.isEnd && !this.params.loop && t.releaseOnEdges) return !0 } else if (this.isBeginning && !this.params.loop && t.releaseOnEdges) return !0; return !1 }, enable: function () { var e, t = S.event(); return this.params.cssMode ? (this.wrapperEl.removeEventListener(t, this.mousewheel.handle), !0) : !!t && !this.mousewheel.enabled && (e = this.$el, (e = "container" !== this.params.mousewheel.eventsTarged ? C(this.params.mousewheel.eventsTarged) : e).on("mouseenter", this.mousewheel.handleMouseEnter), e.on("mouseleave", this.mousewheel.handleMouseLeave), e.on(t, this.mousewheel.handle), this.mousewheel.enabled = !0) }, disable: function () { var e, t = S.event(); return this.params.cssMode ? (this.wrapperEl.addEventListener(t, this.mousewheel.handle), !0) : !!t && !(!this.mousewheel.enabled || (e = this.$el, (e = "container" !== this.params.mousewheel.eventsTarged ? C(this.params.mousewheel.eventsTarged) : e).off(t, this.mousewheel.handle), this.mousewheel.enabled = !1)) } }, x = { update: function () { var e, t, i = this.params.navigation; this.params.loop || (e = (t = this.navigation).$nextEl, (t = t.$prevEl) && 0 < t.length && (this.isBeginning ? t.addClass(i.disabledClass) : t.removeClass(i.disabledClass), t[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](i.lockClass)), e && 0 < e.length && (this.isEnd ? e.addClass(i.disabledClass) : e.removeClass(i.disabledClass), e[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](i.lockClass))) }, onPrevClick: function (e) { e.preventDefault(), this.isBeginning && !this.params.loop || this.slidePrev() }, onNextClick: function (e) { e.preventDefault(), this.isEnd && !this.params.loop || this.slideNext() }, init: function () { var e, t, i = this.params.navigation; (i.nextEl || i.prevEl) && (i.nextEl && (e = C(i.nextEl), this.params.uniqueNavElements) && "string" == typeof i.nextEl && 1 < e.length && 1 === this.$el.find(i.nextEl).length && (e = this.$el.find(i.nextEl)), i.prevEl && (t = C(i.prevEl), this.params.uniqueNavElements) && "string" == typeof i.prevEl && 1 < t.length && 1 === this.$el.find(i.prevEl).length && (t = this.$el.find(i.prevEl)), e && 0 < e.length && e.on("click", this.navigation.onNextClick), t && 0 < t.length && t.on("click", this.navigation.onPrevClick), U.extend(this.navigation, { $nextEl: e, nextEl: e && e[0], $prevEl: t, prevEl: t && t[0] })) }, destroy: function () { var e = this.navigation, t = e.$nextEl, e = e.$prevEl; t && t.length && (t.off("click", this.navigation.onNextClick), t.removeClass(this.params.navigation.disabledClass)), e && e.length && (e.off("click", this.navigation.onPrevClick), e.removeClass(this.params.navigation.disabledClass)) } }, L = { update: function () { var e = this.rtl, s = this.params.pagination; if (s.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length) { var a, t = (this.virtual && this.params.virtual.enabled ? this.virtual : this).slides.length, i = this.pagination.$el, r = this.params.loop ? Math.ceil((t - 2 * this.loopedSlides) / this.params.slidesPerGroup) : this.snapGrid.length; if (this.params.loop ? ((a = Math.ceil((this.activeIndex - this.loopedSlides) / this.params.slidesPerGroup)) > t - 1 - 2 * this.loopedSlides && (a -= t - 2 * this.loopedSlides), r - 1 < a && (a -= r), a < 0 && "bullets" !== this.params.paginationType && (a = r + a)) : a = void 0 !== this.snapIndex ? this.snapIndex : this.activeIndex || 0, "bullets" === s.type && this.pagination.bullets && 0 < this.pagination.bullets.length) { var n, o, l, h = this.pagination.bullets; if (s.dynamicBullets && (this.pagination.bulletSize = h.eq(0)[this.isHorizontal() ? "outerWidth" : "outerHeight"](!0), i.css(this.isHorizontal() ? "width" : "height", this.pagination.bulletSize * (s.dynamicMainBullets + 4) + "px"), 1 < s.dynamicMainBullets && void 0 !== this.previousIndex && (this.pagination.dynamicBulletIndex += a - this.previousIndex, this.pagination.dynamicBulletIndex > s.dynamicMainBullets - 1 ? this.pagination.dynamicBulletIndex = s.dynamicMainBullets - 1 : this.pagination.dynamicBulletIndex < 0 && (this.pagination.dynamicBulletIndex = 0)), n = a - this.pagination.dynamicBulletIndex, l = ((o = n + (Math.min(h.length, s.dynamicMainBullets) - 1)) + n) / 2), h.removeClass(s.bulletActiveClass + " " + s.bulletActiveClass + "-next " + s.bulletActiveClass + "-next-next " + s.bulletActiveClass + "-prev " + s.bulletActiveClass + "-prev-prev " + s.bulletActiveClass + "-main"), 1 < i.length) h.each(function (e, t) { var t = C(t), i = t.index(); i === a && t.addClass(s.bulletActiveClass), s.dynamicBullets && (n <= i && i <= o && t.addClass(s.bulletActiveClass + "-main"), i === n && t.prev().addClass(s.bulletActiveClass + "-prev").prev().addClass(s.bulletActiveClass + "-prev-prev"), i === o) && t.next().addClass(s.bulletActiveClass + "-next").next().addClass(s.bulletActiveClass + "-next-next") }); else { var t = h.eq(a), d = t.index(); if (t.addClass(s.bulletActiveClass), s.dynamicBullets) { for (var t = h.eq(n), c = h.eq(o), p = n; p <= o; p += 1)h.eq(p).addClass(s.bulletActiveClass + "-main"); if (this.params.loop) if (d >= h.length - s.dynamicMainBullets) { for (var u = s.dynamicMainBullets; 0 <= u; --u)h.eq(h.length - u).addClass(s.bulletActiveClass + "-main"); h.eq(h.length - s.dynamicMainBullets - 1).addClass(s.bulletActiveClass + "-prev") } else t.prev().addClass(s.bulletActiveClass + "-prev").prev().addClass(s.bulletActiveClass + "-prev-prev"), c.next().addClass(s.bulletActiveClass + "-next").next().addClass(s.bulletActiveClass + "-next-next"); else t.prev().addClass(s.bulletActiveClass + "-prev").prev().addClass(s.bulletActiveClass + "-prev-prev"), c.next().addClass(s.bulletActiveClass + "-next").next().addClass(s.bulletActiveClass + "-next-next") } } s.dynamicBullets && (d = Math.min(h.length, s.dynamicMainBullets + 4), t = (this.pagination.bulletSize * d - this.pagination.bulletSize) / 2 - l * this.pagination.bulletSize, c = e ? "right" : "left", h.css(this.isHorizontal() ? c : "top", t + "px")) } "fraction" === s.type && (i.find("." + s.currentClass).text(s.formatFractionCurrent(a + 1)), i.find("." + s.totalClass).text(s.formatFractionTotal(r))), "progressbar" === s.type && (d = s.progressbarOpposite ? this.isHorizontal() ? "vertical" : "horizontal" : this.isHorizontal() ? "horizontal" : "vertical", l = (a + 1) / r, c = e = 1, "horizontal" == d ? e = l : c = l, i.find("." + s.progressbarFillClass).transform("translate3d(0,0,0) scaleX(" + e + ") scaleY(" + c + ")").transition(this.params.speed)), "custom" === s.type && s.renderCustom ? (i.html(s.renderCustom(this, a + 1, r)), this.emit("paginationRender", this, i[0])) : this.emit("paginationUpdate", this, i[0]), i[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](s.lockClass) } }, render: function () { var e = this.params.pagination; if (e.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length) { var t = (this.virtual && this.params.virtual.enabled ? this.virtual : this).slides.length, i = this.pagination.$el, s = ""; if ("bullets" === e.type) { for (var a = this.params.loop ? Math.ceil((t - 2 * this.loopedSlides) / this.params.slidesPerGroup) : this.snapGrid.length, r = 0; r < a; r += 1)e.renderBullet ? s += e.renderBullet.call(this, r, e.bulletClass) : s += "<" + e.bulletElement + ' class="' + e.bulletClass + '">' + e.bulletElement + ">"; i.html(s), this.pagination.bullets = i.find("." + e.bulletClass) } "fraction" === e.type && (s = e.renderFraction ? e.renderFraction.call(this, e.currentClass, e.totalClass) : ' / ', i.html(s)), "progressbar" === e.type && (s = e.renderProgressbar ? e.renderProgressbar.call(this, e.progressbarFillClass) : '', i.html(s)), "custom" !== e.type && this.emit("paginationRender", this.pagination.$el[0]) } }, init: function () { var e, t = this, i = t.params.pagination; i.el && 0 !== (e = C(i.el)).length && (t.params.uniqueNavElements && "string" == typeof i.el && 1 < e.length && 1 === t.$el.find(i.el).length && (e = t.$el.find(i.el)), "bullets" === i.type && i.clickable && e.addClass(i.clickableClass), e.addClass(i.modifierClass + i.type), "bullets" === i.type && i.dynamicBullets && (e.addClass("" + i.modifierClass + i.type + "-dynamic"), t.pagination.dynamicBulletIndex = 0, i.dynamicMainBullets < 1) && (i.dynamicMainBullets = 1), "progressbar" === i.type && i.progressbarOpposite && e.addClass(i.progressbarOppositeClass), i.clickable && e.on("click", "." + i.bulletClass, function (e) { e.preventDefault(); e = C(this).index() * t.params.slidesPerGroup; t.params.loop && (e += t.loopedSlides), t.slideTo(e) }), U.extend(t.pagination, { $el: e, el: e[0] })) }, destroy: function () { var e, t = this.params.pagination; t.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length && ((e = this.pagination.$el).removeClass(t.hiddenClass), e.removeClass(t.modifierClass + t.type), this.pagination.bullets && this.pagination.bullets.removeClass(t.bulletActiveClass), t.clickable) && e.off("click", "." + t.bulletClass) } }, k = { setTranslate: function () { var e, t, i, s, a, r, n, o; this.params.scrollbar.el && this.scrollbar.el && (r = this.scrollbar, e = this.rtlTranslate, o = this.progress, t = r.dragSize, i = r.trackSize, s = r.$dragEl, a = r.$el, r = this.params.scrollbar, o = (i - (n = t)) * o, e ? 0 < (o = -o) ? (n = t - o, o = 0) : i < -o + t && (n = i + o) : o < 0 ? (n = t + o, o = 0) : i < o + t && (n = i - o), this.isHorizontal() ? (s.transform("translate3d(" + o + "px, 0, 0)"), s[0].style.width = n + "px") : (s.transform("translate3d(0px, " + o + "px, 0)"), s[0].style.height = n + "px"), r.hide) && (clearTimeout(this.scrollbar.timeout), a[0].style.opacity = 1, this.scrollbar.timeout = setTimeout(function () { a[0].style.opacity = 0, a.transition(400) }, 1e3)) }, setTransition: function (e) { this.params.scrollbar.el && this.scrollbar.el && this.scrollbar.$dragEl.transition(e) }, updateSize: function () { var e, t, i, s, a, r, n; this.params.scrollbar.el && this.scrollbar.el && (t = (e = this.scrollbar).$dragEl, i = e.$el, t[0].style.width = "", t[0].style.height = "", s = this.isHorizontal() ? i[0].offsetWidth : i[0].offsetHeight, r = (a = this.size / (this.size * this.snapGrid.length)) * (s / this.size), n = "auto" === this.params.scrollbar.dragSize ? s * a : parseInt(this.params.scrollbar.dragSize, 10), this.isHorizontal() ? t[0].style.width = n + "px" : t[0].style.height = n + "px", i[0].style.display = 1 <= a ? "none" : "", this.params.scrollbar.hide && (i[0].style.opacity = 0), U.extend(e, { trackSize: s, divider: a, moveDivider: r, dragSize: n }), e.$el[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](this.params.scrollbar.lockClass)) }, getPointerPosition: function (e) { return this.isHorizontal() ? ("touchstart" === e.type || "touchmove" === e.type ? e.targetTouches[0] : e).clientX : ("touchstart" === e.type || "touchmove" === e.type ? e.targetTouches[0] : e).clientY }, setDragPosition: function (e) { var t = this.scrollbar, i = this.rtlTranslate, s = t.$el, a = t.dragSize, r = t.trackSize, n = t.dragStartPos, t = (t.getPointerPosition(e) - s.offset()[this.isHorizontal() ? "left" : "top"] - (null !== n ? n : a / 2)) / (r - a), e = (t = Math.max(Math.min(t, 1), 0), i && (t = 1 - t), this.minTranslate() + (this.maxTranslate() - this.minTranslate()) * t); this.updateProgress(e), this.setTranslate(e), this.updateActiveIndex(), this.updateSlidesClasses() }, onDragStart: function (e) { var t = this.params.scrollbar, i = this.scrollbar, s = this.$wrapperEl, a = i.$el, r = i.$dragEl; this.scrollbar.isTouched = !0, this.scrollbar.dragStartPos = e.target === r[0] || e.target === r ? i.getPointerPosition(e) - e.target.getBoundingClientRect()[this.isHorizontal() ? "left" : "top"] : null, e.preventDefault(), e.stopPropagation(), s.transition(100), r.transition(100), i.setDragPosition(e), clearTimeout(this.scrollbar.dragTimeout), a.transition(0), t.hide && a.css("opacity", 1), this.params.cssMode && this.$wrapperEl.css("scroll-snap-type", "none"), this.emit("scrollbarDragStart", e) }, onDragMove: function (e) { var t = this.scrollbar, i = this.$wrapperEl, s = t.$el, a = t.$dragEl; this.scrollbar.isTouched && (e.preventDefault ? e.preventDefault() : e.returnValue = !1, t.setDragPosition(e), i.transition(0), s.transition(0), a.transition(0), this.emit("scrollbarDragMove", e)) }, onDragEnd: function (e) { var t = this.params.scrollbar, i = this.scrollbar, s = this.$wrapperEl, a = i.$el; this.scrollbar.isTouched && (this.scrollbar.isTouched = !1, this.params.cssMode && (this.$wrapperEl.css("scroll-snap-type", ""), s.transition("")), t.hide && (clearTimeout(this.scrollbar.dragTimeout), this.scrollbar.dragTimeout = U.nextTick(function () { a.css("opacity", 0), a.transition(400) }, 1e3)), this.emit("scrollbarDragEnd", e), t.snapOnRelease) && this.slideToClosest() }, enableDraggable: function () { var e, t, i, s, a; this.params.scrollbar.el && (i = this.scrollbar, e = this.touchEventsTouch, t = this.touchEventsDesktop, a = this.params, i = i.$el[0], s = !(!b.passiveListener || !a.passiveListeners) && { passive: !1, capture: !1 }, a = !(!b.passiveListener || !a.passiveListeners) && { passive: !0, capture: !1 }, b.touch ? (i.addEventListener(e.start, this.scrollbar.onDragStart, s), i.addEventListener(e.move, this.scrollbar.onDragMove, s), i.addEventListener(e.end, this.scrollbar.onDragEnd, a)) : (i.addEventListener(t.start, this.scrollbar.onDragStart, s), c.addEventListener(t.move, this.scrollbar.onDragMove, s), c.addEventListener(t.end, this.scrollbar.onDragEnd, a))) }, disableDraggable: function () { var e, t, i, s, a; this.params.scrollbar.el && (i = this.scrollbar, e = this.touchEventsTouch, t = this.touchEventsDesktop, a = this.params, i = i.$el[0], s = !(!b.passiveListener || !a.passiveListeners) && { passive: !1, capture: !1 }, a = !(!b.passiveListener || !a.passiveListeners) && { passive: !0, capture: !1 }, b.touch ? (i.removeEventListener(e.start, this.scrollbar.onDragStart, s), i.removeEventListener(e.move, this.scrollbar.onDragMove, s), i.removeEventListener(e.end, this.scrollbar.onDragEnd, a)) : (i.removeEventListener(t.start, this.scrollbar.onDragStart, s), c.removeEventListener(t.move, this.scrollbar.onDragMove, s), c.removeEventListener(t.end, this.scrollbar.onDragEnd, a))) }, init: function () { var e, t, i, s; this.params.scrollbar.el && (e = this.scrollbar, s = this.$el, i = C((t = this.params.scrollbar).el), 0 === (s = (i = this.params.uniqueNavElements && "string" == typeof t.el && 1 < i.length && 1 === s.find(t.el).length ? s.find(t.el) : i).find("." + this.params.scrollbar.dragClass)).length && (s = C(''), i.append(s)), U.extend(e, { $el: i, el: i[0], $dragEl: s, dragEl: s[0] }), t.draggable) && e.enableDraggable() }, destroy: function () { this.scrollbar.disableDraggable() } }, Q = { setTransform: function (e, t) { var i = this.rtl, e = C(e), i = i ? -1 : 1, s = e.attr("data-swiper-parallax") || "0", a = e.attr("data-swiper-parallax-x"), r = e.attr("data-swiper-parallax-y"), n = e.attr("data-swiper-parallax-scale"), o = e.attr("data-swiper-parallax-opacity"); a || r ? (a = a || "0", r = r || "0") : this.isHorizontal() ? (a = s, r = "0") : (r = s, a = "0"), a = 0 <= a.indexOf("%") ? parseInt(a, 10) * t * i + "%" : a * t * i + "px", r = 0 <= r.indexOf("%") ? parseInt(r, 10) * t + "%" : r * t + "px", null != o && (s = o - (o - 1) * (1 - Math.abs(t)), e[0].style.opacity = s), null == n ? e.transform("translate3d(" + a + ", " + r + ", 0px)") : (i = n - (n - 1) * (1 - Math.abs(t)), e.transform("translate3d(" + a + ", " + r + ", 0px) scale(" + i + ")")) }, setTranslate: function () { var s = this, e = s.$el, t = s.slides, a = s.progress, r = s.snapGrid; e.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each(function (e, t) { s.parallax.setTransform(t, a) }), t.each(function (e, t) { var i = t.progress; 1 < s.params.slidesPerGroup && "auto" !== s.params.slidesPerView && (i += Math.ceil(e / 2) - a * (r.length - 1)), i = Math.min(Math.max(i, -1), 1), C(t).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each(function (e, t) { s.parallax.setTransform(t, i) }) }) }, setTransition: function (s) { void 0 === s && (s = this.params.speed), this.$el.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each(function (e, t) { var t = C(t), i = parseInt(t.attr("data-swiper-parallax-duration"), 10) || s; 0 === s && (i = 0), t.transition(i) }) } }, J = { getDistanceBetweenTouches: function (e) { var t, i, s; return e.targetTouches.length < 2 ? 1 : (t = e.targetTouches[0].pageX, i = e.targetTouches[0].pageY, s = e.targetTouches[1].pageX, e = e.targetTouches[1].pageY, Math.sqrt(Math.pow(s - t, 2) + Math.pow(e - i, 2))) }, onGestureStart: function (e) { var t = this.params.zoom, i = this.zoom, s = i.gesture; if (i.fakeGestureTouched = !1, i.fakeGestureMoved = !1, !b.gestures) { if ("touchstart" !== e.type || "touchstart" === e.type && e.targetTouches.length < 2) return; i.fakeGestureTouched = !0, s.scaleStart = J.getDistanceBetweenTouches(e) } s.$slideEl && s.$slideEl.length || (s.$slideEl = C(e.target).closest(".swiper-slide"), 0 === s.$slideEl.length && (s.$slideEl = this.slides.eq(this.activeIndex)), s.$imageEl = s.$slideEl.find("img, svg, canvas"), s.$imageWrapEl = s.$imageEl.parent("." + t.containerClass), s.maxRatio = s.$imageWrapEl.attr("data-swiper-zoom") || t.maxRatio, 0 !== s.$imageWrapEl.length) ? (s.$imageEl.transition(0), this.zoom.isScaling = !0) : s.$imageEl = void 0 }, onGestureChange: function (e) { var t = this.params.zoom, i = this.zoom, s = i.gesture; if (!b.gestures) { if ("touchmove" !== e.type || "touchmove" === e.type && e.targetTouches.length < 2) return; i.fakeGestureMoved = !0, s.scaleMove = J.getDistanceBetweenTouches(e) } s.$imageEl && 0 !== s.$imageEl.length && (i.scale = b.gestures ? e.scale * i.currentScale : s.scaleMove / s.scaleStart * i.currentScale, i.scale > s.maxRatio && (i.scale = s.maxRatio - 1 + Math.pow(i.scale - s.maxRatio + 1, .5)), i.scale < t.minRatio && (i.scale = t.minRatio + 1 - Math.pow(t.minRatio - i.scale + 1, .5)), s.$imageEl.transform("translate3d(0,0,0) scale(" + i.scale + ")")) }, onGestureEnd: function (e) { var t = this.params.zoom, i = this.zoom, s = i.gesture; if (!b.gestures) { if (!i.fakeGestureTouched || !i.fakeGestureMoved) return; if ("touchend" !== e.type || "touchend" === e.type && e.changedTouches.length < 2 && !o.android) return; i.fakeGestureTouched = !1, i.fakeGestureMoved = !1 } s.$imageEl && 0 !== s.$imageEl.length && (i.scale = Math.max(Math.min(i.scale, s.maxRatio), t.minRatio), s.$imageEl.transition(this.params.speed).transform("translate3d(0,0,0) scale(" + i.scale + ")"), i.currentScale = i.scale, i.isScaling = !1, 1 === i.scale) && (s.$slideEl = void 0) }, onTouchStart: function (e) { var t = this.zoom, i = t.gesture, t = t.image; i.$imageEl && 0 !== i.$imageEl.length && !t.isTouched && (o.android && e.preventDefault(), t.isTouched = !0, t.touchesStart.x = ("touchstart" === e.type ? e.targetTouches[0] : e).pageX, t.touchesStart.y = ("touchstart" === e.type ? e.targetTouches[0] : e).pageY) }, onTouchMove: function (e) { var t = this.zoom, i = t.gesture, s = t.image, a = t.velocity; if (i.$imageEl && 0 !== i.$imageEl.length && (this.allowClick = !1, s.isTouched) && i.$slideEl) { s.isMoved || (s.width = i.$imageEl[0].offsetWidth, s.height = i.$imageEl[0].offsetHeight, s.startX = U.getTranslate(i.$imageWrapEl[0], "x") || 0, s.startY = U.getTranslate(i.$imageWrapEl[0], "y") || 0, i.slideWidth = i.$slideEl[0].offsetWidth, i.slideHeight = i.$slideEl[0].offsetHeight, i.$imageWrapEl.transition(0), this.rtl && (s.startX = -s.startX, s.startY = -s.startY)); var r = s.width * t.scale, n = s.height * t.scale; if (!(r < i.slideWidth && n < i.slideHeight)) { if (s.minX = Math.min(i.slideWidth / 2 - r / 2, 0), s.maxX = -s.minX, s.minY = Math.min(i.slideHeight / 2 - n / 2, 0), s.maxY = -s.minY, s.touchesCurrent.x = ("touchmove" === e.type ? e.targetTouches[0] : e).pageX, s.touchesCurrent.y = ("touchmove" === e.type ? e.targetTouches[0] : e).pageY, !s.isMoved && !t.isScaling) { if (this.isHorizontal() && (Math.floor(s.minX) === Math.floor(s.startX) && s.touchesCurrent.x < s.touchesStart.x || Math.floor(s.maxX) === Math.floor(s.startX) && s.touchesCurrent.x > s.touchesStart.x)) return void (s.isTouched = !1); if (!this.isHorizontal() && (Math.floor(s.minY) === Math.floor(s.startY) && s.touchesCurrent.y < s.touchesStart.y || Math.floor(s.maxY) === Math.floor(s.startY) && s.touchesCurrent.y > s.touchesStart.y)) return void (s.isTouched = !1) } e.preventDefault(), e.stopPropagation(), s.isMoved = !0, s.currentX = s.touchesCurrent.x - s.touchesStart.x + s.startX, s.currentY = s.touchesCurrent.y - s.touchesStart.y + s.startY, s.currentX < s.minX && (s.currentX = s.minX + 1 - Math.pow(s.minX - s.currentX + 1, .8)), s.currentX > s.maxX && (s.currentX = s.maxX - 1 + Math.pow(s.currentX - s.maxX + 1, .8)), s.currentY < s.minY && (s.currentY = s.minY + 1 - Math.pow(s.minY - s.currentY + 1, .8)), s.currentY > s.maxY && (s.currentY = s.maxY - 1 + Math.pow(s.currentY - s.maxY + 1, .8)), a.prevPositionX || (a.prevPositionX = s.touchesCurrent.x), a.prevPositionY || (a.prevPositionY = s.touchesCurrent.y), a.prevTime || (a.prevTime = Date.now()), a.x = (s.touchesCurrent.x - a.prevPositionX) / (Date.now() - a.prevTime) / 2, a.y = (s.touchesCurrent.y - a.prevPositionY) / (Date.now() - a.prevTime) / 2, Math.abs(s.touchesCurrent.x - a.prevPositionX) < 2 && (a.x = 0), Math.abs(s.touchesCurrent.y - a.prevPositionY) < 2 && (a.y = 0), a.prevPositionX = s.touchesCurrent.x, a.prevPositionY = s.touchesCurrent.y, a.prevTime = Date.now(), i.$imageWrapEl.transform("translate3d(" + s.currentX + "px, " + s.currentY + "px,0)") } } }, onTouchEnd: function () { var e, t, i, s, a = this.zoom, r = a.gesture, n = a.image, o = a.velocity; r.$imageEl && 0 !== r.$imageEl.length && (n.isTouched && n.isMoved ? (n.isTouched = !1, n.isMoved = !1, e = o.x * (i = 300), e = n.currentX + e, t = o.y * (s = 300), t = n.currentY + t, 0 !== o.x && (i = Math.abs((e - n.currentX) / o.x)), 0 !== o.y && (s = Math.abs((t - n.currentY) / o.y)), o = Math.max(i, s), n.currentX = e, n.currentY = t, i = n.width * a.scale, s = n.height * a.scale, n.minX = Math.min(r.slideWidth / 2 - i / 2, 0), n.maxX = -n.minX, n.minY = Math.min(r.slideHeight / 2 - s / 2, 0), n.maxY = -n.minY, n.currentX = Math.max(Math.min(n.currentX, n.maxX), n.minX), n.currentY = Math.max(Math.min(n.currentY, n.maxY), n.minY), r.$imageWrapEl.transition(o).transform("translate3d(" + n.currentX + "px, " + n.currentY + "px,0)")) : (n.isTouched = !1, n.isMoved = !1)) }, onTransitionEnd: function () { var e = this.zoom, t = e.gesture; t.$slideEl && this.previousIndex !== this.activeIndex && (t.$imageEl.transform("translate3d(0,0,0) scale(1)"), t.$imageWrapEl.transform("translate3d(0,0,0)"), e.scale = 1, e.currentScale = 1, t.$slideEl = void 0, t.$imageEl = void 0, t.$imageWrapEl = void 0) }, toggle: function (e) { var t = this.zoom; t.scale && 1 !== t.scale ? t.out() : t.in(e) }, in: function (e) { var t, i, s, a, r = this.zoom, n = this.params.zoom, o = r.gesture, l = r.image; o.$slideEl || (o.$slideEl = this.clickedSlide ? C(this.clickedSlide) : this.slides.eq(this.activeIndex), o.$imageEl = o.$slideEl.find("img, svg, canvas"), o.$imageWrapEl = o.$imageEl.parent("." + n.containerClass)), o.$imageEl && 0 !== o.$imageEl.length && (o.$slideEl.addClass("" + n.zoomedSlideClass), l = void 0 === l.touchesStart.x && e ? (t = ("touchend" === e.type ? e.changedTouches[0] : e).pageX, ("touchend" === e.type ? e.changedTouches[0] : e).pageY) : (t = l.touchesStart.x, l.touchesStart.y), r.scale = o.$imageWrapEl.attr("data-swiper-zoom") || n.maxRatio, r.currentScale = o.$imageWrapEl.attr("data-swiper-zoom") || n.maxRatio, e ? (n = o.$slideEl[0].offsetWidth, e = o.$slideEl[0].offsetHeight, t = o.$slideEl.offset().left + n / 2 - t, l = o.$slideEl.offset().top + e / 2 - l, s = o.$imageEl[0].offsetWidth, a = o.$imageEl[0].offsetHeight, s = s * r.scale, a = a * r.scale, s = -(n = Math.min(n / 2 - s / 2, 0)), a = -(e = Math.min(e / 2 - a / 2, 0)), s < (i = (i = t * r.scale) < n ? n : i) && (i = s), a < (s = (s = l * r.scale) < e ? e : s) && (s = a)) : s = i = 0, o.$imageWrapEl.transition(300).transform("translate3d(" + i + "px, " + s + "px,0)"), o.$imageEl.transition(300).transform("translate3d(0,0,0) scale(" + r.scale + ")")) }, out: function () { var e = this.zoom, t = this.params.zoom, i = e.gesture; i.$slideEl || (i.$slideEl = this.clickedSlide ? C(this.clickedSlide) : this.slides.eq(this.activeIndex), i.$imageEl = i.$slideEl.find("img, svg, canvas"), i.$imageWrapEl = i.$imageEl.parent("." + t.containerClass)), i.$imageEl && 0 !== i.$imageEl.length && (e.scale = 1, e.currentScale = 1, i.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"), i.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"), i.$slideEl.removeClass("" + t.zoomedSlideClass), i.$slideEl = void 0) }, enable: function () { var e, t, i = this.zoom; i.enabled || (i.enabled = !0, e = !("touchstart" !== this.touchEvents.start || !b.passiveListener || !this.params.passiveListeners) && { passive: !0, capture: !1 }, t = !b.passiveListener || { passive: !1, capture: !0 }, b.gestures ? (this.$wrapperEl.on("gesturestart", ".swiper-slide", i.onGestureStart, e), this.$wrapperEl.on("gesturechange", ".swiper-slide", i.onGestureChange, e), this.$wrapperEl.on("gestureend", ".swiper-slide", i.onGestureEnd, e)) : "touchstart" === this.touchEvents.start && (this.$wrapperEl.on(this.touchEvents.start, ".swiper-slide", i.onGestureStart, e), this.$wrapperEl.on(this.touchEvents.move, ".swiper-slide", i.onGestureChange, t), this.$wrapperEl.on(this.touchEvents.end, ".swiper-slide", i.onGestureEnd, e), this.touchEvents.cancel) && this.$wrapperEl.on(this.touchEvents.cancel, ".swiper-slide", i.onGestureEnd, e), this.$wrapperEl.on(this.touchEvents.move, "." + this.params.zoom.containerClass, i.onTouchMove, t)) }, disable: function () { var e, t, i = this.zoom; i.enabled && (this.zoom.enabled = !1, e = !("touchstart" !== this.touchEvents.start || !b.passiveListener || !this.params.passiveListeners) && { passive: !0, capture: !1 }, t = !b.passiveListener || { passive: !1, capture: !0 }, b.gestures ? (this.$wrapperEl.off("gesturestart", ".swiper-slide", i.onGestureStart, e), this.$wrapperEl.off("gesturechange", ".swiper-slide", i.onGestureChange, e), this.$wrapperEl.off("gestureend", ".swiper-slide", i.onGestureEnd, e)) : "touchstart" === this.touchEvents.start && (this.$wrapperEl.off(this.touchEvents.start, ".swiper-slide", i.onGestureStart, e), this.$wrapperEl.off(this.touchEvents.move, ".swiper-slide", i.onGestureChange, t), this.$wrapperEl.off(this.touchEvents.end, ".swiper-slide", i.onGestureEnd, e), this.touchEvents.cancel) && this.$wrapperEl.off(this.touchEvents.cancel, ".swiper-slide", i.onGestureEnd, e), this.$wrapperEl.off(this.touchEvents.move, "." + this.params.zoom.containerClass, i.onTouchMove, t)) } }, Z = { loadInSlide: function (e, o) { void 0 === o && (o = !0); var l, h = this, d = h.params.lazy; void 0 !== e && 0 !== h.slides.length && (e = (l = h.virtual && h.params.virtual.enabled ? h.$wrapperEl.children("." + h.params.slideClass + '[data-swiper-slide-index="' + e + '"]') : h.slides.eq(e)).find("." + d.elementClass + ":not(." + d.loadedClass + "):not(." + d.loadingClass + ")"), 0 !== (e = !l.hasClass(d.elementClass) || l.hasClass(d.loadedClass) || l.hasClass(d.loadingClass) ? e : e.add(l[0])).length) && e.each(function (e, t) { var i = C(t), s = (i.addClass(d.loadingClass), i.attr("data-background")), a = i.attr("data-src"), r = i.attr("data-srcset"), n = i.attr("data-sizes"); h.loadImage(i[0], a || s, r, n, !1, function () { var e, t; null == h || !h || h && !h.params || h.destroyed || (s ? (i.css("background-image", 'url("' + s + '")'), i.removeAttr("data-background")) : (r && (i.attr("srcset", r), i.removeAttr("data-srcset")), n && (i.attr("sizes", n), i.removeAttr("data-sizes")), a && (i.attr("src", a), i.removeAttr("data-src"))), i.addClass(d.loadedClass).removeClass(d.loadingClass), l.find("." + d.preloaderClass).remove(), h.params.loop && o && (e = l.attr("data-swiper-slide-index"), l.hasClass(h.params.slideDuplicateClass) ? (t = h.$wrapperEl.children('[data-swiper-slide-index="' + e + '"]:not(.' + h.params.slideDuplicateClass + ")"), h.lazy.loadInSlide(t.index(), !1)) : (t = h.$wrapperEl.children("." + h.params.slideDuplicateClass + '[data-swiper-slide-index="' + e + '"]'), h.lazy.loadInSlide(t.index(), !1))), h.emit("lazyImageReady", l[0], i[0])) }), h.emit("lazyImageLoad", l[0], i[0]) }) }, load: function () { var i = this, t = i.$wrapperEl, s = i.params, a = i.slides, e = i.activeIndex, r = i.virtual && s.virtual.enabled, n = s.lazy, o = s.slidesPerView; function l(e) { if (r) { if (t.children("." + s.slideClass + '[data-swiper-slide-index="' + e + '"]').length) return 1 } else if (a[e]) return 1 } function h(e) { return r ? C(e).attr("data-swiper-slide-index") : C(e).index() } if ("auto" === o && (o = 0), i.lazy.initialImageLoaded || (i.lazy.initialImageLoaded = !0), i.params.watchSlidesVisibility) t.children("." + s.slideVisibleClass).each(function (e, t) { t = r ? C(t).attr("data-swiper-slide-index") : C(t).index(); i.lazy.loadInSlide(t) }); else if (1 < o) for (var d = e; d < e + o; d += 1)l(d) && i.lazy.loadInSlide(d); else i.lazy.loadInSlide(e); if (n.loadPrevNext) if (1 < o || n.loadPrevNextAmount && 1 < n.loadPrevNextAmount) { for (var n = n.loadPrevNextAmount, c = o, p = Math.min(e + c + Math.max(n, c), a.length), c = Math.max(e - Math.max(c, n), 0), u = e + o; u < p; u += 1)l(u) && i.lazy.loadInSlide(u); for (var m = c; m < e; m += 1)l(m) && i.lazy.loadInSlide(m) } else { n = t.children("." + s.slideNextClass), c = (0 < n.length && i.lazy.loadInSlide(h(n)), t.children("." + s.slidePrevClass)); 0 < c.length && i.lazy.loadInSlide(h(c)) } } }, P = { LinearSpline: function (e, t) { var i, s, a, r, n; return this.x = e, this.y = t, this.lastIndex = e.length - 1, this.interpolate = function (e) { return e ? (n = function (e, t) { for (s = -1, i = e.length; 1 < i - s;)e[a = i + s >> 1] <= t ? s = a : i = a; return i }(this.x, e), r = n - 1, (e - this.x[r]) * (this.y[n] - this.y[r]) / (this.x[n] - this.x[r]) + this.y[r]) : 0 }, this }, getInterpolateFunction: function (e) { this.controller.spline || (this.controller.spline = this.params.loop ? new P.LinearSpline(this.slidesGrid, e.slidesGrid) : new P.LinearSpline(this.snapGrid, e.snapGrid)) }, setTranslate: function (e, t) { var i, s, a = this, r = a.controller.control; function n(e) { var t = a.rtlTranslate ? -a.translate : a.translate; "slide" === a.params.controller.by && (a.controller.getInterpolateFunction(e), s = -a.controller.spline.interpolate(-t)), s && "container" !== a.params.controller.by || (i = (e.maxTranslate() - e.minTranslate()) / (a.maxTranslate() - a.minTranslate()), s = (t - a.minTranslate()) * i + e.minTranslate()), a.params.controller.inverse && (s = e.maxTranslate() - s), e.updateProgress(s), e.setTranslate(s, a), e.updateActiveIndex(), e.updateSlidesClasses() } if (Array.isArray(r)) for (var o = 0; o < r.length; o += 1)r[o] !== t && r[o] instanceof u && n(r[o]); else r instanceof u && t !== r && n(r) }, setTransition: function (t, e) { var i, s = this, a = s.controller.control; function r(e) { e.setTransition(t, s), 0 !== t && (e.transitionStart(), e.params.autoHeight && U.nextTick(function () { e.updateAutoHeight() }), e.$wrapperEl.transitionEnd(function () { a && (e.params.loop && "slide" === s.params.controller.by && e.loopFix(), e.transitionEnd()) })) } if (Array.isArray(a)) for (i = 0; i < a.length; i += 1)a[i] !== e && a[i] instanceof u && r(a[i]); else a instanceof u && e !== a && r(a) } }, ee = { makeElFocusable: function (e) { return e.attr("tabIndex", "0"), e }, addElRole: function (e, t) { return e.attr("role", t), e }, addElLabel: function (e, t) { return e.attr("aria-label", t), e }, disableEl: function (e) { return e.attr("aria-disabled", !0), e }, enableEl: function (e) { return e.attr("aria-disabled", !1), e }, onEnterKey: function (e) { var t = this.params.a11y; 13 === e.keyCode && (e = C(e.target), this.navigation && this.navigation.$nextEl && e.is(this.navigation.$nextEl) && (this.isEnd && !this.params.loop || this.slideNext(), this.isEnd ? this.a11y.notify(t.lastSlideMessage) : this.a11y.notify(t.nextSlideMessage)), this.navigation && this.navigation.$prevEl && e.is(this.navigation.$prevEl) && (this.isBeginning && !this.params.loop || this.slidePrev(), this.isBeginning ? this.a11y.notify(t.firstSlideMessage) : this.a11y.notify(t.prevSlideMessage)), this.pagination) && e.is("." + this.params.pagination.bulletClass) && e[0].click() }, notify: function (e) { var t = this.a11y.liveRegion; 0 !== t.length && (t.html(""), t.html(e)) }, updateNavigation: function () { var e, t; !this.params.loop && this.navigation && (e = (t = this.navigation).$nextEl, (t = t.$prevEl) && 0 < t.length && (this.isBeginning ? this.a11y.disableEl(t) : this.a11y.enableEl(t)), e) && 0 < e.length && (this.isEnd ? this.a11y.disableEl(e) : this.a11y.enableEl(e)) }, updatePagination: function () { var i = this, s = i.params.a11y; i.pagination && i.params.pagination.clickable && i.pagination.bullets && i.pagination.bullets.length && i.pagination.bullets.each(function (e, t) { t = C(t); i.a11y.makeElFocusable(t), i.a11y.addElRole(t, "button"), i.a11y.addElLabel(t, s.paginationBulletMessage.replace(/{{index}}/, t.index() + 1)) }) }, init: function () { this.$el.append(this.a11y.liveRegion); var e, t, i = this.params.a11y; this.navigation && this.navigation.$nextEl && (e = this.navigation.$nextEl), this.navigation && this.navigation.$prevEl && (t = this.navigation.$prevEl), e && (this.a11y.makeElFocusable(e), this.a11y.addElRole(e, "button"), this.a11y.addElLabel(e, i.nextSlideMessage), e.on("keydown", this.a11y.onEnterKey)), t && (this.a11y.makeElFocusable(t), this.a11y.addElRole(t, "button"), this.a11y.addElLabel(t, i.prevSlideMessage), t.on("keydown", this.a11y.onEnterKey)), this.pagination && this.params.pagination.clickable && this.pagination.bullets && this.pagination.bullets.length && this.pagination.$el.on("keydown", "." + this.params.pagination.bulletClass, this.a11y.onEnterKey) }, destroy: function () { var e, t; this.a11y.liveRegion && 0 < this.a11y.liveRegion.length && this.a11y.liveRegion.remove(), this.navigation && this.navigation.$nextEl && (e = this.navigation.$nextEl), this.navigation && this.navigation.$prevEl && (t = this.navigation.$prevEl), e && e.off("keydown", this.a11y.onEnterKey), t && t.off("keydown", this.a11y.onEnterKey), this.pagination && this.params.pagination.clickable && this.pagination.bullets && this.pagination.bullets.length && this.pagination.$el.off("keydown", "." + this.params.pagination.bulletClass, this.a11y.onEnterKey) } }, I = { init: function () { var e; this.params.history && (j.history && j.history.pushState ? ((e = this.history).initialized = !0, e.paths = I.getPathValues(), (e.paths.key || e.paths.value) && (e.scrollToSlide(0, e.paths.value, this.params.runCallbacksOnInit), this.params.history.replaceState || j.addEventListener("popstate", this.history.setHistoryPopState))) : (this.params.history.enabled = !1, this.params.hashNavigation.enabled = !0)) }, destroy: function () { this.params.history.replaceState || j.removeEventListener("popstate", this.history.setHistoryPopState) }, setHistoryPopState: function () { this.history.paths = I.getPathValues(), this.history.scrollToSlide(this.params.speed, this.history.paths.value, !1) }, getPathValues: function () { var e = j.location.pathname.slice(1).split("/").filter(function (e) { return "" !== e }), t = e.length; return { key: e[t - 2], value: e[t - 1] } }, setHistory: function (e, t) { this.history.initialized && this.params.history.enabled && (t = this.slides.eq(t), t = I.slugify(t.attr("data-history")), j.location.pathname.includes(e) || (t = e + "/" + t), (e = j.history.state) && e.value === t || (this.params.history.replaceState ? j.history.replaceState({ value: t }, null, t) : j.history.pushState({ value: t }, null, t))) }, slugify: function (e) { return e.toString().replace(/\s+/g, "-").replace(/[^\w-]+/g, "").replace(/--+/g, "-").replace(/^-+/, "").replace(/-+$/, "") }, scrollToSlide: function (e, t, i) { if (t) for (var s = 0, a = this.slides.length; s < a; s += 1) { var r = this.slides.eq(s); I.slugify(r.attr("data-history")) !== t || r.hasClass(this.params.slideDuplicateClass) || (r = r.index(), this.slideTo(r, e, i)) } else this.slideTo(0, e, i) } }, M = { onHashCange: function () { var e = c.location.hash.replace("#", ""); e !== this.slides.eq(this.activeIndex).attr("data-hash") && void 0 !== (e = this.$wrapperEl.children("." + this.params.slideClass + '[data-hash="' + e + '"]').index()) && this.slideTo(e) }, setHash: function () { var e; this.hashNavigation.initialized && this.params.hashNavigation.enabled && (this.params.hashNavigation.replaceState && j.history && j.history.replaceState ? j.history.replaceState(null, null, "#" + this.slides.eq(this.activeIndex).attr("data-hash") || "") : (e = (e = this.slides.eq(this.activeIndex)).attr("data-hash") || e.attr("data-history"), c.location.hash = e || "")) }, init: function () { if (!(!this.params.hashNavigation.enabled || this.params.history && this.params.history.enabled)) { this.hashNavigation.initialized = !0; var e = c.location.hash.replace("#", ""); if (e) for (var t = 0, i = this.slides.length; t < i; t += 1) { var s = this.slides.eq(t); (s.attr("data-hash") || s.attr("data-history")) !== e || s.hasClass(this.params.slideDuplicateClass) || (s = s.index(), this.slideTo(s, 0, this.params.runCallbacksOnInit, !0)) } this.params.hashNavigation.watchState && C(j).on("hashchange", this.hashNavigation.onHashCange) } }, destroy: function () { this.params.hashNavigation.watchState && C(j).off("hashchange", this.hashNavigation.onHashCange) } }, z = { run: function () { var e = this, t = e.slides.eq(e.activeIndex), i = e.params.autoplay.delay; t.attr("data-swiper-autoplay") && (i = t.attr("data-swiper-autoplay") || e.params.autoplay.delay), clearTimeout(e.autoplay.timeout), e.autoplay.timeout = U.nextTick(function () { e.params.autoplay.reverseDirection ? e.params.loop ? (e.loopFix(), e.slidePrev(e.params.speed, !0, !0), e.emit("autoplay")) : e.isBeginning ? e.params.autoplay.stopOnLastSlide ? e.autoplay.stop() : (e.slideTo(e.slides.length - 1, e.params.speed, !0, !0), e.emit("autoplay")) : (e.slidePrev(e.params.speed, !0, !0), e.emit("autoplay")) : e.params.loop ? (e.loopFix(), e.slideNext(e.params.speed, !0, !0), e.emit("autoplay")) : e.isEnd ? e.params.autoplay.stopOnLastSlide ? e.autoplay.stop() : (e.slideTo(0, e.params.speed, !0, !0), e.emit("autoplay")) : (e.slideNext(e.params.speed, !0, !0), e.emit("autoplay")), e.params.cssMode && e.autoplay.running && e.autoplay.run() }, i) }, start: function () { return void 0 === this.autoplay.timeout && !this.autoplay.running && (this.autoplay.running = !0, this.emit("autoplayStart"), this.autoplay.run(), !0) }, stop: function () { return !!this.autoplay.running && void 0 !== this.autoplay.timeout && (this.autoplay.timeout && (clearTimeout(this.autoplay.timeout), this.autoplay.timeout = void 0), this.autoplay.running = !1, this.emit("autoplayStop"), !0) }, pause: function (e) { !this.autoplay.running || this.autoplay.paused || (this.autoplay.timeout && clearTimeout(this.autoplay.timeout), this.autoplay.paused = !0, 0 !== e && this.params.autoplay.waitForTransition ? (this.$wrapperEl[0].addEventListener("transitionend", this.autoplay.onTransitionEnd), this.$wrapperEl[0].addEventListener("webkitTransitionEnd", this.autoplay.onTransitionEnd)) : (this.autoplay.paused = !1, this.autoplay.run())) } }, te = { setTranslate: function () { for (var e = this.slides, t = 0; t < e.length; t += 1) { var i = this.slides.eq(t), s = -i[0].swiperSlideOffset, a = (this.params.virtualTranslate || (s -= this.translate), 0), r = (this.isHorizontal() || (a = s, s = 0), this.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(i[0].progress), 0) : 1 + Math.min(Math.max(i[0].progress, -1), 0)); i.css({ opacity: r }).transform("translate3d(" + s + "px, " + a + "px, 0px)") } }, setTransition: function (e) { var i, s = this, t = s.slides, a = s.$wrapperEl; t.transition(e), s.params.virtualTranslate && 0 !== e && (i = !1, t.transitionEnd(function () { if (!i && s && !s.destroyed) { i = !0, s.animating = !1; for (var e = ["webkitTransitionEnd", "transitionend"], t = 0; t < e.length; t += 1)a.trigger(e[t]) } })) } }, ie = { setTranslate: function () { var e, t = this.$el, i = this.$wrapperEl, s = this.slides, a = this.width, r = this.height, n = this.rtlTranslate, o = this.size, l = this.params.cubeEffect, h = this.isHorizontal(), d = this.virtual && this.params.virtual.enabled, c = 0; l.shadow && (h ? (0 === (e = i.find(".swiper-cube-shadow")).length && (e = C(''), i.append(e)), e.css({ height: a + "px" })) : 0 === (e = t.find(".swiper-cube-shadow")).length && (e = C(''), t.append(e))); for (var p, u = 0; u < s.length; u += 1) { var m = s.eq(u), v = u, g = 90 * (v = d ? parseInt(m.attr("data-swiper-slide-index"), 10) : v), f = Math.floor(g / 360), w = (n && (g = -g, f = Math.floor(-g / 360)), Math.max(Math.min(m[0].progress, 1), -1)), y = 0, b = 0, E = 0, f = (v % 4 == 0 ? (y = 4 * -f * o, E = 0) : (v - 1) % 4 == 0 ? (y = 0, E = 4 * -f * o) : (v - 2) % 4 == 0 ? (y = o + 4 * f * o, E = o) : (v - 3) % 4 == 0 && (y = -o, E = 3 * o + 4 * o * f), n && (y = -y), h || (b = y, y = 0), "rotateX(" + (h ? 0 : -g) + "deg) rotateY(" + (h ? g : 0) + "deg) translate3d(" + y + "px, " + b + "px, " + E + "px)"); w <= 1 && -1 < w && (c = 90 * v + 90 * w, n) && (c = 90 * -v - 90 * w), m.transform(f), l.slideShadows && (g = h ? m.find(".swiper-slide-shadow-left") : m.find(".swiper-slide-shadow-top"), y = h ? m.find(".swiper-slide-shadow-right") : m.find(".swiper-slide-shadow-bottom"), 0 === g.length && (g = C(''), m.append(g)), 0 === y.length && (y = C(''), m.append(y)), g.length && (g[0].style.opacity = Math.max(-w, 0)), y.length) && (y[0].style.opacity = Math.max(w, 0)) } i.css({ "-webkit-transform-origin": "50% 50% -" + o / 2 + "px", "-moz-transform-origin": "50% 50% -" + o / 2 + "px", "-ms-transform-origin": "50% 50% -" + o / 2 + "px", "transform-origin": "50% 50% -" + o / 2 + "px" }), l.shadow && (h ? e.transform("translate3d(0px, " + (a / 2 + l.shadowOffset) + "px, " + -a / 2 + "px) rotateX(90deg) rotateZ(0deg) scale(" + l.shadowScale + ")") : (t = Math.abs(c) - 90 * Math.floor(Math.abs(c) / 90), a = 1.5 - (Math.sin(2 * t * Math.PI / 360) / 2 + Math.cos(2 * t * Math.PI / 360) / 2), t = l.shadowScale, a = l.shadowScale / a, p = l.shadowOffset, e.transform("scale3d(" + t + ", 1, " + a + ") translate3d(0px, " + (r / 2 + p) + "px, " + -r / 2 / a + "px) rotateX(-90deg)"))), i.transform("translate3d(0px,0," + (T.isSafari || T.isUiWebView ? -o / 2 : 0) + "px) rotateX(" + (this.isHorizontal() ? 0 : c) + "deg) rotateY(" + (this.isHorizontal() ? -c : 0) + "deg)") }, setTransition: function (e) { var t = this.$el; this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e), this.params.cubeEffect.shadow && !this.isHorizontal() && t.find(".swiper-cube-shadow").transition(e) } }, se = { setTranslate: function () { for (var e = this.slides, t = this.rtlTranslate, i = 0; i < e.length; i += 1) { var s, a, r = e.eq(i), n = r[0].progress, o = -180 * (n = this.params.flipEffect.limitRotation ? Math.max(Math.min(r[0].progress, 1), -1) : n), l = 0, h = -r[0].swiperSlideOffset, d = 0; this.isHorizontal() ? t && (o = -o) : (d = h, l = -o, o = h = 0), r[0].style.zIndex = -Math.abs(Math.round(n)) + e.length, this.params.flipEffect.slideShadows && (s = this.isHorizontal() ? r.find(".swiper-slide-shadow-left") : r.find(".swiper-slide-shadow-top"), a = this.isHorizontal() ? r.find(".swiper-slide-shadow-right") : r.find(".swiper-slide-shadow-bottom"), 0 === s.length && (s = C(''), r.append(s)), 0 === a.length && (a = C(''), r.append(a)), s.length && (s[0].style.opacity = Math.max(-n, 0)), a.length) && (a[0].style.opacity = Math.max(n, 0)), r.transform("translate3d(" + h + "px, " + d + "px, 0px) rotateX(" + l + "deg) rotateY(" + o + "deg)") } }, setTransition: function (e) { var i, s = this, t = s.slides, a = s.activeIndex, r = s.$wrapperEl; t.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e), s.params.virtualTranslate && 0 !== e && (i = !1, t.eq(a).transitionEnd(function () { if (!i && s && !s.destroyed) { i = !0, s.animating = !1; for (var e = ["webkitTransitionEnd", "transitionend"], t = 0; t < e.length; t += 1)r.trigger(e[t]) } })) } }, ae = { setTranslate: function () { for (var e = this.width, t = this.height, i = this.slides, s = this.$wrapperEl, a = this.slidesSizesGrid, r = this.params.coverflowEffect, n = this.isHorizontal(), o = this.translate, l = n ? e / 2 - o : t / 2 - o, h = n ? r.rotate : -r.rotate, d = r.depth, c = 0, p = i.length; c < p; c += 1) { var u = i.eq(c), m = a[c], m = (l - u[0].swiperSlideOffset - m / 2) / m * r.modifier, v = n ? h * m : 0, g = n ? 0 : h * m, f = -d * Math.abs(m), w = n ? 0 : r.stretch * m, y = n ? r.stretch * m : 0, y = (Math.abs(y) < .001 && (y = 0), Math.abs(w) < .001 && (w = 0), Math.abs(f) < .001 && (f = 0), Math.abs(v) < .001 && (v = 0), "translate3d(" + y + "px," + w + "px," + f + "px) rotateX(" + (g = Math.abs(g) < .001 ? 0 : g) + "deg) rotateY(" + v + "deg)"); u.transform(y), u[0].style.zIndex = 1 - Math.abs(Math.round(m)), r.slideShadows && (w = n ? u.find(".swiper-slide-shadow-left") : u.find(".swiper-slide-shadow-top"), f = n ? u.find(".swiper-slide-shadow-right") : u.find(".swiper-slide-shadow-bottom"), 0 === w.length && (w = C(''), u.append(w)), 0 === f.length && (f = C(''), u.append(f)), w.length && (w[0].style.opacity = 0 < m ? m : 0), f.length) && (f[0].style.opacity = 0 < -m ? -m : 0) } (b.pointerEvents || b.prefixedPointerEvents) && (s[0].style.perspectiveOrigin = l + "px 50%") }, setTransition: function (e) { this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e) } }, re = { init: function () { var e = this.params.thumbs, t = this.constructor; e.swiper instanceof t ? (this.thumbs.swiper = e.swiper, U.extend(this.thumbs.swiper.originalParams, { watchSlidesProgress: !0, slideToClickedSlide: !1 }), U.extend(this.thumbs.swiper.params, { watchSlidesProgress: !0, slideToClickedSlide: !1 })) : U.isObject(e.swiper) && (this.thumbs.swiper = new t(U.extend({}, e.swiper, { watchSlidesVisibility: !0, watchSlidesProgress: !0, slideToClickedSlide: !1 })), this.thumbs.swiperCreated = !0), this.thumbs.swiper.$el.addClass(this.params.thumbs.thumbsContainerClass), this.thumbs.swiper.on("tap", this.thumbs.onThumbClick) }, onThumbClick: function () { var e, t, i, s = this.thumbs.swiper; s && (e = s.clickedIndex, (i = s.clickedSlide) && C(i).hasClass(this.params.thumbs.slideThumbActiveClass) || null == e || (i = s.params.loop ? parseInt(C(s.clickedSlide).attr("data-swiper-slide-index"), 10) : e, this.params.loop && (s = this.activeIndex, this.slides.eq(s).hasClass(this.params.slideDuplicateClass) && (this.loopFix(), this._clientLeft = this.$wrapperEl[0].clientLeft, s = this.activeIndex), e = this.slides.eq(s).prevAll('[data-swiper-slide-index="' + i + '"]').eq(0).index(), t = this.slides.eq(s).nextAll('[data-swiper-slide-index="' + i + '"]').eq(0).index(), i = void 0 === e || void 0 !== t && t - s < s - e ? t : e), this.slideTo(i))) }, update: function (e) { var t = this.thumbs.swiper; if (t) { var i, s, a, r = "auto" === t.params.slidesPerView ? t.slidesPerViewDynamic() : t.params.slidesPerView, n = (this.realIndex !== t.realIndex && (i = t.activeIndex, a = t.params.loop ? (t.slides.eq(i).hasClass(t.params.slideDuplicateClass) && (t.loopFix(), t._clientLeft = t.$wrapperEl[0].clientLeft, i = t.activeIndex), s = t.slides.eq(i).prevAll('[data-swiper-slide-index="' + this.realIndex + '"]').eq(0).index(), a = t.slides.eq(i).nextAll('[data-swiper-slide-index="' + this.realIndex + '"]').eq(0).index(), void 0 === s ? a : void 0 === a ? s : a - i == i - s ? i : a - i < i - s ? a : s) : this.realIndex, t.visibleSlidesIndexes) && t.visibleSlidesIndexes.indexOf(a) < 0 && (t.params.centeredSlides ? a = i < a ? a - Math.floor(r / 2) + 1 : a + Math.floor(r / 2) - 1 : i < a && (a = a - r + 1), t.slideTo(a, e ? 0 : void 0)), 1), o = this.params.thumbs.slideThumbActiveClass; if (1 < this.params.slidesPerView && !this.params.centeredSlides && (n = this.params.slidesPerView), this.params.thumbs.multipleActiveThumbs || (n = 1), n = Math.floor(n), t.slides.removeClass(o), t.params.loop || t.params.virtual && t.params.virtual.enabled) for (var l = 0; l < n; l += 1)t.$wrapperEl.children('[data-swiper-slide-index="' + (this.realIndex + l) + '"]').addClass(o); else for (var h = 0; h < n; h += 1)t.slides.eq(this.realIndex + h).addClass(o) } } }, O = [m, Y, X, v, f, y, E, { name: "mousewheel", params: { mousewheel: { enabled: !1, releaseOnEdges: !1, invert: !1, forceToAxis: !1, sensitivity: 1, eventsTarged: "container" } }, create: function () { U.extend(this, { mousewheel: { enabled: !1, enable: S.enable.bind(this), disable: S.disable.bind(this), handle: S.handle.bind(this), handleMouseEnter: S.handleMouseEnter.bind(this), handleMouseLeave: S.handleMouseLeave.bind(this), animateSlider: S.animateSlider.bind(this), releaseScroll: S.releaseScroll.bind(this), lastScrollTime: U.now(), lastEventBeforeSnap: void 0, recentWheelEvents: [] } }) }, on: { init: function () { !this.params.mousewheel.enabled && this.params.cssMode && this.mousewheel.disable(), this.params.mousewheel.enabled && this.mousewheel.enable() }, destroy: function () { this.params.cssMode && this.mousewheel.enable(), this.mousewheel.enabled && this.mousewheel.disable() } } }, { name: "navigation", params: { navigation: { nextEl: null, prevEl: null, hideOnClick: !1, disabledClass: "swiper-button-disabled", hiddenClass: "swiper-button-hidden", lockClass: "swiper-button-lock" } }, create: function () { U.extend(this, { navigation: { init: x.init.bind(this), update: x.update.bind(this), destroy: x.destroy.bind(this), onNextClick: x.onNextClick.bind(this), onPrevClick: x.onPrevClick.bind(this) } }) }, on: { init: function () { this.navigation.init(), this.navigation.update() }, toEdge: function () { this.navigation.update() }, fromEdge: function () { this.navigation.update() }, destroy: function () { this.navigation.destroy() }, click: function (e) { var t, i = this.navigation, s = i.$nextEl, i = i.$prevEl; !this.params.navigation.hideOnClick || C(e.target).is(i) || C(e.target).is(s) || (s ? t = s.hasClass(this.params.navigation.hiddenClass) : i && (t = i.hasClass(this.params.navigation.hiddenClass)), !0 === t ? this.emit("navigationShow", this) : this.emit("navigationHide", this), s && s.toggleClass(this.params.navigation.hiddenClass), i && i.toggleClass(this.params.navigation.hiddenClass)) } } }, { name: "pagination", params: { pagination: { el: null, bulletElement: "span", clickable: !1, hideOnClick: !1, renderBullet: null, renderProgressbar: null, renderFraction: null, renderCustom: null, progressbarOpposite: !1, type: "bullets", dynamicBullets: !1, dynamicMainBullets: 1, formatFractionCurrent: function (e) { return e }, formatFractionTotal: function (e) { return e }, bulletClass: "swiper-pagination-bullet", bulletActiveClass: "swiper-pagination-bullet-active", modifierClass: "swiper-pagination-", currentClass: "swiper-pagination-current", totalClass: "swiper-pagination-total", hiddenClass: "swiper-pagination-hidden", progressbarFillClass: "swiper-pagination-progressbar-fill", progressbarOppositeClass: "swiper-pagination-progressbar-opposite", clickableClass: "swiper-pagination-clickable", lockClass: "swiper-pagination-lock" } }, create: function () { U.extend(this, { pagination: { init: L.init.bind(this), render: L.render.bind(this), update: L.update.bind(this), destroy: L.destroy.bind(this), dynamicBulletIndex: 0 } }) }, on: { init: function () { this.pagination.init(), this.pagination.render(), this.pagination.update() }, activeIndexChange: function () { !this.params.loop && void 0 !== this.snapIndex || this.pagination.update() }, snapIndexChange: function () { this.params.loop || this.pagination.update() }, slidesLengthChange: function () { this.params.loop && (this.pagination.render(), this.pagination.update()) }, snapGridLengthChange: function () { this.params.loop || (this.pagination.render(), this.pagination.update()) }, destroy: function () { this.pagination.destroy() }, click: function (e) { this.params.pagination.el && this.params.pagination.hideOnClick && 0 < this.pagination.$el.length && !C(e.target).hasClass(this.params.pagination.bulletClass) && (!0 === this.pagination.$el.hasClass(this.params.pagination.hiddenClass) ? this.emit("paginationShow", this) : this.emit("paginationHide", this), this.pagination.$el.toggleClass(this.params.pagination.hiddenClass)) } } }, { name: "scrollbar", params: { scrollbar: { el: null, dragSize: "auto", hide: !1, draggable: !1, snapOnRelease: !0, lockClass: "swiper-scrollbar-lock", dragClass: "swiper-scrollbar-drag" } }, create: function () { U.extend(this, { scrollbar: { init: k.init.bind(this), destroy: k.destroy.bind(this), updateSize: k.updateSize.bind(this), setTranslate: k.setTranslate.bind(this), setTransition: k.setTransition.bind(this), enableDraggable: k.enableDraggable.bind(this), disableDraggable: k.disableDraggable.bind(this), setDragPosition: k.setDragPosition.bind(this), getPointerPosition: k.getPointerPosition.bind(this), onDragStart: k.onDragStart.bind(this), onDragMove: k.onDragMove.bind(this), onDragEnd: k.onDragEnd.bind(this), isTouched: !1, timeout: null, dragTimeout: null } }) }, on: { init: function () { this.scrollbar.init(), this.scrollbar.updateSize(), this.scrollbar.setTranslate() }, update: function () { this.scrollbar.updateSize() }, resize: function () { this.scrollbar.updateSize() }, observerUpdate: function () { this.scrollbar.updateSize() }, setTranslate: function () { this.scrollbar.setTranslate() }, setTransition: function (e) { this.scrollbar.setTransition(e) }, destroy: function () { this.scrollbar.destroy() } } }, { name: "parallax", params: { parallax: { enabled: !1 } }, create: function () { U.extend(this, { parallax: { setTransform: Q.setTransform.bind(this), setTranslate: Q.setTranslate.bind(this), setTransition: Q.setTransition.bind(this) } }) }, on: { beforeInit: function () { this.params.parallax.enabled && (this.params.watchSlidesProgress = !0, this.originalParams.watchSlidesProgress = !0) }, init: function () { this.params.parallax.enabled && this.parallax.setTranslate() }, setTranslate: function () { this.params.parallax.enabled && this.parallax.setTranslate() }, setTransition: function (e) { this.params.parallax.enabled && this.parallax.setTransition(e) } } }, { name: "zoom", params: { zoom: { enabled: !1, maxRatio: 3, minRatio: 1, toggle: !0, containerClass: "swiper-zoom-container", zoomedSlideClass: "swiper-slide-zoomed" } }, create: function () { var s = this, t = { enabled: !1, scale: 1, currentScale: 1, isScaling: !1, gesture: { $slideEl: void 0, slideWidth: void 0, slideHeight: void 0, $imageEl: void 0, $imageWrapEl: void 0, maxRatio: 3 }, image: { isTouched: void 0, isMoved: void 0, currentX: void 0, currentY: void 0, minX: void 0, minY: void 0, maxX: void 0, maxY: void 0, width: void 0, height: void 0, startX: void 0, startY: void 0, touchesStart: {}, touchesCurrent: {} }, velocity: { x: void 0, y: void 0, prevPositionX: void 0, prevPositionY: void 0, prevTime: void 0 } }, a = ("onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out".split(" ").forEach(function (e) { t[e] = J[e].bind(s) }), U.extend(s, { zoom: t }), 1); Object.defineProperty(s.zoom, "scale", { get: function () { return a }, set: function (e) { var t, i; a !== e && (t = s.zoom.gesture.$imageEl ? s.zoom.gesture.$imageEl[0] : void 0, i = s.zoom.gesture.$slideEl ? s.zoom.gesture.$slideEl[0] : void 0, s.emit("zoomChange", e, t, i)), a = e } }) }, on: { init: function () { this.params.zoom.enabled && this.zoom.enable() }, destroy: function () { this.zoom.disable() }, touchStart: function (e) { this.zoom.enabled && this.zoom.onTouchStart(e) }, touchEnd: function (e) { this.zoom.enabled && this.zoom.onTouchEnd(e) }, doubleTap: function (e) { this.params.zoom.enabled && this.zoom.enabled && this.params.zoom.toggle && this.zoom.toggle(e) }, transitionEnd: function () { this.zoom.enabled && this.params.zoom.enabled && this.zoom.onTransitionEnd() }, slideChange: function () { this.zoom.enabled && this.params.zoom.enabled && this.params.cssMode && this.zoom.onTransitionEnd() } } }, { name: "lazy", params: { lazy: { enabled: !1, loadPrevNext: !1, loadPrevNextAmount: 1, loadOnTransitionStart: !1, elementClass: "swiper-lazy", loadingClass: "swiper-lazy-loading", loadedClass: "swiper-lazy-loaded", preloaderClass: "swiper-lazy-preloader" } }, create: function () { U.extend(this, { lazy: { initialImageLoaded: !1, load: Z.load.bind(this), loadInSlide: Z.loadInSlide.bind(this) } }) }, on: { beforeInit: function () { this.params.lazy.enabled && this.params.preloadImages && (this.params.preloadImages = !1) }, init: function () { this.params.lazy.enabled && !this.params.loop && 0 === this.params.initialSlide && this.lazy.load() }, scroll: function () { this.params.freeMode && !this.params.freeModeSticky && this.lazy.load() }, resize: function () { this.params.lazy.enabled && this.lazy.load() }, scrollbarDragMove: function () { this.params.lazy.enabled && this.lazy.load() }, transitionStart: function () { this.params.lazy.enabled && (this.params.lazy.loadOnTransitionStart || !this.params.lazy.loadOnTransitionStart && !this.lazy.initialImageLoaded) && this.lazy.load() }, transitionEnd: function () { this.params.lazy.enabled && !this.params.lazy.loadOnTransitionStart && this.lazy.load() }, slideChange: function () { this.params.lazy.enabled && this.params.cssMode && this.lazy.load() } } }, { name: "controller", params: { controller: { control: void 0, inverse: !1, by: "slide" } }, create: function () { U.extend(this, { controller: { control: this.params.controller.control, getInterpolateFunction: P.getInterpolateFunction.bind(this), setTranslate: P.setTranslate.bind(this), setTransition: P.setTransition.bind(this) } }) }, on: { update: function () { this.controller.control && this.controller.spline && (this.controller.spline = void 0, delete this.controller.spline) }, resize: function () { this.controller.control && this.controller.spline && (this.controller.spline = void 0, delete this.controller.spline) }, observerUpdate: function () { this.controller.control && this.controller.spline && (this.controller.spline = void 0, delete this.controller.spline) }, setTranslate: function (e, t) { this.controller.control && this.controller.setTranslate(e, t) }, setTransition: function (e, t) { this.controller.control && this.controller.setTransition(e, t) } } }, { name: "a11y", params: { a11y: { enabled: !0, notificationClass: "swiper-notification", prevSlideMessage: "Previous slide", nextSlideMessage: "Next slide", firstSlideMessage: "This is the first slide", lastSlideMessage: "This is the last slide", paginationBulletMessage: "Go to slide {{index}}" } }, create: function () { var t = this; U.extend(t, { a11y: { liveRegion: C('') } }), Object.keys(ee).forEach(function (e) { t.a11y[e] = ee[e].bind(t) }) }, on: { init: function () { this.params.a11y.enabled && (this.a11y.init(), this.a11y.updateNavigation()) }, toEdge: function () { this.params.a11y.enabled && this.a11y.updateNavigation() }, fromEdge: function () { this.params.a11y.enabled && this.a11y.updateNavigation() }, paginationUpdate: function () { this.params.a11y.enabled && this.a11y.updatePagination() }, destroy: function () { this.params.a11y.enabled && this.a11y.destroy() } } }, { name: "history", params: { history: { enabled: !1, replaceState: !1, key: "slides" } }, create: function () { U.extend(this, { history: { init: I.init.bind(this), setHistory: I.setHistory.bind(this), setHistoryPopState: I.setHistoryPopState.bind(this), scrollToSlide: I.scrollToSlide.bind(this), destroy: I.destroy.bind(this) } }) }, on: { init: function () { this.params.history.enabled && this.history.init() }, destroy: function () { this.params.history.enabled && this.history.destroy() }, transitionEnd: function () { this.history.initialized && this.history.setHistory(this.params.history.key, this.activeIndex) }, slideChange: function () { this.history.initialized && this.params.cssMode && this.history.setHistory(this.params.history.key, this.activeIndex) } } }, { name: "hash-navigation", params: { hashNavigation: { enabled: !1, replaceState: !1, watchState: !1 } }, create: function () { U.extend(this, { hashNavigation: { initialized: !1, init: M.init.bind(this), destroy: M.destroy.bind(this), setHash: M.setHash.bind(this), onHashCange: M.onHashCange.bind(this) } }) }, on: { init: function () { this.params.hashNavigation.enabled && this.hashNavigation.init() }, destroy: function () { this.params.hashNavigation.enabled && this.hashNavigation.destroy() }, transitionEnd: function () { this.hashNavigation.initialized && this.hashNavigation.setHash() }, slideChange: function () { this.hashNavigation.initialized && this.params.cssMode && this.hashNavigation.setHash() } } }, { name: "autoplay", params: { autoplay: { enabled: !1, delay: 3e3, waitForTransition: !0, disableOnInteraction: !0, stopOnLastSlide: !1, reverseDirection: !1 } }, create: function () { var t = this; U.extend(t, { autoplay: { running: !1, paused: !1, run: z.run.bind(t), start: z.start.bind(t), stop: z.stop.bind(t), pause: z.pause.bind(t), onVisibilityChange: function () { "hidden" === document.visibilityState && t.autoplay.running && t.autoplay.pause(), "visible" === document.visibilityState && t.autoplay.paused && (t.autoplay.run(), t.autoplay.paused = !1) }, onTransitionEnd: function (e) { t && !t.destroyed && t.$wrapperEl && e.target === this && (t.$wrapperEl[0].removeEventListener("transitionend", t.autoplay.onTransitionEnd), t.$wrapperEl[0].removeEventListener("webkitTransitionEnd", t.autoplay.onTransitionEnd), t.autoplay.paused = !1, t.autoplay.running ? t.autoplay.run() : t.autoplay.stop()) } } }) }, on: { init: function () { this.params.autoplay.enabled && (this.autoplay.start(), document.addEventListener("visibilitychange", this.autoplay.onVisibilityChange)) }, beforeTransitionStart: function (e, t) { this.autoplay.running && (t || !this.params.autoplay.disableOnInteraction ? this.autoplay.pause(e) : this.autoplay.stop()) }, sliderFirstMove: function () { this.autoplay.running && (this.params.autoplay.disableOnInteraction ? this.autoplay.stop() : this.autoplay.pause()) }, touchEnd: function () { this.params.cssMode && this.autoplay.paused && !this.params.autoplay.disableOnInteraction && this.autoplay.run() }, destroy: function () { this.autoplay.running && this.autoplay.stop(), document.removeEventListener("visibilitychange", this.autoplay.onVisibilityChange) } } }, { name: "effect-fade", params: { fadeEffect: { crossFade: !1 } }, create: function () { U.extend(this, { fadeEffect: { setTranslate: te.setTranslate.bind(this), setTransition: te.setTransition.bind(this) } }) }, on: { beforeInit: function () { var e; "fade" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "fade"), U.extend(this.params, e = { slidesPerView: 1, slidesPerColumn: 1, slidesPerGroup: 1, watchSlidesProgress: !0, spaceBetween: 0, virtualTranslate: !0 }), U.extend(this.originalParams, e)) }, setTranslate: function () { "fade" === this.params.effect && this.fadeEffect.setTranslate() }, setTransition: function (e) { "fade" === this.params.effect && this.fadeEffect.setTransition(e) } } }, { name: "effect-cube", params: { cubeEffect: { slideShadows: !0, shadow: !0, shadowOffset: 20, shadowScale: .94 } }, create: function () { U.extend(this, { cubeEffect: { setTranslate: ie.setTranslate.bind(this), setTransition: ie.setTransition.bind(this) } }) }, on: { beforeInit: function () { var e; "cube" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "cube"), this.classNames.push(this.params.containerModifierClass + "3d"), U.extend(this.params, e = { slidesPerView: 1, slidesPerColumn: 1, slidesPerGroup: 1, watchSlidesProgress: !0, resistanceRatio: 0, spaceBetween: 0, centeredSlides: !1, virtualTranslate: !0 }), U.extend(this.originalParams, e)) }, setTranslate: function () { "cube" === this.params.effect && this.cubeEffect.setTranslate() }, setTransition: function (e) { "cube" === this.params.effect && this.cubeEffect.setTransition(e) } } }, { name: "effect-flip", params: { flipEffect: { slideShadows: !0, limitRotation: !0 } }, create: function () { U.extend(this, { flipEffect: { setTranslate: se.setTranslate.bind(this), setTransition: se.setTransition.bind(this) } }) }, on: { beforeInit: function () { var e; "flip" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "flip"), this.classNames.push(this.params.containerModifierClass + "3d"), U.extend(this.params, e = { slidesPerView: 1, slidesPerColumn: 1, slidesPerGroup: 1, watchSlidesProgress: !0, spaceBetween: 0, virtualTranslate: !0 }), U.extend(this.originalParams, e)) }, setTranslate: function () { "flip" === this.params.effect && this.flipEffect.setTranslate() }, setTransition: function (e) { "flip" === this.params.effect && this.flipEffect.setTransition(e) } } }, { name: "effect-coverflow", params: { coverflowEffect: { rotate: 50, stretch: 0, depth: 100, modifier: 1, slideShadows: !0 } }, create: function () { U.extend(this, { coverflowEffect: { setTranslate: ae.setTranslate.bind(this), setTransition: ae.setTransition.bind(this) } }) }, on: { beforeInit: function () { "coverflow" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "coverflow"), this.classNames.push(this.params.containerModifierClass + "3d"), this.params.watchSlidesProgress = !0, this.originalParams.watchSlidesProgress = !0) }, setTranslate: function () { "coverflow" === this.params.effect && this.coverflowEffect.setTranslate() }, setTransition: function (e) { "coverflow" === this.params.effect && this.coverflowEffect.setTransition(e) } } }, { name: "thumbs", params: { thumbs: { multipleActiveThumbs: !0, swiper: null, slideThumbActiveClass: "swiper-slide-thumb-active", thumbsContainerClass: "swiper-container-thumbs" } }, create: function () { U.extend(this, { thumbs: { swiper: null, init: re.init.bind(this), update: re.update.bind(this), onThumbClick: re.onThumbClick.bind(this) } }) }, on: { beforeInit: function () { var e = this.params.thumbs; e && e.swiper && (this.thumbs.init(), this.thumbs.update(!0)) }, slideChange: function () { this.thumbs.swiper && this.thumbs.update() }, update: function () { this.thumbs.swiper && this.thumbs.update() }, resize: function () { this.thumbs.swiper && this.thumbs.update() }, observerUpdate: function () { this.thumbs.swiper && this.thumbs.update() }, setTransition: function (e) { var t = this.thumbs.swiper; t && t.setTransition(e) }, beforeDestroy: function () { var e = this.thumbs.swiper; e && this.thumbs.swiperCreated && e && e.destroy() } } }]; return void 0 === u.use && (u.use = u.Class.use, u.installModule = u.Class.installModule), u.use(O), u }); var ANIUTIL = { scrollController: function () { let i = {}, e = navigator.userAgent.toLowerCase(), s = -1 < e.indexOf("mac os"), a = document.scrollingElement || document.documentElement || document.body.parentNode || document.body, r = s ? 60 : 120, n, o, l, h, d = a === document.body && document.documentElement ? document.documentElement : a, t = !1, c = null; var p = function () { "Netscape" == navigator.appName && -1 != navigator.userAgent.search("Trident") || -1 != e.indexOf("msie") ? document.documentElement.addEventListener("mousewheel", m.scrollEvent, { passive: !1 }) : document.documentElement.addEventListener("wheel", m.scrollEvent, { passive: !1 }) }, u = function () { window.addEventListener("scroll", function () { "hidden" == document.documentElement.style.overflow || "hidden" == document.body.style.overflow || t || (l = a.scrollTop) }) }, m = { scrollEvent: function (e) { var t; "hidden" != document.documentElement.style.overflow && "hidden" != document.body.style.overflow && (e.preventDefault(), t = document.body.getAttribute("data-scroll-speed"), e = m.normalizeWheelDelta(e), t = i.currDelta && t ? t : t || n ? n : 120, l += -e * t, h = Math.max(0, Math.min(l, a.scrollHeight - d.clientHeight)), m.update()) }, normalizeWheelDelta: function (e) { return e.detail ? e.wheelDelta ? e.wheelDelta / e.detail / 40 * (0 < e.detail ? 1 : -1) : -e.detail / 3 : e.wheelDelta / 120 }, update: function () { var e = h - a.scrollTop, e = Math.ceil(a.scrollTop + e) <= 0 ? 0 : l > h ? h : Math.ceil(a.scrollTop + e); t = !0, TweenMax.to(a, o, { ease: "circ.out", scrollTop: e, onComplete: function () { clearTimeout(c), c = null, c = setTimeout(function () { t = !1, l = a.scrollTop }, 500) } }), l <= 0 ? l = 0 : l >= h && (l = h) } }; return { init: function (e) { var t; return t = e, n = t.speed ? s ? t.speed / 2 : t.speed : r, o = t.duration || .6, l = a.scrollTop, p(), u(), this.opt = e }, destroy: function (e) { document.documentElement.removeEventListener("mousewheel", m.scrollEvent), document.documentElement.removeEventListener("wheel", m.scrollEvent), e && (i = {}) } } } }; window.WATCH = window.WATCH || {}; const UTILS = function () { return { isIosDevice: ((s = /iPad|iPhone|iPod/.test(navigator.userAgent)) ? document.documentElement.classList.add("isIosDevice") : document.documentElement.classList.add("isNotIosDevice"), s), checkGlobal: void (0 === location.pathname.indexOf("/global/galaxy") || !0 === window.IS_CAMPAIGN ? document.documentElement.classList.add("global") : document.documentElement.classList.add("dotcom")), checkOS: (s = (s = navigator.appVersion.match(/(mac|win|linux)/i)) ? s[1].toLowerCase() : "", void document.documentElement.classList.add(s)), isFireFox: void (/firefox/i.test(navigator.userAgent) && document.documentElement.classList.add("firefox")), isWebkit: void (/applewebkit/i.test(navigator.userAgent) && document.documentElement.classList.add("webkit")), isChrome: void (/chrome/i.test(navigator.userAgent) && document.documentElement.classList.add("chrome")), isOpera: void (/opera/i.test(navigator.userAgent) && document.documentElement.classList.add("opera")), isIos: void (/ip(ad|hone|od)/i.test(navigator.userAgent) && document.documentElement.classList.add("ios")), isCrIos: void (/crios/i.test(navigator.userAgent) && document.documentElement.classList.add("crios")), isAndroid: void (/android/i.test(navigator.userAgent) && document.documentElement.classList.add("android")), isSafari: (s = /applewebkit/i.test(navigator.userAgent), i = /chrome/i.test(navigator.userAgent), void (s && !i && document.documentElement.classList.add("safari"))), isHuawei: void (/HUAWEICLT/i.test(navigator.userAgent) && document.documentElement.classList.add("huawei")), isUCBrowser: void (/UCBrowser/i.test(navigator.userAgent) && document.documentElement.classList.add("ucbrowser")), winSize: (s = "Netscape" === navigator.appName, i = -1 !== navigator.appVersion.indexOf("Mac"), e = -1 !== navigator.userAgent.indexOf("Safari"), t = -1 !== navigator.userAgent.indexOf("Chrome"), s && !i && e && !t ? function () { return { w: $(win).width(), h: $(win).height() } } : function () { return { w: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, h: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight } }), requestAFrame: window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (e) { return window.setTimeout(e, 1e3 / 60) }, cancelAFrame: window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame || function (e) { window.clearTimeout(e) }, isObject: function (e) { return "object" == typeof e && null !== e && e.constructor && e.constructor === Object }, def: function () { for (var e = [], t = arguments.length; t--;)e[t] = arguments[t]; for (var i = Object(e[0]), s = 1; s < e.length; s += 1) { var a = e[s]; if (null != a) for (var r = Object.keys(Object(a)), n = 0, o = r.length; n < o; n += 1) { var l = r[n], h = Object.getOwnPropertyDescriptor(a, l); void 0 !== h && h.enumerable && (this.isObject(i[l]) && this.isObject(a[l]) ? this.def(i[l], a[l]) : !this.isObject(i[l]) && this.isObject(a[l]) ? (i[l] = {}, this.def(i[l], a[l])) : i[l] = a[l]) } } return i }, convertArray: function (e) { return Array.prototype.slice.call(e) }, getOffset: function (e) { return { top: e.getBoundingClientRect().top + window.pageYOffset, bottom: e.getBoundingClientRect().bottom + window.pageYOffset } }, getScroll: function () { var e = window.pageYOffset; return { top: e, bottom: e + window.innerHeight } }, setCookie: function (e, t, i) { var s = new Date; s.setTime(s.getTime() + 60 * i * 60 * 24 * 1e3), document.cookie = e + "=" + t + "; exprires=" + s.toUTCString() + "; path=/" }, getCookie: function (e) { e = document.cookie.match("(^|;) ?" + e + "=([^;]*)(;|$)"); return e ? e[2] : null }, getHeight: function (e) { var t, i, s; return e ? (t = (i = window.getComputedStyle(e)).display, i = parseInt(i.maxHeight), s = 0, "none" != t && 0 != i ? e.offsetHeight : (e.style.position = "absolute", e.style.visibility = "hidden", e.style.display = "block", s = e.offsetHeight, e.style.display = "", e.style.position = "", e.style.visibility = "", s)) : 0 }, isRTL: function () { return document.documentElement.classList.contains("rtl") }, checkRegion: function () { for (var e = document.getElementsByTagName("meta"), t = "", i = 0; i < e.length; i++)if ("sitecode" == e[i].getAttribute("name")) return t = e[i].getAttribute("content"); if ("" == t) return -1 < document.location.pathname.indexOf("global") ? "global" : "jp" }, isLowNetwork: function () { var e = UTILS.getCookie("___GALAXY_SPEED") || UTILS.getCookie("__COM_SPEED"); return null != e && ("L" == e || "H" != e && void 0) }, getNavHeight: function () { var e, t, i = 0, s = document.querySelector(".pd-g-header-navigation") || document.querySelector("#subnav") || document.querySelector(".sticky-menu") || document.querySelector(".pd-g-floating-nav"); return i = s ? s.classList.contains("pd-g-header-navigation") ? (t = (e = s.querySelector(".pd-header-navigation")).querySelector(".pd-header-navigation__menu-wrap"), e.clientHeight + t.clientHeight) : s.clientHeight : i }, isBrokenFixed: function () { var e = window.innerWidth, t = window.innerHeight, i = !1; return document.documentElement.classList.remove("is-broken-fixed"), 1440 <= e && t <= 540 || e <= 810 && t / e < .5277 || t < UTILS.MIN_VIEW_HEIGHT ? (document.documentElement.classList.add("is-broken-fixed"), i = !0) : document.documentElement.classList.remove("is-broken-fixed"), i }, isTouchDevice: ((s = "ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch) ? document.documentElement.classList.add("isTouchDevice") : document.documentElement.classList.add("isNotTouchDevice"), s), isIEorEdge: function () { var e, t = navigator.userAgent.toLowerCase(); if ("Microsoft Internet Explorer" == navigator.appName) e = "msie "; else if (-1 < t.search("trident")) e = "trident/.*rv:"; else { if (!(-1 < t.search("edge/"))) return -1; e = "edge/" } return null != new RegExp(e + "([0-9]{1,})(\\.{0,}[0-9]{0,1})").exec(t) ? (document.documentElement.classList.add("isIEorEdge"), parseFloat(RegExp.$1 + RegExp.$2)) : -1 }(), page: { scrollLock: { className: "is-no-scroll", barWidth: function () { return window.innerWidth - document.documentElement.clientWidth }, el: $("html"), run: function (e) { document.documentElement.style.paddingRight = e + "px" }, off: function () { this.barWidth(); this.el.removeClass(this.className), this.el.removeClass("hive-layer-scroll-lock"), this.run(0) }, on: function () { var e = this.barWidth(); this.el.addClass(this.className), this.run(e) } } }, MIN_VIEW_HEIGHT: 400, RESPONSIVE: { PC: { NAME: "pc", WIDTH: 1440 }, TABLET: { NAME: "tablet", WIDTH: 1024 }, MOBILE: { NAME: "mobile", WIDTH: 767 } } }; var e, t, i, s }(); WATCH.UTILS = UTILS, function () { "use strict"; window.WATCH = window.WATCH || {}; const p = WATCH.UTILS; WATCH.ImageLoader = class { constructor(e = container, t) { t = { el: e, lazyClass: ".js-img-src", lazyCompleteClass: "load-complete", responsiveClass: t.responsiveClass || ".js-res-img", loadOption: t.loadOption, visiblePoint: t.visiblePoint || 0, useDefaultImg: t.useDefaultImg, resizeStart: null }; this.opts = t, this.classes = t.classes, this.events = { load: this.onLoadHandler.bind(this), resize: this.onResizeHandler.bind(this), scroll: this.lazyEvent.bind(this) }, this.el = document.querySelector(e), this.init() } init() { this.initOpts(), this.getLazyImage(), this.getResponsiveImage(), this.bindEvents() } initOpts() { this.targetAttr = this.opts.loadOption[0].attribute, this.responsiveCheck = this.opts.loadOption, this.dynamicCallCount = 0, this.dynamicLoadedComplate = !1, this.opts.useDefaultImg && this.setDefaultImage() } getLazyImage() { let t = []; var e = this.el.children; Array.from(e).forEach(e => { e.classList.contains("is-feature-hide") || (e = e.querySelectorAll(this.opts.lazyClass), t.push(...e)) }), this.lazyImages = t, this.lazyLength = t.length } getResponsiveImage() { var e = this.el.querySelectorAll(this.opts.responsiveClass); this.responsiveImages = e, this.responsiveLength = e.length } bindEvents() { window.addEventListener("load", this.events.load), window.addEventListener("scroll", this.events.scroll), this.responsiveCheck && window.addEventListener("resize", this.events.resize) } onLoadHandler() { this.events.resize(), this.events.scroll(), setTimeout(() => { this.responsiveHandler(), this.lazyEvent() }, 300), window.removeEventListener("load", this.events.load) } onResizeHandler() { clearTimeout(this.opts.resizeStart), this.opts.resizeStart = setTimeout(() => { this.responsiveHandler(), this.lazyEvent() }, 150) } lazyEvent() { this.setLazyImage(), this.lazyLength === this.lazyCompleteLength && window.removeEventListener("scroll", this.events.scroll) } responsiveHandler() { this.windowWidth = window.innerWidth; var a = this.opts.loadOption.length; for (let s = 0; s < a; s++) { let e = s + 1, t = e == a ? 0 : this.opts.loadOption[e].resolution, i = !1; (i = (0 == s || this.windowWidth <= this.opts.loadOption[s].resolution) && this.windowWidth > t) && this.opts.loadOption[s].attribute !== this.oldAttr && (this.targetAttr = this.opts.loadOption[s].attribute, this.oldAttr = this.targetAttr, this.attrIndex = s, this.dynamicCallCount = 0, this.setResponsiveImage()) } } setResponsiveImage(i) { if (i) for (let t = 0; t < i.length; t++) { var s = i[t]; let e = i[t].getAttribute(this.targetAttr); e = e || this.findImageHandler(s), void 0 === window.GALAXY && !window.GALAXY && (-1 < e.indexOf(".jpg") || -1 < e.indexOf(".png")) && (e += "?imbypass=true"), i[t].classList.contains(this.opts.lazyCompleteClass) || (i[t].setAttribute("src", e), i[t].classList.add(this.opts.lazyCompleteClass)) } else for (let t = 0; t < this.responsiveLength; t++) { var a = this.responsiveImages[t]; let e = a.getAttribute(this.targetAttr); e = e || this.findImageHandler(a), void 0 === window.GALAXY && !window.GALAXY && (-1 < e.indexOf(".jpg") || -1 < e.indexOf(".png")) && (e += "?imbypass=true"), a.classList.contains(this.opts.lazyCompleteClass) && a.setAttribute("src", e) } } checkCompleteImage() { var e = this.el.querySelectorAll("." + this.opts.lazyCompleteClass); this.lazyCompleteLength = e.length } setDefaultImage() { for (var e = 0; e < this.lazyLength; e++)this.lazyImages[e].setAttribute("src", "data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH/C1hNUCBEYXRhWE1QAz94cAAh+QQFAAAAACwAAAAAAQABAAACAkQBADs=") } setLazyImage() { this.windowHeight = window.innerHeight; for (let h = 0; h < this.lazyLength; h++) { let t = this.lazyImages[h], e = this.windowHeight * this.opts.visiblePoint, i = p.getScroll.call(this).top - e, s = p.getScroll.call(this).bottom + e, a = p.getOffset.call(this, t).top, r = p.getOffset.call(this, t).bottom, n = this.opts.lazyClass.split("."), o = n[n.length - 1], l; var d, c; if ("none" === window.getComputedStyle(t).display ? null != (d = t.parentNode).offsetParent && (l = d.offsetParent, a = p.getOffset.call(this, d).top, r = p.getOffset.call(this, d).bottom) : l = t.offsetParent, (s > a && i <= a || i < r && s > r || i < a && s > r || i > a && s < r) && null != l) { let e = t.getAttribute(this.targetAttr); e = e || this.findImageHandler(t), void 0 === window.GALAXY && !window.GALAXY && (-1 < e.indexOf(".jpg") || -1 < e.indexOf(".png")) && (e += "?imbypass=true"), t.classList.contains(this.opts.lazyCompleteClass) || (t.setAttribute("src", e), c = () => { 1 == this.opts.lazyClass.split(" ").length && t.classList.remove(o), this.checkCompleteImage(), t.removeEventListener("load", c) }, t.addEventListener("load", c), t.classList.add(this.opts.lazyCompleteClass)) } } } findRemainingImageAttr(e) { for (var t = this.opts.loadOption.length, i = 0; i < t; i++) { var s = e.getAttribute(this.opts.loadOption[i].attribute); if (s) return s } } findNextImageAttr(t) { for (let e = this.attrIndex; 0 <= e; e--) { var i = t.getAttribute(this.opts.loadOption[e].attribute); if (i) return i; if (0 == e && null == i) return this.findRemainingImageAttr(t) } } findImageHandler(e) { return 0 !== this.attrIndex ? this.findNextImageAttr(e) : this.findRemainingImageAttr(e) } } }(), function () { "use strict"; window.WATCH = window.WATCH || {}; const e = WATCH.UTILS, t = e.RESPONSIVE; WATCH.VideoLoader = class { constructor(e = container, t) { t = { el: e, lazyClass: t.lazyClass || ".js-video-src", responsiveClass: t.responsiveClass || ".js-res-video", imageLazyCompleteClass: "load-complete", notLoadElement: t.notLoadElement || [], loadOption: t.loadOption, visiblePoint: t.visiblePoint || 0, resizeStart: null, classes: { loaded: "loaded", ended: "ended" } }; this.opts = t, this.classes = t.classes, this.el = document.querySelector(e), this.init() } init() { this.initOpts(), this.getLazyVideo(), this.getResponsiveVideo(), this.bindEvents() } initOpts() { this.getCurrentDevice(); var e = "mobile" !== this.currentDevice ? 0 : 1; this.prevSrcArray = [], this.targetAttr = this.opts.loadOption[e].attribute, this.responsiveCheck = this.opts.loadOption, this.videoCallStack = [] } getLazyVideo() { let e = Array.from(this.el.querySelectorAll(this.opts.lazyClass)).filter(t => { t.isVideoInit = !1; { let e = 0; if (e < this.opts.notLoadElement.length) return !t.closest(this.opts.notLoadElement[e]) } }); e = e.filter(e => { if (e.querySelector("video") && !e.closest(".is-feature-hide")) return e }), this.lazyVideos = e, this.lazyLength = e.length } getResponsiveVideo() { var e = Array.from(this.el.querySelectorAll(this.opts.responsiveClass)).filter(t => { { let e = 0; if (e < this.opts.notLoadElement.length) return !t.closest(this.opts.notLoadElement[e]) } }); this.responsiveVideos = e, this.responsiveLength = e.length } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener("scroll", this.lazyEvent.bind(this)), this.responsiveCheck && window.addEventListener("resize", this.onResizeHandler.bind(this)) } getCurrentDevice() { this.winWidth = e.winSize().w, this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.prevDevice = this.currentDevice } onLoadHandler() { this.getCurrentDevice(), this.responsiveHandler(), this.lazyEvent() } onResizeHandler() { clearTimeout(this.opts.resizeStart), this.opts.resizeStart = setTimeout(() => { this.getCurrentDevice(), this.responsiveHandler(), this.lazyEvent() }, 80) } lazyEvent() { this.setLazyVideo(), this.lazyLength === this.lazyCompleteLength && window.removeEventListener("scroll", this.lazyEvent.bind(this)) } responsiveHandler() { this.windowWidth = window.innerWidth; var a = this.opts.loadOption.length; for (let s = 0; s < a; s++) { let e = s + 1, t = e == a ? 0 : this.opts.loadOption[e].resolution, i = !1; (i = (0 == s || this.windowWidth <= this.opts.loadOption[s].resolution) && this.windowWidth > t) && this.opts.loadOption[s].attribute !== this.oldAttr && (this.targetAttr = this.opts.loadOption[s].attribute, this.oldAttr = this.targetAttr, this.attrIndex = s, this.setResponsiveVideo()) } } setResponsiveVideo() { for (let e = 0; e < this.responsiveLength; e++) { const t = this.responsiveVideos[e], i = t.querySelector("video"), s = t.getAttribute(this.targetAttr); t.classList.contains(this.classes.loaded) && t.isVideoInit && (i.querySelectorAll("source").forEach(e => { var t = e.getAttribute("type"); -1 < t.indexOf("webm") && (e.src = s + (".webm" + (void 0 !== window.GALAXY || window.GALAXY ? "" : "?imbypass=true"))), -1 < t.indexOf("mp4") && (e.src = s + (".mp4" + (void 0 !== window.GALAXY || window.GALAXY ? "" : "?imbypass=true"))) }), i.isCanplayThrough = !1, i.load(), i.addEventListener("canplaythrough", () => { window.setTimeout(() => { i.isCanplayThrough = !0, t.classList.add(this.classes.loaded) }, 500), this.checkCompleteVideo() }, { once: !0 })) } } setLazyVideo() { for (let e = 0; e < this.lazyLength; e++) { var t = window.pageYOffset, i = t + window.innerHeight, s = this.lazyVideos[e], a = s.getBoundingClientRect(), r = t + a.top, a = t + a.bottom; i > r - window.innerHeight * (0 != window.pageYOffset ? this.opts.visiblePoint : 0) && t < a + window.innerHeight * (0 != window.pageYOffset ? this.opts.visiblePoint : 0) && !s.isVideoInit && this.videoCallStack.indexOf(e) < 0 && (this.videoCallStack.push(e), this.setVideoSrc()) } } setVideoSrc() { var e = this.videoCallStack[0]; const t = this.lazyVideos[e], i = t.querySelector("video"), s = t.getAttribute(this.targetAttr); var a = this.opts.lazyClass.split("."); const r = a[a.length - 1]; a = s; const n = () => { this.checkCompleteVideo(), this.videoCallStack.splice(0, 1), 0 < this.videoCallStack.length && this.setVideoSrc() }; var o = () => { window.setTimeout(() => { i.isCanplayThrough = !0, t.classList.add(this.classes.loaded) }, 500), 1 == this.opts.lazyClass.split(" ").length && t.classList.remove(r), n() }; this.prevSrcArray[e] !== a && (i.querySelectorAll("source").forEach(e => { var t = e.getAttribute("type"); -1 < t.indexOf("webm") && (e.src = s + (".webm" + (void 0 !== window.GALAXY || window.GALAXY ? "" : "?imbypass=true"))), -1 < t.indexOf("mp4") && (e.src = s + (".mp4" + (void 0 !== window.GALAXY || window.GALAXY ? "" : "?imbypass=true"))) }), i.isCanplayThrough = !1, i.load(), i.addEventListener("canplaythrough", o, { once: !0 }), i.addEventListener("error", () => { window.fetch(s + (".webm" + (void 0 !== window.GALAXY || window.GALAXY ? "" : "?imbypass=true")), { mode: "no-cors" }).then(e => { if (404 === e.status) return fetch(s + (".mp4" + (void 0 !== window.GALAXY || window.GALAXY ? "" : "?imbypass=true")), { mode: "no-cors" }) }).then(e => { 404 === e.status && n() }).catch(() => { n() }) }, !0), t.isVideoInit = !0, this.prevSrcArray[e] = a) } checkCompleteVideo() { var e = Array.from(this.el.querySelectorAll("." + this.classes.loaded)).filter(t => { { let e = 0; if (e < this.opts.notLoadElement.length) return !t.closest(this.opts.notLoadElement[e]) } }); this.lazyCompleteLength = e.length } } }(), function () { "use strict"; window.WATCH = window.WATCH || {}; const h = WATCH.UTILS, e = h.RESPONSIVE; WATCH.VideoPlayer = class { constructor(e, t) { e = { sectionElement: t.sectionElement, videoParentElement: null, videoElement: e, videoController: ".video__controller", hiddenElement: ".blind", endImage: ".video__end-frame img", videoLazyClass: ".js-video-src", lazyCompleteClass: "load-complete", imageEndLazyClass: ".js-end-img-src", playOffset: .5, playType: "oneWay", visiblePoint: t.visiblePoint || 0, classes: { loaded: "loaded", ended: "ended", paused: "paused", playing: "playing", isPaused: "is-paused" }, resizeStart: null, on: { updateController: null, updatePlayState: null, updateTime: null } }; this.opts = h.def(e, t || {}), this.classes = e.classes, this.init() } init() { this.setElements(), this.initOpts(), null !== this.video && (this.video.paused || this.video.pause(), this.videoElement.playState = !1, this.updateController(), this.bindEvents()) } setElements() { this.videoElement = this.opts.videoElement, this.video = this.videoElement.querySelector("video"), null !== this.video && (null !== this.opts.videoParentElement ? this.videoParentElement = this.video.closest(this.opts.videoParentElement) : this.videoParentElement = this.videoElement, this.videoController = this.videoParentElement.querySelector(this.opts.videoController)) } initOpts() { this.getCurrentDevice(), this.autoPlay = !!this.videoElement.dataset.autoPlay && JSON.parse(this.videoElement.dataset.autoPlay), this.videoElement.playState = !1, this.videoElement.autoPlayState = !1, this.useController = !!this.videoController } getCurrentDevice() { this.winWidth = h.winSize().w, this.winWidth >= e.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.prevDevice = this.currentDevice } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), window.addEventListener("scroll", this.onScrollHandler.bind(this)), this.video.addEventListener("play", this.onVideoPlay.bind(this)), this.video.addEventListener("pause", this.onVideoPause.bind(this)), this.video.addEventListener("ended", this.onVideoEnded.bind(this)), this.video.addEventListener("canplaythrough", this.onCanplayThrough.bind(this), { once: !0 }), this.video.addEventListener("timeupdate", this.onTimeUpdate.bind(this)), this.useController && this.videoController.addEventListener("click", this.onClickController.bind(this)) } onChange(e) { if (e === this.videoElement) { e = "mobile" !== this.currentDevice ? "data-media-pc" : "data-media-mo"; const i = this.videoElement.getAttribute(e); e = i; this.prevVideoSrc !== e && (this.videoElement.playState = !1, this.video.querySelectorAll("source").forEach(e => { var t = e.getAttribute("type"); -1 < t.indexOf("webm") && (e.src = i + ".webm"), -1 < t.indexOf("mp4") && (e.src = i + ".mp4"), this.video.load() }), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.remove(this.classes.paused), this.video.addEventListener("canplaythrough", () => { h.isLowNetwork() || this.onPlay() }, { once: !0 })), this.prevVideoSrc = e } } onLoad(e) { if (e === this.videoElement) { e = "mobile" !== this.currentDevice ? "data-media-pc" : "data-media-mo"; const i = this.videoElement.getAttribute(e); this.videoElement.playState = !1, this.video.querySelectorAll("source").forEach(e => { var t = e.getAttribute("type"); -1 < t.indexOf("webm") && (e.src = i + ".webm"), -1 < t.indexOf("mp4") && (e.src = i + ".mp4"), this.video.load() }), this.video.isCanplayThrough = !1, this.video.addEventListener("canplaythrough", () => { this.video.isCanplayThrough = !0, h.isLowNetwork() || this.onPlay() }, { once: !0 }) } } onPlay(e) { var t = () => { if (!this.videoElement.playState) { this.video.currentTime === this.video.duration && (this.video.currentTime = 0), this.autoPlay && (this.videoElement.autoPlayState = !0), this.videoElement.playState = !0, this.videoElement.classList.remove(this.classes.ended), this.videoElement.classList.remove(this.classes.paused); const e = () => { this.video.isCanplayThrough && 3 < this.video.readyState ? (cancelAnimationFrame(this.opts.videoFrame), clearTimeout(this.opts.videoPlayTimeout), this.opts.videoPlayTimeout = setTimeout(() => { this.video.play(), this.updateController(), this.outCallback("updatePlayState", !0), this.videoElement.classList.remove(this.classes.ended), this.videoElement.classList.remove(this.classes.paused), this.videoElement.classList.add(this.classes.playing) }, 250)) : this.opts.videoFrame = requestAnimationFrame(e) }; this.opts.videoFrame = requestAnimationFrame(e), this.video.addEventListener("ended", this.updatePlayEnded.bind(this), { once: !0 }) } }; e && e !== this.videoElement || t() } onPause() { this.video.paused || this.video.pause(), this.videoElement.playState = !1, this.videoElement.classList.remove(this.classes.ended), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.add(this.classes.paused), this.updateController() } onEnded() { 3 < this.video.readyState && (this.video.ended || this.video.pause(), this.video.currentTime = this.video.duration, this.videoElement.playState = !1, this.videoElement.classList.add(this.classes.ended), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.remove(this.classes.paused), this.updateController()) } onReset(e) { this.videoElement.playState || (cancelAnimationFrame(this.opts.videoFrame), clearTimeout(this.opts.videoPlayTimeout)); var t = () => { this.video.pause(), this.video.currentTime = 0, this.videoElement.playState = !1, this.autoPlay && (this.videoElement.autoPlayState = !1), this.videoElement.classList.remove(this.classes.ended), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.remove(this.classes.paused), this.updateController() }; e && e !== this.videoElement || t() } onCanplayThrough() { var e = this.opts.videoLazyClass.split("."), e = e[e.length - 1]; this.useController && window.setTimeout(() => { this.videoController.style.display = "block" }, 500), this.videoElement.classList.add(this.classes.loaded), 1 == this.opts.videoLazyClass.split(" ").length && this.videoElement.classList.remove(e), this.isCanplay = !0, this.onScrollHandler(), this.isCanplay = !1 } onTimeUpdate() { var e = { el: this.videoElement, duration: this.video.duration, currentTime: this.video.currentTime, playState: this.videoElement.playState, controller: this.videoController }; this.outCallback("updateTime", e) } onClickController(e) { e.preventDefault(), this.videoElement.playState ? this.onPause() : this.onPlay() } onVideoPlay() { this.videoElement.playState = !0, this.videoElement.classList.remove(this.classes.ended), this.videoElement.classList.add(this.classes.playing), this.videoElement.classList.remove(this.classes.paused), this.updateController(), this.outCallback("updatePlayState", !0) } onVideoPause() { this.videoElement.playState = !1, this.videoElement.classList.remove(this.classes.ended), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.add(this.classes.paused), this.updateController(), this.outCallback("updatePlayState", !1) } onVideoEnded() { this.videoElement.playState = !1, this.videoElement.classList.add(this.classes.ended), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.remove(this.classes.paused), this.updateController(), this.outCallback("updatePlayState", !1) } updatePlayEnded() { this.onPause() } updateController() { var e; this.useController && (this.videoElement.playState ? this.videoController.classList.add(this.classes.isPaused) : this.videoController.classList.remove(this.classes.isPaused), e = { el: this.videoController, playState: this.videoElement.playState }, this.outCallback("updateController", e), this.outCallback("updatePlayState", this.videoElement.playState)) } onScrollHandler() { if (!this.videoElement.closest(".cm-layer")) { var e = scrollY > this.lastScrollY ? "down" : "up", t = h.getHeight(this.videoElement) * this.opts.playOffset, i = h.getScroll().top, s = h.getScroll().bottom, a = h.getOffset(this.videoElement).top, r = h.getOffset(this.videoElement).bottom; const l = this.videoElement.classList.contains(this.classes.playing) && this.videoElement.playState; var n = this.videoElement.classList.contains(this.classes.paused) && !this.videoElement.playState, o = this.videoElement.classList.contains(this.classes.ended) && !this.videoElement.playState; if ("oneWay" === this.opts.playType) if (a + t <= s && i <= r) { const l = this.isCanplay || "down" == e; !l || !this.autoPlay || this.videoElement.playState || this.videoElement.autoPlayState || h.isLowNetwork() || this.onPlay() } else s < a ? this.autoPlay && this.videoElement.autoPlayState && (l || n || o) && this.onReset() : r < i && this.autoPlay && (this.videoElement.autoPlayState ? (l || n) && this.onEnded() : this.videoElement.classList.add(this.classes.ended)); else "reverse" === this.opts.playType && (a + t <= s && i <= r - t ? !this.autoPlay || this.videoElement.playState || this.videoElement.autoPlayState || h.isLowNetwork() || this.onPlay() : (r < i || s < a) && this.autoPlay && this.onReset()); this.lastScrollY = scrollY } } onResponsiveChange() { window.setTimeout(() => { this.isCanplay = !0, this.onReset(), this.onScrollHandler(), this.isCanplay = !1 }, 100) } onResizeHandler() { h.winSize().w !== this.winWidth && (this.winWidth = h.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.resizeRequestFrame = h.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, h.cancelAFrame.call(window, this.resizeRequestFrame) } setLayout() { this.onScrollHandler(), this.winWidth >= e.MOBILE.WIDTH ? this.currentDevice = "desktop" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } outCallback(e, t) { e = this.opts.on[e]; null != e && e(t) } } }(), function () { "use strict"; window.WATCH = window.WATCH || {}; var e = function () { const n = {}; let e = !1, t = null, d = null; const i = function () { a(), r(); { const e = document.querySelectorAll(".click_sup"), t = document.querySelectorAll("li.common-bottom-disclaimer__list-item"), s = Array.from(t).map(e => e.getAttribute("data-sup")); Array.from(e).map(e => { var t, i = e.getAttribute("data-sup-tag"); -1 < s.indexOf(i) && (e.innerText = s.indexOf(i) + 1), -1 === s.indexOf(i) && (i = e.parentElement, 1 === (t = e.parentElement?.children.length ?? 0) && i.remove(), 1 < t) && (i.removeChild(e.nextSibling), e.remove(), 3 === i.childNodes.length) && i.removeChild(i.childNodes[2]) }) } UTILS.isLowNetwork() && document.documentElement.classList.add("low_network"), document.documentElement.classList.add("load"), window.removeEventListener("load", i) }, a = function () { e = 1024 <= window.innerWidth ? "desktop" : 768 <= window.innerWidth && window.innerWidth < 1024 ? "tablet" : "mobile", clearTimeout(n.resizeTimeout), n.resizeTimeout = setTimeout(function () { UTILS.isBrokenFixed() }, 100), e != t && (document.documentElement.classList.add(e), document.documentElement.classList.remove(t), t = e) }, r = function () { var t = window.pageYOffset, i = t + window.innerHeight; for (let e = 0; e < n.allClickable.length; e++) { var s = n.allClickable[e], a = t + s.getBoundingClientRect().top, r = t + UTILS.getNavHeight(); r <= a && a <= i ? s.isVisible = !0 : (a < r || i < a) && (s.isVisible = !1) } }, s = function (e) { e.preventDefault(), e.stopPropagation(); const t = this; var i = parseFloat(this.innerText); let s = document.querySelectorAll("#desc-section ol"); s.forEach(e => { "block" === window.getComputedStyle(e).display && (s = e) }); var a = s.querySelectorAll("li"); const r = s.querySelectorAll("li")[i - 1], n = r.querySelector("span"), o = n.innerHTML; var i = `${o}`; n.innerHTML = i, d = e.currentTarget; const l = function () { c.call(t), n.removeEventListener("focusin", l) }, h = function () { n.innerHTML = o, n.removeAttribute("tabindex"), n.removeEventListener("focusout", h) }; e.currentTarget.closest(".cm-layer") && (i = e.currentTarget.closest(".cm-layer"), $(i).trigger("closeLayer", !1)), n.addEventListener("focusin", l), n.addEventListener("focusout", h), setTimeout(() => { r.querySelector("a").focus() }, 0), a.forEach(e => e.classList.remove("is-active")), r.classList.add("is-active") }, o = function (e) { var e = e.target.closest("li"), t = e.getAttribute("data-sup"), i = document.querySelectorAll(".click_sup"); for (let e = 0; e < i.length; e++)i[e].getAttribute("data-sup-tag") === t && (c.call(this), d.focus()); var s = d.closest(".cm-layer"); if (s) { var a = s.getAttribute("data-active-popup"); const r = s.parentNode.querySelector(`[data-content-target="${a}"]`); n.isSupClicked = !0, r.focus(), setTimeout(() => { r.click(), setTimeout(() => { d.focus(), n.isSupClicked = !1 }, 50) }, 50) } e.classList.remove("is-active") }, c = function (e) { if (void 0 !== e && void 0 !== e.sourceCapabilities && null === e.sourceCapabilities) e.preventDefault(); else if (document.documentElement.classList.contains("ios") || !e || null != e.relatedTarget) { const s = this; this.isClicked || this.isVisible || l(this) || setTimeout(function () { var e = window.pageYOffset, t = s.getBoundingClientRect(), i = (window.innerHeight - UTILS.getNavHeight()) / 2, e = e - UTILS.getNavHeight() + t.top + t.height / 2; window.scrollTo(0, e - i) }, 10), this.isClicked = !1 } }, l = function (e) { var e = e.parentNode, t = e.getAttribute("id"); return "contents" !== t && e !== document.body && (!("subnav" !== t && !e.classList.contains("sc-s22ultra-popup")) || l(e)) }, h = function () { this.isClicked = !0 }; return { init: function () { n.isSupClicked = !1, n.resizeTimeout = null, n.supClicker = document.querySelectorAll("a.click_sup"), n.supTopBtn = document.querySelectorAll("button.click_disclaimer"), n.contents = document.getElementById("contents") || document.getElementById("content"), n.allClickable = n.contents.querySelectorAll("a, button, input, select"); { let e = 0; for (window.addEventListener("load", i), window.addEventListener("resize", a), window.addEventListener("scroll", r), e = 0; e < n.allClickable.length; e++) { var t = n.allClickable[e]; t.isClicked = !1, t.isVisible = !1, t.addEventListener("focusin", c), t.addEventListener("mousedown", h) } for (e = 0; e < n.supClicker.length; e++)n.supClicker[e].addEventListener("click", s); for (e = 0; e < n.supTopBtn.length; e++)n.supTopBtn[e].addEventListener("click", o) } { var e = document.documentElement.classList; "global" === UTILS.checkRegion() || e.contains("mac") || e.contains("safari") || ANIUTIL.scrollController({ speed: 120, duration: .5 }) } }, getIsSupClicked: function () { return n.isSupClicked } } }(); window.WATCH.Disclaimer = e }(), function (e) { e.TrapFocus = function () { "use strict"; var e, f = void 0, t = window, i = t.document, w = t.jQuery, s = null, a = t.WATCH.UTILS; function r(e, t) { if (!(this instanceof r)) return new r(e, t); var i = { obj: e, prevStep: null, isDestroy: false, IgnoreUtilFocusChanges: false, ariaAttr: { hidden: "aria-hidden", disabled: "aria-disabled", modal: "aria-modal" }, ariaNotHidden: (() => { return t && t.ariaNotHidden ? t.ariaNotHidden : [] })(), classAttr: { clone: "trapfocus" }, elAttr: { tabIndex: "tabindex", role: "role" }, customEvent: ".TrapFocus" + (new Date).getTime() + Math.random() }; this.opts = a.def(i, t || {}); if (!(this.obj = w(this.opts.obj)).length) return; if (s != null) s.destroy(); s = this; this.init() } return r.prototype = { init: function () { this.initLayout(); this.buildAria(); this.bindEvents(true); this.loadComponent(); this.obj.data("TrapFocus", this) }, initLayout: function () { var e = this.opts.ariaAttr; var t = this.opts.elAttr; this.obj.attr(e.modal, "true"); this.obj.attr(t.role, "dialog") }, buildAria: function () { var v = this.opts.ariaAttr; var g = this.opts.elAttr; var e = "head, script, noscript, link, style, meta"; var t = this.opts.ariaNotHidden.length > 0 ? `, ${this.opts.ariaNotHidden.join(",")}` : ""; a.def(this, { aria: { notHidden: Array(e + t), focusType: ["A", "BUTTON", "INPUT", "SELECT", "TEXTAREA"], dataAttr: { ariaHidden: "trapfocusariahidden", ariaDisabled: "trapfocusariadisabled", tabIndex: "trapfocustabindex", role: "trapfocusrole" }, destroy: w.proxy(function () { var a = this.aria.dataAttr; var r = this.aria.hiddenEls; var s = this.aria.focusEls; var n = this.aria.tabindexEls; for (var e = 0, t = r.length; e < t; e++)(function (e) { var t = r.eq(e), i = t.data(a.ariaHidden), s = t.data(a.role); if (i != f) { t.attr(v.hidden, i); t.removeData(a.ariaHidden) } else t.removeAttr(v.hidden); if (s != f) { t.attr(g.role, s); t.removeData(a.role) } else t.removeAttr(g.role) })(e); for (var i = 0, o = s.length; i < o; i++)(function (e) { var t = s.eq(e), i = t.data(a.ariaDisabled); t.removeAttr(g.tabIndex); if (i != f) { t.attr(v.disabled, i); t.removeData(a.ariaDisabled) } else t.removeAttr(v.disabled) })(i); for (var l = 0, h = n.length; l < h; l++)(function (e) { var t = n.eq(e), i = t.data(a.tabIndex); if (i != f) { t.attr(g.tabIndex, i); t.removeData(a.tabIndex) } else t.removeAttr(g.tabIndex) })(l); var d = document.getElementById("teconsent"); if (d) { var c = d.querySelector("a"); if (c && c.getAttribute("tabindex") === "-1") { c.setAttribute("tabindex", "0"); c.removeAttribute("aria-disabled") } } }, this), build: w.proxy(function () { var i = this; var e = this.aria.focusType; var a = this.aria.dataAttr; var s = this.obj.parents(); var r = this.obj.siblings().not(i.aria.notHidden.join(",")); var n = w(""); var o = w(""); for (var t = 0, l = s.length; t < l; t++)(function (e) { var t = s.eq(e); r = r.add(t.siblings().not(i.aria.notHidden.join(","))) })(t); n = n.add(r); o = o.add(r); this.obj.removeAttr(v.hidden); for (var h = 0, d = r.length; h < d; h++)(function (e) { var t = r.eq(e), i = t.attr(v.hidden), s = t.attr(g.role); if (i != f) t.data(a.ariaHidden, i); if (s != f) t.data(a.role, s); t.attr(v.hidden, "true"); t.attr(g.role, "none presentation") })(h); n = n.add(r.find(e.join(",").toLowerCase())); for (var c = 0, p = n.length; c < p; c++)(function (e) { var t = n.eq(e), i = t.attr(v.disabled); if (i != f) t.data(a.ariaDisabled, i); t.attr(v.disabled, "true"); setTimeout(() => { t.attr(g.tabIndex, -1) }) })(c); o = o.add(r.find("[" + g.tabIndex + "]")); for (var u = 0, m = o.length; u < m; u++)(function (e) { var t = o.eq(e), i = t.attr(g.tabIndex); if (i != f) t.data(a.tabIndex, i); t.attr(g.tabIndex, -1) })(u); this.aria.hiddenEls = r; this.aria.focusEls = n; this.aria.tabindexEls = o }, this) } }) }, changeEvents: function (e) { var t = [], i = e.split(" "); for (var s in i) t.push(i[s] + this.opts.customEvent); return t.join(" ") }, bindEvents: function (e) { if (e) w(i).on(this.changeEvents("focusin"), w.proxy(this.trapFocus, this)); else w(i).off(this.changeEvents("focusin")) }, focusFirstDescendant: function (e) { for (var t = 0; t < e.childNodes.length; t++) { var i = e.childNodes[t]; if (this.attemptFocus(i) || this.focusFirstDescendant(i)) return true } return false }, focusLastDescendant: function (e) { for (var t = e.childNodes.length - 1; t >= 0; t--) { var i = e.childNodes[t]; if (this.attemptFocus(i) || this.focusLastDescendant(i)) return true } return false }, isFocusable: function (e) { if (e.tabIndex > 0 || e.tabIndex === 0 && e.getAttribute("tabIndex") !== null) return true; if (e.disabled) return false; switch (e.nodeName) { case "A": return !!e.href && e.rel != "ignore"; case "INPUT": return e.type != "hidden" && e.type != "file"; case "BUTTON": case "SELECT": case "TEXTAREA": case "VIDEO": case "SOURCE": case "IFRAME": return true; default: return false } }, attemptFocus: function (e) { if (this.opts.isDestroy) return; if (!this.isFocusable(e)) return false; this.opts.IgnoreUtilFocusChanges = true; try { e.focus() } catch (e) { } this.opts.IgnoreUtilFocusChanges = false; return document.activeElement === e }, trapFocus: function (e) { if (this.opts.isDestroy) return; if (this.opts.IgnoreUtilFocusChanges) return; var t = document; this.dynamicComponentFocus() }, loadComponent: function () { this.dynamicComponentFocus(); setTimeout(() => { this.dynamicComponentFocus() }, 3e3); this.focusFirstDescendant(this.obj[0]); this.lastFocus = document.activeElement; this.aria.build() }, dynamicComponentFocus: function () { const o = this.opts.ariaAttr; const l = this.opts.elAttr; setTimeout(() => { var e = document.getElementById("QSIFeedbackButton-btn"); var t = document.getElementById("QSIFeedbackButton-close-btn"); var i = document.getElementById("nebula_div_btn"); var s = document.getElementById("spr-live-chat-app"); var a = document.getElementById("teconsent"); if (e) { var r = e.parentElement; e.setAttribute(o.disabled, "true"); e.setAttribute(l.tabIndex, "-1"); r.setAttribute(o.disabled, "true"); r.setAttribute(o.hidden, "true"); r.setAttribute(l.tabIndex, "-1"); r.setAttribute(l.role, "none presentation") } if (i) { var n = i.parentElement; i.setAttribute(o.disabled, "true"); i.setAttribute(l.tabIndex, "0"); n.setAttribute(o.disabled, "true"); n.setAttribute(o.hidden, "true"); n.setAttribute(l.tabIndex, "-1"); n.setAttribute(l.role, "none presentation") } if (s) { s.setAttribute(o.disabled, "true"); s.setAttribute(o.hidden, "true"); s.setAttribute(l.tabIndex, "-1"); s.setAttribute(l.role, "none presentation") } if (a && a.hasAttribute("aria-label")) setTimeout(() => { var e = a.querySelector("a"); e.setAttribute(l.tabIndex, "-1"); e.setAttribute(o.disabled, "true"); e.setAttribute(o.hidden, "true") }) }) }, destroy: function () { s = null; this.opts.isDestroy = true; var e = this.opts.ariaAttr; var t = this.opts.elAttr; this.bindEvents(false); this.aria.destroy(); this.obj.removeAttr(e.modal) } }, r }() }(window), function (e) { e.HiveLayer = function () { "use strict"; var e, o = window, l = o.jQuery, t = o.document, h = o.WATCH.UTILS, d = []; function s(e, t) { if (!(this instanceof s)) return new s(e, t); var i = { effect: "fade", layerWrapElements: e, layerBody: ".cm-layer__body", layerElements: ".cm-layer__wrapper", openerElements: ".js-layer-opener", closerElements: ".js-layer-closer", dimmedElements: ".cm-layer__dimmed", classAttr: { htmlToggle: "is-layer-open", isAsync: "is-async" }, focusOutObj: { CSS: { overflow: "hidden", position: "absolute", left: 0, top: 0, "z-index": -1, width: 1, height: 1, "font-size": "1px", "line-height": 0 } }, customEvent: ".HiveLayer" + (new Date).getTime() + Math.random(), openerTarget: null, useOutside: false, useEscape: true, useCloseFocus: true, useScrollLock: true, useTrapFocus: true, flip: { CLASS: "hive-layer-flip", direction: "horizontal", rotateStart: 90, rotateEnd: 0 }, customToggle: false, dimmedDuration: 250, fps: 120, easing: "swing", duration: 250, on: { buildTools: null, layerMove: null, layerOpenBefore: null, layerOpenAfter: null, layerCloseBefore: null, layerCloseAfter: null }, ariaNotHidden: [] }; if (!(this.layerWrap = i.layerWrapElements).length) return; this.layerWrap = l(i.layerWrapElements); this.opts = h.def(i, t || {}); this.init() } return s.prototype = { init: function () { this.initOpts(); this.setElements(); this.initLayout(); this.buildTween(); this.buildTrapFocus(); this.bindEvents(true); this.layerWrap.data("HiveLayer", this) }, initOpts: function () { this.layerWrapInstance = "#" + this.layerWrap.attr("id"); if (!this.opts.isSupportTransition && this.opts.effect === "flip") this.opts.effect = "default"; if (this.opts.effect == "custom") { this.opts.effect = "default"; this.opts.customToggle = true } }, setElements: function () { this.layerBody = this.layerWrap.find(this.opts.layerBody); this.layerObj = this.layerWrap.find(this.opts.layerElements); this.closerObj = this.layerWrap.find(this.opts.closerElements); this.dimmedObj = this.layerWrap.find(this.opts.dimmedElements) }, initLayout: function () { if (this.opts.effect === "slide") { this.dimmedObj.hide(); this.layerObj.hide() } else if (this.opts.effect === "flip") { var e = this.opts.flip.direction; if (e !== "vertical") this.opts.flip.cssD = "rotateY"; else this.opts.flip.cssD = "rotateX"; this.dimmedObj.hide(); this.layerObj.hide(); this.layerWrap.addClass(this.opts.flip.CLASS) } }, buildTween: function () { h.def(this, { tweens: { instance: [], kill: l.proxy(function () { for (var e = 0, t = this.tweens.instance.length; e < t; e++)this.tweens.instance[e].kill(); this.tweens.instance = [] }, this) } }) }, buildTrapFocus: function () { if (!this.opts.useTrapFocus) return; h.def(this, { trapfocus: { instance: null, destroy: l.proxy(function () { if (this.trapfocus.instance == null) return; this.trapfocus.instance.destroy(); this.trapfocus.instance = null }, this), build: l.proxy(function () { if (this.trapfocus.instance !== null) return; this.trapfocus.instance = new TrapFocus(this.layerObj, { ariaNotHidden: this.opts.ariaNotHidden }) }, this) } }) }, bindEvents: function (e) { if (e) { l(t).on("click clickCustom", this.opts.openerElements + '[data-layer-target="' + this.layerWrapInstance + '"]', l.proxy(this.onLayerOpen, this)); this.layerWrap.on("openLayer", l.proxy(this.onLayerOpen, this)); this.closerObj.on("mousedown click clickCustom", l.proxy(this.onLayerClose, this)); this.layerWrap.on("layerSetOptions", l.proxy(this.setOptions, this)); if (this.opts.useEscape) this.layerObj.on("keydown", l.proxy(this.onEscapeClose, this)) } else { l(t).off("click clickCustom"); this.layerWrap.off("openLayer"); this.closerObj.off("mousedown click clickCustom"); this.layerWrap.off("layerSetOptions"); if (this.opts.useEscape) this.layerObj.off("keydown") } }, bindOutsideEvents: function (e) { if (!this.opts.useOutside) return; if (e) this.layerObj.on("clickoutside touchendoutside", l.proxy(this.onLayerOutsideFunc, this)); else this.layerObj.off("clickoutside touchendoutside") }, bindCloseEvents: function (e) { if (e) this.layerWrap.on("closeLayer", l.proxy(this.closeLayer, this)); else this.layerWrap.off("closeLayer") }, setOptions: function (e, t) { h.def(this.opts, t || {}); if (t.customToggle) this.opts.effect = "default" }, setScrollLock: function (e) { if (!this.opts.useScrollLock) return; if (e) h.page.scrollLock.on(); else h.page.scrollLock.off(); l("html").toggleClass(this.opts.classAttr.htmlToggle, e) }, onLayerOpen: function (e) { e.preventDefault(); setTimeout(() => { this.dimmedObj.on("mousedown click clickCustom", l.proxy(this.onLayerClose, this)) }, 500); if (e.type === "click" || e.type === "clickCustom") this.opts.openerTarget = l(e.currentTarget); if (e.type === "click") if (this.opts.openerTarget.hasClass(this.opts.classAttr.isAsync)) return; this.layerViewType = "open"; d.push({ POPUPWRAP: this.layerWrap }); if (document.querySelector("html.load div#header")) { document.querySelector("html.load div#header").style.opacity = 0; document.querySelector("html.load div#header").style.pointerEvents = "none" } this.setScrollLock(true); this.bindCloseEvents(true); if (this.opts.effect === "default") if (!this.opts.customToggle) { this.layerWrap.css({ opacity: 0, display: "block" }); this.outCallback("layerOpenBefore"); this.outCallback("buildTools"); this.layerWrap.css("opacity", ""); this.openAfterBugFunc() } else this.outCallback("layerOpenBefore"); else if (this.opts.effect === "fade") { this.layerWrap.css({ opacity: 0, display: "block" }); this.outCallback("layerOpenBefore"); TweenLite.set(this.layerBody, { opacity: 0, scale: 1, overflow: "hidden" }); this.outCallback("buildTools"); var t = TweenLite.to(this.layerWrap, this.opts.duration / 1e3, { opacity: 1, onComplete: l.proxy(function () { var e = TweenLite.to(this.layerBody, .25, { ease: Expo.easeOut, opacity: 1, scale: 1, onComplete: l.proxy(function () { this.layerBody.css({ overflow: "", transform: "" }); this.openAfterBugFunc() }, this) }); this.tweens.instance.push(e) }, this) }); this.tweens.instance.push(t) } else if (this.opts.effect === "slide") { var i = 1; TweenLite.set(this.dimmedObj, { display: "block", opacity: 0 }); TweenLite.set(this.layerWrap, { display: "block" }); TweenLite.set(this.layerBody, { overflow: "hidden" }); TweenLite.set(this.layerObj, { display: "", y: -h.winSize().h }); TweenLite.set(this.layerObj, { display: "" }); this.outCallback("layerOpenBefore"); var t = TweenLite.to(this.dimmedObj, i, { opacity: .9 }); var s = TweenLite.to(this.layerObj, i, { y: 0, onComplete: l.proxy(function () { this.outCallback("buildTools"); this.layerBody.css({ overflow: "" }); this.layerObj.css({ transform: "" }); this.openAfterBugFunc() }, this) }); this.tweens.instance.push(t); this.tweens.instance.push(s) } else if (this.opts.effect === "slide2") { var i = .6; TweenLite.set(this.dimmedObj, { display: "block", opacity: 0 }); TweenLite.set(this.layerWrap, { display: "block" }); TweenLite.set(this.layerObj, { display: "", y: h.winSize().h }); TweenLite.set(this.layerObj, { display: "" }); this.outCallback("layerOpenBefore"); var t = TweenLite.to(this.dimmedObj, i, { opacity: .9 }); var s = TweenLite.to(this.layerObj, i, { y: 0, onComplete: l.proxy(function () { this.outCallback("buildTools"); this.layerBody.css({ overflow: "" }); this.layerObj.css({ transform: "" }); this.openAfterBugFunc() }, this) }); this.tweens.instance.push(t); this.tweens.instance.push(s) } else if (this.opts.effect === "flip") { var a = this.opts.flip.rotateEnd - this.opts.flip.rotateStart, r = a / this.opts.duration * (1e3 / this.opts.fps), n = 0; this.opts.flip.moveData = { startDistance: this.opts.flip.rotateStart, endDistance: this.opts.flip.rotateEnd, moveDistance: a, moveOneStep: r, currentStep: n }; this.layerWrap.show(); this.dimmedObj.fadeIn(this.opts.dimmedDuration, l.proxy(function () { this.outCallback("layerOpenBefore"); this.outCallback("buildTools"); this.layerObj.show(); this.initStep(this.opts.flip.moveData); this.flipFunc() }, this)); o.setTimeout(l.proxy(function () { this.outCallback("buildTools") }, this), 30) } this.ariaAccessbility(true, this.layerWrap) }, initStep: function (e) { this.opts.stepTimeOld = new Date; this.direction = e.startDistance > e.moveDistance ? "toNext" : "toPrev"; this.condition = this.direction === "toNext" ? e.currentStep > e.moveDistance : e.currentStep < e.moveDistance }, moveStep: function (e) { this.opts.stepTimeNew = new Date; this.opts.remaining = Math.max(0, this.opts.stepTimeOld - this.opts.stepTimeNew + this.opts.duration); var t = this.opts.remaining / this.opts.duration || 0, i = 1 - t, s = l.easing[this.opts.easing](i, this.opts.duration * i, 0, 1, this.opts.duration); e.currentStep = (e.endDistance - e.startDistance) * s }, flipFunc: function () { var e = this.opts.flip.moveData; this.moveStep(e); if (this.condition) { o.clearTimeout(this.stepTimeout); this.stepTimeout = o.setTimeout(l.proxy(function () { this.flipFunc() }, this), 1e3 / this.opts.fps); this.condition = this.direction === "toNext" ? e.currentStep > e.moveDistance : e.currentStep < e.moveDistance; this.outCallback("layerMove", e.currentStep, e) } else { this.opts.remaining = this.opts.duration; if (this.layerViewType === "close" || !this.layerViewType) { this.closeAfterBugFunc(); this.dimmedObj.fadeOut(this.opts.dimmedDuration, l.proxy(function () { this.layerWrap.hide(); this.layerObj.hide() }, this)) } else this.openAfterBugFunc() } var t = e.startDistance + e.currentStep; this.layerObj.css({ transform: this.opts.flip.cssD + "(" + t + "deg)" }) }, onLayerOpenAfter: function () { if (this.trapfocus) this.trapfocus.build(); this.bindOutsideEvents(true); this.outCallback("layerOpenAfter") }, openAfterBugFunc: function () { o.clearTimeout(this.openAfterTimeout); this.openAfterTimeout = o.setTimeout(l.proxy(this.onLayerOpenAfter, this), 30) }, onLayerClose: function (e) { var t = l(e.currentTarget); if (e.type === "mousedown") { if (!h.isDevice) { e.stopPropagation(); this.opts.useCloseFocus = false } } else if (e.type === "click" || e.type === "clickCustom") { e.preventDefault(); if (e.type === "click") if (t.hasClass(this.opts.classAttr.isAsync)) return; this.layerWrap.trigger("closeLayer"); this.dimmedObj.off("mousedown click clickCustom") } }, closeLayer: function () { this.closeType = arguments[1]; this.layerViewType = "close"; this.outCallback("layerCloseBefore"); this.popupOpenPropsControl(); this.setScrollLock(false); if (this.trapfocus) this.trapfocus.destroy(); if (document.querySelector("html.load div#header")) { document.querySelector("html.load div#header").style.opacity = 1; document.querySelector("html.load div#header").style.pointerEvents = "unset" } this.ariaAccessbility(false, this.layerWrap); o.clearTimeout(this.closeBeforeTimeout); this.closeBeforeTimeout = o.setTimeout(l.proxy(this.closeBeforeBugFunc, this), 30); this.bindOutsideEvents(false) }, onEscapeClose: function (e) { var t = e.which || e.keyCode; if (t !== 27) return; this.layerWrap.trigger("closeLayer") }, onLayerOutsideFunc: function () { this.layerWrap.trigger("closeLayer") }, closeBeforeBugFunc: function () { if (this.opts.effect === "default") { if (!this.opts.customToggle) this.layerWrap.stop(true, true).hide(); this.closeAfterBugFunc() } else if (this.opts.effect === "fade") { var e = TweenLite.to(this.layerBody, this.opts.duration / 1e3, { overflow: "hidden", opacity: 0, scale: 1, onComplete: l.proxy(function () { this.layerBody.css("overflow", ""); var e = TweenLite.to(this.layerWrap, this.opts.duration / 1e3, { opacity: 0, display: "none", onComplete: l.proxy(this.closeAfterBugFunc, this) }); this.tweens.instance.push(e) }, this) }); this.tweens.instance.push(e) } else if (this.opts.effect === "slide") { var t = 1; TweenLite.set(this.layerBody, { overflow: "hidden" }); var e = TweenLite.to(this.dimmedObj, t, { opacity: 0 }); var i = TweenLite.to(this.layerObj, t, { y: -h.winSize().h, onComplete: l.proxy(function () { this.closeAfterBugFunc(); this.dimmedObj.hide(); this.layerWrap.hide(); this.layerBody.css("overflow", ""); this.layerObj.hide() }, this) }); this.tweens.instance.push(e); this.tweens.instance.push(i) } else if (this.opts.effect === "slide2") { var t = .5; var e = TweenLite.to(this.dimmedObj, t, { opacity: 0 }); var i = TweenLite.to(this.layerObj, t, { y: h.winSize().h, onComplete: l.proxy(function () { this.closeAfterBugFunc(); this.dimmedObj.hide(); this.layerWrap.hide(); this.layerBody.css("overflow", ""); this.layerObj.hide() }, this) }); this.tweens.instance.push(e); this.tweens.instance.push(i) } else if (this.opts.effect === "flip") { var s = -this.opts.flip.rotateStart - this.opts.flip.rotateEnd, a = s / this.opts.duration * (1e3 / this.opts.fps), r = 0; this.opts.flip.moveData = { startDistance: this.opts.flip.rotateEnd, endDistance: -this.opts.flip.rotateStart, moveDistance: s, moveOneStep: a, currentStep: r }; this.initStep(this.opts.flip.moveData); this.flipFunc() } }, closeAfterBugFunc: function () { o.clearTimeout(this.closeAfterTimeout); this.closeAfterTimeout = o.setTimeout(l.proxy(this.onLayerCloseAfter, this), 30) }, popupOpenPropsControl: function () { var e = d; for (var t = 0, i = e.length; t < i; t++) { var s = e[t], a = s["POPUPWRAP"][0]; if (a === this.layerWrap[0]) e[t] = null } for (var r = 0, n = e.length; r < n; n--) { var o = e[n - 1]; if (o === null) e.splice(n - 1, 1) } }, onLayerCloseAfter: function () { if (this.opts.openerTarget !== null) if (this.closeType !== false) { this.opts.openerTarget[0].mustActive = true; setTimeout(() => { this.opts.openerTarget.focus(); this.opts.openerTarget[0].mustActive = false; this.opts.openerTarget = null }, 100) } this.opts.useCloseFocus = true; this.bindCloseEvents(false); this.outCallback("layerCloseAfter") }, ariaAccessbility: function (e, t) { }, outCallback: function (e) { var t = this.opts.on[e]; if (e === "layerMove") this.layerWrap.trigger(e, arguments[1], arguments[2], this); else this.layerWrap.trigger(e, this); if (t == null) return; if (e === "layerMove") t(arguments[1], arguments[2], this); else t(this) }, styleDestroy: function () { this.dimmedObj.attr("style", ""); this.layerWrap.attr("style", ""); this.layerBody.attr("style", ""); this.layerObj.attr("style", "") }, destroy: function () { this.tweens.kill(); if (this.trapfocus) this.trapfocus.destroy(); this.styleDestroy(); this.bindEvents(false); this.bindOutsideEvents(false); this.bindCloseEvents(false) } }, s }() }(window), function () { "use strict"; window.WATCH = window.WATCH || {}; const r = WATCH.UTILS; WATCH.SubNav = class { constructor(e = container, t) { var i = { navItems: "ul li>a", navDests: '[class*="js-nav-"]', visSections: ".js-visible", resizeStart: null, classes: { isOn: "on" } }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(e), this.init() } init() { null !== this.el && (this.setElements(), this.initOpts(), this.bindEvents()) } setElements() { this.navItems = r.convertArray(this.el.querySelectorAll(this.opts.navItems)), this.navDests = document.querySelectorAll(this.opts.navDests), this.visSections = r.convertArray(document.querySelectorAll(this.opts.visSections)) } initOpts() { this.visCount = -1, this.visSections.forEach(e => { e.dataset.visIndex = e.classList.contains("js-count") ? ++this.visCount : this.visCount }), this.winOffsetTop = window.pageYOffset } bindEvents() { this.onScrollHandler(), window.addEventListener("resize", this.onResizeHandler.bind(this)), window.addEventListener("scroll", this.onScrollHandler.bind(this)); const i = window.location.hash; this.navItems.forEach((e, t) => { -1 < e.getAttribute("href").indexOf("#") && (e.dataset.navIndex = t, e.addEventListener("click", this.onNavItemClickEvent.bind(this))), i && -1 < e.getAttribute("href").indexOf(i) && (e.parentNode.classList.remove(this.classes.isOn), e.click()) }) } onNavItemClickEvent(t) { t.preventDefault(); var t = t.target, i = t.parentNode; if (!this.el.classList.contains("hold") && !i.classList.contains(this.classes.isOn)) { this.navItems.forEach(e => { e.parentNode.classList.remove(this.classes.isOn) }), i.classList.contains(this.classes.isOn) || i.classList.add(this.classes.isOn); var i = t.dataset.navIndex, t = this.navDests[i], i = t.getBoundingClientRect(), s = parseInt(window.getComputedStyle(t).paddingTop), a = (window.innerHeight - (i.height - s) + r.getNavHeight()) / 2; let e = 0; (e = t.classList.contains("js-nav-center") ? this.winOffsetTop + i.top + s - a : this.winOffsetTop + i.top - r.getNavHeight()) < 150 && (e = 0), this.el.classList.add("hold"), GALAXY.setSmoothScrollTop(e, 1500, () => { this.el.classList.contains("hold") && this.el.classList.remove("hold"), GALAXY.header && GALAXY.header.resetSubNav() }) } } onScrollHandler() { this.winOffsetTop = window.pageYOffset; var a = (window.innerHeight + r.getNavHeight()) / 2; this.visSections.forEach(e => { var i, t = e.getBoundingClientRect(), s = this.winOffsetTop + t.top, t = this.winOffsetTop + t.bottom; this.winOffsetTop + a >= s && this.winOffsetTop + a <= t && (i = e.dataset.visIndex, this.navItems.forEach((e, t) => { t != i && e.parentNode.classList.contains(this.classes.isOn) && e.parentNode.classList.remove(this.classes.isOn) }), (s = this.navItems[i].parentNode).classList.contains(this.classes.isOn) || (s.classList.add(this.classes.isOn), !this.el.classList.contains("hold") && s.classList.contains(this.classes.isOn) && GALAXY.header && GALAXY.header.resetSubNav())) }) } onResizeHandler() { r.winSize().w !== this.winWidth && (this.winWidth = r.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.onScrollHandler(), this.resizeRequestFrame = r.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, r.cancelAFrame.call(window, this.resizeRequestFrame) } } }(), function () {
"use strict"; window.WATCH = window.WATCH || {}; WATCH.BigMomentColumn = class {
constructor(e, t) { this.opts = { controlTagging: { play: "movi-play", pause: "movi-pause" }, centeredSlides: !0, tagging: { "data-omni-type": "microsite_pcontentinter", "data-omni": "galaxy-watch-ultra:highlight:carousel:index:", "ga-ca": "indication", "ga-ac": "carousel", "ga-la": "galaxy-watch-ultra:highlight:carousel:index:" }, currDevice: "desktop", prevDevice: null, ...t }, this.selector = { section: e, videoElement: ".video__container", swiperEl: ".swiper-container", swiperSlide: ".swiper-slide", swiperSlideTitle: this.opts.slideTitle || ".feature-column-r__subject-txt", swiperPagination: ".swiper-pagination" }, this.class = { featureHide: "is-feature-hide" }, this.el = { section: document.querySelector(this.selector.section) || null, videoElement: null, videoPlayer: null, swiper: null, swiperEl: null, swiperSlides: null, swiperPagination: null }, this.events = { load: this.onLoadHandler.bind(this), resize: this.onResizeHandler.bind(this) }, this.init() } init() { null === this.el.section || this.el.section.classList.contains(this.class.featureHide) || (this.setElements(), this.buildVideoPlayer(), this.bindEvents()) } setElements() { this.el.videoElement = this.el.section.querySelectorAll(this.selector.videoElement), this.el.swiperEl = this.el.section.querySelector(this.selector.swiperEl), this.el.swiperSlides = this.el.swiperEl.querySelectorAll(this.selector.swiperSlide), this.el.swiperPagination = this.el.section.querySelector(this.selector.swiperPagination) } bindEvents() { window.addEventListener("load", this.events.load), window.addEventListener("resize", this.events.resize) } onLoadHandler() { this.events.resize(), window.removeEventListener("load", this.events.load) } onResizeHandler() { this.opts.currDevice = 767 < innerWidth ? "desktop" : "mobile", this.opts.currDevice !== this.opts.prevDevice && (this.onResponsiveChange(), this.opts.prevDevice = this.opts.currDevice) } onResponsiveChange() { this.destroySwiper(), "mobile" === this.opts.currDevice && this.setSwiper() } buildVideoPlayer() { this.el.videoPlayer = { instance: [], build: () => { 0 < this.el.videoPlayer.instance.length || Array.from(this.el.videoElement).forEach(e => { this.el.videoPlayer.instance.push(new WATCH.VideoPlayer(e, { sectionElement: this.selector.section, playType: "reverse", on: { updateController: e => { var t = e.playState ? "pause" : "play", e = e.el, i = this.opts.controlTagging; e && (e.setAttribute("data-omni", i[t] + ":#"), e.setAttribute("ga-la", i[t] + ":#"), i = e.querySelector(".blind")) && ("undefined" != typeof LOCAL_VARI && LOCAL_VARI && void 0 !== LOCAL_VARI[t] && LOCAL_VARI[t] ? i.innerText = LOCAL_VARI[t] : i.innerText = t) } } })) }) } }, this.el.videoPlayer.build() } setSwiper() {
if (null === this.el.swiper) {
const i = this; this.el.swiper = new Swiper(this.el.swiperEl, {
init: !1, slidesPerView: "auto", centeredSlides: this.opts.centeredSlides, pagination: {
el: this.el.swiperPagination, renderBullet: function (e) {
var t = i.opts.tagging; return `
A memória disponível é inferior à memória total, uma vez que está parcialmente ocupada pelo sistema operativo e software utilizado pelas funcionalidades do dispositivo. A memória disponível poderá variar dependendo do operador de telecomunicações e após a instalação de atualizações de software.
Informações sujeitas a alteração sem aviso prévio. A Samsung reserva-se o direito de modificar, em qualquer momento, as especificações, cores e demais características dos produtos apresentados neste website. As imagens são utilizadas com fins meramente ilustrativos. Foram feitos todos os esforços para tentar garantir a exactidão da informação, dos dados e das descrições apresentados no momento do lançamento. Actualizaremos o website periodicamente. Não obstante, recomendamos-lhe que confirme sempre as especificações dos produtos junto do seu retalhista, com vista a evitar qualquer mal-entendido, especialmente se a escolha do modelo depender de uma das características indicadas.