From 1bb333c5d1bf5d94968010c8e371aed54bd8a901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20Fern=C3=A1ndez=20Castro?= Date: Sat, 22 Aug 2015 09:16:11 +0200 Subject: [PATCH 01/55] =?UTF-8?q?Cap=C3=ADtulo=202.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- report/pfc_amroldan.alg | 8 +-- report/pfc_amroldan.ist | 2 +- report/subdocs/capitulo2.tex | 102 ++++++++++++++++++++--------------- 3 files changed, 64 insertions(+), 48 deletions(-) diff --git a/report/pfc_amroldan.alg b/report/pfc_amroldan.alg index ab19a96..3a4e890 100644 --- a/report/pfc_amroldan.alg +++ b/report/pfc_amroldan.alg @@ -1,7 +1,7 @@ This is makeindex, version 2.15 [MiKTeX 2.9] (kpathsea + Thai support). -Scanning style file D:/Vikman/Dropbox/Universidad/Organo/Memoria/pfc_amroldan.ist.............................done (29 attributes redefined, 0 ignored). -Scanning input file pfc_amroldan.acn....done (69 entries accepted, 0 rejected). -Sorting entries....done (431 comparisons). -Generating output file pfc_amroldan.acr....done (44 lines written, 0 warnings). +Scanning style file D:/Vikman/Proyectos/organo/report/pfc_amroldan.ist.............................done (29 attributes redefined, 0 ignored). +Scanning input file pfc_amroldan.acn....done (52 entries accepted, 0 rejected). +Sorting entries....done (363 comparisons). +Generating output file pfc_amroldan.acr....done (37 lines written, 0 warnings). Output written in pfc_amroldan.acr. Transcript written in pfc_amroldan.alg. diff --git a/report/pfc_amroldan.ist b/report/pfc_amroldan.ist index e2db28f..4704602 100644 --- a/report/pfc_amroldan.ist +++ b/report/pfc_amroldan.ist @@ -1,5 +1,5 @@ % makeindex style file created by the glossaries package -% for document 'pfc_amroldan' on 2015-8-9 +% for document 'pfc_amroldan' on 2015-8-21 actual '?' encap '|' level '!' diff --git a/report/subdocs/capitulo2.tex b/report/subdocs/capitulo2.tex index 89b4ff6..0ee632f 100644 --- a/report/subdocs/capitulo2.tex +++ b/report/subdocs/capitulo2.tex @@ -1,64 +1,80 @@ \chapter{Requisitos técnicos del diseño} \label{cap:capitulo_2} -En este capítulo nos centraremos en detallar los requisitos técnicos de nuestro diseño a nivel tanto -\textit{hardware} como \textit{firmware} - +Como hemos adelantado, pretendemos diseñar un sistema autónomo capaz de hacer sonar un órgano de tubos, tal como lo haría un artista. El uso está enfocado a minimizar la interacción del usuario con el sistema. +Para especificar el diseño de este proyecto hemos propuesto una serie de requisitos tanto \textit{hardware} como \textit{software}: \section{Requisitos \textit{hardware}} -A nivel \textit{hardware} se nos pide: + \begin{itemize} -\item[-] Diseñar una \acrshort{PCB} que sea capaz de realizar el control de temperatura de nuestro horno. -\item[-] Dotar a la \acrshort{PCB} de los dispositivos necesarios para la comunicación hombre-máquina. -\item[-] El mecanismo de control de la temperatura ha de ser un controlador PID. -\item[-] Los sensores de temperatura serán PT100 de cuatro hilos. + + \item[-] Un juego de mecanismos accionará las teclas, otro moverá los pedales y otro desplazará los registros de timbres. + + \item[-] El sistema no podrá acceder a la mecánica interna del instrumento, ni modificarlo de ninguna forma. + + \item[-] No podrá apoyarse demasiado peso sobre el órgano, ni hacerse contraapoyo (hacia arriba). + + \item[-] El control principal, la instalación de partituras y la configuración se harán remotamente. + + \item[-] Se proveerá un control local reducido de los accionadores con fines de puesta en marcha y mantenimiento. + + \item[-] Asímismo se facilitará el control remoto desde un mando a distancia. + + \item[-] El diseño debe ser flexible y extensible para distintos órganos. + + \item[-] Se debe de poder instalar y desinstalar fácilmente. + \end{itemize} -\section{Requisitos \textit{firmware}} -A nivel \textit{firmware} debemos realizar un programa que contenga todas las rutinas que harán que nuestro horno funcione correctamente y la configuración de todos los dispositivos conectados a la \acrshort{PCB}. Además, deberemos realizar una interfaz gráfica en Matlab que sea capaz de comunicarse con nuestro microcontrolador, de manera que sea capaz de mandar y recibir datos. - - +\section{Requisitos \textit{software}} -\section{Fases del proyecto} +Teniendo en cuenta los requisitos \textit{hardware} y el perfil del usuario final, planteamos los siguientes requisitos para el software a diseñar: -A continuación expondremos las fases constitutivas del transcurso del proyecto, describiendo su contenido de manera generalizada. +\begin{itemize} -Una vez expuestas las fases, se considerarán fechas iniciales y finales para cada tarea, a fin de contemplar que alcance temporal que implica el desarrollo del proyecto al completo. Las fechas marcarán el transcurso del trabajo. + \item[-] Se ofrecerá control remoto para todos los casos de uso a nivel de usuario. + + \item[-] La interfaz permitirá controlar la reproducción: iniciar una pieza, pausarla, reanudarla y detenerla. La reproducción por defecto será en modo bucle. + + \item[-] Facilitará la subida y gestión de partituras. En dicho gestor se mostrará la duración de cada pieza. + + \item[-] Los archivos a procesar son de formato MIDI estándar, sin perjuicio de que una partitura pueda estar adaptada espefícicamente al sistema. + + \item[-] Las piezas musicales se clasificarán en listas de reproducción. + + \item[-] La interfaz de usuario permitirá asignar dichas listas a ciertos botones del mando arriba mencionado. + + \item[-] El mando tendrá capacidad para reproducir una serie de listas preprogramadas, así como pausar y detener la reproducción. + + \item[-] El \textit{software} dará soporte al testeo de los accionadores de forma local. + + \item[-] El controlador debe ser extensible para órganos con más o menos teclas, distinto número de teclados o diferente configuración de registros. + + \item[-] La aplicación para el usuario debe ser lo más sencilla e intuitiva posible. + + \item[-] Se busca obtener una aplicación de control multiplataforma. + + \item[-] La interfaz de usuario se presentará en varios idiomas. + + \item[-] Ya que el control es remoto, se hará hincapié en la seguridad, tanto autentificación de acceso como aspectos de programación, tales como inyección de código. -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.8]{capitulo2/requerimientos_3} -\par\end{centering} -\smallskip -\caption{\label{fig:requerimientos_3} Principales fases de un proyecto \cite{WIKIPED}.} -\end{figure} +\end{itemize} +\section{Fases del proyecto} -Las diferentes fases son: +Tal como hemos introducido anteriormente, vamos a dividir este proyecto en cuatro fases, cada una de las cuales servirá para obtener los requisitos necesarios para continuar la siguiente. Vamos a trabajar de la siguiente forma: \begin{enumerate} - \item[-] \textbf{FASE I- Especificaciones del sistema:} realizaremos un estudio detallado de los requerimientos del sistema de caracterización. - - \item[-] \textbf{FASE II- Análisis y Diseño:} en esta fase se agrupan todos los requerimientos y especificaciones de la fase anterior y se trata de concebir la composición del sistema. Consideraremos todos aquellos elementos \textit{hardware}, \textit{software} y estructurales necesarios. Analizaremos las funcionalidades de cada equipo electrónico y/o mecánico utilizado, determinando su utilidad dentro del sistema. Diseñaremos y simularemos, mediante un \textit{software} específico. - - \item[-] \textbf{FASE III- Desarrollo e Implementación:} se fabrica todo el componente hardware diseñado en la fase II y se le incorporan los distintos dispositivos y componentes. Una vez terminado se procede a la programación del algoritmo \glsname{PID} y, ayudándonos de algunas librerías, configuraremos los devices para su correcto funcionamiento. - - \item[-] \textbf{FASE IV- Testeo y Validación:} una vez se ha concluido el proceso de fabricación e implementación, solo queda validar el funcionamiento global del conjunto, resolviendo defectos y anomalías \textit{hardware} y también depurando fallos \textit{software} y aportando algunas mejoras puntuales. Tras esto, la obtención de datos y resultados. + \item[-] \textbf{FASE I - Análisis:} Vamos a estudiar todos los componentes a los que tenemos acceso, desde el órgano hasta la placa de circuito y el computador a utilizar, pasando por la especificación del formato MIDI. + + \item[-] \textbf{FASE II - Diseño:} En esta fase reunimos las especificaciones del sistema y los requisitos propuestos para definir el sistema que vamos a concebir, desde la interfaz al usuario hasta la interacción con el hardware. + + \item[-] \textbf{FASE III - Implementación:} Es la etapa en la que se programa el \textit{software} a partir del diseño de la fase precedente, y prestaremos atención a los detalles de bajo nivel que se nos presentarán, desde llamadas al sistema y acceso a los periféricos hasta control de concurrencia. + + \item[-] \textbf{FASE IV - Verificación y validación:} Una vez terminada la fase de implementación, pondremos en funcionamiento el sistema para verificar que tanto el \textit{hardware} como el \textit{software} se integran correctamente y cumplen con los requisitos propuestos. + \end{enumerate} - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.5]{capitulo2/requerimientos_2} -\par\end{centering} -\smallskip -\caption{\label{fig:fases_proy_step} Analogía de fases.} -\end{figure} - - \clearpage{\cleardoublepage} \clearpage{\pagestyle{empty}\cleardoublepage} - From 79a31f8d72e4f35277fc1b37f6e414d603785712 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20Fern=C3=A1ndez=20Castro?= Date: Sun, 23 Aug 2015 11:44:05 +0200 Subject: [PATCH 02/55] =?UTF-8?q?Vi=C3=B1etas=20del=20cap=C3=ADtulo=202.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- report/anexoIV_actaPFC.pdf | Bin 0 -> 68479 bytes report/pfc_amroldan.ist | 2 +- report/subdocs/capitulo2.tex | 50 +++++++++++++++++------------------ 4 files changed, 27 insertions(+), 27 deletions(-) create mode 100644 report/anexoIV_actaPFC.pdf diff --git a/.gitignore b/.gitignore index 29a56fc..b9c4537 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,7 @@ report/*.ilg report/*.ind report/*.lof report/*.lot -report/*.pdf +report/pfc_amroldan.pdf report/*.alg report/*.tps report/*.ist diff --git a/report/anexoIV_actaPFC.pdf b/report/anexoIV_actaPFC.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0156b1088d75f6ffac469ffed102acbdeb21e7e5 GIT binary patch literal 68479 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

)o12N4 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 literal 0 HcmV?d00001 diff --git a/report/pfc_amroldan.ist b/report/pfc_amroldan.ist index 4704602..6f096b1 100644 --- a/report/pfc_amroldan.ist +++ b/report/pfc_amroldan.ist @@ -1,5 +1,5 @@ % makeindex style file created by the glossaries package -% for document 'pfc_amroldan' on 2015-8-21 +% for document 'pfc_amroldan' on 2015-8-23 actual '?' encap '|' level '!' diff --git a/report/subdocs/capitulo2.tex b/report/subdocs/capitulo2.tex index 0ee632f..05bec52 100644 --- a/report/subdocs/capitulo2.tex +++ b/report/subdocs/capitulo2.tex @@ -9,21 +9,21 @@ \section{Requisitos \textit{hardware}} \begin{itemize} - \item[-] Un juego de mecanismos accionará las teclas, otro moverá los pedales y otro desplazará los registros de timbres. + \item Un juego de mecanismos accionará las teclas, otro moverá los pedales y otro desplazará los registros de timbres. - \item[-] El sistema no podrá acceder a la mecánica interna del instrumento, ni modificarlo de ninguna forma. + \item El sistema no podrá acceder a la mecánica interna del instrumento, ni modificarlo de ninguna forma. - \item[-] No podrá apoyarse demasiado peso sobre el órgano, ni hacerse contraapoyo (hacia arriba). + \item No podrá apoyarse demasiado peso sobre el órgano, ni hacerse contraapoyo (hacia arriba). - \item[-] El control principal, la instalación de partituras y la configuración se harán remotamente. + \item El control principal, la instalación de partituras y la configuración se harán remotamente. - \item[-] Se proveerá un control local reducido de los accionadores con fines de puesta en marcha y mantenimiento. + \item Se proveerá un control local reducido de los accionadores con fines de puesta en marcha y mantenimiento. - \item[-] Asímismo se facilitará el control remoto desde un mando a distancia. + \item Asímismo se facilitará el control remoto desde un mando a distancia. - \item[-] El diseño debe ser flexible y extensible para distintos órganos. + \item El diseño debe ser flexible y extensible para distintos órganos. - \item[-] Se debe de poder instalar y desinstalar fácilmente. + \item Se debe de poder instalar y desinstalar fácilmente. \end{itemize} @@ -33,31 +33,31 @@ \section{Requisitos \textit{software}} \begin{itemize} - \item[-] Se ofrecerá control remoto para todos los casos de uso a nivel de usuario. + \item Se ofrecerá control remoto para todos los casos de uso a nivel de usuario. - \item[-] La interfaz permitirá controlar la reproducción: iniciar una pieza, pausarla, reanudarla y detenerla. La reproducción por defecto será en modo bucle. + \item La interfaz permitirá controlar la reproducción: iniciar una pieza, pausarla, reanudarla y detenerla. La reproducción por defecto será en modo bucle. - \item[-] Facilitará la subida y gestión de partituras. En dicho gestor se mostrará la duración de cada pieza. + \item Facilitará la subida y gestión de partituras. En dicho gestor se mostrará la duración de cada pieza. - \item[-] Los archivos a procesar son de formato MIDI estándar, sin perjuicio de que una partitura pueda estar adaptada espefícicamente al sistema. + \item Los archivos a procesar son de formato MIDI estándar, sin perjuicio de que una partitura pueda estar adaptada espefícicamente al sistema. - \item[-] Las piezas musicales se clasificarán en listas de reproducción. + \item Las piezas musicales se clasificarán en listas de reproducción. - \item[-] La interfaz de usuario permitirá asignar dichas listas a ciertos botones del mando arriba mencionado. + \item La interfaz de usuario permitirá asignar dichas listas a ciertos botones del mando arriba mencionado. - \item[-] El mando tendrá capacidad para reproducir una serie de listas preprogramadas, así como pausar y detener la reproducción. + \item El mando tendrá capacidad para reproducir una serie de listas preprogramadas, así como pausar y detener la reproducción. - \item[-] El \textit{software} dará soporte al testeo de los accionadores de forma local. + \item El \textit{software} dará soporte al testeo de los accionadores de forma local. - \item[-] El controlador debe ser extensible para órganos con más o menos teclas, distinto número de teclados o diferente configuración de registros. + \item El controlador debe ser extensible para órganos con más o menos teclas, distinto número de teclados o diferente configuración de registros. - \item[-] La aplicación para el usuario debe ser lo más sencilla e intuitiva posible. + \item La aplicación para el usuario debe ser lo más sencilla e intuitiva posible. - \item[-] Se busca obtener una aplicación de control multiplataforma. + \item Se busca obtener una aplicación de control multiplataforma. - \item[-] La interfaz de usuario se presentará en varios idiomas. + \item La interfaz de usuario se presentará en varios idiomas. - \item[-] Ya que el control es remoto, se hará hincapié en la seguridad, tanto autentificación de acceso como aspectos de programación, tales como inyección de código. + \item Ya que el control es remoto, se hará hincapié en la seguridad, tanto autentificación de acceso como aspectos de programación, tales como inyección de código. \end{itemize} @@ -66,13 +66,13 @@ \section{Fases del proyecto} Tal como hemos introducido anteriormente, vamos a dividir este proyecto en cuatro fases, cada una de las cuales servirá para obtener los requisitos necesarios para continuar la siguiente. Vamos a trabajar de la siguiente forma: \begin{enumerate} - \item[-] \textbf{FASE I - Análisis:} Vamos a estudiar todos los componentes a los que tenemos acceso, desde el órgano hasta la placa de circuito y el computador a utilizar, pasando por la especificación del formato MIDI. + \item \textbf{FASE I \textemdash Análisis:} Vamos a estudiar todos los componentes a los que tenemos acceso, desde el órgano hasta la placa de circuito y el computador a utilizar, pasando por la especificación del formato MIDI. - \item[-] \textbf{FASE II - Diseño:} En esta fase reunimos las especificaciones del sistema y los requisitos propuestos para definir el sistema que vamos a concebir, desde la interfaz al usuario hasta la interacción con el hardware. + \item \textbf{FASE II \textemdash Diseño:} En esta fase reunimos las especificaciones del sistema y los requisitos propuestos para definir el sistema que vamos a concebir, desde la interfaz al usuario hasta la interacción con el hardware. - \item[-] \textbf{FASE III - Implementación:} Es la etapa en la que se programa el \textit{software} a partir del diseño de la fase precedente, y prestaremos atención a los detalles de bajo nivel que se nos presentarán, desde llamadas al sistema y acceso a los periféricos hasta control de concurrencia. + \item \textbf{FASE III \textemdash Implementación:} Es la etapa en la que se programa el \textit{software} a partir del diseño de la fase precedente, y prestaremos atención a los detalles de bajo nivel que se nos presentarán, desde llamadas al sistema y acceso a los periféricos hasta control de concurrencia. - \item[-] \textbf{FASE IV - Verificación y validación:} Una vez terminada la fase de implementación, pondremos en funcionamiento el sistema para verificar que tanto el \textit{hardware} como el \textit{software} se integran correctamente y cumplen con los requisitos propuestos. + \item \textbf{FASE IV \textemdash Verificación y validación:} Una vez terminada la fase de implementación, pondremos en funcionamiento el sistema para verificar que tanto el \textit{hardware} como el \textit{software} se integran correctamente y cumplen con los requisitos propuestos. \end{enumerate} From afefcc83336264a1de98d24d955159f0320b49e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20Fern=C3=A1ndez=20Castro?= Date: Mon, 24 Aug 2015 11:54:39 +0200 Subject: [PATCH 03/55] =?UTF-8?q?Cap=C3=ADtulo=203,=20sin=20im=C3=A1genes.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- report/subdocs/capitulo3.tex | 294 ++++++++++++++++++------- report/subdocs/capitulo4.tex | 403 +---------------------------------- report/subdocs/capitulo5.tex | 357 ------------------------------- 3 files changed, 220 insertions(+), 834 deletions(-) diff --git a/report/subdocs/capitulo3.tex b/report/subdocs/capitulo3.tex index 58175f7..c4763e1 100644 --- a/report/subdocs/capitulo3.tex +++ b/report/subdocs/capitulo3.tex @@ -1,108 +1,252 @@ \chapter{Análisis del sistema.} \label{cap:capitulo_3} -En este capítulo se detallará la fase de análisis del proyecto, partiendo de los requisitos técnicos explicados en el capítulo \ref{cap:capitulo_2}. Se detallarán las distintas opciones de diseño y los problemas y soluciones que han ido apareciendo a lo largo del proyecto. -\section{Análisis del horno} -La figura XXXXX muestra el diagrama de nuestro horno con los elementos más importantes. EL horno está controlado principalmente por el termostato que se encargará de encender/apagar el relé que permite el paso de corriente hacia las resistencias que calientan el horno. -A continuación se dará una explicación más detallada de los distintos componentes. +En este capítulo vamos a detallar el funcionamiento todos los elementos analizados y utilizados para la elaboración del proyecto. -\subsection{Termostato} +\section{Órgano de la Parroquia de la Encarnación} -Un termostato es un componente de un sistema de control que comprueba la temperatura de un sistema de manera que mantiene la temperatura de dicho sistema cercana a una consigna. El termostato consigue esto mediante el calentamiento o enfriamiento de dispositivos en on o off. En nuestro caso, mediante el calentamiento de unas resistencias que cederán calor al interior del horno. +El instrumento instalado en la Parroquia de la Encarnación de Santa Fe es en realidad un doble órgano artesanal construido en dos fases: un órgano barroco, al que se agregó una extensión romántica con un segundo teclado y nuevos sonidos, pero todo el mecanismo es independiente del primer órgano. -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.1]{capitulo3/termostato} -\par\end{centering} -\smallskip -\caption{\label{fig:termostato} Termostato.} -\end{figure} +Para funcionar, el órgano se alimenta de aire. Antiguamente se utilizaba un fuelle gigante, situado en la antesala, que llevaba el aire a una cámara de almacenamiento, para proporcionar un flujo de entrada constante. Esto requería que hubiese alguien follando mientras el organista tocaba. Hoy día el fuelle ha sido sustituído por una bomba eléctrica. +Los entresijos del órgano barroco, el más grande, está construidos en dos plantas: en la parte más baja, a la altura de la consola, encontramos los juegos de palancas, de las cuales aquellas pertenecientes al órgano barroco suben a la planta superior. A sendos laterales encontramos el corazón del órgano romántico, más pequeño. -\subsection{Termistor} -Un termistor es un dispositivo que cambia su impedancia dependiendo de la temperatura. +En la planta de arriba se encuentra la esencia del instrumento: alrededor de 600 tubos de diferentes timbres y alturas sonoras, incluyendo el \textit{bajo de contrast}, que se hace sonar con el \textit{pedalier}. Solo los diapasones ---los flautados de 13' fundamentales y las cornetas--- son visibles desde el exterior. -La impedancia del termistor es leída por un sistema de control, usualmente basado en un microcontrolador, que es programado para realizar diferentes operaciones a determinadas temperaturas. -Dicha temperatura la veremos reflejada en un termómetro de mercurio situado en la parte frontal del horno. +La parte más importante del órgano es el llamado \textit{secreto}, una galería a la que entra el aire procedente de la cámara de almacenamiento y se distribuye en cientos de conductos que llevan a las válvulas y los tubos. En tiempos en los que no existían los manguitos de goma, los conductos están tallados artesanalmente dentro de bloques de madera. -\hfill -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.3]{capitulo3/termistor} -\par\end{centering} -\smallskip -\caption{\label{fig:termistor} Termistor.} -\end{figure} - - +La primera tarea que llevamos a cabo fue conocer el órgano en profundidad, tomar algunas medidas y diseñar el modelo en 3D con el software SolidWorks. +\subsection{Teclados} -\subsection{Relé} -Un relé es un dispositivo electromecánico que mediante una bobina y un electroimán acciona uno o varios contactos que permitirán la apertura o el cierre de otros circuitos eléctricos independientes. En nuestro caso, permitirá el paso de la corriente que calentará por efecto Joule las resistencias que cederán energía en forma de calor al horno. +Tenemos dos teclados de cuatro octavas notas cada uno, el de arriba, correspondiente al órgano barroco, y otro más abajo, que sobresale del primero, para el órgano romántico, de la misma extensión. -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.8]{capitulo3/rele} -\par\end{centering} -\smallskip -\caption{\label{fig:rele} Relé multi9 CT.} -\end{figure} +Tanto las medidas de cada tecla como su calado (diferencia entre la posición del borde de una tecla pulsada y sin pulsar) son estándar y coincidentes con las del piano. De la misma forma, la tecla \textit{Do} del centro hace sonar la nota \textit{Do-4} \footnotemark. -Este rele tiene un voltaje de operación de 250 V AC y 25 A. Y su esquemático lo podemos ver a continuación en la figura \ref{fig:esquema_rele}\cite{multi9}. +\footnotetext{En España se utilizan dos índices de notación musical: el franco-belga, que asigna el nombre \textit{La-3} a la nota cuya frecuencia fundamental vibra a 440 \textit{Hz}, y el índice científico, que asigna \textit{La-4} a la misma nota. En este proyecto utilizaremos el índice científico, ya que es el utilizado para el sistema MIDI.} -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.8]{capitulo3/esquema_rele} -\par\end{centering} -\smallskip -\caption{\label{fig:esquema_rele}Esquema relé de dos puertas.} -\end{figure} +Los datos más relevantes son los siguientes: -\subsection{Fusibles} -Los fusibles son pequeños dispositivos que permiten el paso constante de la corriente eléctrica hasta que ésta supera el valor máximo permitido. Cuando aquello sucede, entonces el fusible, inmediatamente, cortará el paso de la corriente eléctrica a fin de evitar algún tipo de accidente, protegiendo los aparatos eléctricos de "quemarse" o estropearse.. +\begin{center} + \begin{tabular}{|l|l|} + \hline Número de teclas & 49 / teclado \\ + \hline Extensión & \textit{Do-2} -- \textit{Do-6} \\ + \hline Profundidad de calado (blancas) & 10 \textit{mm} \\ + \hline Profundidad de calado (negras) & 8 \textit{mm} \\ + \hline Presión máxima & 2,70 \textit{N} \\ + \hline + \end{tabular} +\end{center} -El mecanismo que posee el fusible para cortar el paso de la electricidad consta básicamente en que, una vez superado el valor establecido de corriente permitido, el dispositivo se derrite, abriendo el circuito, lo que permite el corte de la electricidad. De no existir este mecanismo, o debido a su mal funcionamiento, el sistema se recalentaría a tal grado que podría causar, incluso, un incendio. +Cabe destacar que, a diferencia del piano, la intensidad del sonido no viene dada por la fuerza con la que se pulse una tecla, y no es necesario pulsarla hasta el tope de calado para que suene, basta con hacerla bajar tan solo unos milímetros, lo necesario para vencer la válvula. - -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.2]{capitulo3/fusible} -\par\end{centering} -\smallskip -\caption{\label{fig:fusible} Fusible.} -\end{figure} +\subsection{Pedales} -El fusible incorporado en el horno tiene las siguientes características: +Este órgano cuenta con un \textit{pedalier} con un registro fijo: el \textit{bajo de contrast}. Los pedales están dispuestos en forma de escala diatónica, igual que las teclas. Cada pedal tiene aproximadamente la misma anchura que una tecla aunque, obviamente, están más separados unos de otros. -\begin{itemize} -\item Soplado de acción rápida. -\item Capacidad de ruptura de intensidad AC de 100 kA. -\item Intensidad de 6 A. -\item Tensión nominanl de 600V. -\end{itemize} +Es importante saber que el peso necesario para mover un pedal es mucho mayor que para una tecla, asimismo, tanto la naturaleza artesanal como el deterioro crean mucha disparidad entre el tacto de cada pedal. + +\begin{center} + \begin{tabular}{|l|l|} + \hline Número de pedales & 12 \\ + \hline Extensión & \textit{Do-1} -- \textit{Si-1} \\ + \hline Profundidad de calado (diatónicas) & 14,5 \textit{mm} \\ + \hline Profundidad de calado (cromáticas) & 19,8 \textit{mm} \\ + \hline Presión máxima & 30,54 \textit{N} \\ + \hline + \end{tabular} +\end{center} +\subsection{Registros} +Los registros son las diferentes familias de tubos con el mismo timbre y la misma tesitura. Se pueden abrir o cerrar desde la consola a través de una serie de palancas, de las que se tira para hacer sonar el registro o se empuja para silenciarlo. -\section{Modificaciones del horno} -En primer lugar empezaremos analizando que módificaciones serán necesarias en el horno. +Estos controles están dispuestos a ambos lados de los teclados y son exclusivos para un teclado u otro. En este órgano existen registros parciales, esto es, se aplican solo a una mitad del teclado, bien de \textit{Do-2} a \textit{Si-3}, o bien de \textit{Do-4} a \textit{Do-6}. -Ya hemos visto cómo funciona, y vimos que el control del encendido y apagado para el calentamiento lo lleva a cabo el termostato. Nosotros queremos controlar todo desde una \acrshort{PCB} controlada por un microcontrolador, por lo que tendremos que quitar el termostato de manera que desde la \acrshort{PCB} podamos seguir controlando el horno. La solución que se llevó a cabo fue la de realizar un \textit{bypass} al termostato de manera que no tenga ningún control sobre nuestro horno. +Dado que el punto interno de equilibro de cada palanca está en lugares diferentes, existe una notable disparidad en la medida en que sobresalen cuando se abren. Además, tenemos una palanca especial, el \textit{tremolo}, que sirve para activar un mecanismo que produce un efecto de fluctuación en el sonido. -El termostato controla un relé que es el que hace que se circule o no la corriente hacia las resistencias que calientan el horno. Al usar un control \glsname{PID}, controlaremos el horno con una señal \acrshort{PWM}. +A continuación mostramos las medidas de longitud y fuerza tomadas durante el análisis. -Las señales \acrshort{PWM} cambian de alta a baja en periodos de tiempo muy pequeños. Al ser el relé un elemento de conmutación mecánica, el cambio de estado tan rápido a la larga hara que se rompa. Por lo que se opta por quitarlo y hacer ese cambio de estado ON/OFF mediante un optotriac que irá incorporado en la \acrshort{PCB}. +\begin{center} + \begin{tabular}{|l|l|} + \hline \multicolumn{2}{|c|}{\textbf{A la izquierda}} \\ + \hline & Bajoncillo (142 \textit{mm}) \\ + \hline & Flautado de 13' sordina (160 \textit{mm}) \\ + \hline & Flautado de 13' (175 \textit{mm})\\ + \hline & Octava (161 \textit{mm}) \\ + \hline & Quincena (161 \textit{mm}) \\ + \hline Trémolo (67 \textit{mm}) & Decimonovena (165 \textit{mm}) \\ + \hline Bajón-oboe (103 \textit{mm}) & Lleno (140 \textit{mm}) \\ + \hline Flauta armenia (1106 \textit{mm}) & Clarín (160 \textit{mm}) \\ + \hline Violón (100 \textit{mm}) & Trompeta real (144 \textit{mm}) \\ + \hline + \end{tabular} + + \begin{tabular}{|l|l|} + \hline \multicolumn{2}{|c|}{\textbf{A la derecha}} \\ + \hline Clarín (170 \textit{mm}) & \\ + \hline Corneta (141 \textit{mm}) & \\ + \hline Flautado de 13' sordina (137 \textit{mm}) & \\ + \hline Flautado de 13' (134 \textit{mm}) & \\ + \hline Octava & (142 \textit{mm}) \\ + \hline Docena & (142 \textit{mm}) \\ + \hline Quincena & (168 \textit{mm}) \\ + \hline Lleno (156 \textit{mm}) & Voz humana (110 \textit{mm}) \\ + \hline Clarín (142 \textit{mm}) & Voz celeste (116 \textit{mm}) \\ + \hline Trompeta real (135 \textit{mm}) & Gamba (102 \textit{mm}) \\ + \hline + \end{tabular} +\end{center} + +\smallskip -\section{Localización de la \acrshort{PCB}} -Disponemos de varias opciones donde colocar la \acrshort{PCB}, aunque no se tomará ninguna decisión hasta que no tengamos la \acrshort{PCB} fabricada. +\section{PCB de control} + +La placa de circuito impreso es la solución a los requisitos hardware aportada por el proyecto de D. Mikel Aguayo Fernández. Incluye una serie de registros de desplazamiento para almacenar el estado del órgano, una interfaz de control local reducido y un medio de control remoto. También alimentará al computador que vamos a utilizar. Actualmente disponemos de un prototipo de la placa con un número limitado de salidas. + +Una de las partes más importantes de este proyecto será desarrollar el \textit{software} controlador para esta PCB. A continuación detallamos aquellos componentes con los que tendremos que interactuar. + +\subsection{Registros de desplazamiento SN74HC595} + +Los registros de desplazamiento son circuitos lógicos que almacenan una serie de bits y permiten desplazarlos de una celda a otra. Este modelo tiene una capacidad de 8 bits, soporta entrada en serie y salida en paralelo con registro de almacenamiento. Así, solo necesitamos un pin para enviar toda la información, y la salida no se ve alterada durante el desplazamiento, sino que damos un pulso de reloj para indicar que hemos terminado de enviar los datos. + +\begin{center} + \begin{tabular}{|l|l|} + \hline Capacidad & 8 \textit{bits} / canal \\ + \hline Canales & 4 \\ + \hline Ancho de pulso & 100 ns \\ + \hline + \end{tabular} +\end{center} + +Basándonos en el órgano de la Parroquia de Santa Fe, tendremos cuatro registros de desplazamiento, uno para cada canal: \begin{itemize} -\item Parte superior del horno. -\item Lateral del horno. -\item Interior del horno abriendo agujeros para que sean accesibles los dispositivos de comunicación hombre-máquina. + \item Canal 1: teclado barroco. + \item Canal 2: teclado romántico. + \item Canal 3: registros. + \item Canal 4: pedalier. \end{itemize} +A pesar de que la capacidad de cada canal es de 8 bits, solo utilizaremos 7 de ellos. + +\subsection{Receptor de mando a distancia HIRK-433A} + +El receptor de mando a distancia es un detector de radio con decodificador a interfaz RS-232. Nos da la información del número de serie del mando y qué botones han disparado el evento. Es flexible para mandos con distinto número de botones y los indica como un campo de bits basados en la letra A. Si el carácter corresponde a una minúscula, nos avisa de que el mando tiene poca batería. Por ejemplo: + +\begin{itemize} + \item \textbf{A}: Botón 1. + \item \textbf{B}: Botón 2. + \item \textbf{C}: Botones 1 y 2. + \item \textbf{d}: Botón 3 (batería baja). + \item \textbf{H}: Botón 4. +\end{itemize} +La siguiente tabla muestra los datos de nuestro interés: + +\begin{center} + \begin{tabular}{|l|l|} + \hline Interfaz & RS-232 \\ + \hline Velocidad & 9600 \textit{baudios} \\ + \hline Longitud de trama & 10 \textit{bytes} \\ + \hline Sintaxis & \\ + \hline + \end{tabular} +\end{center} + +\subsection{Pantalla LCD FDCC2004B} + +Esta pantalla es un LCD genérico basado en el Hitachi HD44780, considerado un estándar \textit{de facto} para este tipo de dispositivos. Tiene una pequeña memoria para almacenar el estado (no hay que enviar continuamente la información), tiene los caracteres ASCII predefinidos y tiene capacidad para configurar hasta 8 caracteres especiales. + +\begin{center} + \begin{tabular}{|l|l|} + \hline Tipo & LCD retroiluminado \\ + \hline Filas & 4 \\ + \hline Columnas & 20 \\ + \hline Dimensión de celda & 5 x 8 \textit{pixels} \\ + \hline Caracteres especiales & 8 \\ + \hline + \end{tabular} +\end{center} + +\subsection{Codificador rotatorio EC11J} + +Este modelo de codificador contiene un botón giratorio y pulsable. La información nos viene dada por tres canales: uno para el pulsador y dos para la rotación. A medida que rotamos el botón, A y B oscilan produciendo una señal cuadrada que viene desfasada 90\textdegree. + +Los puntos de equilibro ---\textit{detent stability points}--- coinciden con los saltos del canal B, de forma que a la mitad del recorrido de un giro cambiará el canal A. Todo lo que tenemos que hacer entonces es detectar un cambio en A y comparar el valor de A y B: si son iguales, significa que se ha rotado en sentido antihorario; si son distintos, entendemos que se ha girado en sentido horario. + +\section{SBC Rasberry Pi B+} + +El \textit{Raspberry Pi} es un ordenador de placa única ---SBC (\textit{single board computer})---, más potente que un microcontrolador y con sistema operativo basado en Linux. Se alimenta por \textit{USB} y se puede controlar con teclado y ratón, o bien desde red mediante \textit{SSH}. + +El corazón de este computador es un \textit{SoC} (\textit{system on-chip}), que integra microprocesador, memoria y periféricos principales. El modelo escogido, \textit{B+}, posee numerosos pines de entrada y salida de propósito general (\textit{GPIO}), que utilizaremos para interactuar con la \textit{PCB} y para ser alimentado por ésta. + +\subsection{Especificaciones técnicas} + +\begin{center} + \begin{tabular}{|l|l|} + \hline Modelo & Raspberry Pi B+ v1.2 \\ + \hline SoC & Broadcom BCM2835 \\ + \hline Procesador & ARM 1176JZF-S @ 700 \textit{MHz} \\ + \hline Repertorio de instrucciones & ARMv6 (\textit{RISC} 32-\textit{bit}) \\ + \hline Memoria & 512 \textit{MB} @ 400 \textit{MHz} \\ + \hline Procesador gráfico & Broadcom VideoCore IV \\ + \hline Almacenamiento & \textit{MicroSD} 8 \textit{GB} \textit{class 10} \\ + \hline Salida de vídeo & \textit{HDMI} \\ + \hline Salida de audio & \textit{Jack} 3.5 \textit{mm}, \textit{HDMI} \\ + \hline Conectividad USB & 4 x \textit{USB 2.0} \\ + \hline Conectividad de red & \textit{Ethernet} 100 \textit{Mbit/s} \\ + \hline Periféricos & 28x\textit{GPIO}, \textit{UART}, \textit{I\textsuperscript{2}C}, \textit{SPI} \\ + \hline Alimentación & 5V \textit{Micro-USB} o \textit{GPIO} \\ + \hline Consumo máximo & 1.8 \textit{A} (9 \textit{W}) \\ + \hline Sistema operativo & Raspbian (Linux 3.8) \\ + \hline + \end{tabular} +\end{center} + +\subsection{Pines de E/S} + +Como hemos adelantado, la \textit{PCB} se conectará al \textit{Raspberry} a través de los conectores \textit{GPIO}. Todos ellos se utilizarán de forma genérica, excepto el receptor del mando a distancia, que se comunica con la interfaz \textit{RS-232} y debe conectarse al \textit{UART} mediante el pin dedicado a tal periférico. + +La asignación de pines es la que sigue: + +\begin{center} + \begin{tabular}{|l|l|} + \hline \multicolumn{2}{|c|}{\textbf{Registros de desplazamiento}} \\ + \hline S1 (teclado barroco) & GPIO 02 \\ + \hline S2 (teclado romántico) & GPIO 03 \\ + \hline S3 (registros) & GPIO 04 \\ + \hline S4 (\textit{pedalier}) & GPIO 17 \\ + \hline RCLK (almacenamiento) & GPIO 27 \\ + \hline SRCLK (desplazamiento) & GPIO 22 \\ + \hline \multicolumn{2}{|c|}{\textbf{Receptor de radio}} \\ + \hline O/P-AF (datos) & GPIO 15 (RDX) \\ + \hline \multicolumn{2}{|c|}{\textbf{Pantalla LCD}} \\ + \hline DB4 (línea 4 del bus) & GPIO 12 \\ + \hline DB5 (línea 5 del bus) & GPIO 07 \\ + \hline DB6 (línea 6 del bus) & GPIO 08 \\ + \hline DB7 (línea 7 del bus) & GPIO 25 \\ + \hline RS (selección de registro) & GPIO 20 \\ + \hline ES (habilitación de señal) & GPIO 16 \\ + \hline \multicolumn{2}{|c|}{\textbf{Codificador rotatorio}} \\ + \hline Canal A (rotación) & GPIO 18 \\ + \hline Canal B (rotación) & GPIO 24 \\ + \hline Pulsación & GPIO 23 \\ + \hline + \end{tabular} +\end{center} + +\subsection{Sistema operativo} + +A pesar de su reducido tamaño, \textit{Raspberry Pi} no es un microcontrolador, sino un microcomputador, con una cantidad notable de recursos \textit{hardware} y potencia de cálculo suficiente para albergar múltiples procesos funcionando concurrentemente. Esto hace necesario el uso de un sistema operativo. + +Podemos encontrar varios sistemas operativos compatibles con este computador, pero nosotros vamos a utilizar el sistema oficial, \textit{Raspbian}, una distribución basada en \textit{Debian}, que incorpora el núcleo \textit{GNU/Linux} para la plataforma \textit{ARMv6}. + +La introducción de un sistema operativo flexibiliza enormemente la gestión de los recursos hardware de un ordenador y garantiza la convivencia equitativa de todos los procesos. Por contra, esto significa que ninguna aplicación podrá utilizar la \textit{CPU} a tiempo completo, ni se garantiza tiempo-real. + +El \textit{BCM2835} posee un temporizador de 1 \textit{MHz}. Naturalmente, es inviable ofrecer una granularidad temporal tan fina al planificador; así, éste es llamado cada 10.000 \textit{ticks}, es decir, cada 10 \textit{ms}. Esto garantiza un uso adecuado de los recursos \textit{software} al tiempo que hace imposible realizar comunicaciones síncronas a alta velocidad mediante programación. + +Además, la versión utilizada del núcleo \textit{Linux} es apropiativa ---\textit{preemptive}---, lo que significa que una rutina en modo \textit{kernel} puede bloquearse para dar paso a un servicio de interrupción, incluso que una interrupción puede verse bloqueada por otra de mayor prioridad (interrupciones anidadas). + +En conclusión, el uso de un sistema operativo de este tipo, a pesar de ser de gran utilidad, no garantiza sincronismo ni que una espera solicitada sea tan exacta como se pide. \ No newline at end of file diff --git a/report/subdocs/capitulo4.tex b/report/subdocs/capitulo4.tex index 5cccc90..e218ccb 100644 --- a/report/subdocs/capitulo4.tex +++ b/report/subdocs/capitulo4.tex @@ -1,405 +1,4 @@ \chapter{Diseño del sistema.} \label{cap: capitulo_4} -Durante el presente capítulo se expondrán los procedimientos de diseño \textit{hardware} e implementación \textit{software} la PCB que controlará nuestro horno. - -En esta sección se analizaran las soluciones tomadas para cumplir los requisitos propuestos en el capítulo \ref{cap:capitulo_2}. - - -\section{Implementación \textit{Hardware}} - -A la hora de diseñar la parte \textit{hardware} hemos de tener en cuenta las distintas partes de las que constará nuestro sistema para su correcto funcionamiento. - -\begin{itemize} - \item Control y procesamiento: Hay que seleccionar la solución óptima en el control y -procesamiento de forma que tenga la capacidad de llevar a cabo toda la funcionalidad, -y que sea una solución robusta y del menor coste posible. - \item Sistemas de medida de temperatura: Se precisa buscar la manera de medir la temperatura de la manera más precisa posible y teniendo en cuenta los rangos de temperatura en los que trabaja el horno(0-300$^{\circ}C$). - \item Elección de los componentes: Se tomarán las decisiones para elegir la solución más adecuada entre las posibilidades planteadas anteriormente. - -\end{itemize} - - - -\subsection{Control y procesamiento} -El control y procesamiento es la parte más importante a nivel \textit{hardware}. Es por ello que debemos empezar por aquí. El resto de apartados dependerán de nuestra elección. - -Para este proyecto se precisa un dispositivo fácil de programar, lo más barato posible, compatible con distintos componentes externos y con un módulo de conversores A/D. - -Aunque la mejor opción hubiera sido el uso de un PIC, porque nos permite diseñar un sistema a la medida de nuestras necesidades. Debido al poco tiempo del que disponía, se opto por usar un Arduino UNO. -\begin{itemize} - \item Open Source: Arduino es una plataforma de código y hardware abierto, es decir, puedes acceder a todo aspecto del funcionamiento circuital y algorítmico de las placas, y mucho mejor que eso, te dan todos los archivos Eagle, diagramas y componentes para que tu mismo crees tu versión de Arduino. - \item Fácil de programar: Arduino te ofrece un entorno de desarrollo integrado (IDE) con funciones preestablecidas que reducen la lógica a lectura de entradas, control de tiempos y salidas de una manera semántica e intuitiva. - \item Documentación y tutoriales en exceso: Internet esta plagado literalmente de documentación sobre esta plataforma. - \item Librerías: Una de las ventajas mas grandes que tiene Arduino es que poseen librerías para prácticamente cualquier componente externo que se le quiera acoplar. - \item Precio: Las placas de Arduino tienen un precio de entre 21\$ y 71\$, dependiendo del modelo que elijamos. -\end{itemize} - - -\subsection{Sistema de medida de temperatura} -Para la obtención de la temperatura se ha optado por el uso de sensores PT100. Consiste en un alambre de -platino que a 0 °C tiene 100 ohms y que al aumentar la temperatura aumenta su resistencia eléctrica. El incremento de la resistencia no es lineal pero si creciente y característico del platino de tal forma que mediante tablas(figura \ref{fig:tablaPT100}) es posible encontrar la temperatura exacta a la que corresponde. - -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=1.1]{capitulo4/tablaPT100} -\par\end{centering} -\caption{\label{fig:tablaPT100} Tabla de resistencias de una PT100.} -\smallskip -\end{figure} -Un Pt100 es un tipo particular de RTD (Dispositivo Termo Resistivo). Normálmente las Pt100 industriales se consiguen encapsuladas en la misma forma que las termocuplas, es decir dentro de un tubo de acero inoxidable ú otro material (vaina) , en un extremo está el elemento sensible (alambre de platino) y en el otro está el terminal eléctrico de los cables protejido dentro de una caja redonda de aluminio (cabezal). -Las Pt100 siendo lévemente más costosos y mecánicamente no tán rígidos como las termocuplas, las superan -especiálmente en aplicaciones de bajas temperaturas (-100 a 200 $^{\circ}C$). -Los Pt100 pueden fácilmente entregar precisiones de una décima de grado con la ventaja que la Pt100 no se descompone graduálmente entregando lecturas erroneas, si no que normálmente se abre, con lo cual el dispositivo medidor detecta inmediátamente la falla del sensor y da aviso. - -Existen 3 modos de conexión para las Pt100, cada uno de ellos requiere un instrumento lector distinto. -El objetivo es determinar exactamente la resistencia electrica R(t) del elemento sensor de platino sín que influya en la lectura la resistencia de los cables Rc. En nuestro caso usaremos una PT100 de 4 hilos. - -El método de 4 hilos es el más preciso de todos, los 4 cables pueden ser distintos (distinta resistencia) pero el instrumento lector es más costoso. - -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.6]{capitulo4/PT100_4hilos} -\par\end{centering} -\caption{\label{fig:PT100_4hilos} Conexión de una PT100 de 4 hilos.} -\smallskip -\end{figure} - -Por los cables 1 y 4 se hace circular una corriente I conocida a traves de R(t) provocando una diferencia de potencial V en los extremos de R(t). Los cables 2 y 4 están conectados a la entrada de un voltímetro de alta impedancia luego por estos cables no circula corriente y por lo tanto la caida de potencial en los cables Rc2 y Rc3 será cero (dV=Ic*Rc=0*Rc=0) y el voltímetro medirá exáctamente el voltaje V en los extremos del elemento R(t). Finalmente el instrumento obtiene R(t) al dividir V medido entre la corriente I conocida. - -La corriente I conocida se consigue mediante una fuente de corriente constante que se detellará en el apartado \ref{sec:BC} - -\subsection{Elección de componentes} - -En este apartado se seleccionarán los dispositivos que usaremos para el correcto funcionamiento de nuestra PCB y así conseguir cumplir los requisitos propuestos. - -Se intentaran buscar los dispositivos más baratos, de menor consumo posible y a ser posible con montaje superficial \acrshort{SMD} (\acrlong{SMD}). - -Los distintos dispositivos y componentes seleccionados son los siguientes: - -\begin{itemize} - \item Arduino UNO - \item Display \glsname{LCD} 4x20A - \item Regulador de voltaje LM7805 - \item Transistor PNP BC857 - \item Rotary Encoder - \item Optotriac MOC3061M - \item Triac BT139 -\end{itemize} - -\subsubsection{Arduinio UNO} -Se optó por usar un Arduino UNO \cite{Arduino}, ya que cubría todas nuestras necesidades y era uno de los modelos más baratos. - -Arduino es una placa con un microcontrolador de la marca Atmel, el ATMega328 \cite{ATMega}, y con toda la circuitería de soporte, que incluye, reguladores de tensión, un puerto USB (En los últimos modelos, aunque el original utilizaba un puerto serie) conectado a un módulo adaptador USB-Serie que permite programar el microcontrolador desde cualquier PC de manera cómoda y también hacer pruebas de comunicación con el propio chip. -Un arduino dispone de 14 pines que pueden configurarse como entrada o salida y a los que puede conectarse cualquier dispositivo que sea capaz de transmitir o recibir señales digitales de 0 y 5 V. -También dispone de entradas y salidas analógicas. Mediante las entradas analógicas podemos obtener datos de sensores en forma de variaciones continuas de un voltaje. Las salidas analógicas suelen utilizarse para enviar señales de control en forma de señales \acrshort{PWM}. - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.2]{capitulo4/ArduinoUno} -\par\end{centering} -\caption{\label{fig:ArduinoUno} Vista frontal de Arduino UNO .} -\end{figure} -\smallskip - -A continuación expondremos el mapeado de pines del Arduino UNO, disponible en la página web de Arduino \cite{Arduino}. - - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=1]{capitulo4/ARDUINOPINMAP} -\par\end{centering} -\caption{\label{fig:ARDUINOPINMAP} Arduino UNO pin mapping.} -\end{figure} -\smallskip - - - -\subsubsection{Display \glsname{LCD} 4x20A} - -Este pantalla \glsname{LCD} funciona basándose en el estándar de display 4x20 caracteres, y será configurado, su funcionamiento, por software. El único hardware adicional de adaptación que requiere es únicamente un potenciómetro que establezca el nivel de contraste de la pantalla. - -\hfill -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.5]{capitulo4/LCD} -\par\end{centering} -\caption{\label{fig:LCD} Display LCD 4x20 204A.} -\end{figure} -\hfill - -Las principales características de nuestra \glsname{LCD} \cite{LCD} son: - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.9]{capitulo4/caracteristicas_lcd} -\par\end{centering} -\caption{\label{fig:caracteristicas_lcd} Principales características del Display LCD 4x20 204A.} -\end{figure} -\smallskip - -Para el correcto funcionamiento del BackLight se tuvo que introduciendo una resistencia en la parte trasera de nuestra \glsname{LCD}. Para el cálculo de esta resistencia se tienen en cuenta los siguientes datos: alimentamos nuestra \glsname{LCD} con 5V, el Forward Voltage es de 3.2V y la corriente máxima es de 30mA. Por lo que nuestra resistencia se calcula de la siguiente manera: - -\begin{equation} -R\geq(\frac{(5-3.2)V}{30mA})=60 \Omega -\end{equation} - -Finalmente cogimos una resistencia de 100 \Omega para nuestra \glsname{LCD}. - - -\subsubsection{Regulador de voltaje LM7805} -El regulador de voltaje LM7805 \cite{7805} entrega 5V de tensión continua. La tensión de alimentación debe ser un poco más de 2 voltios superior a la tensión que entrega el regulador y menor a 35V. Usualmente, el modelo estándar soporta corrientes de hasta 1 A aunque hay diversos modelos en el mercado con corrientes que van desde los 0,1A. El dispositivo posee como protección un limitador de corriente por cortocircuito, y además, otro limitador por temperatura que puede reducir el nivel de corriente. -El regulador de voltaje LM7805 lo usaremos para alimentar el Arduino con 5V. - -Ya que lo usamos para regular tensión proveniente de una una fuente de alimentación(en nuestro caso con un adaptador AC de una PSP), tendremos que hacer un filtrado para eliminar cualquier fluctuación de voltaje que pueda ocurrir. Para dicho filtrado colocaremos un condensador a la salida del regulador y dos a la entrada. Tal y como se muestra en la siguiente imagen: - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.7]{capitulo4/regulador} -\par\end{centering} -\caption{\label{fig:regulador} Configuración del regulador de voltaje 7805.} -\end{figure} -\hfill - -Los condensadores C2 y C3 seran no polarizados. Mientras que el condensador C1 será polarizado de al menos 16V para soportar los 12V. - -Con esta configuración ya podemos alimentar nuestro Arduino UNO con 5V. - -\subsubsection{Transistor PNP BC857} -\label{sec:BC} -A la hora de diseñar una fuente de corriente constante necesité de dos transistores \glsname{PNP}. Se buscó un transistor pequeño y barato. Los transistores PNP BC857 son la versión \acrshort{SMD} (\acrlong{SMD}) de los BC557 y su precio está entre 0.03\textup{\euro} y 0.1\textup{\euro} lal unidad según la cantidad que compremos. - -\hfill -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.2]{capitulo4/BC857} -\par\end{centering} -\caption{\label{fig:BC857} Transistor \glsname{PNP} BC857.} -\end{figure} -\hfill - -Las principales características de este transistor \cite{BC857} son: - -\hfill -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.9]{capitulo4/tabla_BC} -\par\end{centering} -\caption{\label{tabla_BC} Características del BC857\cite{BC857}.} -\end{figure} -\hfill - - -La curva de ganancia de DC es la siguiente, figura \ref{fig:curva_BC}. - -\hfill -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.7]{capitulo4/curva_BC} -\par\end{centering} -\caption{\label{fig:curva_BC} Curva de ganancia de corriente en DC.} -\end{figure} -\hfill - - -Este transistor lo usaremos para crear una fuente de corriente constante. El esquema del circuito es el siguiente: - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.7]{capitulo4/fuente} -\par\end{centering} -\caption{\label{fuente} Esquema de una fuente de corriente constante.} -\end{figure} -\smallskip - - - -\subsubsection{Rotary Encoder} -Los Rotary Encoder son dispositivos para medir ángulos. Se usan para medir de manera precisa la rotación de motores o para crear un controlador tipo rueda(knobs) que pueden girar indefinidamente. Algunos están equipados con un pulsador. Los Rotary cuentan con tres patillas: dos de salida y una que va a masa. - - -\hfill -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.3]{capitulo4/rotary} -\par\end{centering} -\caption{\label{fig:rotary} Rotary Encoder.} -\end{figure} -\smallskip - - -El funcionamiento del Rotary Encoder se basa en que tenemos dos señales de salida cuadradas(A y B) que están desfasadas 90º. El número de pasos por vuelta variará según el modelo, en nuestro caso son 24. El siguiente diagrama muestra como las fases de A y B se relacionan según giremos el Rotary Encoder en el sentido de las agujas del reloj o en sentido contrario. - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.8]{capitulo4/rotary_encoder_phase} -\par\end{centering} -\caption{\label{fig:rotary_encoder_phase} Relación de las señales A y B según el sentido del giro.} -\end{figure} -\smallskip - -Cada vez que el pulso de la señal A va de positivo a cero, leemos el valor del pulso B. Podemos observar que cuando el Rotary Encoder se gira en el sentido de las agujas del reloj, B es siempre positivo. Mientras que si lo giramos en sentido contrario, B siempre es cero. - -En nuestro proyecto hemos elegido uno tipo knob sin pulsador. Su conexión es muy simple, unicamente hay que conectar la patilla central a tierra y las otras dos a los pines 2 y 3 del Arduino, ya que son las habilitadas para interrupciones externas. -La función del Rotary Encoder será la de permitirnos movernos por el menú y también poder establecer la temperatura de consigna que queramos. - - -\subsubsection{Optotriac MOC3061M} -Los triacs acoplados ópticamente combinan un diodo emisor de luz (\acrshort{led}) con un triac foto-detector (foto-triac) dentro de un mismo encapsulado con un esquema que es mostrado en la figura \ref{fig:optotriacs}. Al no existir conexión eléctrica entre la entrada y la salida, el acoplo es unidireccional (\acrshort{led} al foto-TRIAC) y permite un aislamiento eléctrico entre ambos dispositivos de hasta 7500 V (typ). Además, algunos foto-TRIAC incluyen un circuito de detección de paso por cero que permite sincronizar señales de la red eléctrica con señales de control del \acrshort{led} para ajustar el ángulo de conducción. - -\hfill -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.8]{capitulo4/optotriacs} -\par\end{centering} -\caption{\label{fig:optotriacs} Esquema de un Optotriac.} -\end{figure} -\hfill - -A continuación podemos ver las diferentes características de cada uno de los componentes del MOC3061M \cite{moc}. - -\hfill -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=1]{capitulo4/moc} -\par\end{centering} -\caption{\label{fig:moc} Características individuales de los componentes de un MOC306XM.} -\end{figure} -\hfill - -En nuestro caso usamos el optotriac para aislar la etapa de control(circuitería de baja tensión) con la de potencia(la red y la carga) y de esta forma, evitar posibles daños en el Arduino UNO. Utilizamos un Optotriac MOC3061M, un optotriac con conmutación en el paso por cero y aislamiento entre entrada y salida. - -A continuación podemos ver las diferentes características de cada uno de los componentes - -A continuación, la figura \ref{fig:circuito_potencia} muestra la configuración usada en la etapa de potencia que controlara el encendido y apagado de nuestro horno. Donde la resistencia de 39 ohmios y el condensador de 0.1 microfaradios se usan para desairar el triac y a menudo, pero no siempre, necesario dependiendo del triac y de la carga. - - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=1]{capitulo4/circuito_potencia} -\par\end{centering} -\caption{\label{fig:circuito_potencia} Esquema de un Optotriac.} -\end{figure} -\smallskip - - - - - -\subsubsection{Triac BT139} -El triac es un semiconductor, de la familia de los transistores. La diferencia con el tiristor convencional es que éste es unidireccional, es decir, funciona con corriente alterna en el sentido de polarización con medio semiciclo, y el triac es bidireccional, funciona en los semiciclos positivos y negativos. Cuando el triac conduce, hay una trayectoria de flujo de la polaridad del voltaje externo aplicado. Cuando el voltaje es más positivo en T2, la corriente fluye de T2 a T1 en caso contrario fluye de T1 a T2. En ambos casos el triac se comporta como un interruptor cerrado. Cuando el triac deja de conducir no puede fluir corriente por los terminales sin importar la polaridad del voltaje externo aplicado, por tanto actua como un interruptor abierto. - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.8]{capitulo4/triac} -\par\end{centering} -\caption{\label{fig:triac} Esquema de un triac \cite{BT139}.} -\end{figure} -\smallskip - - -Las características del triac BT139 las podemos encontrar en su datasheet \cite{BT139}. Las más importantes son: - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.7]{capitulo4/resistencia_termica} -\par\end{centering} -\caption{\label{fig:resistencia_termica} Resistencia termica.} -\end{figure} -\smallskip - - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.7]{capitulo4/caracteristicas_estaticas} -\par\end{centering} -\caption{\label{fig:caracteristicas_estaticas} Caracteristicas estaticas.} -\end{figure} -\smallskip - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.7]{capitulo4/caracteristicas_dinamicas} -\par\end{centering} -\caption{\label{fig:caracteristicas_dinamicas} Caracteristicas dinamicas.} -\end{figure} -\smallskip - - - - - - -\subsection{Esquemático Altium} -En este apartado expondremos el diseño esquemático en el que juntaremos los distintos módulos ya interconectados. Se divide en dos: uno en el que se muestra los periféricos de control(LCD, pulsador, rotary y leds de control) y otro en el que se muestra la circuitería de control. - -\subsection{Esquemático Altium} - -\includepdf[pages=1,link=true,landscape,linkname=schematic,addtotoc={1,section,1,Esquemático Altium,letter}]{capitulo4/esquematico1} - -\subsection{Esquemático Altium} -\includepdf[pages=1,link=true,landscape,linkname=schematic,addtotoc={1,section,1,Esquemático Altium,letter}]{capitulo4/esquematico2} - - - -\section{Implementación \textit{Firmware}} -\label{sec:ImpFirm} - - -En este apartado se expondrán los distintos programas usados a lo largo del poryecto y su uso. - -Principalmente se han usado tres programas: - - - -\begin{enumerate} - \item ALTIUM \textit{Designer} versión 14.1: Con este \textit{software}, a partir del circuito esquemático se obtendrá la correspondencia en circuito \acrshort{PCB}. - \item Arduino IDE versión 1.0.6: Este \textit{software} lo podemos encontrar en la página de arduino. Es un \textit{software} libre y muy sencillo de usar. Con él programaremos la rutina principal para el control de nuestro horno. - \item MATLAB R2013a: Gracias a su gran procesamiento de datos, podremos representar los datos obtenidos de la temperatura dentro del horno y representarlos para poder obtener conclusiones sobre el comportamiento de nuestro horno. -\end{enumerate} - -\subsection{ALTIUM \textit{Designer}} -Altium Designer es una solución integrada de hardware y software para cubrir todas las etapas de un desarrollo que van desde después de la idea hasta el prototipo final. - -Altium Designer es un recurso para el diseño electrónico en todas sus fases y para todas las disciplinas, ya sean esquemas, simulación, diseño de circuitos impresos, imple¬mentación de FPGA o desarrollo de código para microprocesadores. - - Detrás de lo que encierra el nombre Altium Designer existe una plataforma de integración de software que reúne todas las herramientas necesarias para crear un entorno completo para el desarrollo de productos electrónicos, en una sola aplicación. Altium Designer incluye herramientas para todas las tareas de diseño: desde la captura de diseño esquemático y HDL, simulación de circuitos, análisis de integridad de señales, diseño de \acrshort{PCB}, hasta el diseño de sistemas embebidos. Características de Altium Designer: - -\begin{itemize} - \item Diseño de \acrshort{PCB}: -Altium Designer ha unificado el diseño de la plataforma física con el diseño de tarjeta de circuito impreso, con soporte para lógica programable. Esto proporciona un sistema de desarrollo totalmente unificado que puede desplegarse a través de todos los elementos del proceso de diseño de productos electrónicos. - \item Gestión de librerías: -Elegir un componente obsoleto o fuera de stock de puede dar lugar a la producción de largos retrasos y sobrecostos. Altium Designer ofrece una amplia gama de herramientas de gestión de datos y recursos de información que le permiten mantener el control sobre el uso de partes. - \item Diseño para fabricación: -Altium Designer ayuda a reducir la brecha entre el diseño y la fabricación, ademas le permite administrar de forma activa la generación y verificación de todos los datos de fabricación, ahorrando tiempo y minimizando los costosos, errores durante el flujo de diseño. - \item Dispositivos programables: -Altium Designer es la única herramienta que permite explotar plenamente el potencial que ofrecen hoy los dispositivos programables, al unificar el diseño de \acrshort{FPGA}s, el desarrollo de software y el diseño de \acrshort{PCB}s, en una sola plataforma. - \item Diseño Unificado de \acrshort{FPGA}/\acrshort{PCB}: -Los dispositivos programables son cada vez más usados en desarrollo electrónico. Este tipo de dispositivos abren nuevas posibilidades de diseño y aportan beneficios significativos para el proceso de diseño, lo que permite que la complejidad funcional se traslade de dispositivos discretos cableados al ámbito de dispositivos programables. - \item Gestión de todo el proceso de desarrollo: -Altium Designer unifica todo el proceso de diseño y permite gestionar todos los aspectos del desarrollo dentro de un único entorno de diseño, y ofrece una infraestructura de administración de proyectos y documentos unificada que soporta la convergencia de diseños de tradicionalmente disciplinas separadas. - -\end{itemize} - -\subsection{Arduino IDE} - -Para programar la placa es necesario descargarse de la página web de Arduino el entorno de desarrollo (IDE). Se dispone de versiones para Windows y para MAC, así como las fuentes para compilarlas en LINUX. -Estructura básica de un programa - -La estructura básica de programación de Arduino es bastante simple y divide la ejecución en dos partes: setup y loop. Setup() constituye la preparación del programa y loop() es la ejecución. En la función Setup() se incluye la declaración de variables y se trata de la primera función que se ejecuta en el programa. Esta función se ejecuta una única vez y es empleada para configurar el pinMode (p. ej. si un determinado pin digital es de entrada o salida) e inicializar la comunicación serie. La función loop() incluye el código a ser ejecutado continuamente (leyendo las entradas de la placa, salidas, etc.). - -\subsection{MATLAB} -MATLAB (abreviatura de MATrix LABoratory, "laboratorio de matrices") es una herramienta de software matemático que ofrece un entorno de desarrollo integrado (IDE) con un lenguaje de programación propio (lenguaje M) y servicio de especie. Está disponible para las plataformas Unix, Windows, Mac OS X y GNU/Linux . - -Entre sus prestaciones básicas se hallan: la manipulación de matrices, la representación de datos y funciones, la implementación de algoritmos, la creación de interfaces de usuario (GUI) y la comunicación con programas en otros lenguajes y con otros dispositivos hardware. El paquete MATLAB dispone de dos herramientas adicionales que expanden sus prestaciones, a saber, Simulink (plataforma de simulación multidominio) y GUIDE (editor de interfaces de usuario - GUI). Además, se pueden ampliar las capacidades de MATLAB con las cajas de herramientas (toolboxes); y las de Simulink con los paquetes de bloques (blocksets). +\section{Windows} \ No newline at end of file diff --git a/report/subdocs/capitulo5.tex b/report/subdocs/capitulo5.tex index 8e32b11..8d5d7ab 100644 --- a/report/subdocs/capitulo5.tex +++ b/report/subdocs/capitulo5.tex @@ -1,359 +1,2 @@ \chapter{Implementación del sistema.} \label{cap: capitulo_5} - - -En la fase de implementación es donde se sintetiza todo el análisis realizado anteriormente, -y se procede a formalizar el producto resultante. Como solución \textit{hardware} se plantea el -diseño del circuito en placa impresa (\acrshort{PCB}), llevándose al proceso de -fabricación y soldado de componentes. Por otro lado, en el aspecto \textit{software} se explicará el -método de programación seguido para la rutina de control, y se perfilará el firmware final. - -\section{Implementación \textit{Hardware}} -\label{sec:ImpHard} -Tal y como se introdujo en el la sección \ref{sec:ImpFirm}, el software ALTIUM Designer -versión 14.1 ha sido empleado para el diseño del circuito, tanto para el apartado esquemático -como para el diseño de la placa PCB. Este segundo punto consiste en posicionar los elementos -del circuito de manera que queden interconectados entre ellos siguiendo el patrón designado -en el esquemático. Esta interconexión consiste en pistas grabadas sobre una placa de cobre, -que será las encargadas de transportar corriente y permitir al circuito su funcionamiento. - -\subsection{Diseño y fabricación de \acrshort{PCB}} -\label{sec:Diseño} - -Partiendo del circuito esquemático de los diseños se genera el \textit{layout} que constituye, junto -con los componentes, el circuito electrónico del dispositivo. Para ello, ALTIUM Designer -ofrece multitud de funcionalidades que facilitan el trabajo y permiten alcanzar magníficos -resultados. Demasiadas para ser expuestas en estas líneas, aunque podemos resaltar la comodidad -para gestionar distintos proyectos y librerías, la creación de componentes en todos -sus niveles, y asistencia continua durante el diseño del layout que posibilitan un diseño de -calidad óptimo y minimizan los posibles errores -Realizado el conexionado lógico entre los distintos terminales (definido en el esquemático), -se procede a plantear la disposición física de los elementos, incluidas las pistas que interconectan -dichos terminales. Para realizar el \textit{layout}, no solo se necesita conocer la información -de los elementos a nivel funcional y eléctrico, sino también las especificaciones mecánicas del -encapsulado y del sustrato que soporta los componentes. - -La PCB la fabricaremos mediante el uso de una LPKF ProMat S62. Con la cual obtendremos una pracisión de 0.01 mils. - -\hfill -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.6]{capitulo5/maquina} -\par\end{centering} -\caption{\label{fig:maquina} LPKF ProMat S62.} -\end{figure} -\smallskip - - -\subsection{Consideraciones previas} -Las siguientes consideraciones se tuvieron muy en cuenta ya que tienen un gran impacto en el resultado final de la \acrshort{PCB}. Ignorarlas haría que el funcionamiento no fuera el deseado. - -\begin{itemize} - \item \textbf{Anchura de las pistas y distancia entre las mismas:}Para el dimensionamiento de las pistas existen un gran número de parámetros que influyen en su tamaño final. En este proyecto se han tenido en cuenta la corriente que circula por la pista, el incremento de temperatura que experimentará ésta durante su funcionamiento, la distancia a la que está la pista más próxima, las propiedades del material sobre el que se imprime la \acrshort{PCB}, sus dimensiones y por último se añadió un margen de seguridad. Con el fin de obtener unos cálculos más precisos, se hizo uso del documento de Excel creado por Jack Olson \cite{Jack}, un diseñador de \acrshort{PCB}s que lleva mas de veinte años trabajando en este campo y que ha obtenido un certificado avanzado del IPC en Diseño de Interconexiones(CID). - -El dimensionamiento final fue 20 mils para las pistas de conexión entre los pins del Arduino UNO y los distintos devices, 50 mils para las pistas que van a 5V y entre 250 y 322 mils para las pistas de potencia. - - \item \textbf{Espaciado de componentes.}Debido a que la soldadura se realiza de forma manual, -con un soldador de estaño, es necesario tener acceso a patillas y pads de contacto, -junto con sus superficies de soldado. Cada montaje sugiere un espaciado concreto, pero -distancias de unos pocos milímetros suelen ser válidas. - - \item \textbf{Dimensiones de las huellas.}Con el componente colocado sobre la huella, es deseable -que se pueda tener acceso a dicha huella, facilitando así las labores de soldado. Para -estas dimensiones suele ser suficiente con unas décimas de milímetro. Un dimensionado -de huellas pensado para soldado con pasta en horno de \textit{reflow} o similar, puede complicar -notablemente la tarea. - - \item \textbf{Alineamiento de doble cara y dimensiones de vías y taladros.}Las placas -de doble cara llevan asociado el uso de vías y pads para componentes de agujero -pasante, y constituyen orificios que conectan el \textit{layout} de ambas capas. Por tanto, -cualquier elemento del diseño de una capa que constituya un orificio deberá estar -perfectamente alineado con la otra capa. Puesto que el alineamiento se realiza de forma -manual, las dimensiones vías y orificios están limitadas por dos cuestiones: la destreza -visual (incluso con el posible uso de microscopio o aparatos de aumento ópticos) y de -alineamiento manual, y la exactitud y diámetro de las herramientas de taladrado. Con -las herramientas disponibles, se pueden conseguir orificios de hasta 0.8 mm con un -alineamiento adecuado. - - \item \textbf{Metalización de vías y localización.}Otra de las restricciones de las vías (además -de sus dimensiones mínimas) se trata de la carencia de herramientas adecuadas para -la metalización. Mediante este proceso, estas vías son simplemente taladros, que -no ofrecen conexión eléctrica alguna entre ambas capas. Esa conexión se logra introduciendo -un pequeño cable, o elemento conductor, que se suelda por ambas caras, y -posteriormente se elimina el excedente. En cualquier caso, siempre supone un relieve -en el orificio de dicha vía, frente a las vías planas de fabricación industrial. Esto implica -que las vías no pueden localizarse debajo de componentes \acrshort{SMD} cuyo encapsulado -no disponga de espacio con la superficie de la placa. Así mismo, los componentes de -agujero pasante solo estarán conectados eléctricamente con la cara opuesta al componente, -ya que habitualmente no se podrá soldar la patilla por ambas caras del pad. -Este detalle ha de tenerse muy en cuenta para evitar errores indeseados en el diseño. -\end{itemize} - -\subsection{Modelo en 2D y 3D} -En esta sección se mostrará el resultado obtenido, tanto en 2D como en 3D. En la figura \ref{fig:noNet_net} podemos observar en la imagen de la izquierda la disposición de los distintos componentes que contendrá nuestra \acrshort{PCB} sin incluir las \textit{nets} que conectarán unos con otros. La \textit{rats net} nos indicará qué va conectado con que. En la imagen de la derecha, se muestra el resultado final del ruteo. - - - - -El último paso es colocar los planos de masa. Para ello hacemos uso de la herramienta \textit{Polygon pour} de Altium. Hay que tener presente que hay que colocar un plano de masa tanto en la capa \textit{Bottom} como en la \textit{Top}. - - -Una vez terminado la colocación de componentes, ruteo y planos de masa, podemos ver como quedará nuestro producto en 3D. A continuación, se presentarán imágenes del modelo en 3D desde distintas perspectivas. - -Una vez terminados los modelos 2D y 3D procederemos a la fabricación. Como ya dijimos en la sección \ref{sec:Diseño}, usaremos una LPKF ProMat S62. Podemos dividir el proceso en dos fases: - -\begin{enumerate} -\item Preparación archivos GERBER y NCdrills: Mediante el programa CircuitCAM preparamos el archivo de extensión .LMD que será el que contenga toda la información de por dónde debe trazar la fresadora las pistas y realizar los agujeros. -\item Procesado del archivo .LMD: Mediante el software BoardMaster calibramos el plotter PROTOMAT S62, preparamos la placa FR4, e importamos el archivo .LMD, desde el cual se fabricará finalmente la PCB. -\end{enumerate} - -\subsection{Resultado final} -Una vez impresa la PCB y colocados todos los componentes, el resultado es el siguiente: - -IMAGENES DE LA PCB FINAL POR LA PARTE DE ARRIBA Y ABAJO - -Ya solo falta ver donde la colocaremos en el horno. De las distintas posibilidades que había se opta por colocarla en un lateral. Para ello se perfora el horno para que, una vez colocada, solo se vean el \glsname{LCD}, el rotary, el pulsador y los leds. El resultado se puede ver en la figura \ref{fig:corte}. - - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.08]{capitulo5/corte} -\par\end{centering} -\caption{\label{fig:corte} NO SE QUÉ PONER.} -\end{figure} -\smallskip - -Finalmente, colocamos la \acrshort{PCB}. - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.1]{capitulo5/fin} -\par\end{centering} -\caption{\label{fig:fin} NO SE QUÉ PONER.} -\end{figure} -\smallskip - -\section{Implementacion \textit{Software}} - -En los siguientes apartados se detallarán las distintas funciones de las que consta el código fuente. - -\subsection{Configuración del \glsname{LCD}} -La configuración del \glsname{LCD} es bastante simple. Lo único que necesitamos son las librerias \glsname{SPI}.h y LiquidCrystal.h. -La librería \glsname{SPI}.h la usamos para la conexión serie entre Arduino UNO y nuestro \glsname{LCD}. Siendo el Arduino UNO el maestro y el \glsname{LCD} el esclavo. Con esta librería controlamos las líneas \glsname{MISO}, \glsname{MOSI} y \glsname{SCK}. Estas líneas nos permitirán mandar datos entre el Arduino UNO y el \glsname{LCD}. -La librería LiquidCrystal.h nos permite controlar el \glsname{LCD} desde el Arduino UNO. Incluye una gran variedad de funciones entre las que destacaremos: - -\begin{itemize} -\item \textbf{begin(columnas,filas).} Inicia la pantalla del \glsname{LCD} y especifica las dimensiones. -\item \textbf{setCursor(columna,fila).} Fija el cursor en una posición determinada. -\item \textbf{clear().} Limpia el \glsname{LCD} y sitúa el cursor en la esquina superior izquierda. -\end{itemize} - -\subsection{Rotary encoder} -NI IDEA DE LO QUE HACE LA RUTINA - - -\subsection{Lectura de temperatura} -Para la lectura de la temperatura haremos uso de la función analogRead. AnalogRead lee la tensión que tenemos en un pin y la divide en 1024 niveles, del modo que 0 Voltios equivaldría al nivel, o step, 0, y 5 Voltios a 1023, por lo que podemos decir que: - -\begin{equation} -V=\left(\frac{analogRead(PT100)*5}{1024}\right) V -\end{equation} - -Sabiendo el valor de la corriente que circula por la PT100, podemos calcular el valor de la resistencia mediante: - -\begin{equation} -R=\left(\frac{V}{I_{PT100}}\right) \Omega -\end{equation} - -Una vez sabemos el valor de la resistencia podemos calcular el valor de la temperatura. Partiendo que el valor de la resistencia es, - -\begin{equation} -R(t)=R(0)[1+A*t+B*t^{2}] \Omega -\end{equation} - -podemos despejar t en función de los parámetros A, B, R(t) y R(0). Donde: -\newline -\newline - R_0 = 100 \Omega -\newline -A=3,908 * 10^{-3} -\newline -B=-5,775 * 10^{-7} - -Despejando queda: - -\begin{equation} -T=\left(\frac{-100*A*\sqrt{100^2*A^2-4*100*B*(100-R(t))}}{2*100*B}\right) ^{\circ}C -\end{equation} - - -Una vez implementado esto, tras varias pruebas, observamos que obtenemos mucho ruido en nuestros resultados, tal y como muestra la figura \ref{fig:prueba1}. - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.55]{capitulo5/prueba1} -\par\end{centering} -\caption{\label{fig:prueba1} Datos obtenidos en la primera lectura de temperatura.} -\end{figure} -\smallskip - -Ya que estas medidas no son fiables, aplico un filtro de media para suavizar el ruido. Pero no es suficiente, los datos siguen teniendo mucho ruido. - -Es por esto que implemento un filtro \glsname{FIR} paso bajo para intentar eliminar el ruido. Para el cálculo del orden y coeficientes del filtro \glsname{FIR} hago uso de la aplicación de Matlab \textit{Filter Design & Analysis Tool}. -Los datos que necesitamos para este filtro son el tiempo de muestreo y entre que frecuencias queremos nuestra banda de paso bajo. Por defecto, el orden que nos da Matlab es el optimo para el filtro. Pero es demasiado grande y al tener que realizar tantas operaciones el Arduino, se queda sin memoria. Es por esto que seleccionamos un orden acorde a nuestra memoria. La frecuencia de muestreo la obtenemos calculando cada cuanto tiempo tomamos una muestra de temperatura. Para ello nos ayudamos del osciloscopio para tener una exactitud mayor. Obtenemos que cada 9ms(337micro segundos) tenemos una muestra, por lo que la frecuencia de muestreo será de 111Hz. - -AQUI SIGO CON LOS DATOS OBTENIDOS DE MATLAB, ESPERAR A TENER EL HORNO MONTADO Y VER HASTA CUANTO PUEDO LLEGAR DE ORDEN DEL FILTRO. - -Una vez implementado el filtro \glsname{FIR} podemos observar como mejora nuestras lecturas de temperatura y no tenemos tanto ruido como al principio. - - - - - - -\subsection{Lectura del pulsador} -La lectura del pulsador se hace comprobando el estado del boton ha cambiado. Para evitar el efecto rebote introducimos un tiempo de debounce para que no nos lea dos pulsaciones al pulsar una sola vez el pulsador. - -\section{Implementación del algoritmo \glsname{PID}} -En este apartado se explicará los pasos seguidos para el ajuste del algoritmo \glsname{PID}. Empezaremos estudiando cada uno de los distintos métodos de ajuste de parámetros \glsname{PID}. -Los métodos que estudiaremos en los siguientes apartados son: - -\begin{itemize} -\item Sintonía Zieger-Nichols. \cite{Ibrahim} -\item Método del relé. \cite{wilson} -\item Ajuste manual del sistema.\cite{Skogestad} -\end{itemize} - -\subsection{Sintonía Zieger-Nichols} -Busca valores para los parámetros \glsname{PID} de la planta basado en la respuesta del sistema en -lazo abierto o cerrado. Para poder emplear el método ZN en lazo abierto es necesario que la -respuesta del sistema ante un escalón de potencia sea de tipo S, figura \ref{fig:ZN1}: - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.7]{capitulo5/ZN1} -\par\end{centering} -\caption{\label{fig:ZN1} Lazo abierto con respuesta tipo S\cite{Ibrahim}.} -\end{figure} -\smallskip - -Los parámetros \glsname{PID} se obtienen empleando la siguiente tabla: - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.7]{capitulo5/ZN2} -\par\end{centering} -\caption{\label{fig:ZN2} Parámetros \glsname{PID} para Zieger-Nichols\cite{Ibrahim}.} -\end{figure} -\smallskip - -Para la sintonización en lazo cerrado, se realiza el siguiente procedimiento manual: - -\begin{enumerate} -\item Se activa únicamente el control proporcional, y se ajusta la respuesta a un determinado \textit{set point}. -\item Se modifica el valor de $K_{p}$ hasta conseguir ver una oscilación estable en la salida. Este -valor de ganancia será la ganancia crítica, $K_{u}$. -\item Se obtiene el período crítico $K_{p}$ de la señal oscilatoria, figura \ref{fig:ZN3}: - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.7]{capitulo5/ZN3} -\par\end{centering} -\caption{\label{fig:ZN3} Lazo cerrado con ganancia crítica\cite{Ibrahim}.} -\end{figure} -\smallskip - -\item Finalmente se ajustan los parámetros con la siguiente relación: - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.7]{capitulo5/ZN4} -\par\end{centering} -\caption{\label{fig:ZN4} Parámetros \glsname{PID} para ZN en lazo cerrado\cite{Ibrahim}.} -\end{figure} -\smallskip - -\end{enumerate} - -\subsection{Método del relé} -Es una variante del método ZN de lazo cerrado, y consiste en la incorporación de un -relé en la salida del bloque \glsname{PID} que realmente actúa como si fuese un bloque ON/OFF. Se -obtiene el período crítico $P_{u}$ y con él la ganancia crítica $K_{u}=\frac{4d}{\pi a}$, figura \ref{fig:rele1}. - -\smallskip -\begin{figure}[H]%here -\noindent \begin{centering} -\includegraphics[scale=0.7]{capitulo5/rele1} -\par\end{centering} -\caption{\label{fig:rele1} Sintonización con método del relé\cite{Wilson}.} -\end{figure} -\smallskip - - -\subsection{Ajuste manual} -Este método se emplea cuando los diferentes algoritmos de sintonización no terminan de -ajustarse correctamente, o para mejorar ciertas características como el sobredisparo, tiempo -de respuesta, etc... Requiere un conocimiento avanzado del comportamiento de la planta. El -procedimiento es el siguiente: - - -\begin{enumerate} -\item Se activa únicamente el control proporcional para un determinado set point. Se intenta -que el sobredisparo no sea demasiado alto y que la señal quede cercana a la consigna -seleccionada. -\item Se añade el control integral y se modifica su valor observando el cambio en las siguientes -características: - -\begin{itemize} -\item Sobredisparo. -\item Error en set point. -\item Tiempo de establecimiento. -\item Grado de oscilación. -\item Estabilidad en la potencia de salida. -\end{itemize} - -Cada modificación realizada en el parámetro integral $T_{I}$ se hace aumentando o disminuyendo -el valor al doble o mitad del valor anterior respectivamente. - -\item Si persisten oscilaciones de alta amplitud en el bloque PI se reajustan los parámetros -siguiendo la siguiente relación: $K'_{P}T'_{I}=fK_{P}T_{I}$ , con $f=0.1\frac{P_{0}}{T_{Io}}$, siendo P_{0} y T_{Io} el período de oscilación y la constante de tiempo integral anterior, respectivamente. -\item Para controlar oscilaciones de baja amplitud y mejorar la respuesta del sistema, se -agrega el bloque derivativo y se modifica el valor de $T_{D}$ observando los cambios para -las mismas características vistas en el bloque integral. Este parámetro es muy sensible -y puede conducir fácilmente a una inestabilidad en la potencia de salida, por lo que se -debe incluir únicamente en los casos en los que se aprecie una mejora significativa. -\end{enumerate} - -\subsection{Sintonización \glsname{PID} del horno} -Empezamos empleando el método de sintonía de Zieger-Nichols fijando un \textit{setpoint} de $T=50^{\circ}C$. Tras varias pruebas obtenemos que para $a=K_{P}=3$ la respuesta queda cercana al punto de consigna. - - -Podemos observar oscilaciones que presentan un periodo crítico de $P_{u}= 3800s$. Si aplicamos las reglas de sintonización de Zieger-Nichols para lazo cerrado: - -$$K_{u}=0.45K_{P}=1.35$$ -$$T_{I}=\frac{P_{u}}{1.2}=3166$$ -Por lo que finalmente los parámetros de sintonización son: - -$$a=K_{u}=1.35$$ -$$b=\frac{K_{u}T}{T_{I}}=0.0042$$ - - - - -$$K_{u}=0.6K_{P}=1.5$$ -$$T_{I}=\frac{P_{u}}{2}=1900$$ -$$T_{I}=\frac{P_{u}}{8}=475$$ - -Por lo que finalmente los parámetros de sintonización son: - -$$a=K_{u}=1.5$$ -$$b=\frac{K_{u}T}{T_{I}}=0.007$$ -$$c=\frac{K_{u}T_{D}}{T}=712.5$$ - From a5d2718f33035b4e674a1ad0aabe0877a412cf05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20Fern=C3=A1ndez=20Castro?= Date: Mon, 24 Aug 2015 11:54:50 +0200 Subject: [PATCH 04/55] =?UTF-8?q?Correcciones=20gramaticales=20en=20el=20c?= =?UTF-8?q?ap=C3=ADtulo=202.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- report/subdocs/capitulo2.tex | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/report/subdocs/capitulo2.tex b/report/subdocs/capitulo2.tex index 05bec52..c268963 100644 --- a/report/subdocs/capitulo2.tex +++ b/report/subdocs/capitulo2.tex @@ -13,7 +13,7 @@ \section{Requisitos \textit{hardware}} \item El sistema no podrá acceder a la mecánica interna del instrumento, ni modificarlo de ninguna forma. - \item No podrá apoyarse demasiado peso sobre el órgano, ni hacerse contraapoyo (hacia arriba). + \item No podrá apoyarse demasiado peso sobre el órgano, ni hacerse contra-apoyo (hacia arriba). \item El control principal, la instalación de partituras y la configuración se harán remotamente. @@ -39,13 +39,13 @@ \section{Requisitos \textit{software}} \item Facilitará la subida y gestión de partituras. En dicho gestor se mostrará la duración de cada pieza. - \item Los archivos a procesar son de formato MIDI estándar, sin perjuicio de que una partitura pueda estar adaptada espefícicamente al sistema. + \item Los archivos a procesar son de formato MIDI estándar, sin perjuicio de que una partitura pueda estar adaptada específicamente al sistema. \item Las piezas musicales se clasificarán en listas de reproducción. \item La interfaz de usuario permitirá asignar dichas listas a ciertos botones del mando arriba mencionado. - \item El mando tendrá capacidad para reproducir una serie de listas preprogramadas, así como pausar y detener la reproducción. + \item El mando tendrá capacidad para reproducir una serie de listas pre-programadas, así como pausar y detener la reproducción. \item El \textit{software} dará soporte al testeo de los accionadores de forma local. @@ -66,13 +66,13 @@ \section{Fases del proyecto} Tal como hemos introducido anteriormente, vamos a dividir este proyecto en cuatro fases, cada una de las cuales servirá para obtener los requisitos necesarios para continuar la siguiente. Vamos a trabajar de la siguiente forma: \begin{enumerate} - \item \textbf{FASE I \textemdash Análisis:} Vamos a estudiar todos los componentes a los que tenemos acceso, desde el órgano hasta la placa de circuito y el computador a utilizar, pasando por la especificación del formato MIDI. + \item \textbf{FASE I --- Análisis:} Vamos a estudiar todos los componentes a los que tenemos acceso, desde el órgano hasta la placa de circuito y el computador a utilizar, pasando por la especificación del formato MIDI. - \item \textbf{FASE II \textemdash Diseño:} En esta fase reunimos las especificaciones del sistema y los requisitos propuestos para definir el sistema que vamos a concebir, desde la interfaz al usuario hasta la interacción con el hardware. + \item \textbf{FASE II --- Diseño:} En esta fase reunimos las especificaciones del sistema y los requisitos propuestos para definir el sistema que vamos a concebir, desde la interfaz al usuario hasta la interacción con el hardware. - \item \textbf{FASE III \textemdash Implementación:} Es la etapa en la que se programa el \textit{software} a partir del diseño de la fase precedente, y prestaremos atención a los detalles de bajo nivel que se nos presentarán, desde llamadas al sistema y acceso a los periféricos hasta control de concurrencia. + \item \textbf{FASE III --- Implementación:} Es la etapa en la que se programa el \textit{software} a partir del diseño de la fase precedente, y prestaremos atención a los detalles de bajo nivel que se nos presentarán, desde llamadas al sistema y acceso a los periféricos hasta control de concurrencia. - \item \textbf{FASE IV \textemdash Verificación y validación:} Una vez terminada la fase de implementación, pondremos en funcionamiento el sistema para verificar que tanto el \textit{hardware} como el \textit{software} se integran correctamente y cumplen con los requisitos propuestos. + \item \textbf{FASE IV --- Verificación y validación:} Una vez terminada la fase de implementación, pondremos en funcionamiento el sistema para verificar que tanto el \textit{hardware} como el \textit{software} se integran correctamente y cumplen con los requisitos propuestos. \end{enumerate} From a64fe1e204ee988dfbe7efed1e5a9da0624a6149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20Fern=C3=A1ndez=20Castro?= Date: Mon, 24 Aug 2015 11:55:40 +0200 Subject: [PATCH 05/55] =?UTF-8?q?A=C3=B1adimos=20la=20secci=C3=B3n=20MIDI?= =?UTF-8?q?=20al=20cap=C3=ADtulo=203.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- report/pfc_amroldan.tex | 2 +- report/subdocs/capitulo3.tex | 132 ++++++++++++++++++++++++++++++++++- 2 files changed, 131 insertions(+), 3 deletions(-) diff --git a/report/pfc_amroldan.tex b/report/pfc_amroldan.tex index b5a08bc..c74c5ad 100644 --- a/report/pfc_amroldan.tex +++ b/report/pfc_amroldan.tex @@ -76,7 +76,7 @@ \usepackage{graphicx} \usepackage{subfig} - +\usepackage{wasysym} % Simbolos musicales \usepackage{rotating} \usepackage{listings} diff --git a/report/subdocs/capitulo3.tex b/report/subdocs/capitulo3.tex index c4763e1..8c60c2e 100644 --- a/report/subdocs/capitulo3.tex +++ b/report/subdocs/capitulo3.tex @@ -176,7 +176,7 @@ \subsection{Codificador rotatorio EC11J} Los puntos de equilibro ---\textit{detent stability points}--- coinciden con los saltos del canal B, de forma que a la mitad del recorrido de un giro cambiará el canal A. Todo lo que tenemos que hacer entonces es detectar un cambio en A y comparar el valor de A y B: si son iguales, significa que se ha rotado en sentido antihorario; si son distintos, entendemos que se ha girado en sentido horario. -\section{SBC Rasberry Pi B+} +\section{SBC Rasberry Pi} El \textit{Raspberry Pi} es un ordenador de placa única ---SBC (\textit{single board computer})---, más potente que un microcontrolador y con sistema operativo basado en Linux. Se alimenta por \textit{USB} y se puede controlar con teclado y ratón, o bien desde red mediante \textit{SSH}. @@ -249,4 +249,132 @@ \subsection{Sistema operativo} Además, la versión utilizada del núcleo \textit{Linux} es apropiativa ---\textit{preemptive}---, lo que significa que una rutina en modo \textit{kernel} puede bloquearse para dar paso a un servicio de interrupción, incluso que una interrupción puede verse bloqueada por otra de mayor prioridad (interrupciones anidadas). -En conclusión, el uso de un sistema operativo de este tipo, a pesar de ser de gran utilidad, no garantiza sincronismo ni que una espera solicitada sea tan exacta como se pide. \ No newline at end of file +En conclusión, el uso de un sistema operativo de este tipo, a pesar de ser de gran utilidad, no garantiza sincronismo ni que una espera solicitada sea tan exacta como se pide. + +\section{Formato de archivo MIDI} + +El estándar \textit{MIDI} es una interfaz que permite conectar instrumentos musicales electrónicos y computadoras. Comprende desde un protocolo electrónico hasta un formato de archivos, que se basa en una serie de eventos de control de parámetros musicales. + +Los datos de entrada a nuestro sistema consisten en archivos \textit{MIDI}, tal como se menciona en los requisitos. Este tipo de ficheros se presenta como un conjunto de bloques ---\textit{chunks}--- que contienen los eventos clasificados por pistas. Todos los valores numéricos están en formato \textit{big-endian}, detalle a tener en cuenta, ya que tanto la arquitectura \textit{x86} como \textit{ARM} trabajan en \textit{little-endian}. + +\subsection{Bloque de cabecera} + +El bloque de cabecera es siempre el primero, empieza por la firma "MThd" e incluye la siguiente información: + +\begin{center} + \begin{tabular}{|l|l|l|} + \hline \multicolumn{1}{|c|}{\textbf{Longitud}} & \multicolumn{1}{c|}{\textbf{Descripción}} & \multicolumn{1}{c|}{\textbf{Valor}} \\ + \hline 4 bytes & Firma & "MThd" \\ + \hline 4 bytes & Tamaño & 6 \\ + \hline 2 bytes & Formato & 0--2 \\ + \hline 2 bytes & Número de pistas & 1--65535 \\ + \hline 2 bytes & División de tiempo & \\ + \hline + \end{tabular} +\end{center} + +\begin{description} + \item[Formato] Es la forma en que se organizan las pistas. Puede ser: + \begin{description} + \item[0] Una sola pista. + \item[1] Varias pistas, simultáneas. + \item[2] Varias pistas, independientes. + \end{description} + + \item[Número de pistas] Indica de cuántas pistas se compone el archivo. Obviamente, si el formato es 0, el valor de este campo será 1. + + \item[División de tiempo] Nos indica el significado de cada \textit{tick} de reloj del protocolo como divisiones de una negra (\quarternote). Valores típicos son 96, 120, 180, 192, 240, 360, 384, 480, 640, 720, 768 y 960 \textit{ticks}/\quarternote. Si el valor es negativo, el número indica en su lugar el número de \textit{ticks/fotograma}, habitualmente utilizado en realización de vídeo. +\end{description} + +\subsection{Bloque de pista} + +Una pista consta de una cabecera y de una lista de eventos, que termina con el meta-evento \textit{fin de pista}. + +\begin{center} + \begin{tabular}{|l|l|l|} + \hline \multicolumn{1}{|c|}{\textbf{Longitud}} & \multicolumn{1}{c|}{\textbf{Descripción}} & \multicolumn{1}{c|}{\textbf{Valor}} \\ + \hline 4 bytes & Firma & "MTrk" \\ + \hline 4 bytes & Tamaño & 0-65535 \\ + \hline + \end{tabular} +\end{center} + +\subsection{Eventos MIDI} + +Cada evento está formado por los siguientes campos: + +\begin{center} + \begin{tabular}{|l|l|} + \hline \multicolumn{1}{|c|}{\textbf{Longitud}} & \multicolumn{1}{c|}{\textbf{Descripción}} \\ + \hline Variable & $\Delta$ \\ + \hline 1 byte & Tipo de evento y canal \\ + \hline 1 byte & Parámetro 1 \\ + \hline 1 byte & Parámetro 2 \\ + \hline + \end{tabular} +\end{center} + +\begin{description} + \item[$\Delta$] Indica el número de \textit{ticks} que separan al evento actual del precedente. + \item[Tipo de evento y canal] Los cuatro \textit{bits} más significativos corresponden al tipo de evento. Los otros cuatro marcan el canal \textit{MIDI}. +\end{description} + +\begin{center} + \begin{tabular}{|l|l|l|l|} + \hline \multicolumn{4}{|c|}{\textbf{Tipos de evento}} \\ + \hline \multicolumn{1}{|c|}{\textbf{Valor}} & \multicolumn{1}{c|}{\textbf{Nombre}} & \multicolumn{1}{c|}{\textbf{Parámero 1}} & \multicolumn{1}{c|}{\textbf{Parámetro 2}} \\ + \hline 0x80 & NOTE-OFF & Nota & Velocidad \\ + \hline 0x90 & NOTE-ON & Nota & Velocidad \\ + \hline 0xA0 & NOTE-AFTERTOUCH & Nota & Velocidad \\ + \hline 0xB0 & CONTROLLER & Controlador & Valor \\ + \hline 0xC0 & PROGRAM-CHANGE & Programa & \\ + \hline 0xD0 & CHANNEL-AFTERTOUCH & Velocidad & \\ + \hline 0xE0 & PITCH-BEND & \multicolumn{2}{c|}{Valor} \\ + \hline 0xF0 & SYSTEM-EXCLUSIVE & \multicolumn{2}{c|}{} \\ + \hline 0xFF & Meta-evento & \multicolumn{2}{c|}{} \\ + \hline + \end{tabular} +\end{center} + +\subsubsection{Meta-eventos} + +Los metaeventos son mensajes de control que extienden la semántica de los eventos normales. Tienen la siguiente estructura: + +\begin{center} + \begin{tabular}{|l|l|} + \hline \multicolumn{1}{|c|}{\textbf{Longitud}} & \multicolumn{1}{c|}{\textbf{Descripción}} \\ + \hline Variable & $\Delta$ \\ + \hline 1 byte & 0xFF \\ + \hline 1 byte & Tipo de metaevento \\ + \hline Variable & Longitud del argumento \\ + \hline (Longitud) & Valor del argumento \\ + \hline + \end{tabular} +\end{center} + +Los tipos de meta-evento estándar son los siguientes: + +\begin{center} + \begin{tabular}{|l|l|} + \hline \multicolumn{2}{|c|}{\textbf{Tipos de meta-evento}} \\ + \hline \multicolumn{1}{|c|}{\textbf{Valor}} & \multicolumn{1}{c|}{\textbf{Nombre}} \\ + \hline 0x00 & Número de secuencia \\ + \hline 0x01 & Texto \\ + \hline 0x02 & Noticia de \textit{copyright} \\ + \hline 0x03 & Nombre de la secuencia \\ + \hline 0x04 & Nombre del instrumento \\ + \hline 0x05 & Letra de la canción \\ + \hline 0x06 & Marca \\ + \hline 0x07 & Punto de corte \\ + \hline 0x08 & Nombre del programa \\ + \hline 0x09 & Nombre del dispositivo \\ + \hline 0x20 & Prefijo del canal \\ + \hline 0x2F & Fin de pista \\ + \hline 0x51 & \textit{Tempo} ($\mu s/\quarternote$) \\ + \hline 0x54 & Desplazamiento temporal \\ + \hline 0x58 & Indicación de compás \\ + \hline 0x59 & Indicación de tonalidad \\ + \hline 0x7F & Reservado para el secuenciador \\ + \hline + \end{tabular} +\end{center} \ No newline at end of file From f8e4a83de5151512688fa5b549273ac015ccbac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20Fern=C3=A1ndez=20Castro?= Date: Mon, 24 Aug 2015 19:59:50 +0200 Subject: [PATCH 06/55] =?UTF-8?q?Ampliaci=C3=B3n=20de=20la=20historia=20de?= =?UTF-8?q?l=20=C3=B3rgano.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- report/pfc_amroldan.ist | 31 ------------------------------- report/subdocs/capitulo3.tex | 9 ++++++--- 2 files changed, 6 insertions(+), 34 deletions(-) delete mode 100644 report/pfc_amroldan.ist diff --git a/report/pfc_amroldan.ist b/report/pfc_amroldan.ist deleted file mode 100644 index 6f096b1..0000000 --- a/report/pfc_amroldan.ist +++ /dev/null @@ -1,31 +0,0 @@ -% makeindex style file created by the glossaries package -% for document 'pfc_amroldan' on 2015-8-23 -actual '?' -encap '|' -level '!' -quote '"' -keyword "\\glossaryentry" -preamble "\\glossarysection[\\glossarytoctitle]{\\glossarytitle}\\glossarypreamble\n\\begin{theglossary}\\glossaryheader\n" -postamble "\%\n\\end{theglossary}\\glossarypostamble\n" -group_skip "\\glsgroupskip\n" -item_0 "\%\n" -item_1 "\%\n" -item_2 "\%\n" -item_01 "\%\n" -item_x1 "\\relax \\glsresetentrylist\n" -item_12 "\%\n" -item_x2 "\\relax \\glsresetentrylist\n" -delim_0 "\{\\glossaryentrynumbers\{\\relax " -delim_1 "\{\\glossaryentrynumbers\{\\relax " -delim_2 "\{\\glossaryentrynumbers\{\\relax " -delim_t "\}\}" -delim_n "\\delimN " -delim_r "\\delimR " -headings_flag 1 -heading_prefix "\\glsgroupheading\{" -heading_suffix "\}\\relax \\glsresetentrylist " -symhead_positive "glssymbols" -numhead_positive "glsnumbers" -page_compositor "." -suffix_2p "" -suffix_3p "" diff --git a/report/subdocs/capitulo3.tex b/report/subdocs/capitulo3.tex index 8c60c2e..23229e2 100644 --- a/report/subdocs/capitulo3.tex +++ b/report/subdocs/capitulo3.tex @@ -6,7 +6,7 @@ \chapter{Análisis del sistema.} \section{Órgano de la Parroquia de la Encarnación} -El instrumento instalado en la Parroquia de la Encarnación de Santa Fe es en realidad un doble órgano artesanal construido en dos fases: un órgano barroco, al que se agregó una extensión romántica con un segundo teclado y nuevos sonidos, pero todo el mecanismo es independiente del primer órgano. +El instrumento instalado en la Parroquia de la Encarnación de Santa Fe es en realidad un doble órgano artesanal construido en dos fases: En 1775 se instaló el primer órgano, de estilo barroco, obra del organero Pedro Ghys. Posteriormente, a principios de la década de 1830, el francés Guillermo D'Enoyer lo amplía añadiendo un órgano romántico, con un segundo teclado y nuevos sonidos, pero todo el mecanismo es independiente del primer instrumento. Para funcionar, el órgano se alimenta de aire. Antiguamente se utilizaba un fuelle gigante, situado en la antesala, que llevaba el aire a una cámara de almacenamiento, para proporcionar un flujo de entrada constante. Esto requería que hubiese alguien follando mientras el organista tocaba. Hoy día el fuelle ha sido sustituído por una bomba eléctrica. @@ -14,7 +14,7 @@ \section{Órgano de la Parroquia de la Encarnación} En la planta de arriba se encuentra la esencia del instrumento: alrededor de 600 tubos de diferentes timbres y alturas sonoras, incluyendo el \textit{bajo de contrast}, que se hace sonar con el \textit{pedalier}. Solo los diapasones ---los flautados de 13' fundamentales y las cornetas--- son visibles desde el exterior. -La parte más importante del órgano es el llamado \textit{secreto}, una galería a la que entra el aire procedente de la cámara de almacenamiento y se distribuye en cientos de conductos que llevan a las válvulas y los tubos. En tiempos en los que no existían los manguitos de goma, los conductos están tallados artesanalmente dentro de bloques de madera. +La parte más importante del órgano es el llamado \textit{secreto}, una galería a la que entra el aire procedente de la cámara de almacenamiento y se distribuye en cientos de conductos que llevan a las válvulas y los tubos. Siendo éste el corazón de la obra, dentro de él se halla una partitura firmada por el constructor del órgano. En tiempos en los que no existían los manguitos de goma, los conductos están tallados artesanalmente dentro de bloques de madera. La primera tarea que llevamos a cabo fue conocer el órgano en profundidad, tomar algunas medidas y diseñar el modelo en 3D con el software SolidWorks. @@ -377,4 +377,7 @@ \subsubsection{Meta-eventos} \hline 0x7F & Reservado para el secuenciador \\ \hline \end{tabular} -\end{center} \ No newline at end of file +\end{center} + +\clearpage{\cleardoublepage} +\clearpage{\pagestyle{empty}\cleardoublepage} \ No newline at end of file From 02bde07207456e84911243aa25167ad8ab3462ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20Fern=C3=A1ndez=20Castro?= Date: Tue, 25 Aug 2015 02:01:51 +0200 Subject: [PATCH 07/55] =?UTF-8?q?Cap=C3=ADtulo=204,=20hasta=20el=20planifi?= =?UTF-8?q?cador.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- report/capitulo4/figura4_1.pdf | Bin 0 -> 10285 bytes report/capitulo4/figura4_2.pdf | Bin 0 -> 11264 bytes report/capitulo4/figura4_3.pdf | Bin 0 -> 12831 bytes report/pfc_amroldan.tex | 2 + report/subdocs/capitulo4.tex | 420 ++++++++++++++++++++++++++++++++- 5 files changed, 421 insertions(+), 1 deletion(-) create mode 100644 report/capitulo4/figura4_1.pdf create mode 100644 report/capitulo4/figura4_2.pdf create mode 100644 report/capitulo4/figura4_3.pdf diff --git a/report/capitulo4/figura4_1.pdf b/report/capitulo4/figura4_1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1ed94097de0f492f2d2ebcabafede35975d78942 GIT binary patch literal 10285 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 literal 0 HcmV?d00001 diff --git a/report/capitulo4/figura4_2.pdf b/report/capitulo4/figura4_2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e990413a1aa42e2bbb28a6d3905f9dd418d14e16 GIT binary patch literal 11264 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

gh)5z%N>+L&u8{0@ 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 BN&Wx; literal 0 HcmV?d00001 diff --git a/report/pfc_amroldan.tex b/report/pfc_amroldan.tex index c74c5ad..31f393e 100644 --- a/report/pfc_amroldan.tex +++ b/report/pfc_amroldan.tex @@ -77,6 +77,8 @@ \usepackage{subfig} \usepackage{wasysym} % Simbolos musicales +\usepackage{enumitem} % Para el estilo de las listas de descripcion +\usepackage{algorithmic} % Para describir algoritmos \usepackage{rotating} \usepackage{listings} diff --git a/report/subdocs/capitulo4.tex b/report/subdocs/capitulo4.tex index e218ccb..b0615e2 100644 --- a/report/subdocs/capitulo4.tex +++ b/report/subdocs/capitulo4.tex @@ -1,4 +1,422 @@ \chapter{Diseño del sistema.} \label{cap: capitulo_4} -\section{Windows} \ No newline at end of file +En este capítulo vamos a detallar cómo hemos concebido la solución a los requisitos \textit{software}, teniendo en cuenta los correspondientes al \textit{hardware} y a partir de los elementos que hemos detallado en el capítulo anterior. + +\section{Planteamiento} + +Como idea más abstracta, el \textit{software} que tenemos que diseñar consiste en un reproductor de archivos \textit{MIDI}, que recibe el fichero y lo envía a la \textit{PCB} a través del \textit{GPIO}. Por supuesto, la reproducción estará controlada por el usuario: + +\smallskip + +\begin{figure}[H] + \noindent \begin{centering} + \includegraphics[width=\linewidth/2]{capitulo4/figura4_1} + \par\end{centering} + \smallskip + \caption{\label{fig:figura4_1} Planteamiento inicial.} +\end{figure} + +\smallskip + +Luego, dividiremos el sistema en cuatro grandes bloques. Respecto al de control, se requiere varias formas de acceder al sistema: + +\begin{enumerate} + \item Un \textit{software} controlador principal, que cubra todos los casos de uso, y sea fácil de instalar y utilizar, con preferencia de que sea multiplataforma. + + \item Un mando a distancia, que altere la reproducción. + + \item Un control reducido empotrado en la \textit{PCB}. +\end{enumerate} + +Atendiendo a los requisitos del primer controlador y a las prestaciones del \textit{Raspberry Pi}, y con objeto de eliminar la necesidad de instalar y mantener aplicaciones en otro sistema, decidimos enfocar la solución como una interfaz \textit{web} con un servidor alojado en el \textit{Raspberry Pi}. De esta forma podemos llegar fácilmente a cualquier sistema operativo de escritorio, incluso es fácilmente adaptable a dispositivos móviles. + +Sin embargo, el reproductor no puede funcionar dentro de un servidor \textit{web}, ya que éstos atienden peticiones sin estado, y se cierran automáticamente después de devolver la información. Por ello, vamos a diseñar el reproductor como un \textit{demonio} de \textit{Linux}, junto con sus módulos auxiliares. + +En último lugar, necesitamos almacenar información de los archivos \textit{MIDI}, listas de reproducción y asignaciones del mando en memoria persistente. Una base de datos nos permitiría guardar toda esa información de manera estructurada y coherente, además de ser fácilmente accesible por todos los componentes del sistema. + +\section{Demonio} + +Un demonio ---\textit{daemon}--- es un proceso que se ejecuta en segundo plano en la fase de arranque del sistema operativo, y no interactúa directamente con el usuario, sino que se comunica con otros procesos a través de herramientas proporcionadas por el sistema operativo. + +Este programa será el núcleo de nuestro sistema, y ofrecerá las siguientes vías para comunicarse: + +\begin{itemize} + \item Un \textit{socket} local de \textit{Linux}. Será usado principalmente por la interfaz \textit{web}, pero es una forma flexible y eficiente para que lo hagan más aplicaciones. + + \item El puerto en serie (\textit{UART}) del \textit{Raspberry Pi}, para recibir órdenes del mando. + + \item Los pines del \textit{GPIO} correspondientes al codificador rotatorio, para la interfaz reducida. +\end{itemize} + +Así, el esquema de uso de los distintos componentes queda así: + +\smallskip + +\begin{figure}[H] + \noindent \begin{centering} + \includegraphics[width=\linewidth/2]{capitulo4/figura4_2} + \par\end{centering} + \smallskip + \caption{\label{fig:figura4_2} Estructura del demonio.} +\end{figure} + +\smallskip + +\subsection{Descodificador de MIDI} + +Como hemos detallado más arriba, el formato \textit{MIDI} expone los eventos de control en orden temporal, clasificados por pistas, habitualmente simultáneas. Debemos proporcionar una estructura de datos que permita mantener cada archivo a reproducir en memoria y facilitar el acceso individual a cada pista. + +Concebimos la estructura de datos como un conjunto de listas enlazadas de eventos. El tamaño de los eventos normales es constante, sin embargo, los meta-eventos extienden la semántica con una cadena de datos. + +\subsubsection{Estructura \textit{midifile\_t}} + +Define un archivo \textit{MIDI}. Sus campos son: + +\begin{description} + \item[format : \textit{enum}] Formato del archivo. Puede tener los siguientes valores enumerados: + + \begin{description} + \item[SINGLE\_TRACK] Una sola pista. + \item[MULTIPLE\_SIMULTANEOUS] Varias pistas, simultáneas. + \item[MULTIPLE\_INDEPENDENT] Varias pistas, independientes. + \end{description} + + \item[ntracks : \textit{word}] Número de pistas. + + \item[division : \textit{enum}] Unidad de medida de la división de tiempo: + + \begin{description} + \item[TICKS\ PER\ BEAT] La división se especifica en \textit{ticks}/\quarternote. + \item[FRAMES\_PER\_SECOND] La división se especifica en \textit{ticks/fotograma}. + \end{description} + + \item[tracks : \textit{array(midievent\_t)}] Conjunto de listas de eventos; cada lista corresponde a una pista. + +\end{description} + +\subsubsection{Estructura midievent\_t} + +Define un evento MIDI. + +\begin{description} + \item[delta : \textit{dword}] Separación temporal respecto al evento anterior. + \item[type : \textit{enum}] Tipo de evento. Se enumeran en el capítulo anterior. + \item[param1 : \textit{byte}] Valor del primer parámetro, dependiendo del tipo de evento. + \item[param2 : \textit{byte}] Valor del segundo parámetro, dependiendo del tipo de evento. + \item[metaevent : \textit{metaevent\_t}] Información del metaevento, si procede. + \item[next : \textit{midievent\_t}] Evento siguiente, si procede. +\end{description} + +\subsubsection{Estructura \textit{metaevent\_t}} + +Define un meta-evento. + +\begin{description} + \item[type : \textit{emum}] Tipo de metaevento. Se enumeran en el capítulo anterior. + \item[length : \textit{dword}] Longitud de la cadena de datos, en \textit{bytes}. + \item[data : \textit{string}] Cadena de datos correspondientes al meta-evento. +\end{description} + +\subsubsection{Funciones} + +\begin{description}[style=nextline] + \item[midifile\_init (score, path) : \textit{int}] + Lee un archivo MIDI e inicializa la estructura recibida. + + \begin{description} + \item[score : \textit{midifile\_t}] Archivo \textit{MIDI} sin inicializar. + \item[path : \textit{string}] Ruta del fichero a leer. + \end{description} + + Devuelve 0 en caso de éxito, o -1 en caso de error. + + \item[midifile\_destroy (file)] + Elimina una estructura y libera su memoria. + + \begin{description} + \item[file : \textit{midifile\_t}] Archivo \textit{MIDI}. + \end{description} + + \item[midifile\_duration (file) : \textit{dword}] + Obtener la duración de una pieza. + + \begin{description} + \item[file : \textit{midifile\_t}] Archivo \textit{MIDI}. + \end{description} + + Devuelve la duración de la pieza, en \textit{segundos}. + + \item[metaevent\_tempo (event) : \textit{dword}] + Obtener el \textit{tempo} de la pieza. + + \begin{description} + \item[event : \textit{metaevent\_t}] Meta-vento. + \end{description} + + Devuelve el \textit{tempo} de la pieza en \textit{$\mu s$/\quarternote}. + +\end{description} + +\subsection{Control por socket} + +Un \textit{socket} un mecanismo de comunicación inter-proceso ---\textit{IPC (inter-process communication)} que proporciona \textit{Linux} y enviar y recibir datagramas en modo \textit{duplex}, bien dentro de la misma máquina (\textit{socket} local) o en una red (\textit{socket} de Internet). + +Vamos a crear un \textit{socket} local, accesible desde el sistema de archivos de \textit{Linux}, que escuche peticiones de los clientes que se conecten, utilizando una interfaz basada en lenguaje natural, que explicaremos a continuación. + +Las funciones diseñadas son las siguientes: + +\begin{description}[style=nextline] + \item[socket\_init (uid, gid) : \textit{dword}] + Inicializar el \textit{socket} con el ID de usuario y grupo indicados. + + \begin{description} + \item[uid : \textit{dword}] ID de usuario en Linux. + \item[gid : \textit{dword}] ID de grupo en Linux. + \end{description} + + Devuelve 0 en caso de éxito y -1 en caso de error. + + \item[socket\_destroy ()] + Cierra el \textit{socket}. + + \item[socket\_loop ()] + Despliega una hebra con un bucle de escucha y atiende las peticiones. + +\end{description} + +\subsubsection{Lenguaje de la interfaz} + +El \textit{socket} reconocerá y ejecutará una serie de órdenes, emitiendo siempre una respuesta: + +\begin{description} + \item[PLAY [ *]] Reproducir una lista de archivos MIDI, indicando las rutas completa, separadas por espacios. Respuesta: + + \begin{description} + \item[OK] en caso de éxito. + \item[ERROR] en caso de error o estar en modo Ingeniería. + \end{description} + + \item[PLAYLOOP [ *]] Reproducir en bucle una lista de archivos MIDI, indicando las rutas completa, separadas por espacios. Respuesta: + + \begin{description} + \item[OK] en caso de éxito. + \item[ERROR] en caso de error o estar en modo Ingeniería. + \end{description} + + \item[PAUSE] Pausar la reproducción. Silencia las notas pero manteniendo el estado. Respuesta: + + \begin{description} + \item[OK] en caso de éxito. + \item[ERROR] en caso de error, como estar detenido, o en modo Ingeniería. + \end{description} + + \item[RESUME] Reanuda la reproducción en el punto en que se pausó. Respuesta: + + \begin{description} + \item[OK] en caso de éxito. + \item[ERROR] en caso de error, como no estar pausado, o en modo Ingeniería. + \end{description} + + \item[STOP] Detiene completamente la reproducción y libera la lista de reproducción. Respuesta: + + \begin{description} + \item[OK] en caso de éxito. + \item[ERROR] en caso de error o estar en modo Ingeniería. + \end{description} + + \item[STATUS] Consulta el estado del reproductor. Respuesta: + + \begin{description} + \item[PLAYING ] Reproduciendo el archivo cuya ruta absoluta se especifica. + \item[PAUSED ] Pausado en un punto del archivo cuya ruta se indica. + \item[STOPPED] Detenido. Es el estado inicial. + \item[ENGINEER] En modo Ingeniería. No se puede reproducir nada hasta desbloquearse. + \end{description} + +\end{description} + +\subsection{Control del mando} + +Como hemos indicado en el capítulo anterior, el receptor del mando a distancia está conectado al \textit{Raspberry Pi} a través de los pines correspondientes al dispositivo \textit{UART} ---\textit{Universal Asynchronus Receiver-Transmiter}---, que controla los puertos serie. + +Este módulo tiene una topología análoga al control por \textit{socket}, tan solo cambia el origen y la forma de entrada de los datos. Establecerá una comunicación con el puerto serie e iniciará un bucle de escucha. La sintaxis del mensaje, como ya sabemos, es: + +\begin{center} + +\end{center} + +De esta forma, el servicio tan solo debe verificar el nº de serie y ejecutar la orden correspondiente. + +Las funciones correspondientes a este módulo son las siguientes: + +\begin{description}[style=nextline] + \item[uart\_init () : \textit{dword}] + Establece comunicación con el puerto serie. + + Devuelve 0 en caso de éxito y -1 en caso de error. + + \item[uart\_destroy ()] + Cierra la comunicación. + + \item[uart\_loop ()] + Despliega una hebra con un bucle de escucha y ejecuta las órdenes. + +\end{description} + +\subsubsection{Comunicación con la base de datos} + +La información relativa a la lista de reproducción asignada a un botón, así como la lista de partituras correspondientes, residirán en una base de datos, que definiremos próximamente. Así, enmarcaremos un nuevo módulo dedicado a consultar la información requerida, mediante las siguientes funciones: + +\begin{description}[style=nextline] + \item[db\_init () : \textit{dword}] + Inicia la comunicación con el gestor de bases de datos. Devuelve 0 en caso de éxito y -1 en caso de error. + + \item[db\_destroy ()] + Cierra la comunicación. + + \item[db\_query (scores, idshortcut) : \textit{dword}] + Realiza la consulta mencionada, asignando a \textit{scores} la lista de piezas a reproducir. + + \begin{description} + \item[scores : \textit{array(string)}] Lista de rutas a las piezas. + \item[idshortcut : \textit{dword}] ID del botón que se ha pulsado en el mando. + \end{description} + + Devuelve el número de piezas asignadas (pudiendo ser 0), o -1 en caso de error. + +\end{description} + +\subsection{Planificador} + +El planificador es la pieza principal del reproductor. Recibe las órdenes de los controladores y la lista de partituras a ejecutar. Una a una las lee con ayuda del módulo \textit{MIDI} y planifica los eventos de todas las pistas para lanzarlos a la salida en el momento necesario. + +Al igual que otros módulos, utiliza una hebra para reproducir los archivos, pero en este caso es una hebra dinámica, que podrá ser iniciada, pausada y detenida por el resto de procesos, por lo que hay que tener en cuenta los problemas de concurrencia para garantizar la consistencia del sistema. + +La interfaz que el planificador ofrece es la que sigue: + +\begin{description}[style=nextline] + \item[player\_start (playlist, n, loop) : \textit{dword}] + Inicia la reproducción de una lista de archivos. Si ya estaba reproduciendo una lista, primero detiene la reproducción y elimina la lista antigua. + + \begin{description} + \item[playlist : \textit{array(string)}] Lista de rutas absolutas a los archivos que queremos reproducir. + \item[n : \textit{dword}] Número de piezas que se han transmitido en el parámetro anterior. + \item[loop : \textit{bool}] Utilizar (1) o no (0) reproducción en bucle. + \end{description} + + Devuelve 0 en caso de éxito o -1 en caso de error. + + \item[player\_pause () : \textit{dword}] + Pausa la reproducción, si estaba activa. Devuelve 0 en caso de éxito o -1 en caso de error. + + \item[player\_stop () : \textit{dword}] + Detiene completamente la reproducción, si estaba activa o pausada. Si estaba parado, no hace nada. Devuelve 0 en caso de éxito o -1 en caso de error. + + \item[player\_state (file) : \textit{enum}] + Indica el estado actual del planificador. Tales estados se detallan en el apartado siguiente. + + \begin{description} + \item[file : \textit{array(string)}] Es un parámetro de salida, sobre él se escribe el nombre del archivo que se estaba reproduciendo. Solo es válido si el reproductor está activo o en pausa. + \end{description} + + Devuelve el estado actual del reproductor, a saber entre los estados contemplados en la máquina. + +\end{description} + +\subsubsection{Máquina de estados} + +Para gestionar su funcionamiento, el planificador utiliza una pequeña cantidad de estados, que mostramos a continuación: + +\smallskip + +\begin{figure}[H] + \noindent \begin{centering} + \includegraphics[width=\linewidth/2]{capitulo4/figura4_3} + \par\end{centering} + \smallskip + \caption{\label{fig:figura4_2} Diagrama de estados del planificador.} +\end{figure} + +\smallskip + +\begin{description} + \item[PLAYING] En funcionamiento, reproduciendo activamente una partitura. + \item[PAUSED] En pausa, manteniendo el estado del órgano en el módulo de salida. + \item[STOPPED] Detenido. Es el estado inicial. + \item[ENGINEER] Bloqueado, en modo Ingeniería. Ha cedido el control del módulo de salida. +\end{description} + +\subsubsection{Algoritmo básico} + +Para que todas las pistas se ejecuten simultáneamente, el planificador recorre en cada ciclo todas las listas, avanzando mientras sea el momento de ejecutar el evento correspondiente ($\Delta=0$). Cuando se ha llegado a un evento con $\Delta > 0$ en todas las pistas, se busca el menor valor y se resta a todos los \textit{deltas}. A continuación, se solicita al sistema operativo la espera correspondiente al tiempo restado, y se repite el ciclo. El algoritmo termina cuando todas las pistas han llegado al final. + +\begin{algorithmic} + \LOOP + \STATE $mindelta \gets \infty$ + \STATE $i\gets 0$ + \WHILE {$i < n_{tracks}$} + \WHILE {$(event_i.delta = 0)\AND \NOT ((event_i.type = METAEVENT) \AND (event_i.metaevent.type = END\_OF\_TRACK))$} + \IF {$event_i.type = NOTE\_ON$} + \STATE output\_noteon($i, event_i.param1$) + \ELSE + \IF {$event_i.type = NOTE\_OFF$} + \STATE output\_noteoff($i, event_i.param1$) + \ENDIF + \ENDIF + \ENDWHILE + \IF {$(event_i.delta > 0)\AND (event_i.delta < mindelta)$} + \STATE $mindelta \gets event_i.delta$ + \ENDIF + \ENDWHILE + \STATE $i \gets 0$ + + \WHILE {$i < n_{tracks}$} + \STATE $event_i.delta \gets event_i.delta - min$ + \ENDWHILE + \STATE sleep($mindelta$) + \ENDLOOP +\end{algorithmic} + +\subsection{Salida hacia la PCB} + +\subsubsection{Mapeo de pistas y canales} + +\subsection{Modo Ingeniería} + +\subsection{Seguridad} + +\section{Base de datos} + +\subsection{Tablas} + +\section{Control remoto} + +\subsection{Reproductor} + +\subsection{Listas de reproducción} + +\subsection{Asignación del mando a listas} + +\subsection{Control del usuario} + +\subsection{Comunicación con el demonio} + +\subsection{Comunicación con la base de datos} + +\subsection{Autentificación} + +\subsection{Control de energía} + +\subsection{Soporte de idiomas} + +\section{Aplicaciones auxiliares} + +\subsection{Información de archivo MIDI} + +\subsection{Comprobación de contraseña} + +\subsection{Control de reproducción} + +\clearpage{\cleardoublepage} +\clearpage{\pagestyle{empty}\cleardoublepage} \ No newline at end of file From 310898a84c7215d20d6ad86bf66077d25b06d02f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20Fern=C3=A1ndez=20Castro?= Date: Tue, 25 Aug 2015 09:39:02 +0200 Subject: [PATCH 08/55] =?UTF-8?q?Quitamos=20guiones=20a=20los=20=C3=ADndic?= =?UTF-8?q?es=20de=20notas.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- report/subdocs/capitulo3.tex | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/report/subdocs/capitulo3.tex b/report/subdocs/capitulo3.tex index 23229e2..ec0f864 100644 --- a/report/subdocs/capitulo3.tex +++ b/report/subdocs/capitulo3.tex @@ -22,16 +22,16 @@ \subsection{Teclados} Tenemos dos teclados de cuatro octavas notas cada uno, el de arriba, correspondiente al órgano barroco, y otro más abajo, que sobresale del primero, para el órgano romántico, de la misma extensión. -Tanto las medidas de cada tecla como su calado (diferencia entre la posición del borde de una tecla pulsada y sin pulsar) son estándar y coincidentes con las del piano. De la misma forma, la tecla \textit{Do} del centro hace sonar la nota \textit{Do-4} \footnotemark. +Tanto las medidas de cada tecla como su calado (diferencia entre la posición del borde de una tecla pulsada y sin pulsar) son estándar y coincidentes con las del piano. De la misma forma, la tecla \textit{Do} del centro hace sonar la nota \textit{Do 4} \footnotemark. -\footnotetext{En España se utilizan dos índices de notación musical: el franco-belga, que asigna el nombre \textit{La-3} a la nota cuya frecuencia fundamental vibra a 440 \textit{Hz}, y el índice científico, que asigna \textit{La-4} a la misma nota. En este proyecto utilizaremos el índice científico, ya que es el utilizado para el sistema MIDI.} +\footnotetext{En España se utilizan dos índices de notación musical: el franco-belga, que asigna el nombre \textit{La 3} a la nota cuya frecuencia fundamental vibra a 440 \textit{Hz}, y el índice científico, que asigna \textit{La 4} a la misma nota. En este proyecto utilizaremos el índice científico, ya que es el utilizado para el sistema MIDI.} Los datos más relevantes son los siguientes: \begin{center} \begin{tabular}{|l|l|} \hline Número de teclas & 49 / teclado \\ - \hline Extensión & \textit{Do-2} -- \textit{Do-6} \\ + \hline Extensión & \textit{Do 2} -- \textit{Do 6} \\ \hline Profundidad de calado (blancas) & 10 \textit{mm} \\ \hline Profundidad de calado (negras) & 8 \textit{mm} \\ \hline Presión máxima & 2,70 \textit{N} \\ @@ -50,7 +50,7 @@ \subsection{Pedales} \begin{center} \begin{tabular}{|l|l|} \hline Número de pedales & 12 \\ - \hline Extensión & \textit{Do-1} -- \textit{Si-1} \\ + \hline Extensión & \textit{Do 1} -- \textit{Si 1} \\ \hline Profundidad de calado (diatónicas) & 14,5 \textit{mm} \\ \hline Profundidad de calado (cromáticas) & 19,8 \textit{mm} \\ \hline Presión máxima & 30,54 \textit{N} \\ @@ -62,7 +62,7 @@ \subsection{Registros} Los registros son las diferentes familias de tubos con el mismo timbre y la misma tesitura. Se pueden abrir o cerrar desde la consola a través de una serie de palancas, de las que se tira para hacer sonar el registro o se empuja para silenciarlo. -Estos controles están dispuestos a ambos lados de los teclados y son exclusivos para un teclado u otro. En este órgano existen registros parciales, esto es, se aplican solo a una mitad del teclado, bien de \textit{Do-2} a \textit{Si-3}, o bien de \textit{Do-4} a \textit{Do-6}. +Estos controles están dispuestos a ambos lados de los teclados y son exclusivos para un teclado u otro. En este órgano existen registros parciales, esto es, se aplican solo a una mitad del teclado, bien de \textit{Do 2} a \textit{Si 3}, o bien de \textit{Do 4} a \textit{Do 6}. Dado que el punto interno de equilibro de cada palanca está en lugares diferentes, existe una notable disparidad en la medida en que sobresalen cuando se abren. Además, tenemos una palanca especial, el \textit{tremolo}, que sirve para activar un mecanismo que produce un efecto de fluctuación en el sonido. @@ -379,5 +379,9 @@ \subsubsection{Meta-eventos} \end{tabular} \end{center} +\subsubsection{Notas} + +Las notas en \textit{MIDI} se indican numéricamente, en base 0, asignando valores a las notas cromáticas a partir de \textit{Do -1}. Por ejemplo, al \textit{Do central (Do 4)} le corresponde el valor 60. + \clearpage{\cleardoublepage} \clearpage{\pagestyle{empty}\cleardoublepage} \ No newline at end of file From 0a5df65f2dffd05059ad2dc6090a6acc0d9303f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20Fern=C3=A1ndez=20Castro?= Date: Tue, 25 Aug 2015 11:51:25 +0200 Subject: [PATCH 09/55] =?UTF-8?q?Cap=C3=ADtulo=204,=20dise=C3=B1o=20del=20?= =?UTF-8?q?demonio.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- report/capitulo4/figura4_2.pdf | Bin 11264 -> 11374 bytes report/capitulo4/figura4_4.pdf | Bin 0 -> 16117 bytes report/capitulo4/figura4_5.pdf | Bin 0 -> 9576 bytes report/subdocs/capitulo4.tex | 126 ++++++++++++++++++++++++++++++--- 4 files changed, 115 insertions(+), 11 deletions(-) create mode 100644 report/capitulo4/figura4_4.pdf create mode 100644 report/capitulo4/figura4_5.pdf diff --git a/report/capitulo4/figura4_2.pdf b/report/capitulo4/figura4_2.pdf index e990413a1aa42e2bbb28a6d3905f9dd418d14e16..9c7a593c1907630e1cfb5768c68eed6783b2b079 100644 GIT binary patch delta 9874 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 T#8M^&l>ZQrX=o&rB$59gA7K70 delta 9741 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�~jVjmm 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 k%K!gKY027{qWt_ 0)\AND (event_i.delta < mindelta)$} + \IF {$event_i.delta > 0$ \AND $event_i.delta < mindelta$} \STATE $mindelta \gets event_i.delta$ \ENDIF \ENDWHILE @@ -374,18 +384,112 @@ \subsubsection{Algoritmo básico} \WHILE {$i < n_{tracks}$} \STATE $event_i.delta \gets event_i.delta - min$ \ENDWHILE - \STATE sleep($mindelta$) + \STATE $sleep (mindelta)$ \ENDLOOP \end{algorithmic} \subsection{Salida hacia la PCB} +El reproductor delega en el módulo de salida las siguientes funciones: + +\begin{enumerate} + \item Dirigir las pistas de \textit{MIDI} al canal de salida correspondiente. + \item Almacenar el estado de salida (notas pulsadas y no pulsadas). + \item Volcar la información en el \textit{GPIO}. +\end{enumerate} + +Éste será el único módulo que tendremos que cambiar a la hora de pasar de un órgano a otro. El hecho de aislar la salida también nos da flexibilidad para sustituir la interfaz \textit{GPIO} por otro tipo de salida, como la consola, con fines de mantenimiento y depuración. + +Las siguientes funciones conforman la interfaz del módulo: + +\begin{description}[style=nextline] + \item[output\_init () : \textit{dword}] + Inicializa los componentes de la salida. Devuelve 0 en caso de éxito o -1 en caso de error. + + \item[output\_destroy ()] + Cierra el módulo de salida y libera la memoria ocupada. + + \item[output\_noteon (track, note)] + Marcar una nota para activar en el sistema. + + \begin{description} + \item[track : \textit{dword}] Índice de la pista \textit{MIDI}. + \item[note : \textit{dword}] Número de nota \textit{MIDI}. + \end{description} + + \item[output\_noteon (track, note)] + Marcar una nota para apagarla en el sistema. + + \begin{description} + \item[track : \textit{dword}] Índice de la pista \textit{MIDI}. + \item[note : \textit{dword}] Número de nota \textit{MIDI}. + \end{description} + + \item[output\_update ()] + Vuelca el estado en la salida. + + \item[output\_panic ()] + Vuelve al estado inicial (silenciar todas las notas), y lo vuelca en la salida. + + \item[output\_silence ()] + Silencia todas las notas en la salida, pero mantiene el estado. Útil para pausar la reproducción. + +\end{description} + \subsubsection{Mapeo de pistas y canales} +Nuestra especificación deja abierta la estructura que pueda tener un archivo MIDI. A pesar de que el sistema podrá descodificar \textit{MIDI} estándar, para lograr una óptima ejecución, la pieza deberá adaptarse a cada órgano concreto. + +El módulo de salida permitirá asignar cada pista \textit{MIDI}, que normalmente corresponde a un pentagrama de la partitura, a un canal de salida diferente. La asignación por defecto, para el órgano estudiado, será la siguiente: + +\smallskip + +\begin{figure}[H] + \noindent \begin{centering} + \includegraphics[width=\linewidth/3]{capitulo4/figura4_4} + \par\end{centering} + \smallskip + \caption{\label{fig:figura4_4} Asignación de pistas \textit{MIDI} y canales de salida.} +\end{figure} + +\smallskip + \subsection{Modo Ingeniería} +El sistema requiere un modo de mantenimiento para regular la mecánica, al que se accederá localmente, a través de una interfaz reducida que controlaremos con el codificador rotatorio y el \textit{LCD}. + +El codificador permitirá acceder al modo Ingeniería, que detendrá la reproducción ---si estaba en funcionamiento--- y aislará el planificador, ganando acceso directo a la salida \textit{GPIO}. + +Vamos a diseñar la interfaz como una máquina de estados: Inicialmente el modo Ingeniería está desactivado, girando el botón se nos dará la opción de activarlo, y al pulsarlo entraremos en él. Se activará la nota más baja de la primera pista, al girar el botón podremos movernos cíclicamente por todas las notas de esa pista. Pulsando el botón cambiamos a la segunda pista, luego a la tercera, y así hasta la última. Si apretamos nuevamente el botón, volvemos al menú que nos permitirá salir del modo Ingeniería. + +Este diagrama muestra las transiciones entre los estados: + +\smallskip + +\begin{figure}[H] + \noindent \begin{centering} + \includegraphics[width=\linewidth*3/4]{capitulo4/figura4_5} + \par\end{centering} + \smallskip + \caption{\label{fig:figura4_5} Máquina de estados de la interfaz reducida.} +\end{figure} + +\smallskip + +\begin{description} + \item[OFF] Estado inicial, modo Ingeniería apagado. Mostrará el estado del reproductor. + \item[MENU] Ofrece la opción de entrar en el modo Ingeniería. + \item[ON] Modo Ingeniería activado, los subestados dependen de la pista y la nota actuales +\end{description} + \subsection{Seguridad} +A pesar de que el acceso al sistema se hará siempre con autentificación de usuario, nos interesa controlar que no todos los usuarios, o no todas las aplicaciones, se conecten al \textit{socket}. La seguridad de \textit{Linux} recae en gran parte sobre su sistema de archivos y permisos. Se creará un nombre de usuario de sistema para ser utilizado exclusivamente por el \textit{socket}, que tendrá permisos de lectura y escritura para dicho usuario y su grupo. + +Para autorizar a un usuario a acceder al \textit{socket}, simplemente hay que añadirlo al grupo del usuario propietario. + +Por otro lado, el demonio se ejecuta con permisos de \textit{superusuario}, y es inseguro mantenerse durante toda la ejecución con tales privilegios. A pesar de que introduciremos medidas de seguridad en los clientes que desarrollemos para el sistema, reduciremos los permisos después de inicializar el proceso, como medida adicional para evitar problemas + \section{Base de datos} \subsection{Tablas} From aa314849456507c535598f8fe2be857fdb57555a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20Fern=C3=A1ndez=20Castro?= Date: Tue, 25 Aug 2015 14:14:39 +0200 Subject: [PATCH 10/55] =?UTF-8?q?Cap=C3=ADtulo=204,=20dise=C3=B1o=20de=20l?= =?UTF-8?q?a=20base=20de=20datos.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- report/capitulo4/figura4_3.pdf | Bin 12831 -> 0 bytes report/capitulo4/figura4_bd_er.pdf | Bin 0 -> 12515 bytes report/capitulo4/figura4_bd_rel.pdf | Bin 0 -> 25182 bytes .../{figura4_2.pdf => figura4_daemon.pdf} | Bin .../{figura4_5.pdf => figura4_engineer.pdf} | Bin .../{figura4_1.pdf => figura4_idea.pdf} | Bin .../{figura4_4.pdf => figura4_map.pdf} | Bin report/capitulo4/figura4_sched.pdf | Bin 0 -> 11385 bytes report/subdocs/capitulo4.tex | 102 +++++++++++++++--- 9 files changed, 85 insertions(+), 17 deletions(-) delete mode 100644 report/capitulo4/figura4_3.pdf create mode 100644 report/capitulo4/figura4_bd_er.pdf create mode 100644 report/capitulo4/figura4_bd_rel.pdf rename report/capitulo4/{figura4_2.pdf => figura4_daemon.pdf} (100%) rename report/capitulo4/{figura4_5.pdf => figura4_engineer.pdf} (100%) rename report/capitulo4/{figura4_1.pdf => figura4_idea.pdf} (100%) rename report/capitulo4/{figura4_4.pdf => figura4_map.pdf} (100%) create mode 100644 report/capitulo4/figura4_sched.pdf diff --git a/report/capitulo4/figura4_3.pdf b/report/capitulo4/figura4_3.pdf deleted file mode 100644 index 4b0b6b4b5c8b866b84bdbbd0d490de4e633f41a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12831 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 BN&Wx; diff --git a/report/capitulo4/figura4_bd_er.pdf b/report/capitulo4/figura4_bd_er.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c78605af63486cdc77faa47f625fa2fe980808e2 GIT binary patch literal 12515 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

O)ab^ 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 F{|^^xRayW5 literal 0 HcmV?d00001 diff --git a/report/capitulo4/figura4_bd_rel.pdf b/report/capitulo4/figura4_bd_rel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e1f6fae52ab202885c4397d03d03d281a3fdf73f GIT binary patch literal 25182 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 AO#lD@ literal 0 HcmV?d00001 diff --git a/report/capitulo4/figura4_2.pdf b/report/capitulo4/figura4_daemon.pdf similarity index 100% rename from report/capitulo4/figura4_2.pdf rename to report/capitulo4/figura4_daemon.pdf diff --git a/report/capitulo4/figura4_5.pdf b/report/capitulo4/figura4_engineer.pdf similarity index 100% rename from report/capitulo4/figura4_5.pdf rename to report/capitulo4/figura4_engineer.pdf diff --git a/report/capitulo4/figura4_1.pdf b/report/capitulo4/figura4_idea.pdf similarity index 100% rename from report/capitulo4/figura4_1.pdf rename to report/capitulo4/figura4_idea.pdf diff --git a/report/capitulo4/figura4_4.pdf b/report/capitulo4/figura4_map.pdf similarity index 100% rename from report/capitulo4/figura4_4.pdf rename to report/capitulo4/figura4_map.pdf diff --git a/report/capitulo4/figura4_sched.pdf b/report/capitulo4/figura4_sched.pdf new file mode 100644 index 0000000000000000000000000000000000000000..71d5d157a8626ca1216518470a85f089c2e208a6 GIT binary patch literal 11385 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 literal 0 HcmV?d00001 diff --git a/report/subdocs/capitulo4.tex b/report/subdocs/capitulo4.tex index 5aac07f..880b393 100644 --- a/report/subdocs/capitulo4.tex +++ b/report/subdocs/capitulo4.tex @@ -11,10 +11,10 @@ \section{Planteamiento} \begin{figure}[H] \noindent \begin{centering} - \includegraphics[width=\linewidth/2]{capitulo4/figura4_1} + \includegraphics[width=\linewidth/2]{capitulo4/figura4_idea} \par\end{centering} \smallskip - \caption{\label{fig:figura4_1} Planteamiento inicial.} + \caption{\label{fig:figura4_idea} Planteamiento inicial.} \end{figure} \smallskip @@ -55,10 +55,10 @@ \section{Demonio del reproductor} \begin{figure}[H] \noindent \begin{centering} - \includegraphics[width=\linewidth/2]{capitulo4/figura4_2} + \includegraphics[width=\linewidth/2]{capitulo4/figura4_daemon} \par\end{centering} \smallskip - \caption{\label{fig:figura4_2} Diagrama de uso entre los componentes del reproductor.} + \caption{\label{fig:figura4_daemon} Diagrama de uso entre los componentes del reproductor.} \end{figure} \smallskip @@ -341,19 +341,19 @@ \subsubsection{Máquina de estados} \begin{figure}[H] \noindent \begin{centering} - \includegraphics[width=\linewidth/2]{capitulo4/figura4_3} + \includegraphics[width=\linewidth/2]{capitulo4/figura4_sched} \par\end{centering} \smallskip - \caption{\label{fig:figura4_3} Diagrama de estados del planificador.} + \caption{\label{fig:figura4_sched} Diagrama de estados del planificador.} \end{figure} \smallskip \begin{description} - \item[PLAYING] En funcionamiento, reproduciendo activamente una partitura. - \item[PAUSED] En pausa, manteniendo el estado del órgano en el módulo de salida. - \item[STOPPED] Detenido. Es el estado inicial. - \item[ENGINEER] Bloqueado, en modo Ingeniería. Ha cedido el control del módulo de salida. + \item[Activo] En funcionamiento, reproduciendo activamente una partitura. + \item[Pausado] No reproduce, mantiene el estado del órgano en el módulo de salida. + \item[Parado] En espera. Es el estado inicial. + \item[Ingeniero] Bloqueado, en modo Ingeniería. Ha cedido el control del módulo de salida. \end{description} \subsubsection{Algoritmo básico} @@ -446,10 +446,10 @@ \subsubsection{Mapeo de pistas y canales} \begin{figure}[H] \noindent \begin{centering} - \includegraphics[width=\linewidth/3]{capitulo4/figura4_4} + \includegraphics[width=\linewidth/3]{capitulo4/figura4_map} \par\end{centering} \smallskip - \caption{\label{fig:figura4_4} Asignación de pistas \textit{MIDI} y canales de salida.} + \caption{\label{fig:figura4_map} Asignación de pistas \textit{MIDI} y canales de salida.} \end{figure} \smallskip @@ -468,10 +468,10 @@ \subsection{Modo Ingeniería} \begin{figure}[H] \noindent \begin{centering} - \includegraphics[width=\linewidth*3/4]{capitulo4/figura4_5} + \includegraphics[width=\linewidth*3/4]{capitulo4/figura4_engineer} \par\end{centering} \smallskip - \caption{\label{fig:figura4_5} Máquina de estados de la interfaz reducida.} + \caption{\label{fig:figura4_engineer} Máquina de estados de la interfaz reducida.} \end{figure} \smallskip @@ -488,20 +488,88 @@ \subsection{Seguridad} Para autorizar a un usuario a acceder al \textit{socket}, simplemente hay que añadirlo al grupo del usuario propietario. -Por otro lado, el demonio se ejecuta con permisos de \textit{superusuario}, y es inseguro mantenerse durante toda la ejecución con tales privilegios. A pesar de que introduciremos medidas de seguridad en los clientes que desarrollemos para el sistema, reduciremos los permisos después de inicializar el proceso, como medida adicional para evitar problemas +Por otro lado, el demonio se ejecuta con permisos de \textit{superusuario}, y es inseguro mantenerse durante toda la ejecución con tales privilegios. A pesar de que introduciremos medidas de seguridad en los clientes que desarrollemos para el sistema, reduciremos los permisos después de inicializar el proceso, como medida adicional para evitar problemas. \section{Base de datos} -\subsection{Tablas} +La información que queremos almacenar funciona de la siguiente forma: + +\begin{enumerate} + \item Las partituras se guardan en un archivo, cuyo nombre no tiene que coincidir con el título de la partitura. + \item De una partitura podremos conocer su duración. + \item Una lista de reproducción es una colección de partituras, y le asignaremos un nombre. + \item Cada partitura pertenecerá a una lista de reproducción, y solo a una. + \item Un botón se distingue por su código, y se le asigna a una lista de reproducción, sin perjuicio de que una lista esté asignada a varios botones. Naturalmente, puede haber listas que no estén asignadas a ningún botón. +\end{enumerate} + +\subsection{Modelo entidad-relación} + +Atendiendo a los requisitos propuestos, modelamos nuestros datos según el siguiente diagrama: + +\smallskip + +\begin{figure}[H] + \noindent \begin{centering} + \includegraphics[width=\linewidth*3/4]{capitulo4/figura4_bd_er} + \par\end{centering} + \smallskip + \caption{\label{fig:figura4_bd_er} Modelo entidad-relación.} +\end{figure} + +\smallskip + +\subsection{Modelo relacional} + +Una vez hemos considerado las entidades, sus atributos y las relaciones, diseñamos el modelo de datos, que depende del tipo de sistema de gestión de bases de datos ---\textit{DBMS (database management system)}--- que vayamos a utilizar. En nuestro caso, utilizaremos un \textit{DBMS} relacional. + +\begin{enumerate} + \item Convertimos en relaciones (tablas) todas las entidades y las relaciones del modelo entidad-relación. + \item Los atributos de las entidades pasan a ser atributos de las relaciones correspondientes. + \item Buscamos llaves candidatas y escogemos una como llave primaria. En el caso de Pieza y Lista, no tenemos llave candidata, así que añadimos un ID a cada relación. + \item Las relaciones Contiene y Asigna tienen cardinalidad N-1, de forma que comparten la clave primaria. Fusionamos Contiene en Pieza y Asigna en Botón. +\end{enumerate} + +Una vez hecho esto, el modelo resultante es el siguiente: + +\smallskip + +\begin{figure}[H] + \noindent \begin{centering} + \includegraphics[clip=true, trim=390 340 390 340, width=\linewidth*3/4]{capitulo4/figura4_bd_rel} + \par\end{centering} + \smallskip + \caption{\label{fig:figura4_bd_rel} Modelo relacional.} +\end{figure} + +\smallskip + +\subsection{Consistencia} + +Para garantizar que la base de datos mantendrá la información coherente y sin anomalías, estudiamos las relaciones para normalizarlas. Podemos verificar que nuestro modelo relacional está en 5ª forma normal, atendiendo a las siguientes condiciones: + +\begin{description} + \item[1FN] El \textit{SGBD} relacional se encarga de que se cumpla la forma normal más básica: las columnas son regulares, no habrá filas duplicadas (por la llave primaria) ni orden alguno entre filas o columnas. + \item[2FN] Todos los atributos secundarios de cada tabla dependen de la llave primaria, por tanto, está en segunda forma normal. + \item[3FN] No existen atributos secundarios que dependan transitivamente de la llave primaria, entonces, está en tercera forma normal. + \item[FNBC] La forma normal de Boyce-Codd establece que los únicos determinantes sean las claves candidatas. Como el modelo está en 3FN y no existen llaves candidatas compuestas, podemos decir que está también en 3FN. + \item[4FN] La cuarta forma normal extiende la FNBC exigiendo que no existan dependencias multivaluadas no triviales. Este modelo no tiene dependencias multivaluadas, de forma que está en 4FN. + \item[5FN] Por último, la quinta forma normal especifica que, además de todo lo anterior, cada dependencia de unión sea implicada por claves candidatas. Esto se cumple en nuestro modelo, ya que toda llave externa se vincula a la llave primaria de otra relación. +\end{description} + +Nuestro modelo relacional cumple todas las exigencias de las formas normales tenidas en cuenta, con lo que podemos garantizar que el modelo es consistente. \section{Control remoto} +\subsection{Estilo de la interfaz} + +\subsection{Portada} + \subsection{Reproductor} \subsection{Listas de reproducción} \subsection{Asignación del mando a listas} - + \subsection{Control del usuario} \subsection{Comunicación con el demonio} From 5845f893c81626147306369e55e1d4525ede7156 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20Fern=C3=A1ndez=20Castro?= Date: Wed, 26 Aug 2015 00:41:52 +0200 Subject: [PATCH 11/55] =?UTF-8?q?Cap=C3=ADtulo=203:=20a=C3=B1adimos=20im?= =?UTF-8?q?=C3=A1genes.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- report/capitulo3/EC11J.png | Bin 0 -> 61683 bytes report/capitulo3/FDCC2004B.png | Bin 0 -> 103368 bytes report/capitulo3/HIRK-315A-circuits.jpg | Bin 0 -> 22957 bytes report/capitulo3/HIRK-433A.jpg | Bin 0 -> 42312 bytes report/capitulo3/SN74HC595.png | Bin 0 -> 98206 bytes report/capitulo3/barroco.jpg | Bin 0 -> 291591 bytes report/capitulo3/blanca_modelo.PDF | Bin 0 -> 21064 bytes report/capitulo3/consola.jpg | Bin 0 -> 275291 bytes report/capitulo3/mecanismos.jpg | Bin 0 -> 324208 bytes report/capitulo3/negra_modelo.PDF | Bin 0 -> 18164 bytes report/capitulo3/pcb_schem.pdf | Bin 0 -> 53072 bytes report/capitulo3/pedalier.jpg | Bin 0 -> 176227 bytes report/capitulo3/pedalier_modelo.PDF | Bin 0 -> 480378 bytes report/capitulo3/raspberry.jpg | Bin 0 -> 1687650 bytes report/capitulo3/registros.jpg | Bin 0 -> 256477 bytes report/capitulo3/romantico.jpg | Bin 0 -> 218975 bytes report/capitulo3/rotary.png | Bin 0 -> 22626 bytes report/capitulo3/teclado_modelo.PDF | Bin 0 -> 73952 bytes report/capitulo3/teclados.jpg | Bin 0 -> 181192 bytes report/subdocs/capitulo3.tex | 248 +++++++++++++++++++++++- 20 files changed, 240 insertions(+), 8 deletions(-) create mode 100644 report/capitulo3/EC11J.png create mode 100644 report/capitulo3/FDCC2004B.png create mode 100644 report/capitulo3/HIRK-315A-circuits.jpg create mode 100644 report/capitulo3/HIRK-433A.jpg create mode 100644 report/capitulo3/SN74HC595.png create mode 100644 report/capitulo3/barroco.jpg create mode 100644 report/capitulo3/blanca_modelo.PDF create mode 100644 report/capitulo3/consola.jpg create mode 100644 report/capitulo3/mecanismos.jpg create mode 100644 report/capitulo3/negra_modelo.PDF create mode 100644 report/capitulo3/pcb_schem.pdf create mode 100644 report/capitulo3/pedalier.jpg create mode 100644 report/capitulo3/pedalier_modelo.PDF create mode 100644 report/capitulo3/raspberry.jpg create mode 100644 report/capitulo3/registros.jpg create mode 100644 report/capitulo3/romantico.jpg create mode 100644 report/capitulo3/rotary.png create mode 100644 report/capitulo3/teclado_modelo.PDF create mode 100644 report/capitulo3/teclados.jpg diff --git a/report/capitulo3/EC11J.png b/report/capitulo3/EC11J.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd1067a7a90e78642c4ad61fb249328dea3c148 GIT binary patch literal 61683 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∓5|V?0q%w#v#< zqkzCM+MOFFF9TA^k7F+=eBQ;jIkW#+K|F$it9j(d<1eY2Hi_#OZy&oo)7jh{Aw_Ha zT7?zLR7+jcWeMj4$3i+^zjQ1}l~Gky$!icrb3e(FFyTa%72zPWA{W!&s*-Rbd z^C{7S{X!}G;_!?o6Xd)T1LQG%c2$0!R{tM!D-` zM3ew#V*^kSjVAiY9mi=s67~L6JAToKSUEv#9%ZDVye!vZTC zzfEk_N*=jERFmw~3OR?73Wqp@j-|Tj&Rg%cPyG5Wh6jWqrM_|TSb0?ak$ktrhQ)9` z6M5&~^&Yleg-UNiHgCa|rHm~)mu2>^m zn&D8`JTaONJ+5hx9*c`xj6K(&rEq1pjto{CoBnO>uHDpntKRTFI_%`TVj$DLH9xGP z;-SA~@P1Ei3Z^|^B|jtxCPyFkd=*4ZYQQlDQI4?g4@t<(1kkGn zpAryMk#iwKEV&?6bFw=3+)9bVr2q`aMtAZtBzv>Y1QYf-1J-8)f1Gbvw-q~ode=1I zJwTJ6xvP@JqSVI(^rC*8LYSOks!Z7sQo>iJ9GMR3+XOWaSH;?wu){5*f>VNG_3Np0 zEh)JGj7O|hcK9}09G6%h@xdiWWB~_?z@yhe`nM#qL^NG* zZ;rTR@g<3_xa)Iu=A138$Nz{fr;iRJ%&y*Xi}}q9-F?oi9We?n*s>2RtJkCSA;M1F z<}{iyBUj-7?w)M&mAyYO5LY3z4(0+mW7w6V&z{6#P>J+|uRP-0V@qaOi$AY!U4Oo| z9oZT3-3@u=(z>}G5CW4Q64GhATM-G%qg$;cdAy*+Pda8{Fo?&@{5+Rl=aIMkTNPV5 zriCJlU==V&BF~ zR`qS9^tbW@Agrob^H>`zRfO1i6EMr3&XOtw@nwR=0@wjcsd)|*x*?e5J$CuT$^wGts z`A{5k@1ESE|9wo4Yx7LbnB>wT!4zVq0<;vXT5+fX?Tdyt)E|RYD^lG@ymYkLl4N^n zDa2H9lLN0Hrf!HS@V+kS&J`mK76sAC!&O4nT+PF1>ONTF;qYlV09mVQJg%t7MqXXH zkkbLgY1YQ5R1uVhY1_1vx$y8@8*N&i@ad633{?%5(P-2C2_0QR0s4G;)^&letp`6& zQwjx`eZM-J{j|vk)@)Q%98_o$V77Rtjv{8k+M(&Vjol7HFj5tr@-IZO3HPG#zjUOUkqM5QXw3~@w?=Cvyp?* zlmVsw$^hoeE|YQt-AabSMJ4`GEmSBQ73AeG+AC|^686oK+IeV&J2yH`x<#wjvS+as zf4&Dh`uLL%^oz`C+co(I9MjnPG1Upz1E6$t1!IY&o+ZPg@?b}uk84FoA0 zXGPFr4YX@Mqh3H92%Xc3bYy)QLqoejAnEvbNI?k-M9j;)3I^%6wK zr}AFD0u&VbR|&h=_AOmQ30g^*p7#DqMH0%H#pTPxMf0xXxedeR>_sb`7gR3ah`$yv zftC9}=UempZ5{YJ1C(VQdrMy(dVf3*Zc!L%Z>HwO;Wu)aLBI9of%s+fvq&Q@%|xh@ zvT7K!%~J|?Ms!W_yx=2p6}Dt3r=@jyT77&%=r#yN{&I1PhC z4@j_9kE_rPyOkf~OmK3pKf|?A^uAe*?LLdDLJuLUPL48!=v1UGb!CzOy@zQI@(x2) zRta(TE>x9iaxUfTJKZu>4Ou2b#A&J6APOwRVI(W@kNlrQ&nGFX9K}hgb@zzR%ZLl@ z+5NdvXUUii)>g)K<$3|P&AkxFybAfL#;V^cnPdpum-yn zI+U{9tXYcJ7+6DwI(>(OIv$72h?9aJrND(WZY2s{ATGkBn0c>E(RGKNGJ!W)fgPct zay))8A#gDBGU)9LK&UcrHS|1GO)Pg6lbK-JKsVXFgIKNzEm!08Yc!*a);H0wlMmZB zk;=?jSPsV%o)L~shk}OScM-?oU(G;ZtD$IwPfl`EXmASg`dz{TYC~J1PWEG9En!+0 z^$N4=LfmOWg`r=CxD^G5nmPsz^aa)W4GF4>7zujI^$%6s=|v7-zDZOvO97GqHzwWp z_56r4wK&ii3f-v+RuIEX4J%lM+ulHyVc?$1y$Eo-Ql=4WgzbiNlsFwJ#%YPhf%}`vqFYE zhLK&pzqIh1yDL;)UPf&YPCXcc9?>!c;Iw&!Lr)*2iKASim%x+Sl*??Z!5lxR6M#L2 z*suy;_)@W)*99UcboI^F+JJ2?RVaY5r5vvS6?^yeO_n01ykx?q>IgqdBw|iYGI0s2 zQV{T>I;4|5K%27}UTzs8K-b(O#%Z=3eZA-!vAsQp&t`<_0%giHR?F6k%T#dM+#GgM)d$=fxe%?0D zaiMgRiC&`R^-$_)VB4^cvhK(Xg4dD8I&P*=5$<}(%DsaVaWPV=@DSZc_!Om-_x#yX z!=%Yr$rrB%A_mJ{zI}Db9kK_6T3dPmp{kZJiV?S%Bt~=DRKD2|IO2>TCyRlKEPvtm zvVPGeLPuPK1gKiS#F>MO1qCuP1v9(EL z)jKvGF-uME6(!*yNQGN`WVp%)Wkorqiqj@|CN@T7qgqFDOP47nT|QV@RV^xYFu3^x z3*sdUt9#+?Iv(*sL}_ZLE+~|{=XdS7rk*V?6;1i1txW+KKY9}sBBjQ}* zqM>}wsbjZS_~0Bf%Q7@*RF~9Res*i*V9(fhtR^ArV2M4!*7ya4CTZrN>}Rkg$N; zHza78)$G*N^-323ljH8lWmKmt?+krG9!rXkAWN|&)7Sb)Mh;KTic)Styn7%}=>#f| zw!j*})ZA)9NM=Y%Qe*-NRG*qp$H_XxI->ZLfs6UPmK<@A)|zKcKP77TIc_IhM|U)( zc}S|sL3YrHZvH-sO7?ZmZs6yEAM1;kr;jcoT(9FOS-)^a!d0@Z$;U>ky9j|c${o3` z4m1`<1jGM~^C3ZQNlfj2xjRxRWs->r?D3aFPXmm7G?Ko|FN!~Zwy@W+ zP}U)9Z!V?i94|u;rQikt1jM;YOHd1^JW@fF!EEE)oB$C_mHwWodEi3SFg1YQTDDtl zdrmJ=2e;qdoSo2SB9Sl&e?luMd7u3D9Qehf_n`?!vG64J2kGMkgKt|OK^?9(?zW2F zziQ2C)_k)ERh-V0*SIAUhhBl0l#F|@?lpE9%|1Qns-mt!$zpMAEr-2&uvOFz5062vVxjC^VQUpN;4#)jUAC}4` z+mmAB^xQw-^trZ;U199I=u$Ee66*AHfvWG|L@^Vl^NrcCPZH~^)RANDbN4k4WjrnI zgKxIIKHw_`cS)ZQ3AVmR?BWu0h1gzMy6+%fmuk%(xk!KiphEtMmz5mjXUpCsMg|)X zF*oCk=!`-W9Ts9V$$sZ4F7(2Y?lPPbfY8UZg03&S0=^SoRv3Vw? zuUXc;viTs%bJwM+fLw#^<3Qx87GNtaB{V$T&%_4QL(d(i;@D*pFwMD_hrbnQVi{Qi zx7_TLIZ!XyXo@xBKdY;knpOgcK4(gM(WF1@C(Gs}w#-lT9X~2Oh%rHn$>#ESWhMUV zCE}Fc!lszdAnV;~xG0IbT#5R&5la9NKgm6v6Ev3#R_W9U_@0K}r;ON%3+W9`(&R_C zWJ#%2Ytp1YQ_wWn5R!;oOi*GXO->wJ1X<<=y+Nh)YV1(jy`aYz$g`AHAB@aI>WlgS z>CoG7;dQ#ira+d6B~Pq=;D6+2+Xf4Mc_ASw5>N|=Ra5V-IPKVt-l`RJ5-nJApYNif zG&){Uc=BkLi+#FrL|ryb5=E_F?3Vn9*at4A2Zvs~e5xfuG?Z0NA{uqb$XNPlCTo;9 z^qjaGAErUXc7R1Yb(dsGn+Qj<$t93O+?@%fK1xdirkvA-!B=WAhzGh)&st7fMFJZ2 zsb=~K#*c2LVzO#&5)+%`ehv+nI;Ew5=mwM0Z-Y;&Z1o!H_Ce@16RZ;0|S0VUV|9)ak=b`@jg-}r+QLJ z^vtH3(VIv~6*QOxxNTx7tGp6M*6KYj%fqT#M2#=N08#Iy=f)Y)-DgO9i8cgiQt6Lw z*t0(_HPiwd@bzkG16k-hbrN-mDp^Qsy8XXUZ@00~S#{t(C{*K@{y2bKgQe~n9wfw= z*2PuYxgO|r$*F+Y$$WI>KM-i&7ZxaLUJwb7OiQSeq@xHmYj!LxS_V4cTDyQZ+2HPX z32Na5GzS(+~hv8|)2KtlP$2+g#h`lx<4?+$jOMYx2V4c>o7y$%( zx*rir!0M~0G)9RvS-sX<%nazwf`V#|m#Gf|@d7UpO(2=mEfH{R|5Vk;eq^~KJ#s$6 znSRP)Lz9eA%t2ADCmJ0`0jt9#XQ`<+)KM0bu#iGHlxrq+G(VZW8fp~j*)6u@pulc! zJZMy`8VQca{J?B0tNa$%)w&0p^R>5n=Qf~@8)BqbE8&b!Tk&(KvzRkWp8zn`E9luY~lB@_HIOI$qfydNhRmB?g zxwMju&jK3C?d%L%H%}#ad7h6PG+p}ZN0GO_q?#w~WTrA-lSw+%S3A3>%7vxF$u?BA zpdxPhiXl{{1E*--l1NZVXr9$viXvD9Nm28~To`tfyG zGJp8Uv|U(K8sZ62nWs%C7eLv7$U{w0C4``2TqTxtbmQCB`m=;oJt_LMNHKbdLTy>9 zcVn-0#f#wG()+^;!lT}1gDq~WOX4q?gZF(Sad6N@7F-2%5hMTlBiy#!2F&_-IPduI z{{@RcbidY#v1%g5)RK!if^(}Pu>#;CI%+9?94} zW5(2yyr)dX-|h6>MC@{jJ*Hgan2@>R86u&&ouA>XP8qPwX?2>^(lfb#8gD0bf0DnK z4_=hY=X~a0+6;V?IwE3X|1x$Gb-+FgO&7-JqB=A;CYHp*$ltL)8ydOfFQqQ71>}ur zh0|7&bWE5tr6JT(VTR?tEYmM>$YWe1;Tk)%>;U^%#`0@2GT^bgS^`g&C|M|Xxs%R1 zk}pE<7L(ACbN^c|O6BvpfZpEfO}Fx)&Af3jK+TAXDK(clqLis$plc|Q*L9~6drd$< zO2dqq(2Iae9MWlOF}{#?RNWJF4WA(nX*g4m<9Xf?69DuA!RMQbgNx&$dZ(fO9aI1a2ZIMF=ot^ zMj6eGFVj~3*H-Sf4q$6_6}dpnnnX%QcY-wJN(69*KcQOgdtZ7{DxbSh!k_sPfW#9W z11b_CVWNG+g1dNXVH%EaZ@d-=^)8J{tJUYc5D5uj45W;?OaYo?Is!^cVr`Enj79a{ zAtWO4s>VotQ2$2v3>K@L)L4l`q1Y`AIcr)fbttW_*Abn}+1+JS(6Phuo4YV*FG}UJ zfp1rD{*TSLA=IH9t1sz1ixr=e9?HS~t<1SiD-L`gz|cegy($?o>U$dT!m~E3-*)u>srId|8YlP)1}5Z2n5nZ1cILq`0W)%P`RDhYLnn~ST}^iI zPal}jhj>?dyYXHv{r)HxisR7Q$h*4qCEEzF+t{Y}JF38!iDTRyQ_<2fA(z>Es6VyO zShb=k7!qnay6YFE@(R!KyAFP|{$``*u#?ee;Dff^CpysB8S2GFUClltj`Z1dpXpY= zbC_Rh2Yrk6!MA;wcO*7SqyPoubAQkl$EZj`AGZ*z)waG(wcbF?>Q~m}D)y98ppSE4$cxc;3j00 zIwJx)Dp^*z4yPwDbc61t52!@lM5xQ8hw=J3%bgo3wfDx2Rjj?ZqxPimP(XdC-o~NG zC36MML?&0IF;kURKY$u_EUhnuJ}5gxwY4p3M zh*+&^OGQVi$jrX8urfal28qtYRyQG~X2l^ZEEz2m0$N5G0#afXMMzAh{kU`Yu7&ER znB)IIPL=s2|Mk^xIsVmQ5O7TQx2o?+mZyKs(eCO$Kl%OaNBVTTCzRf&67hP2rL?|( zi8V_=Os1&0j*M2nCjr*f;@^i#8Emz%v(%tW!%pW`=c8QQuW4w7=Qv?}qI0P8rtQXG zHjysFSf@@z!2u_Xb*aFfM)g{L{MLhp&OO&?PgKiIAt2(^4)hDLR93|P)x%jWLpN=iSGH9Pze{=a=$G_fWPHQ~YQ66fu>+b)W5r#~Dv{val(V&XXzeeAZ=g^st$8WsLn<(jyjuCWJ&2OUPPt%Sx)? zLY%oZ0hWSLocIcqznm&lBM@V^QaQLYq7Z)`KPz>FOz3DBVdM%q)is!DKNXOQ#MBZo z<3x6Y&b_JC{`fQk)2|fAH0qa9%}66^%opmZa{O5SgY^$Bzrt#UaAn|*|5^7Fkz`Zv=tX5*RfwxNVi;jE788| zfeBXFicyfR@oZj~qns<6Zo~*Hqtb*-eNRO}!yYXYYAkbYiDSjyAtx!<}u zXsJ|~4knmkFkg75%3?qN4b2ZO-&X}j*`WcI4(C9Jc`bya)tbNXe`G}_XS7ZOZX*g~ z=qHx`_n`qbP%vdo$%qBcrmKD5t_uN=3yrz=)8VM8%p4!R?JiW0?td zjMY>0+D7Mgy=2KD5hDpWN(u#2l|(?on7NwmM1R*nXKg1EW}|T487(L@;;FIG3kd;8sg6@zya7tp;1v!ZyBth?K1wvDSCqdGoJM zuKtES74MV=!;*lNw^&~JK)Q~W#7|y$hF^~ycRE)CrJKb-IRAnum1Vm4uKfFN|GFS^ z^GG1AUMyU|ioa&S$1}BlnHKAF*C%^5`qaAVr^Bk%4E(_B#$T(8#W^2UjO0ySVCmT5 zh?bHOYfqJIbw-qOR%#U!RjZe1shJZhCMwcaIP&zQ-iB~Qq>z{~V=5(a1YFWN)3G2S zBh@)&^oqnJoT$g@J!>7B(u(tz66uPL^=H;xC7^plb}GNDQdxw>w=ci{&Tr^;>>wVt zk*v#lbhQ&XI#4^>UofqLCwopXkTTVf?QAzHLY9)DRszwca#TQz z%wUi#@9aPN;H$>RXm(^=B6x$IDW7MlEQ8fImOps^`?{-rB6$yvyX&Fn#=DN9)JYPG z;Tq~K>+y`xdz2Vi`6Y6vcIU}jFLfX!1^r&+n-nNnXF{(2qSHL#;!_eDDq@xrZ@FDf zOr=7q6)D#$EGiWJGW2{E>!G$vq|6D<3u-KbcGp6$We4W)m6U*%8MR!n3j!aQ7m1^9 z2q@&*(y$`aY3h_lSKQyRJ*TB|_|>Z)yz`sP6X-A0X}Gic>n7rWgxxgqkr6(t*X#nmu+2u$(YvF3aPThB1Xc zNa%vC8TsVZj5WI)tKD~gb}8iNu2k+ndgnj4KXCW$4z4zS&F`*-RM$;!vezqGtZru4 zk3?F=_bH}UT}#qFOunC_A&M%L(!ZT$%A8ra5nCE*|@ zc0&b-uyPnE{Pq^jDIKwl%TWhoB-<>NaIt3W&jHsqrUay%P>_(&5|Zl#i)pDyFf6DP zR@t(WuVbbEW~KE>s8|tEQjp?|G$J*f#enbD2q#`MlIS&IA#SaUe~AXv>q4+vzya4V zWaNx#SP_uWif0$8bBR5LVZ|Oh;_$)AkK8%sbVMbkf9GK`tIt`hO-8Gh ztlvHcUTT4ww#1wMw*KnsJCIH%RqKIyD`m`zfGLU0#zPI=4ftr=R^xae3!RXZLj6lf zK`nSKC81RuOiyZ9kZP=D5aH0sdJqlEjY7E#3XwM>V5aHKA^~6McE7;Pi zkgTwjihyE(Bt+WUI@(ZAhKw*8b^8)5Sju=fBB5c8CHFyZJ>6-k%P68|fu*Drt+^Ga zb;(+weI-;T5%@NumwCU&GlTxvJZrxYP^DGb#BM}Y~={hmm=tg>> z`)!T&C`h6?#d_rpeu^?6^-aPFhoS>mDGBE+Nx7sHj-E&2@=jwV`GjN&enFq=5e(0dmRPPlujMN9LSW^IFcI6uH zAS$=*Xob3VnlJ*9l3I^#cDnUrpDfzRZJ_6o9P)8$c0BvTVYBzR&R9glPV2lxJh?~^ zTuH8z&XNjb3q9RBU_>iJL3bTS;+-XOs&-qckrYIMs1B~wXByyRDz&sbEOb&jBz8

yT)zySyJd{TkX9Xc_Jj*geSDD2#ClSF;{OC%DgmShhTj06Gz{2>7#G_2`H;s z3c@Zq;gFJ;3D?|>teBfM<@xpgu; zzsn`AGv$O6B4#vHG-|fpqAymNL^4H3CR?4<$2FD(9jV&#LbFsw#fY`23N1Ag6>qM1 zZ6jpGb!@4~1uJ41AkVo>p)+x*KlLVSpkz<8ol%hm7*f`rF5ytxKvbwiJU)DsM8_rA zzwwjvZ`%3H8~OrT&nzK1FL8^4LZ9A>lAOw`@Jd=~=K6^0T1&q`Jw;CgY&<1kq_f54 zT{!Gx$qjyi8PhHOaWADh;()d0syTD{SFZ=|kSM~*`O1#j(f4b$$b*y-6@@m(9UW`& zW=m#%9l55a)heLWPAI`>1P)kx%oR$OL>#k_cz&h6Y)!+0n3WLfj6KOVP=Awn`A17a zs&l(j_hQw)=N!{wAHVsJ=GWiQr%D%E>1J+mNUHX>BB7;bO+Y4gn3WWw6;$PbrHEKe zkyx{fW2d;w!*NVYul~Es&(rWu5&`VSTL?Qj=OHZ<9o(V!H%X~z2`Mz~7zs~LqzT%1 z95~d(84_oNENO^onG?yy#TlzR{#>km3}ggK6>>t-9gHr_B@vHM3rnfR@{Jf%>4I%Y zXqm8*dtD)dIdl|M>hWCLzG3DX|Jil>=3VNy-TsHGZ=RgIVN0c7-~}9WqS3U(aF1i& z$|DLxh}4GlflV=qaL&l%x_!^z`d|dB&k$jtIm|FBCFi>`qNX9k zP-tyoFzl*9b^GI~;6`^kIU+(tMIv`{LCi+`{9jx2w} z_9{k%KPXwLJgbf z&%760pdHWw|CTZDB=O=d*zk~BQ4C!tal|13Yg##>Sg}!u3(FoYt_A7G0@y1GHNt4I zxLIO`>Wl(LG?JE#v1IbjcDiThwQ?*I4MVESDj{UeniWSJQes%k)1V_^M65n$K|n!B zrkODkUbB(K0p6Bp)3Y1_-FH3x6pTuX23v-<<`TGX5bc+VSr=T0{j=B{(rmy zOU2IdpuMHmy?&X;xWbevGeQb-=A3v@M4?+fS74J7Bp1uFtM(yHR@X(tb1Zm@39&NQ zH>V2Tf&!6%B7tl%mgjguR_E@jF;etJ8j)S&X&4hT(ca2A9)yyDwfcJ*p(mA!%rYk+ zWaS;ATnJ1kCxc_RqoLMm25Uylup(2eHS*4BDYcy*vCBR&FHsROBGq8rs{DIZksTu6x9E>r~m6WT&aw@UX$DR9|2RQQud7rNtkfJAuBa!?rjSNpIbr-IuR&a zwV<7Tgofw^A7h`(TKI*7%~F5uAg)@>MvNYdC31%)E376Fcc7mLOYW7(PSxy8ifgSJ zhp3OkQ6uHNTN=hnUw8S-M$)fJXG_CaAAmsQh@6lmD=i6*$!RFD?8t*0C!xlW`@*tYFM4hDJ)!BXS5Sre&{{gK-Z_SnIo zY&xA#{lpNHFy@eZtXOHkZ1uLgnPsFP%gB$%*28+OhYc&yr2;}`+JhIK@9GSB#v)?} zA{0PPC-tL?qUp)ij=oS4vC9m@4Q?@EpQ%1Vovx~8P#!~#L+xWI9CfSZh!=T*&+sYN zw}p$p^0D{9jcZ2?xWpw-((XKAc_SL{BV9JElGwW&xJj#EhnPcF#8iyLwQUKh1f)BL zeWf>QO-4aM%90T|R$WXZ6@gO&jtQvAsHw>mZx>)mDacrpkZQXV=!6QeBus?ij2Myg z84R7+HobtwdN&pP*ls+YHC6AN$a~ubrFc;tQBb~Rv!f}C8r?heL}$cb1op~MPpcH7}jD#4B4oO5d_bsT`i>xR%-D)T`n*uKR(MLI zRjf(D5o0P2*k>#cNVm}qyqsfGWR(|uxXn$iH~M7~$*%fMbM1#@<9n4M)E{h(^1Vzv z(Dj!wr6y-3V9ki4Scs|Ls1J%1%Tj7OD_Jm-aXQRc>J05ACk|+I7i}r~o<=hI6%!?= zPL$$ab4)}gJ#!`IO*iD$weC3i`gc%qY`^nVIoY8Ci11~#c&cor^lS*ax&2}zZTTxzmlA6n!AdtGodWW{a|1SKddE@V9{Z89m ziEHumdl876l*Uw)luS5a#1SE|!(6uO0VN@cXxK&sYa?@ZXJ($sB{!gvokhzoOF}x< zBv>XwpeM{2GojIT2T$~BweAjA4iS zyPy7vlq4ZyMkH~W3sMP) zSSd=uk-(<}+7n0Wrh>sG0WDLED4`V*V;W|xIbolYtISB`Yg_6hXuX`Z_H^+^JmSzt zU!naKbc5YjtK=ZJ0$DQV(SZb}CSb)xyu*fw8SA%v_$QXXdit8v6r#Z2ln(If>pc(< zA9+i>l6&mx+_1!CjC`y>;zlz+$>4ATzQi_$790`Ui^meqqUkZqMil=DhKJ74{9s?S4 zmt5w6h7kc%jO6QXtAzreQmsE7%deGJcA-ARu*nYU3uD_m()v?-gRS)EPwwrB0un~d zv}ba{+Flx$;oPPyG3B>@8vN{UWCUtd!*_{zl(FjBT_4UX zJ|UE#b8~qa|5>edb_IGdItj@)DHod+d@yMBHa>BEzp^Qn&f~aNFLEs*npJtX^bSou zaua$UT1!Btt&;KDANTikeoIza?XBAJV4%Ntcy;98>OgZ&AkJUkPc`1Y9qqmBV7A-z zV!b(#J7FvR{=P7g30aSwPxLW}m~c$&n1|o`p}$-Fnyh>c(b{kx$jGzQe%4Jsp+`j% z#-v`pagPIPO*ge(h&6L^{cNn4uy=xO{MU?#qy)0wqqZH$%{JFZr_WgbZ<~pz^KX^) zNjj~^Iy-UmoM0p%(nlcBpYO!8&h%!Y%~j{mOc$q(_C>B_OTlc3w!o#jw@jCEtm`*a z!`hQ2`U|BVSf%49p-u7I0ix2X1-5$C`hj`_@Hs-2C6^?=W=TxLh>VoxTYvtqEt1#p zREZX5&{%~MScdxig#waX5jcJSeL}7c6o$~qvI399)IuIRKMgS;O>QDw%z*WV$4`1M zmCYQqt#D)@vPXZ0o5Z@o6&Co;p!LyAk;Q1m2Xrm*!e8^zS^+umAt;md|cK3^bmz=f1~U8!bl`4T)HBnIoNz^Y?$^ z1FP?wyhd!fD4rW}BQ~Zn@xb1$^S((Dk@C0h60s+~NB{PfSS+b<79(|EBCd$hn_Cb3 z?E`Pb(@WhWe_S_maomKu^;eAxFLp zhoF-{HS{Mzt!d7BXY7sTdM&@W4VoNy6OMkO3r?|k`lh}|ZJi(9M)d2b7h}at8Bg_e z*HTSJ&Xl!G4NuAIi-&NK0dBi5%iy@R2!lZsczpupZHMoO21BPR5A?Acx|B!@{uA#Sjty}v=@Thqp0eO6z;+sbd< z_WSQkrIq7uFfbA52GeNd1F8ZUo8}UtB$R}Vso(#h54<+lP!NAIU_?mFOtOZ+?_R9z zC)^7>7W8HanDa^Q(ut4m$N(WFC2LA`49-{DB@b-F7o*vn?7yhOx2se_x)2lpq?9_EuG2yxE~1|=xJ!k0i%>5!;+3vg;UAH zcSiO8kAGnO8Wc+~dT#tu!c-u&@z+i0b9Z7=Cd`;I7LUUcam+npGHN-cEh#9eq{`_d zvt!=?yACMzG1rEcx%4%y{$W2(e4oa86eqWrAVOb>JvLf)g!wd%GPQ|oYv*9}xGiVZf z4qfPl>-a|9jnT2l46U4(HXo1PD<;x+9_o7uWua~d(^jp*Gp8(xHh+h3>pR-+Ppk*p zT95s7QZE}d|dyu zn3RkWsrOxS9F4KqqpdbB35kH|6)OsFPf<}3ODWW_rsG-u5qC&fb1Zj+9`MUNzqa4F zb^|Je@i3hA-@f&imZeYJ=+TqTUj?;Jg-Y_(_LPXCJJliw{^GO#x?-!D-Yhe>U(OBN zW}Du%@v7?lu4_na>eOTxjP*LYNo}d5!?kQbVhRa?18+~(2TM4YDmhQQ{}(^7OkV9$ z`S|Q7%>Z8veGpP0Q^1%+Q+=efr*Fm_kG&QY*T{^oV8K%CkJtle4Qp=kN&Y@RC(eB~ z7$y7Mi`WBLJ%0nQ!3%}73_q!yg7B;t$XnkKTmM!^zB94{-Fo|*#Ossn06Fb1uh8cc zwdz3{56j!F?`RWJWxW85fd+dRSJyLiHWS#Ajvcw;1;n%*OaD;m)LE-pM_B`#=?bkL z0vaYvn7{vHuWGSG0K31h_|{eGz~tfm8w_sdJ`T1omX2D|&p^xip0;g#pAe`|&zZC2 z26s7@ydvTf*LZ|oVl5ZloRp9aCL4TqN9#ZJ!$R255zN+7V3Su^dxXV}yVaI>zVW=2 z)}I&Qz*B0NtP#jSwP(EG{WCXSoA|sSGeAw)YFsy^)D1oqodCdvyjS|aO~o-0DT(aY z@!>X>87rNKwTAVUk||5}$T3`|djCg1u=;^X{wkJA`tkXH)BaDn_#(sMbaPvW9yY5r zg*f2aQI;cGdC6|xsx^j;n4C}X9CHc^R@7YLi+Mt>DX~x4>9Lj(9i>0UgTcz)`aRHQ z>DHZUDO7mfOlE*bYfO1MrrGp}a1QZ)FXe^EUFWwH;8V1An~?H$BF)e9a*B z%;;m*%hbBT9w<;w+KiY++#kp6yT(Wai%8#Z&P?8V!QfnT@7EDmSzbu2nH7H9m5RNzG(1Q>xRs=iR2vq>;_QlU)vs!Ww1%FIAOw`aB$~&dqByQnL4dN zqP2{UrKf~j->^Fr>`1l&YhaiBTR;4_*55sLdvG>?#w&&bO_BVDZj3=4LRJBtl;776KBe z&uIO$)A_B89SqMsEEjt`yW0|@aB5--{0z7GZt(?UHQ+kes1yt+OQ*I5(#yVXVU0%px-fMiZ6s=U7i8k9=Nx;0NxCl18H3Mk9BBoegtV?N*qj9sH~r zG~RfnLPU+>7(*uH)!6~$+z0k~l#*Hj6qbUDN_=Oi*wiVI=Rw`*;BPcs1|HsSMXpZR<5Awi*XdJ} zbBkjpOucru_cL+R)QXZ!M22nR&*mhs{tRgRg=7>KS^KwQduPo+tJwNYu8}^l5)Gr& zn^CD4+O2ZKhvfEDjbMum*80LT11AT&bwSxv(@{sjAuyFkM5-(1h-2X0ti?MH{5B~C zF@Y0~h#8U45i_O4Fy>J1S;u6o$cdM)fx6JNSN`ia{im~{*SEQwHswux)h~SIZ~dYt z_Wp3|*IHIS+13j?LJ6JSVo;5H9<22)C$D+y5|_aS$Na6Go!}!D^Gh+74C=jlOa-n6MZ$x7}7zbOTv! zaEg4;`EI8r=a`r&FeVkHq2m?{Mm$MKOiLkqwGm@wmaLetW<<+c+q5|mB})>WG(A`D z<*z?^>@^XhPXFBFUwiFiV|{k^czgApzxd9tzx*}P|7J?F2qpc92in06G~ZFl!Lidi zEa5Sp;0hBi^G%A2y2pKv1oI~zaB|9k7{h{wgt1_Ly9H`(qqUqWA3U(mfCT-9|gmIu2pLej$kV(RSe97Wn?8^DVI%oQ!r0wChE>$MgwGiD*_e2fU2s zS7=}DmY8d-LipSyR5Ig)ii}EOnw>`ePQSxl#oasp&ClF_(`zDcPd{S6dgu3_{DIZ% z+Kb~qo&A`(+y9ribzv!$mRXifC_|+T(^hWxJ;y#FA)}?>-8B3(Atf0J4UhOwY$ryY z%MV+##xVB1#75}8Q63uaztTICv;+8W1J1R6j@pd3t>4Bp11NsO+1(7|)`RsuaMyT9 ztyS+74>s{;tE7$pDt)7D2SsEhra2L+T`-o}PsDwmCFk9|MMHhTO4oI%EXRx-34V(~6$^T&gh<&1aCfY)|oT7I`q4Cu%3=`38 z0v|@(`eZ^E&o*O9z?k=v@(;MloRpZDJ%w7<+N-8?gp4_)5DmH>u-v+V6N&L^MziIh z)(Sn|5QG@)l-j{H5p3~Ch8rFRM$5s#l*np??k$jq^l5yGd*6SULAntBSJ{Cvhy@NQ zWnk#c)k8W~+~fuJ_?1j$CG9fH_H?4OtT7}4Hd6UXSz-#wW!Oz$b?~XEdsuCi`ZPuIVXZypS`$-IV3}%yC$Gl!7CP83IqeM4n5V4q?Oh*yO9XKB=&$8MK}^9}LE4J7C9jgLD8yNUwBq zggU#rK~Lj)x!Qwn*5@9wMW<+VMfHN0-ub1~zui^gRhk+LW^~-;St8!cgasoe1e7eL z@eKWC<=iksxkJ=aLl&eI`X1K)ysd~idE1A6=H)MXO-kkA&jz{d^Y>cu#T-D_=(AB# z%GYE?z)MoDOd0d7{8|j3;aOg0$w~}#|otjQ&4zk%5JOY=;LWSJx_tY!6Pp8Mbi}8qvTw_AO zh>S;Bv*KA+ypwm36R@VCl`}&Rvh}VGjo3ali9{h4BPvqS%TkYkMNXaY_@_R2N5!&= z{_XF%`RJ=+#q;nd@daZBset|3F!A)jgo>6Cg&!?H!B;5GA>^Am;ivc*iLl4ZLRXv_ zy7McjS+eGsjy*ZiTJ425Y>&oE+`2*c5P1G-5Bys%i?dr`86I9YgR*M<>C+A9bia;Dnj*?{u`XQyJ<3(QLI`6|$Vn~^IJ7~+4V{f76I-|KKUiQXC`vN$fE3lPD zx?zq>X>6{AKeQqtrK5f7lOKHkeNR2}np{9lZhW)X!(tJsxScU`E$N)*#$cFH08=bA zH%PHW?6AwPkh|O^U`Li7+c3HDqv@vO817nw!KZv1 zEA4TW#$OzrpHo_aa=kLj4psmR=9zXdOW|qRLmI@8xzg#Q(6Qteu%e|V7ga1HqvZx4 zWyY_?%J#6ru+*Qh*4Y{eFzmgs5`|V7x#LdNy>v=`Zitx)aS2ID7|Zl#R47kJ(@Gcho95=YjO<+gCl8!4^ z5h%U*fScT-VCFLs?baN$jeNEO-G`X&hCO2jWX#@ZHS#ozNXv!5kIiO_r8WfrhGjau zyt=`}wE11m=iebn2iyUcRGhGq$G>x(e1T7}%lDFSnPVYW&UMO(*lIFDZJsMa0y&a* z`jw6RUlOlvG-5Qas7aYoaLn3=ghoK|_^1Bq%WrxON+ppmeE*WWm3U3=mt+05b7Okv zHo_-FtU2L6DKo~TJjM_3c5d)dUg8cX@=+>9aCA8v&Z2P1i`-$ZRej;-4hDSM4OqVU ztZyLqZfh?yD1E=54hCJ!h7K7G)|FOVzjn}#Y@oOy#K#s|+qbtJ1vR%hq2q*#T%J~j z88cdL@@Yc8hm;W|2@4_`GIm9WurgCFy)kmE>)1Km7_DnN3Svg&B#O7`KOQYEp=iX4 zf?ZwN)tf&0!Go)>L9dc{x|5-kyR^Zwmcp$fAeN^Qq*BHO>@wF88**9nq(}LWDR_=& zNjaqAO~i_{4k%em*XP#$FEZyEmsu+&rSs}wJnC8dB$17Kf*EXgH{P&j(1;GP-A(_o z=|QYl7IiW@wPL$DK?+`}Gqef{2HlaBEyp1zRIFLcTgo|OP3h>k!zXy0Z{sqx2H%8$ zmLp|3hXfpmx-}M7>kzI`yEE5F=VW9Oddw9#v0z3?$_|CfJtF3qlqqv8>$m-zztw(A z_&Jt};V-XL{+sCOA3nhaLSE;KG{J}ZrX!DRq~y3np&pj1lwxc+5&^-96dvPg=04>x zVXCjWQueSF^S;*tOfjq!8Hsp%Rxgwp^emmnPMZPX-#43qaGdQOk^9v{OTTtY&1gMH z7Yy2J219ov6T(&vb*=NMWMNrHd zm|*G1I3i`lT1usiN;{;2N*;LExW_&#M@CT6+fwa!#gcv2)GVJ!@BS}8_o`k%*OnC{ zuMsNMzPdMRsuw;W6XCfxG>(NqOl39rvQIyp@Fc$(!*hIuTg+Kv*Z~atia{~53CpOM z^D>{|keHa96B<(AHx-hKnSrTIvxU?Sn_A<`q4P_cX1m?O4!6v`&Zrlx*4p-V z8qu9KKnyIo%Y7ECC^+N=mW0AO_Sq%jX`bUN_>UxS?R=+{i$)MLVy!^&oUxXqAq5jU zP6&wEXU1b(C00g}A!o#zLw5CwIm_jSB_ozJ7*-_Q67l1sf6ykc>ZthSB+N0>>o5J0Uwl!GJ=*0Q-Fqc?tY{)6<{2!Le)y6O-HJEV;>&oH<7< zSa7J7Vn@b|3D-H|m$=HWO7+=GM3a#=`buwX-KsR z>%FT=CLA;2Km)it>+kA1-eJWq9h1lY)SrG8+gkX>zmWgXXK-0QuHWbdlKnT)Nx|pZ zvxtUV+s;TnM+pTvpW#a-f|~Lk4*B~WNUsamh`EL3m=P195Bm{|g6vd$ukfPAwAKQ`R2A!2R3!Nywp0hLZc*j2*J1W=*bq zW+&_&F{R}be2OpStMw7-h}qNk+9%3K(ovOKn^yk1jmSw9fpJw9sg;kFsp;6!wV1Ic zBw@*jLw2YYcC}=eh%4kgO3WjeuP(kgd-_#8RsQJTnLPQKuPm4o@J=j|;@X@IA9A0! zic)D=3IY%0Akb^*QVxMVCF{VWG(64AST0jC;)-yO6G94NQerBZ`B-5Ha|-X*WMxP? zY*jbXiT(}lyoY7GMGoi&60Z%E*ZMQVcoko;)y2evfA7thPq@W>a&qo7XT_2u=9)Sp zLiR+kc$x#ggLkt_!DV@1cXW&hnX%G!(MakFJc$Q5>&GUYlmo?ynKR3H11pMMokm9Vw{DaBv@-3Q#`Hcu!DE>`m2h}224)g&VDO>NjaGRWhn2HnD zz=`4^#=eoiN=(P|+~M7Pxjx-3ceyUGenP{DIVD#pShCNGlzU9cwH{r_Ccp*uPCbM9 zuA(F+pqZy5mbYfcF^{ky;)s}C_Gr0A#*~a1l{mZQyI$1`2#mGA=ll5!zq?_j7rz1~ z6c`D|DvWlqwTx|YXocmFlNL=8w?zt@bPoz0o_hFxPI&@nd`=*!45hT#Lmf?%LH|) zRFSo$Z=sIwgb5R7yu=MI^BufNf|isC2?vbmh*_}163DnMXfC2=hZRr~=|fTz6Zp;9 zn#-){JU4emOi96nV-`$lS(5QG5o2Peqy$`Jj}bH0l;Sd<5MFteO9hOre$Vec;n7Dv za8iEkZ&f3gpc9Z%fDC#vO(3!8H~}ME%u=j*XhcQJ(_}nKfhFWJzm7Fe^9gncxyf~| zk?=7g!h^ECv*g)ENMv?VX>SLvLa=w4{IWNSx&-=k}*ph}Ub15q_)+;VuP*{3R<-IvVRw z43t|Ku@q1j5XcaHgT?l-RL(l2_igL_5?rZ7thI~oz2;CvZa^*qR4mLil^lM;qZGWv z5qrFyC!|f9vJ!i6M!_{I76k0Gq9xTjbG|`_KK6MA&FUtfhF$v83Eq zsiZC{yY+2iL&Th2PWXAgkr_F#<}G{=e}R{|N=C*39dG9;9$_sD(3D5nr{JUfwA>UD za!y!j)#yOMmHy0@eSu>sh4hh)b}+-ZUZWGks5J2I360!vjkhxPIbV_KMGhxM;5dj@@rtFYYl9I6`;+X3MB&-M+^AsZj5=nKf zUtNS0tSLyj!Vwb;Q(@={mJx<4v|M6ea#du%9C|HfG{{IX1np~j0lDYJKm5#pXO;23 z;;Q1C8bZdb=xCU*62=Ox@&v6%O(Rm?!-PWujw$&Ne~rg^HxmLLA)){hauPBc*5Z=o zJj?SWJjx?vEV)lfK|w(zc5Nf$<3J*kKrdsVgE#kjpGLTiJ4Jdcu26V~(T>^ZE4sn6 zlSVqC_L*g43>h;X<1Q!6$#|3}H36lp8IgOsdBdKVBdIvDp>zs;TR!G-X~7$hsze;| zET85M1+Y)b4lx;bxXg|-DANj}alR~hjrhMaq>gsPx$O5|F1^2lThBYr>r{wEkE#UP z;8xzNa+5LGcP?)K9WntX?2-_1n-5d)DDTkWUr{h66S}f1_S%#=BMf6|ZF*V)R*bM* zW=BQBev97!it-uJUen8LMF|Nfeja>5|O|8S6EGB@ufZV}S{e zbD2PkQWw|dw#!RC#Y-&c6z^L}Ls)T>iZ7vN&6B*Dh6y3NjOZ||HDX(xO2J?$+IeFm z0f@)1L#cpiyB`ex{;h9YkWsN@DJ!cnEj7oaRIJz`CsI4xNl(|X;u0%D=KN#6g-Z5> zU(cS9gDWh#FPe4iMe8#$)*3Qq?C=Byhuq;Kz=SKLTp}goHWf7;he}MY2l=hNEpp?f ztLXF!26lva#vJNUoO^97_UmPq+~j3iA|B;EjM!5eD+;%41h|hW7_%ZHRnC-YKoixp^W2lL#iCGd*v&VfV6olO5r+JhZ zLq*DnK-Lhj%P}bnMzZ!zDOeFv5|dIg5y13zPB`HfbB+mUd4!BTri^)khyx17Vy0$( znh8ZObl_D;ML;6Wo@<07;iC;OBO@jet0v?&w`jS_qg<6+QZ2KJQaMS9bdWO&#&nDc z*pNA5AZ5Z8G8)EeqeJbGat=A-kdTnOoKS0p(lMqbCnF{R7M!p{$%rH7Sj}YpMl)G~8Nt=oqoXf=k+VxTRsijwcb-7*-e>_Atzdc#@KuH7j1?fJXc22^lF7I|Qt$ zC>b&L_BACDQyMH&(7f>omXbYc681#QG8|FrTHE0oPq0TyODZa(OCB0glag`?$jO

&jRKT2czbgE*FMq$|lw9VqfB5vb-j7293PvonpNZ67I-$d^ zbjnUY6tLzNEh9!;Cuc-P$(WWkEru~AF}vKO_6+`rj!Ue_^k$7ET)RZcV^rj%z)Ku5 zrxr3f0wV6S&t*y~YGUQcR}>hou;vCM3L1{o`_z<-nDJ&ZE{SlyCYJrp8q0`UK?xOO z8afWhsENth6?R;3oh2bPPtXyuL#nNKNI^@?id#&%!9IuF;W<|1p7PXcBbE}=@hl5+ zB`Y=*%$a-MU!$}GJ7DFQt-X8i^3tzPgX(oG6$o;Ep!)IRH#bit&y4?ZB>M_}EiFvV$Bq`+BvtTfF|C3eOh_rH2w6)T43@R` zf!U>?V2=Y5Qjvv9_9etXo!UMvGxa4Yfrlew3YM(6&4fFQSn@N}1hiDjK(*AIkW;Xv zrjkq3Mw=9pv&(p(rZfW*1zwf8Nr^O`*4eLB!}@hEmF;K$@7(|G|K`sp(zrR-{Shak z9qqDG2ePKck~1No;T{u~z%h+V%rXH=u5$-V#EP+ibjz5zPKKO{9RhM{rc{iG#XfbL z+k5P4gk4HF5^;?Y3;8)X)A))h6YdE}-{Hgy)k6*W39!!%EMo#zL=*%pn8=mdInT`* zG3OF%EZ3=-aY^S~D(-K{nt&y@Ip7|T@eH@*ft4{QrY2{Nq2?|Ja(#=G-VuqK>O}83 zl?Ha}?bYm-6HTuzumf@IkcRO(wzaSHT=@(C?04M%ra)U+$Bu|8nNe_})n2XSQ72}~ z#C$uZBO+%a$lQ&pJFIA!`aqeHCWn}kSaXxRlmaReCM=mSWyOk^6Hyh$bgb#*XAnv? za7@IM1LhbEV>)scN=F-0N%(b%10oLCC1S~xjG8Hyh6yF5w8o9r{cxRv$GEP%5;W{a zSk~Mi;w}X*bB}wJ#8d>-ltdg;=u*4SiQK5-t=?l3`j9earg5Q@&+w4BXSb3GhNjT{ zMfJM2wXgKFpB#TvNymhoDaQno8bl&j2ej;PL_|oVWUoq2Er;Zy7C8CFTxRB#mVs+x zO2rj~M4n&jM#NOpSHOaRj99?@4z&jNPPD5~m}$VAgoJxsr(wl}oP?T)l9Be;Zg=i- zOGauU8$vl3gbI6dadk5uh5=Cn_6JF(YQ_6+?zO zW0vgDl95xe&x)KeIW0#%bkg+(C5?t=ms2>SVMT^v%!&ZZnvN+owH$U!z)~>gh=7y^ zD<2p`3ap8kGH1duJHR0sIhHHTNolo#S`#uNt3ZpK6>}Djnm=$Zvfh(@@b|BrLsGOOp8?#?#%1EPhp=Cfy!-$GpEa0Khp*i(W@LHm^ zOEdrV^$#xJ$G?92Z%jVx;nh6e|CJruP!Y?Hs*uB3Cx@qqf-wyv8u2}9`Ly2P8heZh zIaCwr9HMV&YT1*5x@C+ZA@`x%DXEZC!&JeyH8GL!l(oDrox_x2%x#`xMI>nzj5*Tx z>8{HeE1BpVlX96Ofr1H_m~x$r2@NO8?dg=pe3OzTFL4MgG-xMuSe7Jo9C42&3vzOC zVLH$E?YtPp$^UDnKE>I|K9)4HRdWKdl7xVYa$upvz~EzB#19tp+O@Sue>M2Nm@#+0 z`=vi?f5_NZ`gM!&XCLiD=vwj2YvqKvJ|WYZJ)~ooW5z5b@;;G?`GKOccSxDikozvj z?LkUl#F~&bF%4rDVz8$^KY2mMi@cp9aqsrGOlXVAs0$;>S1Zr*JKfs$Qhkegt=ighdi(oElARv>=I5X0|M`li z&)cHNh%wga@~H@wnl)m{k`acrh{0nP5})4V8Yh&rq%66{fqI3QeU|b{s9BOQVS%9$ z6*=LUedbb2mmsZO%-guBK$Vz%N&;3~X2qcz<&qf*2R?DEWrson@=O!Mh=ue@PHCMo z<~onDLoKJbT12h|1t%Oa<}NS!O?sq`W6Yd2Cmbj<-VSKu8_!HLFiUg|?2Lqzkdy;& zR?=y;u~yiz>rYA&uNn_L;%lUv+zt@!Uc0t7sOq*2L*Nn_cmMmNPha}WuWd)=lv!)jUR zyy6_d<>r?YW~>=eGNU0QC1;1ZNDL8?+@J4IaYah#%gkx%m~g@f!wzevRH8qxg~$}t zR7|Kzm=j7hJ!0jP#jG;wm+aB9&pl=o+E8VLOlV2il?ka4L2}GhCR`EU9{HgJbll@M zx46!l7r8}DtUa;gyE!Am1MYK^hDwu}cDs5TJ8g1eQ9wg7CS+pvw?q<*U7}^B6C>wE z{#Sm0887o3ci832c(3vexh<4uZ5=tU~MSKT|p2hC?+rM5Qv<_7VZ@66KYM2$ZP!_z_uroPIp>~p2VGrVjg~y& z0c?z!=P3kC2!xnsq-oOtp&^ve3@dGumX$(R+pIJzh0rwEWMN1k4g@fB0Am|GFnX3P z+mfvLN_RT*+57CFe|*pW?lplxlS;*sw*S!blJ0Q!e)so%@AE!GEEIN%HolM+G_?&$ z42t4+A<#AiZhgMeIavCAwnX2g&?DCnwmJe|&x*&Q<4)C5t1`tk&>b1{gx_BZ=E>Ku~1#X zKU66H)Kb|Uk)ik{P+G29{=1*Z?YX2y77J$m?lr z{ZXbE$c)3txg!c{tTHBH3pE028l-LH2q}F5>^%ae7}B65Bf+IBx>P`qDXmm4850ai z2t{U0)GPG$mK#1xosxnkE>mo0h7kjN5@Ir;K|>zV+5+YZPQZcGr=?)nH9w5DwruJ*J&doVZ=TLj7SJ%*q1ZJr$dKD+Vrh6 zx1*6=hJ#04;|1f*lqjmWZWRKK+$cWB^p5nE}?=ONLX+GfCEQZ}%URaO|0s@R4^1eAu}6bY zmsGOThr1^^6KE$utnxK3B3qDFw2jnfgMY_mEMy06v7g zkY~!xA$SZ&f9-(l>jdM$qnGYHi8G+!?#`}&h>W)2<$@Vv_AsQT|68F$lP(a`B$3>s zv>uQdb;g9O>en~zV~Y_@GCI`An4)i$fqgQ%Ov#F~4GcNPw3zTSECVCKP&qTKYBfoT z=_p1op()#mf&mc?j?kc|S&oZG#E3BqJe{Vtij;&7$LP`~q{Ci@WR&F8~#=Ev=U9vsB?~e6Y@Pw&4^2X0)FX&4<<*~?7+JMItJDJ1B_dM2#xxGIq#P2n zbR;QwN=V3n25qT#dISvUGRK&bW5jqAOtVTxgJoubkZC5>h99SgOUg0<2N_tNtN9r< zGWx90VTmPKz~|OR%uInIns|&JbArHTd^l1v8bMqt5p9eQ;`B$1d61*RW->;!*~(LN zHd{(}i9`)WF_S^Wh>WhNj-Iv5oMJ$Of>3|!(<4?w-$ABGSz(DTIVnrr#tSK^t5{}P zl^(~O0bG0%wy`K9tek+&ED{hfO`n7YE7T;7i0P`xWA@Ua$w4N#k5w`?$%Wd_kTC;} zag-jZTKm+V3e2OfQPXPaO5YgDEuo5pakS<1S!9)hEi?#Z#aemm9p$Lx`W|(1`aDdZ z7m+c`6LG2Ga~q-hr#>Dn6-Tx%HngyU_Npn*@hR{}CwEo3%QSA8n$aWp#CU`RJb`^A z#1x_)N0jtMS5D<>Zzd~&BwI$45)uf5F+8)95rwqAIZcjh-SHW5gk?H3c`Dn98F4c| z!3wa8f&~d+$1)!_D_c)*dYwL9hWh?48KI^y4MIFl(2y1AJxtQ!Ade~u&9#D(TrT;0 zSXHb-qWCzojRrV0Xju<$vxYhr(J-rstAgnye^+$v(#t1)uA_C`aCQO}Sp^AJJek5e+?~`?ft|nj z;B7@C*SqA?r6iz+hsQJ}$0@D(U1pID^F|^2312O9<@n|)qRypBkAen0T()zBx)y1N zkOY@moy-coFPqP8|)){w6n(1Pl0Heol zu4D$(x(A%kKD&+QRxr1dl0eCY3FmUTt8SoRugsbt<+gctR5Xs2$vYH3;H={Q zQ%fbh=iIBKytLl+5krp9)(mr2-qx;KKa+72Xx9#aTx9A{mV&vMVU93bpM*Yj+2t7o zq9&nhgQwBqK8~=N26H6T*~x|62o$Wci;OlgLjqhT)C0^gV2Zl50F%lXYOu^4Tbaja z3YR(~h9nHurAIHZLYG5)o!fbcMY<$Zb9)ot-C!e|nWCUeUwL5Fmg-rLN#lBJ%BMz5 z#5Rk0R1YWUiVV(w0AZAQNi<=qI7xx5e^kjJ)s5x9=L`!gBjV1vNcIvR5 zlF}vB15KGAVTDDGvcM7U<578AXWD8Cg{*Am9Oeia(AD6;qpocS8)D(xWcUD&7?+5M zbJ#>*tCJ}v9xsUqhJD@R?6_N?*-s`TjG zCXW>4lP7rt0%%^_-v01^as`9?c=ToVJ0@a=jFF9rPDD_KAsLZ%%nnHeR{OF>&qN?f zBqVoeGNfdckVQ&XXyCKN1Q82_>|`Hx3ZO>7S9lS9HKYS3X)}pO!H|R|%XlPA;sTq9 z8Ca>SD=+C)CNz-S#eMWxVugY}nQ%)_k2Rw%E54K!L0{Er#Is@Eu4d1!j+K@FrDr*_ zmr}5-vjrMj7K9w3k3);|Xo|z~V?2q^a}NQVcs>`|KB~_WyE)9SG|hu;*%iZ;fk|fN z9u-hA*6-!uQEod0r2>=hSlqh*4ZeighCQ*$G(H6pGaQ$Rrg7TO2x+Kr90@V2w=QEu z#u%TN2FnD*^nn%~a;8~fO6uT%J~dqC*}{H~60?;>njFSsmXt@e5{;Np22S1bP3NUL zDw!d&B!dZ7$r#YWA;hPKPskKEv6mBy$#g{>FulW=i0vfwD9Ehw&ss|wtuv@_1edLu z0eO;!m^ty2xrL#H?n^mHY-bDG1muq-yPxHk=+a?IhQ|d9?BN0Nf{O?pRviUPx$@A; zWHPiCq3-Fx>*F#$cTlSjPXS|p!<*BMM_yCSgd=iRaF_*Bnv6K1TV;lYF0q=*^Mz3pS&w89SHdW-;{nj&4ydg9s#;c946 zpY9wv@%Dyw0H^^uthm!71_E}Vbz%yp=u8guppX&tIZH{nkwc% zY9Q0dn__i^m3!6vhcSJ({d8_RC00Di&yT-w^tpk8xLpcX3E2Q-G#Rq2eYhlJs5rH; z#9df2QiBr;%*`l>=xTmrQbAFdU_N4>4jaknP_T`COt8c*_7E~fz)=EvH0e_p%9_jH z#9;#-F+-L`TsG7yXpu7^W%V>30Zn2qWs0txF&!I8eu=pF>*gW1b9`5iPc|mnrTgXUG!I$6XljWD-+nFMIWQJRYJ!hf5{It&y>r&1_*#_Ffg|EmzYJ;>kL2nY*}`B^!MaYJLn3 z#U$b|CnQ=y*5b%rf%+!6*dbv+j!zw*(HlE|*gAAdBxCVv{_@eSi`$I~&%vWl&K5Ej zS!6&$iLdwAz)}rdN_y0E{_o34s7H$gpE0QtJ~O#dd*ZZ33~6$db7v5zq^ zKHC{GON)CMG0iG9A{mknl>KacuS*JM8B=4khJ}gHNXI@a)_Ed4qV1`c@T%EQc|$U96M(Z}a9?xMqxfNf;V@Fc#;mR*Kk5K%Ph>{@*t2!B^)QL5}4#Y<(SppJ!^fi_r53+-h9Xydb*po`3RFquB z;xl52Z*m{YHt#3`QW=J!=qyL29CVtr8BvNaR7HBm!eP21NEiriq?EYyWk>!a|M3(F zQRCgCSB<_nsQGds2^cVDXdlCroqU)PVxWkIRLa|&fRK$e-gm{`}D^Q5inwobLi5buWZ&p13;IMh-sOJhD5Y*St7%y zZ>O+@BCQ>^%E6(Ohl_Et4TX9dK+te;jELRj#2(-x8WecM`d7Y9`Eb^8Xj@zV5ps*=wEeAM*CW5x_4qi5iny)0(@c}+EWH(Qalf|9mR}s zm?mNT`wRDP`iNylPxamuUB6-PNzyFGxAtDQ?~^0fIHh{@t!TmIj3K(7fwy}ykTC-Q z!yc(~(f#f{ki5G8jU#horsTll;4`9Ni5f#1I5dDUxA1Ib`$z?}l$cXGig`y8Uq1H%GJzNc!cCGt`#rOD^M^}wqsNr0g ze0=!QT5^({5GJo(ncw@)fKmu@!k|@)qWFuQf(KQ+x-1?<=kKVpY zorDoRTDX+-mF$|&8R8Fkt?B;3SR49RKG zWJt0TG*-V49p3pJGu-0T=KZ!E>pseHOTv2T5>k+<6stSCVKhZw3VsIV~ET!_%2y zf;vCRJJ!6iZk@h-zY;`@bDSAVL^za08qgZMu|6eDB0}mSlb5LLfhGN2O9R!(5@TE^E1Csl;t5kvLm=!J*`Z9V)D&%EV9aol#H?U>8yavkVtFuEL(*ul@hu+N(foy z2wlR_`MXbIsRVici{08<=E~Z}40kU|KWpD!$TqJyrRH1v#fU;aM6%?cfS zIT-jlT36jtskXg}nAyrxxRNHDsWFL1#sG*c?gP;mw%)yZS(iRz3dMAnR__$bgnEuG zOsn7>5u|d3V4Yw^NvvBx;|)%#Ym=8|KQ+4L@RJN~X+G{iatfcEls-L1)WnpVX3M_$ z*En}Sh9z;Nc=4xh?QLBm;1~@8`UI4;WPhGpVYtVLHv7mJ5OWbR4|9NLP$Q5-T&m$+ zE=bR_QyXvHLDS58$JXH_r(jWBSZHd>W#%TKBC{hw_m{EC0xaUl-#Y$0MyNRCGg6qeNsPMN&*#8LXApq} zBKmfGm)S&j$F6Txbc?fY<8eg?3RzWelH<|m7^`IXIJCHcNdig*zGOU`gCtzQ6PVQd zyEbi(NQqRA4GQ{vl?ORNM!1fnww4v|K86*CFr1v9;Zhp5=ke4Fh9FBbJ8HRU={>_= z8_>4Bl}SK^8kf+bMoC?sH)zn<<~Yl07%IQ7iP6MoPJtI(a43CwerwtqD|g3Hwy7^a z$bbT9vFqD2zwLbK`ye$BAOGj~ehz9nnnk46jUKHN)n=0GPb2N{6(iXb#b_*%lw)ZG zl|4;WDuJN!iriS@(d7XhIqU4_sJ4+IFkpq9Tq(%Bi_7_3K}4NY^mEq+@>a~XkdlP& za3_Zu*@$poh3VMfmGAbmHmhF-+`)wu#FUoZ5?B(X%X&k%ncv#++|K0@U50GX{m%)Q zW0MG*IepoWb?I=NMB>&|<3%5syTNIn65GJ=zQL=;pX<~HV(VwxI9x(XTxK};Yt8@0 z4gZk4M|}H6`s5^9Yy(mymX-E|Q3!H3B!^NHRY%j)giv2Swyd;ZT@=CEpM|v(H)Hx$ zJ}NlOqr)+AO2(i}*L{>c6$rSDkQyGD!oyQ#ucJ|4PC(8gx3Pz|Kt9KA0l9d0#_BW_ zzi!Pq2aWrD5?t!q8hw?ED}wc7O^uyl`I^qR_Rsj_(rUT{qOlLbk9{qRs>p$o_wAvpzINaXDC&pJM z;>c=>)*Ip_0?x-;t}{YwS{lg0!VKWXmPF)Q?839Ym!>buImAtLK`DbhIWvqcAO;za zauplpC7anE0}He}G6)%PKi^`35t+!JRi`tgp(At-ngNa1ttyVzw}=5_nI2}^g2&cW z!&6Z{h8(iLxO(t~BmQO{Wrca2c*Z<}!winxEHlwY3LEt4>UF9yd$9SLQ&uWayD7c$ z=m!r!%M~p-q*ZLZefn>`4?4$w$kzLwqub4Ka+z8BBupvs#uH&D6VRTD12)ps$FrU; zu9Az`a+&gXowioWcH5fYa7=)<5O5F5bn*NJNFAKzh0j2AFbaJ zf6o8X`j+?yUz_gQeU&d`yj22xI`l;50qi7Xtlhe>{fi?6v`QRwbUrDpN0MtB zgd#r2XDDg1OA+HGE;|_V9V?$SWEv=ep4gWU5ok8R8t;z50UVh7)T9h1QiJU%DI6#L`;hK&m zj2S?o$^5a|>l)WO51how@;}fz7hK16|JbkIer@@7Ckhy{lU3RTOs!i{)^aIIp{a!( zxm6#t`nxspmtzMFh1?2Kf$bT8!xx1EHQ1(q?US&bfO{1`UdXNO8Mut8lQ348gV|yS z+|B(g+O^J?zkZ=m&5A|hDO}Fi8ioz$b=KK^xnld6Xgt>*yGtADQZo2H5{&wNN|)QI_v)D31Vu-+N2(k4cd zzZ8;ilol1rhzY(2HOU*7S0}eWa$YPM{a9dKs8mD46P#h@u9^4OKIAN(628jGyPo*L z2Y1}?P7j|NeV|KV9T!W<6smB@vE5Xhb))%03vJa>=ifsLl~Je1?aDtkoxnHQ%K7Zj z1lVPgU*W6Vfy0mz=T07BNFj6fOb@sqq_2lxnH(Ev?p!Y53hG46vW+(1 zR1;kz{jO%YT3cLwmRyJN3c1PH$m_oJ8{dojyjVUb_}e|tYT}8Vi1n3&Nj5Ib{AK)s z;LcORtv&hI6W(>t_AmWvsaa}|DUQN-VVc#X)UlN4YEtaj6GSPBLAfqTzIuB@GCo48 zm`lTFi&)?(Y|}#tNvQKmp2Kl!%*%a0#$kbnd5{GiF%2y$loNHKvy?d$N1{(OxsYeF zfoZ1MO2IO#%qe|&&3|&e4xntv&)b(Bh}Frt z#LNsge!O*^_XQ_EB|4x}wz9lsu=!iBUM7$&dWfT8TWEP@o^>!;!y|Hgx_1P>d3K$t z4D`$)GR5T(uHxY`YI@jT;Ud|l=CT=VF)NrXqQe8+MM7W2mx*ld%GNnhpmrf9ibKpL zJe~7sGQ&n=KLLffT1 zqOz_LEv(^hWvu55e#&Jj(dRCnM!;Cc$dx*9z<$2X37ts_Q4oA`(WKGF6?7r9`CY3GtPyuYA4MfRoqE?~XUKf4P(*qof@VMq5YkW;= z45$%FyVxfducPD^o{S^U0rRzo_!b9flWRcXkkZm&6x)koX_pn(#AOq&RHjd^*-|AM zF+<2i(v#eZGaLbY4OR)YX8H_OFg}gZhQFQs-|kI6#3N66FYo`uk%tI zQc619#r-TYCKbWlK=_r^HL(^L&N`^wQNCi%A?{}}ROa zXA>z9lhVV*r(RCoIQhZwV@~@dkA8U^Uf!X>%d(r2**+K1ew491~|jxIwyrkMF={lm4t`azq{8C)t*zrXk5 z`@Vd1cE}Ev=#p5+%G|bru$Fu=Ugxf8#F++iT0=z9T&Qwp3z?-sOilPlgE~V#%7|6Q zG6wY2=QuhWc@)GpKxK_6#bcc915vVTj|rl5H7s;AHZ<0yO{tA%IJr6)ACYxs^PYSXs$6eCe&%hsjlzUV-d!*1lr> zzewZ>X-+=G3OJAQ+W>!kc|k*n zqi5M6rDfi^%2jsP6;NP#Ev1F(jNUK7p~)rm$%VjrLNQ7!bsO2li(*|n>jJSlpt`2c zteewR^KVCJODP_IxegPGmG&Ot5;DnC%U6Bj{A=7#2KsjX&D{L|>wZ6uOT|vDiOCt@ z5Xjzdt^M^ydU7ptf|mOX>|o_4v0Os z2H<1QE3OW*mCo5=J%K4Fqsb%<&f_I}pZ)&EUj&DKRPOU>P%38g$f<0>*RuIaOR99O zW0AMc6ezY#{bF6gcmmDVD3*md9Hp2j37N{LI@bi$Ifq?rA!HMu;vtLTIP08as-p0T zXeeKBeI&NoI5+Y1^r{bUzt*|gD}R*k^J!2jC7$?Z16hV4o@zj>2kMYgBhf^rw5i92 z!Q$)4TPQHw7v;!AeV1b8qx_*ZSg(_u7?@@!&tNMtF53ujd6&gLN(;joQgf)Jp;9e- zm8((6t2$z1@urvgH~r|{=hL86j33*Gu^@e822{gU7>e)-pMSSY7OsT4%4QWx#dQFetd?eUNrkwrdpd*pS5;#R(G6{c#6#l=(1+}c^frC>xs zNJ2@C39jHN%rea+8>llD`@>m3lOXZ|}1mktvl|a1rl5tX4}17!VY{nz>TfnZEjP*kVQ@* zJO-UzJQ~E(78iI-GIPh|_5StFfgkl(@^OD{_{>9p{Ks!I!gUi>P-9HN6ccQQ<+%-)E1BkEUeLYphMCVkcy;g9 zW;+-V3ct;@CAe0lQ_9aECO6aPqodb8defeuYR3`vIVWHswNPM95ZC-kT#4w78mAPm z#i7m?o;!ZoC%63N*Z$xumz>9C<^0z+eANAzf8gIp}{eIP!SA%cn)DfY;7{-23w1 zJ#m`nEnN7))}I9rtpRkb!*2r#Q5|(HvF5`@foOzcF3AMI+@Ie4v_Je8rWgWwCOMY> zRz=N~b{6g6D0jI-lMw+ecJT7jr``-De$=i{|~I883^MET6;yf$B`ec8z# zi{(~-7S^3IQ{P>NGt2;z?zej%4s$iUE0VbJVEsyLka?pU8L_g zO0VAcjc;tsWs+5iLw)6v_%;Bmw6>&X%Jd&jTzT!pwcZ|1qs!-Xze2}~J0T_~Rf8Pj z(-Yarmuw?v28ScB&feyi0O6y*W?X zFMa3fS14ydsg!oYQq6iwjp(ZX3_&qc;J0yr`S$OueTNzDs5lJm4D`yfv?#;zqo z<_eM=aq*WXu0I{`I1N6Au^{FeKH}z5{Jst1kX@6GnH}cUn*&AOe;bh27r$*cAN>Jt<3xqMie+i`CAG%$T@?q z)4o(%heiy^C}^{V9=V{lE+ZLnwPavgP*9W8!6YGFA}*WFZ%-E+n@wP)=lUP%Ki~Nl zfVbvQezsIjkE{8uB|I8H$e0=>Im`6O2#CdbHN0D2;ddrwXbVr_JUqf6+U&}csmEfy z_i?s!MqbY8{sFU1_v}yOWflp50Xkc==MQk9HsLLR=Lk_Y;M(f}e zJI>5fIqg>!e_`=|JoLMhlyYaAAjKshQ5H~@Cm3pad?B;c6|qq9Q`+p4x+tfly`(EYij$BLWiXi+qCH&eT$I&Xf<@ee(lLS451yEC;=&Y)EVO7FnOkNkuQP-#;#CS@Z9lWb(nah8;J zY7z>~RVcaG#bc&_!CU;lfU~7?23+~XzFWFa&WKn7G3;}e8B(Wi1KS+y^_0mqE@uAG znLn?;$61B5rE-Q`$<{}{KG;&?G9ppB*8*c^q`&gfEs@r&>IRHs(i9JgsGMbO1#lDXSAT;u=s>CS08 zTPi>F%JRr37h5KbZA8eJkZEQYrav%ot^2^)vN&5R>#ppg10OqlaY3Jijcm#`-q3iz z|5+zHTM}olzmK!jyMJ_Ny1P93o%HSH#;DV@@&%5V8Byxl P00000NkvXXu0mjf==8#2 literal 0 HcmV?d00001 diff --git a/report/capitulo3/FDCC2004B.png b/report/capitulo3/FDCC2004B.png new file mode 100644 index 0000000000000000000000000000000000000000..7370667eb3c410a01f6ab7f4fd593a45d9203859 GIT binary patch literal 103368 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 z

&-;Ag+%vjS9}7IkvdV<|NOS=j28`Tzd5zS?D$F3l%~^zFcxMl*sWMI$7AZcxWH zY6YVWH9>tFP6nk4hm|oDRHghdv_iR!rfTe6v_lw2QK5|{o!ENN)h_v~?qo&vlV6(n zgK2HRg{Ap!v&Y?&j>)Xyi4pJZZ<`98&KC<7FP^CPA0t(eT`$Asl>1`sknI?|w1gc8$%%c! zt=GP*i4_{QY~i(C2e{I=qlURuCXNh`GerdpIqOFK_P!N3e|oP*n>ACIzfM5>Su&^B zwP!cOTZ6+xufD>T^zAJ2=^lRFS?}j;N4BV1J>i~K8!=aweco2|H0nY#BS*g7O2E%L z7FXCmA^2a^*ioW1$U_gkjD^&h&A3C-GM1e%`{_(X!`?rx)#|EGg8U^ZXHu|e9MJ=8 zr#otqO_@n@V#YDNU1_`A6dkl`4nKOL?OQhau6OS1EUAau4|XxZ8e2QPJ;^5|rH(M>}XxuK~geTGQ!xC4FF02?p_X#(k2oFP~)7#lubp;7Ak?uUIqMrSdc&w58=y>kYHH|A3Go+sKD+!Js8 zUd)9Yxc9atHtev>sn0kk%Gh&EfYR*puJ$7zXY<&5z9H5p%rNKr&go_-AA#D5{8pSh zbGb}ici1Z~ZltFHU%r7OVD0&EGpw1Mvn0V8{ADfyv%p#8Aqu;LB^At)32KFeCjMw- zgEjSL&UR#}D?^5z{?RMC*;@G{_!xEIfxIn6_(a4>df_ERct?SvsM=%DPQ{ZCBH=CB zb&22+WH(H;nka479&7EHJ!r^ zkQyq^RZ$G^SoV_reBq0baz-SqmaRUntH5TYKy~dljCS2bD0g(umf3CI7!?%wcMTlf zT=ER=PimxJ@4+aKuJG3C0oMA|JwH|OlIu>|A-hKmC-3_a_zx9vVGS-(06i|tml&NA zO(1MLsv^!;TeV@{gTW?*39-D{uDzvg4DL63f3GX*U;x@*B#J$*8;0u%m7eV08|HuCb%`wb40wXyvs88Kv*LJc z*cl;)r&=2Ca9P>XkhsT6-?*T!`#vIjtt%eyT|qaphN-Hu4t6_HI>q{&7QNQtI)|r< z#NG8ZN1|rbg(+f#e%5?K;6M3#K2hOR0|#fthyrta*5ql_joq-Yqlb6D}OJ5C>>ucUkkw9O9A z@tX2X=p6G%dn7)xmZP^O6BykMZntE*I<8h)y=F$Zuvj5n7KRVWJUBl);=fD>uTQR% zdhOU9eK)zH5PQ`MnBL1%3dG5_rMK3OocarL1ZA#%!&dQHcDMfQho)vM=w9H z9Mp%pg>z{}-g&pUrHL0iL}U1RY*T;ZPQoh8YiOU zGQSEvg!$;sXb0FS;1MXq-f<~yG*8sw+-adI>ZMdN-*r(G_L?fM({9H1h&`FYR*o$9 zY;dBu6I8}5c8)O`{*re2qrfn|_ZN1Urz%t7!C~_q3+y6m*YtkqSZtg}hL*gZ{+Gv8 zUK@|aS4kfoCXAA3ZSi=5JB6Tb5kasE9Ao4T@>4IW$g5{9^x zPPiV?JG6e70CiPpmw(=2@f5(67yl+a{!(Tvi74pL0#nD4x;f{d9P28K_ftt0pzD+$ zax?NMRrr*&=OJ?5qWEvj;=CnbhpA~=*$7=bRIoTYh9N^NB>$+^%~dKO*sYG|^I``$%dX-a4i+E}if?n@x2D2_s5mi}d7N zVjH*3)h|oq5_c|-Y0~jfz}_u!o8ivQ{6Dzp587>f_4-?bX}N1_ee_aW*m;Id>x{qDYLt>f#5|*_1D=1k&!>k zO@K!b?%(J}$}n-^{20(lVkH}G|Ad?nbV>Q>v6MiCTfRVn!}1NnJ_jKZ>x9Tj1uP9iCXj)_VC-pE-#>c!QRqyZvP{97 z;1?n-zqNjjt`dK7=QwdDsfiX&CNW8be?07h$^`hTY3d!M>~N<%B=`78ns5H*^dP@S$XG$qyx6`+b6r1xAnIG)mHi@fgie`K$@gz z^K~DNeG-J2!fWg;0$uYWHf7fS2`%>kJ&pHJiBb%`Lc_A3Hun!ROq#e)#Jy8oz=yZ8 zRYCFqj^o}G0I~>?6gAEDo=>8FksFX$y`n`k%VMCrhm%Hs`VJU&hQIy1skBJd;Sa-%8?ucIVWI&V|YLcKy@i6#fg=2)CQD5EX!m zMa|xOSu&%3$9bM{r*w^|hE2$!Ow>%2&8Gyr655SEwHdM|6fe0pNxHDT0F%a`>t+3& ziiW>t4>x!RA{xZHpW|Y{hW4QT6fEjxZTB72OFA4)>NprCNM8Gn;&f(FaVjB2cvJ%s zrDG4l&k!aOga(m|v_OcwWzMkA@8o=XW=j51%!GBU^V|*n{D@hVR@G~-^X0Sv;78&ze2Ep`ZOzg6|*`?jFT&Fl`Uw5Y5XsD ze)S*fTNyT}R1%pfd>MV0`T$tzZUMm^XNTV1G{K*bYi2t}NHapJJEUr~9izW}Wa0D& zT0r4$!{zuEDKE)5kXY?gDV{P@p?E?^7csnvH3QSE|-}ExyPt9_VAd%=ld@Q*!jhp z9swJ>`0w3%EFq_GXJPN%w%JbGc)3wH6u{-uUyD!njSyUy zA|0@}{9D!MS){OUb$)_LsJ6fp@=cLe!yc*KxEZF*7&)W=iH^=MnG+xAC85OYWA7hW z?ibccNbS6RSZLmn`>x@D@^eEKl?<6cjP11%j&~TU$eIFhnt>UmJVIfj)MV13&N9xl zm@qn+?HBPId>#O@W3-cK0Qm+NRYGurD*}zYbhEW8pF~arjl!Tb7Vsy2(GMqRZMIy6 zce#G2gaM=<9lV#B^#_Gs<|DBfg7b6#*LYZlupHXP9uNtfD574k++ZkKm?4Brc=!+lsamzD`cC2E zFZEWrm;|k0m)RmL&#OY`FryY$t=Ji6JSIEU#fJsind6squoxdX1;%c5$NJ`*;^+jv z?JLk5%xz%h=i}?t&TSeZmh5%`JBhKM9Vvu~_x8&G-aRtkKMfEzWrTN=J`H=fQGGgt z7u0C%G%>9)x5DINaAmjFF}PD!{XzJhJ6>yIwjb>MXrbDVLZLN!bJ2p~;QA+|lRbmQ z9*FoJn9VqR?32cv_ND|YNnV!%eJ%wN~8ykz!tM*-rg-*_Cx1W;lsN>6GgaZo6 z`a(D!iH1UOSV})|IhO_7M2g|T(%IW0+K4%Phxg}xpE46MZGKt|ZPhH_E?a`}&p`dz z`3sk`=8dIu=b-(ZXPDdEKDo1b1gC2mWGQvh^8JRV8Gm&}Bt+s56z#W?B(F8ixkA3R zmb-WXF7RhztTIo}tQ$yc?csy3&rksa2*F>GoGu8j^lLq=HnZ{v-+yuuJ0J4d-GNl;D4%~o73b~PbeT3u$T_n8>lJJfX zTukYBy?mx@#EWV|`&A44#6H7w+t~4*bsc^e0snNDC)@PP86QTM%0Y;Gw&!D46=I$6 zEcgieti&OG?pgdS#1Juv5vc%zodj}|$VL%zB~rkP?w4_Eb-Q38Gyk*7!tlv7s{6fu z%(_4wGc{JTn1jB=oo5dvQX2lh`x4JhmYtFl6F#3yc zMF|}(gH>W&zB62?ta4)HK~tz^~7G?T|U zgpo75(|v8}=~hF-)HEWriVhK7PW0>4ic&V@bMb&t;c?C8j7e}6{7NP84dMDl;Jq~1 zIJ?Pj@<;Phs1CJigV9wa8j76kw}HNlppBfZz6>jgtUwG#Nq$m5=-DizS$1vOR!O4@ zQpcLK_VeYG-99`_;gs-P1R|Ki;=bc$JKKwwYsy-e3x~@{43%4e-g$0GoPV9LgZ-M? znB7hXjP#WPk0V(E7kR&XW-y{lIza~jNQ^G603|vPaxIc?=w=@luh=Or;va}Wqw7Kp z-cD1_4==}LuD%w;>}^7grHoNtX4$|0%9x{h@`-uGzB*{+=DNq(w~xXWrRH|0cS@O{ zDw(7Ec?8J$GRi@5)y(u*JsI3Wzi{U896llV3LP2a?zBS!V^W36pgFUnVIp97)2Svtci@Z6Q|Nip_x=mgKrO#ty)Vy^ z+uHotzsOLUc6sE}86Nm`4~5W@_z30ySD%yo=b!aCdd#9&f%>Ay+$}bz9@fwP`TLdG z;PobTW+B4|e>|_>eLztKo?Nu};E(I^=_*qyGr_pdN4(|84|6MK(*WxGMTj0W3 zk9WS;=DvGe+$ciWC5O2y&LJ(&Zp7Iy5>Zm-g^_?hKPl$v&fu}%OnIVFwBnd@+03y?)STTsZC_{5h zO+$+itgnfLZC!ObLWw@l59)*T!XL`3X0QEn1FIlT{#z!;E+d(q7rjy$nkU+ z;_$2Wn9moNgWD+XVXTaF2MS;uYq<+bVXDw)?j;3nzMV5pI!X;}I&@t4ufHgnnudGcpxgGb2Q4Zf%4h4_}IgOjdO79CEXO*4#wxf2VrB~ z;-xRQc*&i8U6!d+zf&B$Jv&rJ$F=y#FDj;{Ep5OceLnFQk_(H9L&xA>{z%t|_S#{c zZ~jI-A0GVE0vip*D_?7I{jokS!{(}SKZlex<0=$Vi;@~PQ`24o708h?c-OVGV*gkM zBuo^CbwpwQm`G61i~}>EZfjGnM$t;ZVQOwq0sHn_*tQqWtFe2)Zr1x{eiJyrsa+bw zTnoE>MI6HjY@3D<#wne5kS&keFm@`-1=d!5o_yG2Y8F%%gsVc)P@Ef(>0*q8xa#y5 zZO$%uyyEU&;#|G-GHUyL4juLBxtf}ETkb&N{V|J={i?^&m)YF&2Ho~g|AFA_=RA0i z&-Z+vz-_r9#o2WAcRg3L=us$NSn~PUuX?a2%ZL86RZ3uDtxqmak1hS&dRbv!SbRh(aXyBPM8MfB7_vhAnoAR_)z5$eTJ}2IwO)rB5^!0Cp z3wH|+?DKf!b8VuoECoqeR;UDZEvmqQ!xrE8k8H|9abelw!m<_Sk9wgVoAbw-le)$N z>AKsS6e}eT)Otw#A;E?lfo-MMjp=4a3oouPnb0LJx-UVUdfW4vJ>=`YSM^x+T+J!o ze0PE4M+U{*_EJT$A~;ZK53FsH%2nwP@*U9m@)D!)hS{Sw+l>~t-jb#1_QN^U#AmA5 z=FWROYR9~A&fIdMg>7e;J!*%_+-O~a-sSkMdR`r<^oS`LVhB=>0BD>jIWpfuc^PK+ zc>|<8f+81@5~d1$?zp=^amr$%*wLb-U_F>J0z{HDAh>=WJY{p}n3pgL4!+fPw#Viz zCJ)%g+}j&3B^b57FVi~dvh@rv4#c3uXg8p%ER8Vv5<77Xm!o8o{;tJK(r^rmU+}2! z>uZi7jinCR^x!^44r%H+{hX#APn_t*DV`MMC8f{r{*DNh&Zi#sIdO+Y!_msh6L(uI ze8FQ5I}{Uq&1-$K(&ftwTA_OMm@ez=8U5|4$9(2*YxCZJJwQILYjN;cpX-ll?&7E3 zFF5tspw4I+@B85nH{aP07x)k|l-dGm>FE+rKk4%|uk%O3w&TL$7d-YmIaIfI+5QWc zB~DD#IqUSo*Oh%f-~P>UlhGhwlx4VZR_L)i>2m^NF?<9rQdV(sIek_uQZJnJd3m6e z{es7w=W+kLeM-{ONFmbRl7y{opGQAmWZtquRP)@KA`4&gIey%52~ltHV6#=tN6=O}7enePIn<3zrt6_A{eZz9%^rQ3g>KvHeq2e9F0j)0c<{ zy<9`l3kghSLdAPf7Pde&ESl@XqMU&8uT1rb+T%^+TZoEJW@7Y4FN6!W2Z3;RhcWxi;y>`GaLiu&!2+T9$G z{`k4IlQKTKZUclcj%#@Fh?0aF#(P&s<9DNDNQ+H##Z+X{3L;R(jj~8G>~U?b!1R=r zN0WDKCYeapgK$`7C{G45>EZZH=g(yLltku4{2%*5_aTwEixzuaDZ=fAqgvIF96XZ&Vzg z@5d;u@A$jQ)Y0M1-#F+)Q0Iq!+Go!Jc+=TTnplSQfXZm4uQU4dUU517&4x z&SrWlhse1x3OqW78Xl7A13q7OuNqeP?{+R2QBrNrrgqRq8$XW_bDDeyW(ITcz&?d? z1?7o=lGc`0QBPtL`M{6VnG&HlGWO*Oi`rZu8q_+5JqLW|);fgvDGH+y22z(zhVq1k zi*I}xb}3RN?jX4Lz&3|37AaRp!zbxT7>Mci9f0DLmClhEXTT>P&G46>?r~%ets6rz zHC1HpkYb{mK@L!f8UG@G^7}gf5B`vzn|r2qcJPd~^GdCkf(XH(=eY^sm>PoQ#pC^K z*Ji4Yv$D>H66D2IE>22uaJwQQ*iOpmsLXZD`#_ZRq*187^E-7cn5H}MX9yIBXHNTk z`hhM7=Zn1Q-eG61AcoS?v+&F*k5}9sn5&97aR;0`SKy&P>f*}+Z~2CHL=mjZ=((Dk zc=St>CqL`qc>~tGYCK`3blH0#oiG{B(FK%Op( zl286Q{KW%WLHdpN8oQFn22`5%!G$k?6$BD1;$VzVrQA+8vwu)BlS1kB@8n!Z_ z=$t$n`k9*8+yjX@HD)r&%fGVYCbCR7BYNcFc1#UhXSc*@dZ5nP`7 za+Rk)?Q!Cy&&gsuOuLMz%)j(`t$aRlvH%Q}&#u#sShB?{m%v7=z>^PqcqeQyqNyiN zX+?1Ds7+S7NCy5U!Q5-EYi0l0&w0!TVlH2fL_ouHUd8le&n*;r`qLga-Y6(Zmu93+ z65;8iX>HZl%I67q`?u+_TQ|H_P~|6=j}ntbqzXdp0+uf#?`Qk?p}8}snhg`M?kdM*DL@TFs{2DsDKc|udY8|@4SYJKj1ug(`P^$4}` z*+(qO6Bak#2)3{(PkKD^X)Woyc|P1(aS_~fqvD-E025O-XBI6!|F~dgPdls=jDH1+ zo9`AJKRSrpbL!CyTic2~do!{8TibrD-QV?H9kw>%rdu^t>ul*Z+T|>=-)Ey$U}jI7 zm9+v>#kMI!apbxz_rEvCL}f_&8kSL>u(<7|is_mFbU%~ft6d}q4!1+to>{OsgNA3k z-HJVXE$)Ax$HbJ-3~ z=m@UAU6VFt;l=87GhHNb|NA^+u)%nd?rufRvQm!%XCrlGe2eV&>wZV`EHwq$9xX%vzXkcSooyH_x)R+ zxBeYtP8e)jL42Nz8GiBS@>FKKObM;Tot~0>`jdT*9<%t-4`9spwADyupU*w_K}ov& z)W4HF_MpejcWY|$=DTg`%N?9$oB2C(hN>03#fGUuJgdr0(McGpT744 zJzo2F+@Wv>Rq6BOLWW=Z$t>5O(4wuSr#wLLn-6;2aktGsd~d|b%vBuR?}qVo{`HRt zo_=zm@IJWDG74WEqWrDj;?s1ExXHDK&WcFo2osy4L?iJ~q5ka*86qgd^>kb~^_Wjn z4Ga@s@minhBK+U~>+_30W>dMf&y)yYWohnbuFt>wV2i!gfyK~(`w+ZEnd9stVxXY@ zfZ}cj`Kmszc&+9N&YkV?z8@$cDn9!w8J=74xZ@r>gw?osYD=<>#Vqgq0gwCcbE%Xq?)wH~z!1z^GY@sUb3C`; z@xA}A9?u~31)yUkeW?Jp#RI?Yv1hNIL+2Mf?th-Y`Y4B@L)D9ML&TVse-U5n7zO2*j#|3+AI5ck~%39v-dV+liZ2ioJ14k82SB4(MuGDdE z?zmgax23JA{UgT){gheQGu5U%9hglHDE6p~`Hs77O=bInlCU{)tOa)$IWpfuACN9% zlx(n(-FTCtRMmA_EuY%a3EUn`?(;ZMvor!rIlE%_1cBzprV4#C7CQFT(3nRY+~#j< zbNsl7%?&q*3G{|ItPULm>9;8y$b&0s3X@;@19R2GO`uDfX);oCNq5|BbKr;}6wu1q z0Kw>XyW}VPOjk-8w&?NE@w*0!)|l1UIMHeXJ|LMpCdj#Zo=i_k`o#`11JgBYQ0HFl zoY$DuCdq+#M|(88%-nh`V0*}CN z{jt5g>g%a|LxQY~0*XU7-VjOZxwUm;v@D6DwN)1O1bqB{Fj#>zT zgf8GaH*c#6TCjn3m>?yADjxgTR= zrj3etJ0isni5f%o2ZuVTH1T&Nh+ciM%}0Lh0-g1%()0PTj3|i~Bcx?l19BLtfHnZ% z^~p&)O^oOS*)>uKHeq9PqSR0splstON)kN=E@Rhibj}jQ(~8X9s+B70-EofWa=k~(6FcGM*xBbI{d$$BjB2W)@A~5y zqpKtND&De)ye^n%mt|~w1ss7&-Gm3{bB&vfD&ZHQzo;@kHl>@Om<9+X%?VG9=x2Bu zn=i-1#~luSrxKwD)EHDhm@7|eFn}ZXuNRF~(trh016KE{6nbekOpV+K zv}bW}yr1hf%;7G>OM7szOvKhXINT;CX7OXOcy@-48`c?%;gdMKm@uA_3OCH~pq7{* zLxiD+2Z7!q;i(gCjKvxX{6oiCTu47=M(IY+;!2a(N7@?P2R^7F%1Nj?SIIH9n@U5%t83P~E7R zwTSp3N9V7bf_Q?pm7+r#s|%9hp;9h79vM^-(M@(Y-pV12lcvNX#Zrsd7!Hj|O8EkF zgsKGLCP=4I;_s^&F<8=iQ8acZHq6hxB2DTDl~A58hR=dSQ_hDm zhxCCk00n8WwGOj~#vcR|r1KZ!b?P$Ul9OfbK#xj!nDSKS-;)d4WHWl;PEf}2V}81P z(>Qkp`GdMa$4xpmXBqoyH{3)-S?XQMa5W#eCsL?ZL+H9?7%=i!5 zq30ao{DMquUa5u^Ilzda@f?C}Qmo-uQA(Nd)blo4hBgJ3G2*3u$znNm&L!h#6=QQE zNt8YLXq&u@$J=U0Hre4hA$OGFr=C3m3naeRV7wRh?0a4pMOg5%Rk|9bl$^93=W@J=yP~B6FZP5 zFiHH;59kT@yT4K3v4=fQetnL|AL}wvuqjS!XS27yr^B~?vlV(FryUb1rOzk-Oz_~x zbj+cJFX#hoiWTjo_4odz;PtO@hrBU`)TeBH@W=BU+-HSmpC`XQ7amCSFW#RX0z?9T z{QH7Wf3nYQcW?2fhs&I}!(!dh{rtXv(&lSkYYt~2?&Nm*OlIgHnE5*_79P{4mGAu# zH%6&PkFA6)UM09@G;AWg9*?N0<%jvyWK((obdw=Bi&w0JCu$MVeS4A~H!k zpZPa_xu8vC@32@nqYu0RxcHntr0CScJ~!NKh2!&Ezvi>>B@M?#6BB51Z=Xx&^32Z< z%wU5Dto2i33cGKKTY!=VN*Ge$2jvll4!S^?) zRE0SLRud)BdAm{XF?VNnXinV!18wfR#~&QY8V#726kDZG_zl<6u>GXXeebq;`@7uB z3w&qBJ{nhS;jgsGYXGb0p;kfuV4lz4VNqY`F?mCmLU6#;4|w5Ngy(w)VnhL05w0On zItO~u7lY?>pnSHJ!Z(JvS1nQ)fpxXg5Avlh2ae{D6&vYqV4|8KEB!djnP6SBQk!g63Vn)G zww`nqn4Yqjn$?H5WK#%-q7vrl%}6_uA~4YO$FwQqrm~HfFnnc~!BsDAPm^4nnmDzBu1M@OrsiNP5zM*cU{AD=Sn*IX<1C*d!lQ|Ni^^1+uAKYg#Rp<}arzvaCo<0X=+Ei*;T27AXvOXwis$x-|4CeX3M`Cd9b3)A!>|4G< zb$mqOMWkc!uR{Go%#3S9R6-R|bjp4oyQnwgcYbG<|Bttyd{?d;jz*n7@? z*2&)88#yPN#M!;;ykqBa*77=ztj)?2X-6{jutic50g@sy0|J<;8T3rwKdQRBx~B&K zWhEgK^yfo1x~IFUy6RWI_d{=L#2_F#pa*iq&xAuQ4wtD4&BVCo{`W*4Mg`vU-Zo2T zJ^tlK1+{6o?>#y$9wKGP6N?4@=(hyripSgEt@z$|0s2w`w06j+7CnCMqk`(>CLg%p zB#--@&%)DBNp3%;`NXFJv^I!BZ-N-~;rlgu4IcQ_4$IFEbMKp49KEH>vx^0O=eNv; ze&d@p_r1q*!}kFqh$rPQzY0J1QIjX<{`VMD+wc5G!L!eLEZi05^l94Ao0?zxw`H2E zA@{tg#cg+X`RYRjKKFUSSf$C^-d*55gI%+W?lWS&-h}E1Jn~iexu5o!oPqn_laH{q z^7xGhd|FFwre7hsX43fk?-A9%mTz&eS* z6+$H5XZJyr!BeA=en3SGbK}j5ANZdVUAji41MV!I79y!-Q64qK;|D(oVnl;3#PF(7 zRE6Zp#STCB(;kNo3EuwZrt!p48kD3u0{`ge&GWzgyMmQvm^k2b|M%-8k59%uwJN#@ z;EiwAjJ-FsDx@40jr~r8B5M5J=i$lYaQiVG_Zhz@;7#}1qE#gCU6y$_a^-exNX6kY zl^P6*z#!vHR@U5Rq~M7~k3ae?lMV50?`ZL!_XZ?cS1rTh>=k!^7Kh6W4#C_UeBgc^ zt9|)kvY)S;hqt~-CyobNrM7-{HbqHtH5|Ue)X%&UD+%Sgt7c*ugu~^nZ5TBS_y`e+ z&c@Je>`gk~$6tm#|1CK6sLu_r3QRtql_c78>8!_zhXbZ&e8hW<=pF%jod0FAz}w$# z)HI58`Nd%gUs;C5F9cL?2;qLyXOuJNz_o(mQCkqenw%38na5*~6lpvWu&`j#G+(?B zviJp4H0SN_4o#oROW4R-Xwo!a@>u*rK=alliQdyso5C)K4*5u#24bATE>E1;r131w zFPQI$^7ND@1#f$IJ5fv6On=PxdiZZ14`|Q(R7b2qS1QLaEf}`&z4#@c<~n@uy9y>vg<}(`)dWgumQQO= zKkD`ZOj2hRUY!()x;*j&sSX;Vc3D=Az)4hXVG_4e*w!Ac=Cf z-zP>$?=vU0hH17QOKQ1pt&Zb^w6MK=#^ids@s&x<=bglNv=woFrXPHtE%p@G5;y*O z!%}hfd>HRf{euc2YSg1XW1L{3(uYR{Uuy~$zYq{;pZB~YfwKl!6|CdIca_)`awUf1 z)iU<%Bs(xXGURde_JGMbZ9XkBCMqZWfl{f>6am%YBj(Q3oKHuoSPWIx;Pi%f`i$&p za^~CsV6vCW@i0}WC#CLjIGzq6vxhwHyl;@bQyYdeQ(j!KWn#v1j#giZOvGpny#5UV z7mf@ud&oqDP95;L`-gnPWe-LXsSbKmk`5uY=>g{N@i{b;IPxAo3@txk>X2{RS00fc zmDcd=W5x(Ne@94TZjh--(`TjJ;^?swV^KtK#>3~ErwTxeiSYvS_xMa6SSMQtO4mKk zteW}x?(fwE%>tF04|q(^52gLu^EUlURUd7WBrUEoMp8^>$oXr$q(84vw>n3@wN z-HLs0U75U9cmGg{iE-^XW59H!WFvCmBJ3;FR6D%O?9$39Yu4ZHhi42QYA*r7Q&kW!Vn zwTqSVI5gkohWVyR#cY$KJ$t&w$*-Hb!776YA~lBq-uw;^Nz>K@&`i$??*CEiHmPc9 z!>$xWsSoNa9Zr7TOXMo4Sb9-%{u@5$Z!)@CZCxLw&1Lk7e_mw%#uh;^$n$4Svb+JC z()8rl1DXfRM9~ed&Ewa9xy18N8>8&T+PBjMjC86q$&2S1)3d?^(pT^rFfCwAw5& zJgQh<@e+iHNO@+(^KSb*d8!LR8$==B&De7JC%@sF@>-59B$nLl@xm!Hj7{6nWbH~;`rz!fEVY|m)$Ov$wA6hay@w5ezM-)kHi>2Z(IF-bj^$_k9_^{G}9DQ(NN99yXm@?280 z5=3s$lYyTo;$o~=U^vRHkCVDYZJiP!n%hFCV-7r#RJT@R?W-0T8|$Jeq-$6>$HM#d3=aKAo*;gH;JiJXoo1DM9j0;f2YuO%>$nn z43;(i$N)ue5NP3-VL)C2jMvhieHH%r_XMMpf**XJraGeei$?|DdcthvC<)zXezn6> ze=*GK->LbzPwKc10w`3WfL{i}h@c2ZnsN6$pn^hvYszwwy? zmKQtR@G5xrbdBodCWU5^Gp7~zzIPyTZ?q_;IBbl_FPs!S_$RP$Uz6f+nfe)%aPH}+ z1mpWWe&D?-RgkAB!9x==#DDtb4Fk7FJf1x*Vio22b0K$sx8|SyYtXuoU+5{yf?BX^ zT-KSdjAVl_uG1|>1fTz-b)J6)4qPi(KCPLY3s6CcrNu$M@4cHW+#ICZ|H1n^i2LEp zxeg!yrygQNP%e6`tcD!2-??`#G2$kYnKjUE*ZVe!)O{M?)?wd7S)4!0K63lR?VBc+ptz8@*iP%=r*Pfh>bk zbxth`&MXFOe5cQ_1YL)fWjOboPp}ry4g=OUJkC8A5H$CguP95_HjS}=Rd*4CMqRYg zFn<0;QI5yecy7b=sbF+WpqfTHh+H1eJr}TlW{_cN>@g~3uuPGDxu$B=IvSHUyt!h% zlpJ-+YOBE6#sGsNq#eVpVEJS~FzM4=G3mu`KSs(iqTg|TTmmgi^a!F1c9Kf&DsWQogTHJKruR23`<>^W3m9wqeXJ0&FHxwkz?t(Q8}+Qzm5g6+!uch* zc)@4?Ogr{kOR14E3}@`hT8844PZ-42VT8_vmTRkH)lxCG*JJ)WOu5BZ-QJ2LPJ1IU zgB~OC{LO&$**_bkg5|S7boej~*OJu0V|zVrdtIC2a2W>cy~*WLAY$DXt@p;^n@Wfg zpZ#-5iA3%CM29k$Gfap=LQKw_D)89nyG)FGeDEV3+6rc8j7NuXk}VvZZ-Oj?r}^xE zfss9uAO5LUJTD!q4vz}yj0|;vFrM4mC_M8NJoboYYSQDwA2S>;0@hbFQ&R=zzoW$d z*$B;s9C(F?tQJ5DKKoxZBYQl$o?v5DGqR_{t*?{po!a1we_Du(15MACdJ?C7J6z#b z#^{~|X%;5l^@A)pBRtSS30FV z5Fv;`$&uTkzT$K6P!M|-rWQDxAL(icaJ!NR*UjS!92-Ld3?`-VspXIp4+gBv`@H>! zx;c4Z5@WCnghF{7KVjTSYkLFkdfkAttkyPRUF{zKy5Xc={c00ncJV^UpMOars$Jf6 zuY_7AEpe_W>H(%K<2R27)J6rjzfPrevUw6gZ`y5%z~tvydOqa$K2>Dl9-p87c|}LL z+^j8M34G&tnP;91(Ms4NJ3c@6OQz`0y0W>VwC16|D6o1mVE(96B<4X=Xy#i_2u?p5 z@Du+m;0$hMngd=DR(sC^3OeUwx>+XFlOGb1Qtut>)dQ z|FXd1mjdP&1aG*-7G)yIKO|=zsBp%xwgO-I<4q3E3*P=t&FGjh%75jLH@R-X=dJJP z8sn!^MUA|&vzAFZe!@iCADnI5V6a{&ym%qx_`@NK)sQ!QPssimQ#dF!Mh9lK(pJhz zm>&Tw+|o@?v*YsotN&KmLOKCQ=EHdW+txeCArjHtPEHH%dY#(dple;D*H+-6FLkL_ zJoKBRw3WU6VUAVgiUWPVgGD2Ss8XA9ln)^4X zA`&@7ArD#F7=@{7nS=8_2WFaR<&^)k9J-=cT@a}&4jlw_Yrw?VFauJdb)>FIatvu; z|BOdb_%SCvGUPEk+d@`FuZ95ya&cM}|BO&im}2@hA<4@f^4XasbBn zm6@5>OwSC)`q;@C<38#3*;+5LvR83vCLqv)1J}ZEt-$(3fsvt3+Q7JzB1$>gW-nX9 z$a2;yQ6EI}ZC1$W=x1*Ax%P(S-N_k2^Hvxc)Ts(~%DR85_$pB+M%??sd7r8IO=BKz zDvGkebql^(uZ&?dH+@8`_ts2K3!3vjL$xRvEIkLxuIKefJ%)uBI|uYSNEq1BUZnc! z)vc@Sdf1xbTEpCY6Te)hHl0^pZHIb&y9S4@)il?ACdT!Sg5|UwOHso0M?HMu1HqQ> zW-;L8G&FDZsqF9XA}a=A?iD`unr3V&ay00p=(?I}K5s#Duk6G1PEwXr2Uc~P(RMj) zq;mbMA)}r#5#>S8!l$s3r zvoCx6=l@(_Zm!4&e$t4c?e!*&deQM7=}m{MH9YW(f|Dl$-u0t?oNq~3x4%F7k2N0p zQoy@^B;cQaLZMWl*N5EksA;Wxytur{?Z@E5@2qFiYTNB$F<_7}js;CvSq=HXyLFO4 zEVEHI+R&)`)FzW8eD}Y{BA2j663uJo<@jR-9{O(q2d?$`$q%a?8;o~+ZzobhMvX@f zId_XKMaXbfw`r}H%w4HyuQyq(7fF-}c@B&D#iTYjG`b-Wbc}oRY{*Z4T+ul1@ySmL zE-k_L{eb4K*M-z`$C<37>Ta@H_n;{tH_NHDeXanb;3_}z>{lt*&TRF!eq6rx*l3pt znh>mYQop52uWm=MEmODJ=o-m3_GxpQS!&jzg4O&%rbaCZvR7Aqzx-s)Kr*HI~u7*&?)fL_BCQ!fwZ z3Cc)naq!d1MaAk_pEWHQ9TTiHodnWKGdwEdKF^#FS=%(oCHl^d!e(q}c7vxBAj`(U z-B>NLUQg;V#Kq)oG;bF9=ru#I$g1yN&ZA$2u^fraO1=U#i!_^zL?THUkq z*l0`iS`a@Y(+bHPm8Ov$+6tPN2GMIeCCy4e4??qHjL&PEWDMTD2n%4KxrtsYf|tOR z>pc~X>teeLD+On~p(R^schG1KA_7p$art$>Z`l5^vTR@|rFDRG5i zKWy%cg7pei@hr!(jjKxXM2c0oQdLRbJKp@JU;N6KANru8bwv>dGhv$V|0nyC(w|w*zVO8oQ{$TNeP_PjF^{{^%HvNyFL>b;%pW!Ni19Q-6~WR;&FoDBj8}~= z)it6aP0HkpHk$W^7fLLh)J)9@&Ypu2p&8i&XU})Jer_O6i5<1Ees-8uZv%kG9_=tB z3Ls&vZfZR*ofnMMG)E4ZG|E#GCZzwHrwaU!FNah{VZ-xzZqaA{sAfZVnHV<)+zs7j zd|%m&qo%q0nCbh>IWyLlg1`JmiIJMAKd`0+6Z_!&xh6xk0!I$nL}HZ?VGEouo%JY5 zSb9F>?0M7v`EyM>Zoyg|ZhA#4cGHgMs!zaKoNMayCFYN6?!G&1H_8o!+Nq1<4r~cM z^&G4bKbqUTwE)5D8O{6+9wVbR0iuo0dakhsU;46Oqy(#VGv4_H zTU#O&+;OLlRkQBAPmOCT)38xDuygjjg`v%4+)L*LBSLfc-9|Ec$SK2up-Fsr9I1(#C#@kE1dD$Wz@8%es&M*Ilj`?%KcQkHYszR<3z@dLiT?BtJRbUO zpX={5ZB-_GCg*$>zhDftx7``0bkDvx!zFTnO!GNh5 z!M(qv;=(XkL-XhVlTW4Uan0O7Y)oGKLcqb-2XxL0&YTaKzZq*_7Tj@6BT!85lMIiB zeEqQkfAFb*>3P9Mp-tn7fcblTo_x5-%zVJTpXlPISrE05L-sp={g)-*JRWfL7(Dr~ z8TU{L&MXET`6RsZmTo40PQG1WK*Ea`OC0~h0F>bFdzH;{YV9+5F%4U!w&=@+_DPkI zt>-XoiQeZv?K3^^vr%ZXdNSbX?XdWG$nw`@H4OG)#Qsc$se=4_L2@c>OCi zIDJYoe`AX$AMu%*@ogIgDx(3fyu}zuPdpfK?jU^cJF`Y`#dWhL6YUrO)Z=rX_L;fW z=jPXU5=RFavT?4!AN;1ts#~d z?tae7P9h^6TunKXeEt?3(R3%dWJFHnGrdH@ISwBNU-;~wg>umtPODW#c^LN31u+6h zE8LRQ((4Fj=0a9pA8`1lHp8_tqPod=wF#7a4Yg79Bq2lPkeiSBh{;W4K`=43!GYN} z94k|sCeHa@2Wk?=_Ih#tmugipECl=KLEy80-seJNlYL8V4$ON%naOEVL2>IVnvyKX zd3T`5@`N!C3n`cy51guB>3LgMaC8BNg)wwT?aKk!GafK9>h4VfeHs{Rsca}_B zsz54_RgBn0eo0XJ^m9432j^HtnCx_WTD-ga(FD?g)JUaok=@1Cwd_J{l->RitBd-a(lh)B;;U3?lD9?P? zP}$UQ7^<|XRD4FOUhHmJ+iUVxDdk47=flvj@Tg6j+21z}`{xasn4I>bkVLar{D4D; ze1>brg&Bq2{!Kb6N&gXfiV0yd ztmdY}=#wG(iqzD<>CJaPaQw@UzF*;8Q3JbNRT4tRB@W{(mi_#c`=}!lEu!4gXxG=1 z!Rgm6)fpR-^OSWi(u;G=)UC)b`j!#wX+JaSY-!P+>T@z}#EXNN`l?~l_L)@wTfDa; z%azQ!_{!X}otJG>xD29@^rMin=9KUxE=-gBop9dhE{GP|BUKtVU6t7_8k@;n8o_{b zukW16NMA2gNWK@2Wt;+1U4|aNFX4^aOy%SXbIspL=F*&~^%&N78fk3%sfRYjxHA@% z%~Wf1g*oF%2ju0{ZE#AkrrYzjpQApoo_Gmn(qUu`&{lG|;#Emp1%{B^$?YL=PV{Ql zFFEHriwsb%snB)x+!~RI9^`Lg3+lRVI0%=3<<<>wHj46$fi_OgmKVEV(n+KdL*xkQ zc&5bOQ9403ZtZEMO`L$^!q^v)+N_%H2B_!wqvs(su@xaD@tBG?maQEicFOJVL`v9V zBgfZqP3;H)rd>B(6=G`cMZv6jnBgUQzB+0z2ewrDUYthS@^wKL8Zn2KSOC~fPOH?6H_w-lCO>>d6?<3f^ zxT1GWRNwE2-q#uLGLc&NBz6APs!A$IgteLIt1cBridRv_MNE5Y=O*-2k#gZ6k$z5# z4ION~?SSTcyeq0e+`PdQ_YT#lW!bL%hI{_^*X?wNm`W!A{aIV8i}Z|1j%{EfQl};FHwQ2*dOh?sr)-K+stf$3#2ui&Xp?MoTZ==XW zl$TN=WtjRW?70UKdFiynQifpPC;PVpe0iH8AMl-QqoQB{IZ`>rNGYxQlJPjqzny@i z$Uy`mgH&o#IO-CW;dn_A2eCs0-HW*7_K56q)kJ*>az23;E|GKk(s}PkH61bxNxTLb zWMfpFY71_(o+c2=%3F#-zIe1H5C4@oi)|F2c z`iNoLA;Us*ae)$&%SUnr? z*+w@7dW#BfSBYm*!7Oy?$|qqtYNQNCK-1cKA#(sX_Vlpg3JhDJ%NBb2&2PQJL#9Ip^myJ=rlw zsu!uYS7YR<)g1MkaONjF_N*>?+XQW>)SSofZ>gSADR!>c|P7sIef9=?O`q>yn_V*s|8{MC^?WeAiIVz&evoo_Ed#>MPsO%7hzN*7C z0w0hjTWWP;lRZQOKx3Woj*^#x>LPKI7MJ zuYTJJk=@F^a5Y#O{EdzlSE`L+TM5Dw`C|A^iMyjJ`OJTWr=OPGeoXTZKC021$r6ge z0DZ4{=QICFuzUvYeN&5tTe>EK^tS{{1?Hq&uSL#g1hfdTBl;tutCb5Lh;l?u6+f=%M zy>_`|hnr0kiU^71B%p}rz*c3mJYB4siM^8Yq>VJv6|N!GdVfXPYonzb8WV{wIi6pc z(Vgd@myFZE<*G!tMdVu*KgvjFVypd>M@Y9BQ&AeP$6-IiPjC628N=^<7M^}ea{Jwy zkN-jlI@+Tk2CZR#Q}MvBNa|wcNBKYE;z_X_%_r9sc(ObF*CHbAt z!qR!k)HSBalBjO(eD1SS@@3$xtH#CvSGc=sG^x?V_7DYgak;jV$nEUur{S500uEds zuy<;pC!(=tRVUwi0#2U_x$E^w+U?^fLaLP_Z+myZmDAn>KtvD%LhUo_Q$17iBgA&2vwN zthNeBx;cEGvcB9&PS+^EjWzG}_;s&sggpOrz}Q|Ny_pntcb|_^Lu=Rg7^Nsy#Qx(w zaXg)6P#kU7ZUY2&cL?q_xDCN2xVua65ZoaoxVr>~;I6^l-QC?Cg4@^6d#cWVW~!^F z=-&6<>sp&K?mKmeXi{3YWdDVJK55hHhFYk8{}lr(NNv9B)03c9cuh5Ov5@E;0f8&! zA`4|q=+IZ49Hb23F(%_`I#ae&WNaWyJeR3yVX>v*VB(>K%U<)^Az!n2z0VLgTqVgyC@K@pklq;G@7}zB$$X zA{Z*elPtX0R9GucD}JLrvGGkG_q+r%@DTsdE$w&m=Rd+8C%$C18>Apt<5<_ZF=}r$ zdJ8#QLvNVGQZh4dg|P!*qXI9PUao4{C%A;a?U>z<$7W<-Mu_q@_gfVHTJ*|xoV?-L zI-(L19$!8~5+YG-9Gb^I&Gvf^1sP#Ps&k3ly~Wl=1)RjB-WjyLB*frq>!PKl|9c4Y z$72W0ZdF$z_WMvt9XOlE_j`I=Vybb$8=qmxD|j(;%l-FV{-jQ13}NPWjuA~-Pfo?M zh(0&!frVKJge9qh#HHza4s=PLbCP0FH)QBw=(-~X^M%M39^ucg@*%~tF}XL^c^><} z2h@~0l_f7r^c0RSISY}5Zau={!k5f5BVb4xn@0ZGHApXz5eg|lVE!(^FMaJ%uj`uz zDMDnssPGZrmQsZ0HDT*sGiJ5m2no4-E6S0gR~N&dBipay*t}g>9i~@jOtuz3s)?6t`0zI>+vf$B-`iD#a<80-o z*hMCU26;#hN4|=y@inI;=J0ad11{~`9=tyzwf4!kS4{EA2rT4=pw*XV9>=x`^}6TN zcl6+r_=fcbFjr7`yljt9xR8`&IR@^^_Aq^EW-LboJ&BtoA_KwOU3K_<| z&qbS|-5f9dQuXxlO`{E2>~NJ4mFNs!@e%l3F(N`@bv0pr4OGc`tf$Bjd>#>G<}8G? zGzE;IZWaSLYN5Krt2A_Yb@azoKfTT>uHfbgA5gZJc%YI`Ny50I^$L0NvQ1VU0~r2tlYbG{CVV)d<=tI`XY zw{C~U+R$vCUGOZ?LcB->`+0z4wiTXl0eH#eJ(Knz@(WHLH;LaqHq7Yi@rsx*O#e4P z_W^V=@ElYa{Jf4lAI6NX85G<+=TO;&kR~AXmudbx`ySVg?>#ipqfGO%DH=(gR7xhu z$EjdqEBLgIrrrc}_*Ea~;~6=oXdA^pKzuggw;z}B+bt;``F$E0uaPs*P%kGx{}0S;tJLPGZC1IXNTH?vg*x+IT+0nh?VIHnPS-_N)sO4_#*s)*}Who6N`% z7_7I42z#>k9?-(Z(amTA1!rxLWknW3<2x0_Ozl4z0pI)}Fn@6#ijF<%x0fvp6fQ2LRZZ9XQ|qqn6nP>vH7>fHR+E*cp83LP1RcGtPWuq?+Jf*+D=?w5@JI4@ z^}*T2PaRLT8A6XTar*+TuLf-%lDk-;BkZ4BK2ogG2HeSgLQx4=(NH_#&y_na+&E`q z_;)oqBz4`)jq-QTO%%Y|e!y_r_urvqr-xU!!Qw@G(soR5rgPX>Puh}sRdv6RvIH~Q zqm4fz9C2`0DENL=sp_=-PP68@@hMl0BC0N+KYeJ`zdDpf)xz=szR9m5 zh_d*mJPF7U!jq(0JAbPf-A0&|GTA2T+I_KPHnD6P*A4_xx(B!{oSjXdR$ zQRtT0%3nLu+MRUW_Kt2 z@E-VG93F(zs|or=7b@3oc!ec?Z&N%Fi`f^Cv*C_CWlY+c>i@wWTP zxfT}u!a1DyMcqW-?giLx3!D<6)rFQXzy-!FijjMt{D z){lQJAH@RQPSr9GA>|}%pB>b_+RBlB3lXvpeCl}C zt7=@_3-NCp3wbk%r?=PUd3>GldO3M-046uk;Fp;r{>*j!>y8)oC0eD+fG)l`F$2$+ z?g^xE?q;9Epp4TtPA+HfdQ_apC?o9u@Q|2Sb2_qyZZqJEp3Gpu*XWF+XO1@sBAIt% zB3#7Zdz3t#_PBBB(5zJ}y@Bt^0Q*0Lth8=LQ7D1cH&aB8oX1u__`m0-d)r4-TdS!^ zgsCN#n$^qqWo%%uzo5lbf@imH{7E5u^yTkiK{$>IM z=eN+@p09}NX4ZwO&+Q**$Wy*(e>m)0gMUfW{rMz=I8nhh`cXL&%pQk+h06R8{G8^u zH$7!CRCfpFhL)S|X$(3ghwtCoGZL9J1j3NRW;LV7D532eCZMd5;8`HtC~?J2ST$~l zidiV1pV-Da(P;w>B|cq;2K5~;y4t{bAN&-nBNIDx#^4TWN)G%Y;OB1G>vadnqHfX|8 zFpW(0sY*ukMl<4kEkjdw{Q57wpl&t)B#b(tgv#*b{DbHxkfj;Qi*pk}m*6+#~6*YvtGfy=qC zxL;fNQ7LnXCz4Vi*PY`>%TfeAKi5ZzDzSUKcYhQk!Tz(9$qqAsSlD4`GQfXWBQ@@k z`->!7OWNOO{`bz)iC?C821PI1nrD=x$-XYRr9fNhBi(pca6nypC$ zFc+&#Um`Vy-mabc-fxT(P7dH6q#=jBEpjH?1p9_2)BG(Y<)J8f=;?m`moO~LNa52v zTK?rj5A8J^tpa-0^d@gfv=-N4Y<1R8K`0suahYLGL$fcmd&i%?j8FjYse;S#wSmY( z|22i+m^1>m>~DxUCsOJ2G)&K#H@x1Fn$(r=-syLG0`jBfTeLs4jiw?`<3=}52|3o* zI;RthU)tC*etiC=JRoTzKZO%R9G$40hR|eLhFc1?Z+OJ1Y5jd+gE+g~*wkNu|2J?l z=N}3Yng2sCNXR-zP)hFox2M;mi%8uh&opwF3O6RG!J)>=Gght%mzYW6>9`>Gd}J1J zBB@-%?jtE7$ksrZ9bvN$XXx#?5fkM5W@|Xp)^6>|Xylzmv~WmlavUpD?mt}0;ANCD>ekN{E1^Y}A^k4>mi#g?}`-4tCr3VLhKD$VwaX;(JMar?&ET-|0Hh92f`%@SjPv_Rz zi~y_cM6oH=rY+|F^rOS+lAib;?hRaX%xVQ2+ zB_(tMU|Lv+g83P8At3lH;?M-&D8~g=qF>I#?})KP7_m?Nb|>fDZe@_!bv|6~vtwQR(6LVA*QkA2h~)Z>S)h}ey3P(nVpa^##zZOnsOWP1!nb7bv>Ym`dE$5} z-~=!7WXBcx2R?BD!9+JHMT0D7!+_FH`IwdFtvFq3{39BTeaZ$a>!vGUgjFnr{xl{l ztBjvUoa6ipOXx=6)9!%@UE zNiaR{YljR}t`>Xm69t)77e+!BjU$2^*-ckTKOTw8On7spqarhqdA(-~OiW2=t$Zxe zUA3)gr$gc?)aLMb$(aaulFzED;jG5f+RuIcKj+hahAqPefspRsij*wmo%hwDzH(@C zcv!S9?E^u>@sckR9>j<;T)e zp%ZczF-Upg#|Z`D&5|$(ap9X+VqgNc<+RXh)RJrU8l~A?*&kgWTP<^SvQ>}2U&JIA zo${hru47jD&p#AsNx_U~;m>Lr+f}Ar6iqDCX9ua9B;uH=f|7{Uh%+dy#&HQ&Y!96L zKQJ1*{>q!MhSW|p6i=XXYH<5TYqcHzCn*uarXKJiowCtSA3FE6Wo9S{v zj|bv;+HaCv{G?8sn0x6o#s*AjZ$n?N?yM{7JlC3Ez& zN{No2SHJ|&f&E=%12l+jjtntwZd66mK%t1n_Np_K$cq}3qet#m9zK4{X(<}z`N{75 zSyHM;XhH-j7tB?G=Vn5Df)RS-MF`CLJ+@_}!yibCA^dIgKE9t}l`eYYgH5iLBa_)~ zR#E*HKtQeLk$zN1asndAoouqvA|&76W9mJO)RU9)%*Tn>iyEtP9)AIewTh{|x%!DZ zT)szbcwrIa@*Y{kY97=sD;hkwdo}eu|dn1oa==K~c zFTpJ3Q-)U$%LrioKqi>x&=rm4Ve7};`q+cTvz$I(qg1OKx~9Pk9aZR~{^^k3!oae; zycg8}a=oasuKZitwN3VNf4 z;f5K78diu4YEprP0!?s}jnr!7mK9Ts%GLy~8&y9QOC<7&J4na_qoLS;^ca_m=k5i$ z%CJw+VXg$8x%aTz>FM+owmFhuc6(&1DdwoCkbBRV!O&0V+bK7zQ$o68|%0>pnM&Ln{8Lg7w?gKyxDX z%ihlA=!G1uC08jM!V87jgMqIoJ3v|ZKShvcV_OBhcE))8U0*YCVgB5gF?J=PN+w3o zWAdfzP|CBo{n92OIr(XZF!)AOt8sqWB~~2 z*-B`54vI1V69;%gl9BMKFnOHgXZu+j%le(6w%*l4oj)7MH~qFa(z>F}I`jIbClbZe zMSbv8e^BI2J0t$@iT`@V0byx(wN2(DvEIun-Eu%k=ngi@pOzyjQ>$NkK-&LC@D9rnwQL=ks>TTxj)*6~9SlU-m3gM<(Gr`|0^1z?>ypVd?-S%)k2f1=sT~7F zNF~_qvTLu(owEaSt8P}hV_d>3YjIQO%}cCDFOrn=(RZ`z+Cg-Rc~On$9BmUga{oKA z-dl@A`xpvaQ@TO?dk;2+T5q1eFbEDUOPTu2UqnY99R0(_;`44F*-i=Pa#X;$`)9|? zQ{;cH1#Rj0E0`6ar#G8nA&zAC{Cp4|u(Zk^-6}XYhfh~eFLXzlVWufF2i);cNCtVv zH5)}uuW}IpFrmv`D(jsa+m4yCLX2-ctwU_LM@q7`i}+5_;LWSL%K-*XCqeN;J`IX+B0EJ(&sBcY58HXFTv|$UI|B7SNbU3xF z@L(84h_90csdj1;QrYPmBjq=Wdqd_QNXie=W}pi3eJk|Xr{;5rC?$+dy7}Pc$2v*f ze_(_k=}>w41HcvJT?w4j#3OFdHGQ=E2$0YB>$d8~CrpNA?E+WdK3gNKznvQjVVpr~ z4_cW0D2yM2S?@bSxPN1q~U3(%$#EsSn3XRlhAVr3H+=G0O&1*LkquCP5?kJ6e zY9Bp~TW95GRI^i@LE{)N>z@>3h5L#^xb+7fKJU?1?>jUIg-L!iC%d=(0HxcS``F*Y z#^)Ac2mdJJJgootCvnX_Pm{hc8iOa=_=gJ{r8+GGovUX9ITJW#b6bO`<6g@g>$hHJ zu~{8|5{e9S@_rRV(TGOt+TLBTUGAeN5ioSg^mQKg{&!0gGHh~DZCxQ$Ap-p}nMtEh z5`rzhRtrPF{=^Aa-DUc%-YXZQ>`~gf?sQ^A4X}SI7;_bq!W-SktEk&se?@Qj=$xd`M`9(lwy#%zq}LzU8#b8l7DZ63syh!5mGXv?ffIvx5hXSC>4+hyrI+033eCMvm} zs#>x5=-GSC*)+UZ@dw27n}mKyI+j06E>4se)w#yq0px#xl`TJMT2c;XPZ7CD`+K_7 z)|`I~YJt~iHmqOP{hpx+Ym3I9=`dw~5ZQqKBYXPtiCk#cZ%1%q09#UR!JUH-~*(kG0iDYK}(QTeP3A z$!EP7yg&5vR)vSM#kUS8o{`68g<)}1SjNnXGIib=HtM(MCJtW0R-2#F$OFMj#b?faH^UavC~+I*hqh_vAKvGwBH@`->;>^>Esp8 za8mc6s3!4CdQe{Hs`V+joO?-FO_lbn&l49>VWxA1?3DOqP121^ z>xG6FnnkL}yDt*fk)g!LESgmnb_a5TjvRZG9QFAl#2Kwff#S;0q%a?z)%>v}oCEiT z6)LHQ%f>c5P0~cHEhnETPW{@*hzRV1CLN>dml~Ak-RcRYw%-w>t540-Lk5uWgiEi$ z7RVMe+mcQrX`CG0_KePMRT4GkoN_&hWwLRjzLh3RPMa4xCf=($loJ3vz(|f8KsTNU5R^3*Bl= znb8pbwo;ltQUcj_Dq5e#1^x0En}Jc?lhVAW`dBy1o6&B|x=`s7Gdwzbi>&s{AJ^6$ zdCUqkph-&q>{pmugZ=q%5&!%5)}zucrlTc%#c?UUitk?$ zT~lDa8fRnZ$d+;4ZWlZ%dn5|c&h8-Db}P4R3oXxP1`qy3EIoS-eDXMQLBH@kE8$?1 z8O8OcQ$A9)ui|}c(TI>aBp1e2%{#WXdgd&QG^!^md|d6zzdg9;f`r4QNV1pT=Hl*6 zd-G5QRxQ49^}!@CE^KruEF9^)l>#Z9`3J>LhBw|uJSSc=XC*N!wYgq0vf4Fl;**us z_GQq+6vvdgI{v#OhQFO{&Q$aKe%0E7p9{r~tpwow%C}yV^+t|NMZRX~{{s?G3wbN; zyE;3y^%MB2(^`&SGhf z%{v!!4PgPAhulL4?VtXX5fc8aJt&{)O`mum6FKKpeNXLHw7fvWg(XJa7E)KKEArLo{+>8A^-M~hj!40Qz=h;zJ;RMbbLrKrxwQJDnl+JzRIH9A8pL2jwS#O zmCG5Z1o*82VwzcI&baA|k#@JTzY^KcUpU-YC6v^imZ@!bRXEq--zBa`#aSb}m4~d3 zTsp_x(Z9c#Y&7eL?;t{K-~0yS9vy@lfS}1%#1DW&@BNjIHZDHN1sfFX$Fn&olr8Z) zT=4kjNzhjf%~>gMs*C3fTkz&!$PS`oo%$?^zgQGYghI!fVK&Dr~Thd~=Ts7^S zGV5*>)e?5_1QO3=ce7Hm^J15$3^5xo?odfhKUmO`$nJr@T_hot^}W?J-4U4X#iIhK zg&aEOh>RoPW*yZRBw)Mxt66#ITp&>!V7PpoaYM*~-LcrM2LAu7Ty(ecYu`YY!&P9YLBps|@NF?BPn zakrsbs*T$+2r>leXydm}SRE6Q3ymG-ZEo6OQ;eKKXc*YJi=J-u9sW5#me8LaxmK3c zWa%Wu=XWl1ifTtSE0q(Sw+gp(kv;s~+%*eoeQQrJUzv`9ZjC!({nTg*!S zpd8|TPLNlw+uBGnIS+R9cMlwLr%z<;|!tsAF@XDripv&`lqVn_Rzq9O_K}hO~(DlAa4^OT-!)&>2dIq5+ z4D0bvAW>{v0T2CL0ZhDyo01i4TfI0%;y8b=atNKeI_l`rj1NSHP|3*d?-VM!27TT& zrX+We0)%qTeVte0BfAzi{#eX#f&KV>cbsCTT~ky^<^E{IO1R*dYR^8Ra%kI(G=A58JA1WB zZBq7MnJ%iW4CT#gTq}PV(&udMDwOi97k`cwWafT>oe3G_(`gKB@)b&|P}Z1E^3K~P z07-Q3l2o_fiLnF0RG^zO)YR#t>qgaN@=RFa^)7UnEomVTg6#T|vEk|;F=rWef(|ch zl43@-XF3!bKfbR#yyLxo=5CC5;AE=%(mae&X(fS-E+|X=CoKQt5tcc_zk_3>Lgq#^DOG`rR`J zK8qM(VF;#h3A1=b4$=BvxGZeET;N&WIDk=)Zs>2vCP?`{;fm9vGtNK*k*3k`Z<~fN z3u6euKJ;jg(<-!W4=*pD_Dm7sw3PXdC=v(S9Br0nsY(6bYssj*^8$Sd(_h1sES8lt zh$G|0rKHvKY)XjcyhH6k{rtwH3DEv;{p|hN!?(@O`?l}Qhh|{x9Vn+WgaI8%6Ln4J z8-+XhBz}(~<6nq%+-Ba~vp(%LLqF=BQ1bPOgGMlsM_^gNhGOMGZ*TIrv{ueEGE@wI zug4@kt}!?E&9oHz6-_%AIstUj$;m zu#g!zf=;ZU!n*phlBNf=`!M|h@|aqk#=L6E>1x?z|FPqKg(l;D0531?M0dwBaQU6^ z`vhrFnSPmGoDgGvG2gRT;DnD|C(hm!MHC(M`Mbu%)nJHHpsNEsT{0oYyzUbnb9QaIi_WaHZVEJNm- zT`H&$v?ckfVe>m~B+UVCF3r6(^)q}n4-yef)$)(6S7TYSfoDYR9C7DgP!p(1mo6XI z0m(2B>5B()X|joYK9wK#Fl0`aOHarqz$QrV%*-ya?lR-NJY$B%|9#w|q|U)kWLgGz z{(?T?cD(DvO!#zL?Q3py`u!ClN8@vuRI)L>mzl2m`*qWNYaamX2!>?&+=vjFS%`(E z^zko~NiH}98`u`X=o9Wo=EvRx?0*qsMD~C@n{nCnuNLI!V{SUQer$vxTz~zxTY{R$ z_(a(SA^%!w*Y6*?1oYsFdx`r$bpIh#$X2kFp37ZOyx%!C9k}xX=FuFQh!{b?)J;;f z)umL3Z=2o}A#KhX>MVb3f8X=X{QJt#xZ@o;RmuLb_Dj&{YBm9*8({`CeTJBT9$`p> z*bg~uPX}@^N;~;CkM^-$m$W!x10q{kB3rT~)fB-CY=ERPZdx}rs~b%n3DYz6e72>2 zzN_Qs)3S6K&DGVw8UFDUN1HVLVIm9UY)lO=X{Io(%_-Fi;8K=$B??t41x~%WJfzp% zM`*-jAZKUEe?QaIEYw0F{949EB;RkUY2ht5H~$2DpCZBtTzV9p>7N#`O9wZM7DBYL zIDcg)5CmzFo`8fo2iI+RF&_Ycn2O;rv7>drz}95&o^T0!k^hpY(DqH>aXqSFK%0hZ9Q|u89>)(Z$=H2II|`|f;(MP4 z)-4_mmk&QIuso17CO3ln-gLB$F4G#}4EfHgr~VNz>WMYMp{~3GcDl4ILUWs%AR9); zd}x3XKsXxk?T<%QA$63r_euq#m;Gmlp?3$fe^^54z8M$DswAeR+uWK{Mh}|WdjWu} z*JUW1iORf{$JQ}zL8XC+XTH>2Wo54kO!S+fuNk`c^vq>A?mg5G`P!@^mb-EvQ zXd@A@#u%&vC(^Q-#0pvd0-LzV2GoXNXs0L$U!Sz1Ym+*2Mmm(D2|jP8Sk?SiUjnQT zM<`wa&lOC^$A}pGru*{#&CFRvc52zRvwW9-IgaB*ZkvD1_8pES`5sXrJ-l`Q^LS|? z`Mg+d%@$+bzZVe>{L07cxV+*1kGg&jVmWVH*_w=9efI5t*r&Bu1`^!ISI-dC#{&^t zq!ysE8Ebgyr-KD%*sJeUWaLjFVO!q-Q0YH~;&m4mFvBggjifLlJim`)>*;vsm9(@J ze(RFv_AV5g*9gs%#Zkw#Sba%@5NvgtKsw&1T)?kqr9rn!kn4S3Tmmxt>)Qb&pQDCI z#-2>al&Y^v)h_M**FypC6tM4)?=vPvpiYq|&$0F5fM}%cb@1a=k+M?Qg%3*+8G1Qs zQO7AJA!GoO;8-_nNVT_eFCIxLP;fRiVLLqjmFhTqyFlLd$Z>MQcDtWF5Y5$0baQ zST3DfTbP&KKE3r=3xk5pRQLtp1_01H;0F1O&s8Cd=yJOcdIEA*Q@^#lG@MwBIxqhW zr{wZ9Zl6ox`F5l*Z%8#=FYv`UA7yHJ2T(hej*!k*un^als~_ph>STx=()O-$gN^Q{ z)&rwx8S--p2(Rfcmbi{4-KRzEX4QV8079FXTB8C9b>8MBS#iuYLMA-=m^&(4MxJd{ z4LDWPJOWJhF9t8)dDq++ts+Kl1t}|0jHZ9jOL1)IFb;UVEaw?}t$yT5^Nycll#d~9 z2>~WwGZ_m~{5yn8X6wXmNTexDWHUQti3U`K(a)8d0w@~kD9AfOl}MJTQo*C%77?vA zZt&I@NqLV2jY@QD66h*}2}BKiIp7dEKWHsEtLea0KMB_axiPDvMe`!i=cQ(*%2Ilm z$|L{TacPQKL8^cAhgrxicyDq&6hRgWDxKd@eG4Rsr^-_NtNR*9L$O5IR{+5FOQ zmuQ?-B+d$lrZMHALN&5H#^#51%SN~b`KSNRcTy;JJG;%{(Q;!k&+5MO#^#egGs^jd zm9F+UQUlPzau&9e_{B|CvR^UVjmxyFB+IFbxj^F_n#|OfIW86A(haLT#q+}UD9<1X zDV0l5*d0l^nCArT^umfQ-*?rgQ#q84imRpa?fu4bn+#o1TqN~7*P=56>C@dAlGn3C z^}$Ey3R+PMl!j>Ud^z*LoS(vK?7CM^-%qeaojek*4?opSnZx*Pz7nmY<7>e`%yt|r zuhvF0KQL$VR$~`Jxc%lG{ppGa&CIICXYba+o~ip&yeIe~)#J;RiMd@RQF1`jl1L_7`3#hI1u3LN=5`YBQBwwKwsQ zM-k}k&WjhT7-8!EgRc&Bg|$_CYib94QsymN zzsTuuOqsDEA2!YmP0r%h_zA9QYajZ;vr;OzC|nn-)+9HiRHHA8VTbt-g1eT46_=xWRsh{C7KEs0Ml%+Cb|#Zklvs{u~1E3bW6>}Whe zt^&BFNrShu4&YA_uR_v=+)GBg9s`g!KqaCaO|mrKY@GzRQkHrlRkmi0`r^)65!S;G zs{><9+oLB;@c@?7b3An38TqcFpgj-AkxK8Iz|jQjb=tN?X3(huqJn zmCl?h_DQqcxZf7V2u4*!WanyBoQ#dfjsk-^$5NdFUrU(mX@@ciu_rA{2jxRo7(8!U zI_By-I5HZjj(=j%Dzly%dGp4wc|I{kY^I= zV*XLt-1%`e0D6@rL8AV;a!5L;eI(yJ8AY0P@-wxFowd z=f%$j!}jDB^f(Gb6_TTRJPVFCxF_bFFB((F*V{O~NQ4$4wV#Y-$YT|ZxaSbCEEGYe znEi$do6t6%S+Rv*PixZw%NWLAZJ$;NSIS5#$if9PfWI4*V8aGCSGg=(ZLvaNk?j#V zt=jFai*b7FMYKP7-2Dx7q_6eJ8Tr>ZVBFMs)c2tr5F2InpsX3w$^u-!Aa8EFXQLyme6xv|g zhwy7;=j+NV1SIyKT^w?VFnAJ{vZ)Vu3UMR4zsGVc60*t!q3H||oUi}O3XmJ~89TQ1 zxtkzFt7HGTAvBkhk0h_~Gi*VP(Q$lS_F@Xw%x7IBVy{5nDYdo%xdL)BsY3JFxhD>b z2^&D9q7iqe$nYl!SugI)(tARp{=7|!>UIBBH?LdoCclA#3>}%-+Fo58I5hmt!#v{K}4yb3|IS$x=1-ioY5DFxfj+J zwBWzNQWgx?(VmHV zG+Fln3Y)W?g=F^GpiM(cLa0GJiAOvMPy2j1Ng0P-!`|ticG%F7%hr11G9)F6!QoO|~aefxS!_11k9J5wlzcaG4c z&~2nE{;h6$YX^d`D41XNCamg|8Xw;Az7&vP1plLV#^UJj5UK04?Th-`_~}Dbi%nR| zxi!T|{MIvRi1J+dwDEB5eDis9$03hB=}XFsP6p-W3jsau zZ=auiW9ta}u8&ahIy5b}q7|D*EeV`9E$5D{Mu}Ekl}603HC~(M{V-QBp>za{00nBS zcnC-$zcQmV6tyeD2%TU>FL+Gsx5;dh`hP)`WNjf#tgk_r<}ABSY8F|Zpxw(j>WGuI z`(PBoih_j=!pj+Qg?^??aG%FQ;Pp@0=QShz-yVFMK_cWt0|=7L_AJ6y)W3sn!tY-t zwh0NwW&_mADrLZLwdrbwa;->!+l&-1=!K5nKI`c}X26}y1UP)`HS zW1zcTO$CoVF)dSffck%a)oE$?CXX&NyRxX*KVc3RS~ri3{1sorC{p4rdq$|n4UvGi zlBJa%kfIP?=kwIhT1u4KV+USY!iEJP%cz_R2i_9yGNHQ(kAR6mWq5?RHP&aeWP)NGB?>=bUk<4)FxIZF$hp+G>0@{}+IK89BdTEL;i`fN{R zNkk@|U&B(AfVLTNyO;36kc6HKXdrQ(sF0yeX7E|ZXAYYU6F>&;o+6`B`>8+6JAk-3 z5%yZ^WMo!%*I9A5I6&sYGR+1+Aud%a6~m&zqgTg3XR|!n#?4tDfxcMm3|)1RJrq)h z8^@qEMlvS_AJ7>`wgxJrEu0!X)pUcU`!$$c7fe&9Vs;vHyTZD#5ppQ`t?t6OALF;U z4ALJq{cSqdlV_V+0A<^VL`JbMH{K z@IVsGq$9R8aSn^j(MuP_C-bN)6_CUzy>(KnM^dk%QPLfG*%cKTQ+n@sgwHvseZ+An z5l1VO%)N;rprXI3sM{ZS*Wiuv?NBV}&#{72wgx$OdqZbG#h+JQ(LRj&gMKf~Msg_6 zpY|6+0$*<~yK}O6qUP>x{dNbC0t%|(AP;%wMT>cjg*^ZrM3Th|SNO*?f!xEfw}gH^ zDVzR}kR8u+N;|WM35U%F!5v^S4ZrX$B)oqL-`c0lxfF!_Dul!XRKn_zaa z>uyFwzml(ue7}C44P*4U_e)SrTGMmxM0agrzD`6Rs1D|2lGO4sve?^a;lyk0r!%6} zhVDulC}tSg9x%2jUC~n9dq|xaEKc??`oYUHRL4l=>166NN