• Refine Query
  • Source
  • Publication year
  • to
  • Language
  • 99
  • 1
  • Tagged with
  • 100
  • 81
  • 69
  • 59
  • 56
  • 28
  • 23
  • 19
  • 15
  • 13
  • 13
  • 12
  • 12
  • 11
  • 11
  • About
  • The Global ETD Search service is a free service for researchers to find electronic theses and dissertations. This service is provided by the Networked Digital Library of Theses and Dissertations.
    Our metadata is collected from universities around the world. If you manage a university/consortium/country archive and want to be added, details can be found on the NDLTD website.
31

ChipCFlow - Partição e protocolo de comunicação no grafo a fluxo de dados dinâmico / ChipCFlow - partioning and communication protocol in the dynamic dataflow graph

Sanches, Lucas Barbosa 14 May 2010 (has links)
Este trabalho descreve a prova de conceito de uma abordagem que utiliza o modelo de computação a fluxo de dados, inerentemente paralelo, associado ao modelo de computação reconfigurável parcial e dinamicamente, visando à obtenção de sistemas computacionais de alto desempenho. Mais especificamente, trata da obtenção de um modelo para o particionamento dos grafos a fluxo de dados dinâmicos e de um protocolo de comunicação entre suas partes, a fim de permitir a sua implementação em arquiteturas dinamicamente reconfiguráveis, em especial em FGPAs Virtex da Xilinx. Enquadra-se no contexto do projeto ChipCFlow, de escopo mais amplo, que pretende obter uma ferramenta para geração automática de descrição de hardware sintetizável, a partir de código em alto nível, escrito em linguagem C, fazendo uso da abordagem a fluxo de dados para extrair o paralelismo implícito nas aplicações originais. O modelo proposto é aplicado em um grafo a fluxo de dados dinâmico, e através de simulações sua viabilidade é discutida / This work describes the concept of an approach that uses data ow computational model, inherently parallel, associated with de reconfigurable computing model, partial and dynamic, in order to obtain high performance computational systems. More specifically, it is about a model to the partitioning and communication between partitioned sectors of a CDFG (Control Data Flow Graph) in order to map these graphs on a partial reconfiguration FPGA fabric, in special Virtex II/II-Pro from Xilinx. It is part of the ChipCFlow project, that has a bigger scope, and that aims to automatically obtain syntetisable hardware descriptions, from high level code written in C and, by using a data flow approach to extract implicit parallelism in original applications. The model obtained is extensively explained and applied to an example of CDFG, where by means of simulations its feasibility is discussed
32

Projeto de uma VPN(Rede Privada Virtual) baseada em computação reconfigurável e aplicada a robôs móveis / A VPN (Virtual Private Network) design based on reconfigurable computing and applied to mobile robots

Marleta, Marcelo Honorato 11 April 2007 (has links)
Este trabalho apresenta uma implementação de VPN utilizando-se dos circuitos reprogramáveis do tipo FPGA (Field Programmable Gate Array) que são a base da computação reconfigurável. VPNs utilizam criptografia para permitir que a comunicação seja privada entre as partes. Assim, todo o custo computacional decorrente desta prática é executado em nível de hardware, procurando-se atingir um alto desempenho e voltado para as aplicações de sistemas embutidos. O uso desta solução, VPN por hardware, será na interligação de um robô (em desenvolvimento no Laboratório de Computação Reconfigurável - LCR do Instituto de Ciências Matemáticas e de Computação da Universidade de São Paulo) ao seu servidor de configuração e tarefas, através de linhas privadas. O emprego de uma VPN em robótica permitirá a utilização de um sistema de comunicação, com ou sem fio, e toda a infra-estrutura da Internet para a comunicação com o robô (e no futuro entre os robôs) a qualquer distância de forma segura e confiável. O hardware reconfigurável utilizado para a VPN deste trabalho proporciona flexibilidade no modo de implementação, possibilitando que o sistema seja adequado para satisfazer situações que exijam alto desempenho. Além disso, a arquitetura proposta possibilita que parte das operações sejam executadas em software (no caso, foi utilizado o sistema operacional ?Clinux e ferramentas para se estabelecer a VPN) e parte das operações executadas em hardware (um coprocessador criptográfico AES). As principais ferramentas de software são o conjunto ipsec-tools que foram desenvolvidas para serem executadas com o IPSec nativo do Kernel e devidamente portadas para o ?Clinux / This work designs a system that implements a VPN using FPGA (Field Programmable Gate Array) reprogrammable circuits, which are the basis of reconfigurable computing. VPNs use cryptography to allow private communication between parts. In this manner, the computational cost of the cryptography is handled by the hardware, achieving great performance and allowing its usage on embedded systems applications. The system proposed in this thesis has been used to establish secure communication between a PC and a mobile robot (that is in development at Reconfigurable Computing Laboratory - LCR of Institute of Mathematics and Computer Science of Univesity of São Paulo). The use of VPN in robotics will allow a communication, either wired or wireless, using Internet?s infrastructure with the robot (and in the future among robots), in a secure and trustable manner. The reconfigurable hardware used in this work allows flexibility in the implementation, making possible its usage in situations that requires high performance. Furthermore, the proposed architecture allows part of applications executing in software (using ?Clinux operating system and tools to establish the VPN) and other parts in hardware (a cryptographic coprocessor AES). The main software tools are the ipsec-tools that were developed to execute with native Kernel IPSec?s implementation and were properly ported to ?Clinux
33

Implementação de um sistema de arquivos para uma plataforma de computação reconfigurável / A file system implementation for a reconfigurable computing platform

Sanches, Adriano Kaminski 20 September 2006 (has links)
Em um sistema computacional, os dados são armazenados na unidade de armazenamento, segundo alguma lógica, em estruturas denominadas arquivos. O Sistema de Arquivos é o responsável por estruturar, identificar, acessar, proteger e gerenciar esses arquivos, além de agir como um elo de ligação entre o usuário e o dispositivo, traduzindo comandos de alta abstração (oriundos do usuário) em comandos de baixo nível, compreensível a unidade de armazenamento. O presente trabalho visa a implementação de um sistema de arquivos para aplicação em dispositivos móveis baseado em computação reconfigurável. Tal sistema servirá de suporte para as aplicações que necessitem armazenar e/ou restaurar grande volume de dados, como a aquisição de imagens digitalizadas de câmeras CMOS. Este sistema também será utilizado como uma ferramenta inicial para o desenvolvimento de um módulo de armazenamento em uma placa baseada em computação reconfigurável a ser utilizada para fins didáticos. O sistema de arquivos implementado foi a FAT16 e o dispositivo de armazenamento de massa utilizado foram os cartões de memória SD-Secure Digital e MMC-MultiMediaCard / In computational systems, usually the data are stored in storage units, according to some logic, in structures called files. The File System is responsible for structure, identification, access, protection and management of the files. It also acts as a connector link between the user and the device, translating high level commands (derived for the user) into commands of low level, understandable for the storage unit. The present work aims to implement a File System for application in mobile devices based on reconfigurable computation. Such system will act as a support for the applications that need to store and/or to restore large volume of data, such as the acquisition of digital images from CMOS cameras. This system will also be used as an initial tool for the development of a storage module of a board, based on reconfigurable computation, to be used for didactic purposes. The implemented File System is based on FAT16 and the storage device used was the memory cards SD (Secure Digital) and MMC (MultiMedia- Card)
34

P2l - Uma ferramenta de profiling a nível de instrução para o processador softcore LEON3 / P2L - A instruction level profiling tool for LEON3 softcore

Almeida Júnior, Carlos Roberto Pereira 20 May 2016 (has links)
A maioria dos sistemas embarcados hoje desenvolvidos utilizam complexos sistemas eletrônicos integrados em um único chip, os Systems-on-a-Chip (SoC). A análise do comportamento de uma aplicação em execução, ou seja, o profiling nesses sistemas não é uma tarefa trivial em virtude da complexidade dos SoCs e pela restrição de ferramentas de profiling adequadas. Neste contexto, este trabalho apresenta o P2L, uma ferramenta de profiling que se baseia em métricas de nível de instrução e função para o processador LEON3. O P2L fornece estatísticas detalhadas de uso do processador, memórias e barramento de programas em execução sem uso de instrumentação. A ferramenta é composta por um componente em hardware e drivers e aplicativos em software. Os resultados mostram que o P2L fornece medidas com erro inferior a 1% e overhead desprezível quando comparado ao tempo de execução nativa do programa e ao do profiler GNU gprof. / Most embedded systems developed today use complex electronic systems integrated into a single chip, the Systems-on-a-Chip (SoC). The analysis of the behavior of a running application or profiling in these systems is not a trivial task due to the complexity of the SoC and the restriction of appropriate profiling tools. In this context, this work presents P2L - a profiling tool that is based on instruction and function level metrics for the LEON3 processor. P2L provides detailed usage statistics of the processor, memories, and bus of running programs without the use of instrumentation. The tool consists of a component in hardware, drivers and applications software. The results show that P2L provides measures with an error less than 1% and negligible overhead compared to native runtime program and the GNU profiler gprof.
35

Estudos e avaliações de compiladores para arquiteturas reconfiguráveis / A compiler analysis for reconfigurable hardware

Lopes, Joelmir José 25 May 2007 (has links)
Com o aumento crescente das capacidades dos circuitos integrado e conseqüente complexidade das aplicações, em especial as embarcadas, um requisito tem se tornado fundamental no desenvolvimento desses sistemas: ferramentas de desenvolvimento cada vez mais acessíveis aos engenheiros, permitindo, por exemplo, que um programa escrito em linguagem C possa ser convertido diretamente em hardware. Os FPGAs (Field Programmable Gate Array), elemento fundamental na caracterização de computação reconfigurável, é um exemplo desse crescimento, tanto em capacidade do CI como disponibilidade de ferramentas. Esse projeto teve como objetivos: estudar algumas ferramentas de conversão C, C++ ou Java para hardware reconfigurável; estudar benchmarks a serem executadas nessas ferramentas para obter desempenho das mesmas, e ter o domínio dos conceitos na conversão de linguagens de alto nível para hardware reconfigurável. A plataforma utilizada no projeto foi a da empresa Xilinx XUP V2P / With the growing capacities of Integrated Circuits (IC) and the complexity of the applications, especially in embedded systems, there are now requisites for developing tools that convert algorithms C direct into the hardware. As a fundamental element to characterize Reconfigurable Computing, FPGA (Field Programmable Gate Array) is an example of those CIs, as well as the tools that have been developed. In this project we present different tools to convert C into the hardware. We also present benchmarks to be executed on those tools for performance analysis. Finally we conclude the project presenting results relating the experience to implement C direct into the hardware. The Xilinx XUP V2P platform was used in the project
36

Projeto de um controlador PID para controle de ganho de uma câmera com sensor CMOS utilizando computação reconfigurável / Project of a PID controller for CMOS sensor camera gain control using reconfigurable computing

Rossi, Dráusio Linardi 10 November 2011 (has links)
Este trabalho propõe um controlador PID (Proporcional, Integrador, Derivativo), implementado em hardware reconfigurável, para controle de ganho de uma câmera com sensor CMOS. O conceito utilizado é o de sistemas SoC (System-on-a-Chip). As principais funções realizadas pelo sistema são: Aquisição da imagem, montagem do histograma, análise do histograma, controle de ganho baseado na análise do histograma. O sistema proposto tem como objetivo conter algumas funções básicas de controle de ganho que possam servir de base para construção de sistemas de visão computacional que possibilitem a otimização do tempo gasto na construção de novos sistemas, deixando o projetista concentrado na parte mais específica do sistema. O algoritmo de controle de ganho através da análise de histograma demonstrou ser além de funcional, altamente flexível, pois pode ser aplicado a qualquer câmera, independente do tipo do sensor. Este algoritmo pode ser aplicado a tipos diferentes de sensores, com diferentes taxas de aquisição e transmissão de imagens. Este ambiente baseado em computação reconfigurável proporciona alta performance e flexibilidade no modo de implementação, possibilitando que o hardware seja configurado para satisfazer situações que exigem alto desempenho, que pode ser obtido através do paralelismo de operações. Esta arquitetura ainda possibilita a configuração de processadores que executam operações em software em conjunto com operações executadas em hardware. O sistema final controla a câmera CMOS de maneira adequada às aplicações robóticas de tempo real / This paper proposes a PID controller (Proportional, Integrator, Derivative), implemented in reconfigurable hardware to control a CMOS sensor camera gain. The concept used is the system SoC (System-on-a-Chip). The main functions performed by the system are: image acquisition, assembly of the histogram, histogram analysis, gain control based analysis of the histogram. The proposed system aims to contain some basic gain control functions. These functions may serve as a basis for future construction of computer vision systems. This work will optimize the time spent in building new systems, leaving the designer free to concentrate on more specific development. The gain control algorithm through the analysis of histogram proved be functional, highly exible, and it can be applied to any camera, regardless of the type of sensor. This algorithm can be applied to different types of image sensors with different acquisition and transmission rates. This environment-based reconfigurable computing provides high performance and exibility in implementation, enabling the hardware to be confiogured to meet situations that require high performance, which can be obtained through parallelism of operations. This architecture also enables the configuration of processors that perform software operations in conjunction with hardware operations. The final system controls the CMOS camera accordingly to real-time robotic applications
37

Otimização de memória cache em tempo de execução para o processador embarcado LEON3 / Optimization of cache memory at runtime for embedded processor LEON3

Cuminato, Lucas Albers 28 April 2014 (has links)
O consumo de energia é uma das questões mais importantes em sistemas embarcados. Estudos demonstram que neste tipo de sistema a cache é responsável por consumir a maior parte da energia fornecida ao processador. Na maioria dos processadores embarcados, os parâmetros de configuração da cache são fixos e não permitem mudanças após sua fabricação/síntese. Entretanto, este não é o cenário ideal, pois a configuração da cache pode não ser adequada para uma determinada aplicação, tendo como consequência menor desempenho na execução e consumo excessivo de energia. Neste contexto, este trabalho apresenta uma implementação em hardware, utilizando computação reconfigurável, capaz de reconfigurar automática, dinâmica e transparentemente a quantidade de ways e por consequência o tamanho da cache de dados do processador embarcado LEON3, de forma que a cache se adeque à aplicação em tempo de execução. Com esta técnica, espera-se melhorar o desempenho das aplicações e reduzir o consumo de energia do sistema. Os resultados dos experimentos demonstram que é possível reduzir em até 5% o consumo de energia das aplicações com degradação de apenas 0.1% de desempenho / Energy consumption is one of the most important issues in embedded systems. Studies have shown that in this type of system the cache consumes most of the power supplied to the processor. In most embedded processors, the cache configuration parameters are fixed and do not allow changes after manufacture/synthesis. However, this is not the ideal scenario, since the configuration of the cache may not be suitable for a particular application, resulting in lower performance and excessive energy consumption. In this context, this project proposes a hardware implementation, using reconfigurable computing, able to reconfigure the parameters of the LEON3 processor\'s cache in run-time improving applications performance and reducing the power consumption of the system. The result of the experiment shows it is possible to reduce the processor\'s power consumption up to 5% with only 0.1% degradation in performance
38

Aplicação de técnicas de reconfiguração dinâmica a projeto de máquina de vetor suporte (SVM). / Application of dynamic reconfiguration techniques to the project of support vector machines (SVM).

Gomes Filho, Jonas 08 February 2010 (has links)
As Máquinas de Vetores de Suporte (SVMs) têm sido largamente empregadas em diversas aplicações, graças à sua baixa taxa de erros na fase de testes (boa capacidade de generalização) e o fato de não dependerem das condições iniciais. Dos algoritmos desenvolvidos para o treinamento da SVM, o Sequential Minimal Optimization (SMO) é um dos mais rápidos e eficientes para a execução desta tarefa. Importantes implementações da fase de treinamento da SVM têm sido feitas em FPGAs. A maioria destas implementações tem sérias restrições na quantidade de conjunto de amostras a serem treinadas, pelo fato de implementarem soluções numéricas. De observação na literatura técnica, apenas dois trabalhos implementaram o SMO para o treinamento SVM em hardware e apenas um destes possibilita o treinamento de uma quantidade importante de amostras, porém a aplicação é restrita a apenas um benchmark específico. Na última década, com a tecnologia baseada em RAM estática, os FPGAs apresentaram um novo aspecto de flexibilidade: a capacidade de reconfiguração dinâmica, que possibilita a alteração do sistema em tempo de execução trazendo redução de área. Adicionalmente, apesar de uma potencial penalidade no tempo de processamento, a velocidade de execução continua muito superior quando comparada com soluções em software. No presente trabalho, uma solução genérica é proposta para o treinamento SVM em hardware (i.e. uma arquitetura que possibilite o treinamento para diversos tipos de amostras de entrada), e, motivado pela natureza seqüencial do algoritmo SMO, uma arquitetura dinamicamente reconfigurável é desenvolvida. Um estudo da implementação genérica com codificação em ponto fixo é apresentada, assim como os efeitos de quantização. A arquitetura é implementada no dispositivo Xilinx Virtex-IV XC4VLX25. Dados de tempo e área são obtidos e detalhes da síntese são explorados. É feita uma simulação da reconfiguração dinâmica através de chaves de isolação para a validação do sistema sob reconfiguração dinâmica. A arquitetura foi testada para três diferentes benchmarks, com resultados indicando que o treinamento no hardware reconfigurável foi acelerado em até 30 vezes quando comparado com a solução em software e os estudos apontaram que uma economia de até 22,38% de área útil do FPGA pode ser obtida dependendo das metodologias de síntese e implementação adotadas. / Support Vector Machines have been largely used in different applications, due to their high classifying capability without errors (generalization capability) and the advantage of not depending on the initial conditions. Among the developed algorithms for the SVM training, the Sequential Minimal Optimization (SMO) is one of the fastest and the one of the most efficient algorithms for executing this task. Important dedicated hardware implementations of the training phase of the SVM have been proposed for digital FPGA. Most of them are very restricted about the quantity of input samples to be trained due to the fact that they implement numeric solutions. Only two works with implementation in the SMO algorithm for the SVM training in hardware have been reported recently, and just one is able to train an important quantity of input samples, however it is restricted for only one specific benchmark. In the last decade, with the technology based on static memory (SRAM), FPGAs has provided a unique aspect of flexibility: the capability of dynamic reconfiguration, which involves altering the programmed design at run-time and allows area\'s saving. In addition, although leading to some time penalty, the execution time is still faster when compared with purely software solutions. In this work we present a totally hardware general-purpose implementation of the SMO algorithm. In this general-purpose approach, training of examples with different number of samples and elements are possible, and, motivated by the sequential nature of some of the SMO tasks, a dynamically reconfigurable architecture is developed. A study of the general-purpose implementation with fixed-point codification is presented, as well as the quantization effects. The architecture is implemented in the Xilinx Virtex-IV XC4VLX25 device, and timing and area data are provided. Synthesis details are exploited. A simulation using dynamic circuit switching is carried out in order to validate the systems dynamic reconfiguration aspects. The architecture was tested in the training of three different benchmarks; the training on the reconfigurable hardware was accelerated up to 30 times when compared with software solution, and studies points to an area saving up to 22.38% depending on the synthesis and implementation methodologies adopted in the project.
39

"Implementação do barramento on-chip AMBA baseada em computação reconfigurável" / Implementation of on-chip AMBA bus based on Reconfigurable Computing

Queiroz, Daniel Cruz de 04 February 2005 (has links)
A computação reconfigurável está se fortalecendo cada vez mais devido ao grande avanço dos dispositivos reprogramáveis e ferramentas de projeto de hardware utilizadas atualmente. Isso possibilita que o desenvolvimento de hardware torne-se bem menos trabalhoso e complicado, facilitando assim a vida do desenvolvedor. A tecnologia utilizada atualmente em projetos de computação reconfigurável é denominada FPGA (Field Programmable Gate Array), que une algumas características tanto de software (flexibilidade), como de hardware (desempenho). Isso fornece um ambiente bastante propício para desenvolvimento de aplicações que precisam de um bom desempenho, sem que estas devam possuir uma configuração definitiva. O objetivo deste trabalho foi implementar um barramento eficiente para possibilitar a comunicação entre diferentes CORES de um robô reconfigurável, que podem estar dispersos em diferentes dispositivos FPGAs. Tal barramento seguirá o padrão AMBA (Advanced Microcontroller Bus Architecture), pertencente à ARM. Todo o desenvolvimento do core completo do AMBA foi realizado utilizando-se a linguagem VHDL (Very High Speed Integrated Circuit Hardware Description Language) e ferramentas EDAs (Electronic Design Automation) apropriadas. É importante notar que, embora o barramento tenha sido projetado para ser utilizado em um robô, o mesmo pode ser usado em qualquer sistema on-chip. / The reconfigurable computing is each time more fortified, what leads to a great advance of reprogrammable devices and hardware design tools. This has become hardware development less laborious and complicated, thus, facilitating the life of the designer. The technology currently used in projects of reconfigurable computing is called FPGA (Field Programmable Gate Array), which combines some characteristics of software (flexibility) and hardware (performance). This technology provides a propitious environment to the development of applications that need a good performance. Those that don’t need a definitive configuration. The purpose of this work was to implement an efficient bus to make possible the communication among different modules of a reconfigurable robot. This bus is based on a bus standard called AMBA (Advanced Microcontroller Bus Architecture), which belongs to ARM. All the development of full AMBA core was carried through using VHDL (Very High Speed Integrated Circuit the Hardware Description Language) language and appropriated EDA (Electronic Design Automation) tools. It is important to notice that, even so the bus have been projected to be used in a robot, it could be used in any system on-chip.
40

Geração de b-splines via FPGA / B-spline generation via FPGA

Silva, Luiz Marcelo Chiesse da 10 August 2012 (has links)
As b-splines são utilizadas em sistemas CAD/CAM/CAE para representar e definir curvas e superfícies complexas, sendo adotada pelos principais padrões da computação gráfica devido a características como representação matemática de forma compacta, flexibilidade e transformações afins. Em sistemas de aquisição de dados 3D e sistemas CAM-CNC integrados, a utilização da b-spline na transferência de informações geométricas e na reconstrução da superfície de objetos resulta em um significativo incremento na eficiência do processo, geralmente implementado em sistemas embarcados. Nestes sistemas embarcados, integrados no auxílio a máquinas de manufatura, a utilização de FPGAs é incipiente, sem circuitos para b-splines disponibilizados em lógica reconfigurável de circuito aberto (open core), razão pela qual este projeto propõe o desenvolvimento de um circuito de geração b-spline aberto, em um sistema embarcado FPGA, utilizando algoritmos adaptados para os circuitos, elaborados em linguagem Verilog HDL, padronizada para a síntese de circuitos em lógica reconfigurável. Os circuitos foram desenvolvidos, utilizando-se um barramento de dados padronizado em circuito aberto, nas seguintes implementações para processamento paralelo das b-splines: o BFEA, o método baseado em funções base fixas, ambos projetados para circuitos integrados, e o fast Cox-de Boor, desenvolvido para FPGAs. Foram comparados o tempo de execução e o consumo de recursos disponíveis no FPGA utilizado, entre cada implementação. Os resultados evidenciaram que os circuitos de funções base fixas apresentaram o processamento mais rápido para a geração de b-splines em um FPGA, com um tempo de execução em média 20% menor em relação às outras implementações. Os circuitos BFEA apresentaram a menor utilização de elementos lógicos, em média 50% menor em relação aos outros circuitos implementados. O circuito fast Cox-de Boor apresentou a melhor escalabilidade, devido à modularidade da implementação, com tempos de execução similares aos circuitos de funções base fixas. / The b-splines are used in CAD/CAM/CAE systems to represent and define complex curves and surfaces, being adopted by the main computer graphics standards due to features like compact mathematic representation, flexibility and affine transformations. In 3D acquisition systems and integrated CAM-CNC systems, the use of the b-spline in the geometric information data transfer and in the object surface reconstruction results in a increase in the process efficiency, generally implemented in embedded systems. In these embedded systems, integrated in the aid to manufacturing machines, the use of FPGAs is incipient, without available b-splines open core circuits in reconfigurable logic, the reason why this project propose the development of a b-spline generation open core circuit, in a FPGA embedded system, using adaptated algorithms for the circuits, made in Verilog HDL language, standardized for the circuit synthesis in reconfigurable logic. The circuits were developed, using an open core standardized data bus, in the following implementations of b-spline parallel processing: the BFEA, fixed basis functions based method, both designed for integrated circuits, and the fast Cox-de Boor, developed for FPGAs. The execution time and available resource consumption in the FPGA were compared, between each implementation. The results show that the fixed basis functions circuits presented the fastest processing for the b-splines generation in a FPGA, with a 20% mean execution time reduction in relation to the other implementations. The BFEA circuits presented the lowest logic elements use, in mean 50% fewer in relation to the other implemented circuits. The fast Cox-De Boor circuit presented the best scalability, due to the implementation modularity, with execution times similar to the fixed basis functions circuits.

Page generated in 0.0298 seconds